Úloha 29: Rozdělení pravděpodobnosti permutací (subfaktoriál)
Cíl úlohy
Vytvořte skript, který pro zadaný počet n prvků spočítá rozdělení pravděpodobnosti, kolik prvků zůstane při náhodném seřazení na svém původním místě (počet pevných bodů permutace). Klasickým příkladem je anonymní degustace vzorků, šatnářka náhodně rozdávající kabáty nebo losování tajného Ježíška (Secret Santa).
Kombinatorická teorie a subfaktoriál (MathML)
1. Celkový počet všech možných seřazení n prvků je .
2. Subfaktoriál (derangement): Počet seřazení prvků tak, že žádný prvek nezůstane na svém původním místě, je dán rekurencí:
3. Počet způsobů, jak vybrat právě k prvků na správném místě a zbytek prvků na nesprávném místě:
Úvahy: Matematika vs. Hrubá síla (Brute Force)
- Proč nepoužít hrubou sílu? Pro existuje 3,6 milionu permutací. Pro je to už možností! Hrubou silou by počítač počítal tisíce let.
- Kombinatorický přístup: Díky vzorcům subfaktoriálu a kombinačních čísel spočítáme výsledek pro v PHP za méně než 1 milisekundu!
Doplňující otázky k zamyšlení a náměty na rozšíření
- 1. K jaké hodnotě konverguje pravděpodobnost, že nikdo netrefí svůj kabát (), když ? (K hodnotě , kde je Eulerovo číslo!).
- 2. Jaká je střední hodnota (očekávaný počet) správně trefených prvků bez ohledu na velikost
n? (Překvapivě přesně1!).
Vyzkoušejte funkční řešení: Otevřít vzorovou úlohu permutace.php