Algoritmus Narayana

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 25. září 2018; kontroly vyžadují 2 úpravy .

Narayanův algoritmus je nerekurzivní  algoritmus , který pro danou permutaci generuje permutaci, která po ní následuje (v lexikografickém pořadí ). Vynalezen indickým matematikem Panditem Narayanou ve 14. století .

Pokud je Narayanův algoritmus aplikován ve smyčce na počáteční sekvenci prvků uspořádaných tak, že , vygeneruje všechny permutace prvků sady v lexikografickém pořadí.

Dalším rysem algoritmu je, že je nutné si pamatovat pouze jeden prvek permutace.

Algoritmus

Hodnocení obtížnosti

V případě permutace, kde jsou prvky náhodně zamíchány, je složitost algoritmu prakticky nezávislá na počtu prvků. V daných implementacích jsou provedena průměrně 3 porovnání permutačních prvků a 2,17 výměn.

Nejlepší případ je, když je předposlední prvek permutace větší než poslední, pak se provedou 2 srovnání a 1 výměna. Nejhorší případ je, když jsou prvky permutace seřazeny sestupně, a pokud je délka permutace n, pak se provede n+1 porovnání a n/2+1 výměn.

Obecně lze složitost algoritmu odhadnout jako O(n).

Literatura