Variace (kombinatorika)
Variace k-té třídy z n prvků je každá uspořádaná k-tice vytvořená z celkového počtu n prvků, přičemž při výběru záleží na pořadí jednotlivých prvků. Rozlišujeme variace s opakováním a bez opakování.

Variace bez opakování 
 Variace bez opakování je k-členná skupina utvořená z daných n prvků tak, že v nich záleží na pořadí a žádný z daných prvků se v ní neopakuje.
 Počet k-členných variací z n prvků:  pro 
 například: 2členná variace ze 3 prvků a, b, c: (ab), (ba), (ac), (ca), (bc), (cb)

Variace s opakováním 
 Variace s opakováním je uspořádaná k-tice z n prvků sestavená tak, že každý se v ní vyskytuje nejvýše k-krát. Opět záleží na pořadí.
 Počet k-členných variací s opakováním z n prvků:  platí i pro 
 například: 2členná variace s opakováním ze 3 prvků a, b, c: (aa), (ab), (ac), (ba), (bb), (bc), (ca), (cb), (cc)

Příklady

Příklad 1 
Kolik trojciferných čísel je možné sestavit z číslic 1, 2, 3, 4, jestliže:

a) se v čísle každá cifra může vyskytovat nejvýše jednou

b) se v čísle cifry mohou opakovat

Příklad 2 
Kolik je možností pro obsazení 1., 2. a 3. místa v závodě s 20 účastníky?

Příklad 3 
Posádka lodi potřebuje k dorozumívání vytvořit 50 různých signálů. Budou jim k tomu stačit 4 různobarevné praporky?
 jednopraporkové signály: 
 dvoupraporkové signály: 
 třípraporkové signály: 
 čtyřpraporkové signály: 
celkem lze vytvořit:  signálů

Na vytvoření 50 signálů budou 4 různobarevné praporky stačit.

Příklad 4 
Kolika způsoby můžete nastavit šestimístný číselný kód trezoru?

Algoritmus 
Algoritmus pro nalezení všech variací znaků (s opakováním, v jazyku Java)

    public static List<String> variaceSOpakovanim(int trida, String pouzitelneZnaky) {
        List<String> list = new ArrayList<String>((int) Math.pow(pouzitelneZnaky.length(), trida)/*(1)*/);

        if (trida == 0) {
            list.add(""); /*(2)*/
        } else {
            List<String> l = variaceSOpakovanim(trida - 1, pouzitelneZnaky);
            for (char c : pouzitelneZnaky.toCharArray()) { /*(3)*/
                for (String s : l) {
                    list.add(c + s); /*(4)*/
                }
            }
        }
        return list;
    }

Počet variací s opakováním je dán jako počet použitelných prvků umocněný na třídu variace.
Variace nulté třídy je právě jedna: prázdná množina.
Variace s opakováním se dá vnímat jako kartézský součin množiny použitelných prvků s množinou variací ze stejných použitelných prvků, ale s třídou o jednu menší. Z toho vyplývá použití rekurze.
Přidá do výstupního (vraceného) seznamu příslušný prvek, vzniklý spojením jednoho (každého) prvku s jednou (každou) variací nižší třídy.

Literatura

Související články 
 Permutace
 Kombinace

Kombinatorika