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ž "uspořádaná" zde znamená, že 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. Kombinace se od variací odlišují tím, že u nich na pořadí nezáleží. Permutace je v podstatě zvláštní příklad variace, kdy n=k, tj. máme množinu prvků a určujeme možný počet jejich pořadí. 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 Příklad: dvoučlenné variace ze 3 prvků a, b, c" jsou: (ab), (ba), (ac), (ca), (bc), (cb) Variace s opakovánímVariace 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 Tedy například: dvoučlenná variace s opakováním ze 3 prvků a, b, c: (aa), (ab), (ac), (ba), (bb), (bc), (ca), (cb), (cc) PříkladyPříklad 1Kolik 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 můžou opakovat Příklad 2Kolik je možností pro obsazení 1., 2. a 3. místa v závodě s 20 účastníky? Příklad 3Posá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?
Celkem lze vytvořit: signálů. Na vytvoření 50 signálů budou tedy 4 různobarevné praporky stačit. Příklad 4Kolika způsoby můžete nastavit šestimístný číselný kód na zámku u trezoru? Šestimístný zámek trezoru umožňuje 1 milion různých kódů. Příklad 5Heslo je složené z písmen anglické abecedy (26 písmen) a je dlouhé 8 znaků. Je pro zvýšení bezpečnosti (zvýšení síly hesla) lepší zachovat jeho délku a použít i čísla nebo jen prodloužit heslo? Pro zvýšení bezpečnosti hesla je lepší ho prodloužit už jen o jeden znak, protože počet možných variant hesla je vyšší () než při zachování délky a použití písmen a čísel (). Důvodem je, že exponenciální funkce zvyšuje svůj růst rychleji se změnou exponentu než základu mocniny. AlgoritmusAlgoritmus 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;
}
Literatura
Související články |