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í. Pro výpočet hodnoty je používán faktoriál.

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;
    }
  1. Počet variací s opakováním je dán jako počet použitelných prvků umocněný na třídu variace.
  2. Variace nulté třídy je právě jedna: prázdná množina.
  3. 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.
  4. 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

  • VOŠICKÝ, Zdeněk. Matematika v kostce: pro střední školy. Havlíčkův Brod: Fragment, 2007 (1. vydání). ISBN 978-802-5301-913. 

Související články