V informatice je výběrový algoritmus algoritmem pro nalezení k -tého největšího prvku v poli (takový prvek se nazývá statistika k-tého řádu ). Speciálními případy tohoto algoritmu je nalezení minimálního prvku , maximálního prvku a mediánu . Existuje algoritmus, který zaručeně vyřeší problém výběru k-tého největšího prvku v O( n ).
Problém výběru lze zredukovat na třídění . Ve skutečnosti můžete pole seřadit a pak vzít prvek, který potřebujete, v pořadí. To je účinné, když je třeba výběr provést vícekrát: pak můžete pole seřadit v O( n log n ) a poté z něj vybrat prvky. Pokud je však třeba provést volbu jednou, může být tento algoritmus nepřiměřeně dlouhý.
Je zřejmé, jak najít minimum (maximum) v daném poli v lineárním čase:
Existuje algoritmus pro nalezení statistiky k -tého řádu založený na algoritmu rychlého třídění, který v průměru běží v O( n ).
Myšlenkou algoritmu je, že pole je rozděleno na dvě části vzhledem k náhodně (ekvipravděpodobně) vybranému prvku - prvky menší než vybraný spadají do jedné části, zbytek do druhé (tato operace se provádí pro , při na jeho konci je vybraný prvek na pozici ) . Pokud jsou v první části ( ) přesně prvky, pak je vybraný prvek požadovaný, pokud , pak se algoritmus provede rekurzivně pro první část pole, jinak - pro druhou (v druhém případě pro další iterace se odečte od ). Rekurzivní volání vedou k exponenciálnímu zmenšování velikosti zpracovávaného pole s každou iterací, az tohoto důvodu je doba provádění algoritmu .
BFPRT-Algorithm vám umožňuje najít statistiku k -tého řádu garantovanou v O( n ). Pojmenován po svých vynálezcích: Manual Blum, Robert W. Floyd, Vaughan R. P ratt , Ronald L. R ivest a Robert Endre T arjan. Používá se s poměrně dlouhým seznamem prvků, přes 800 prvků.
Vstup: číslo představující -tý prvek.
S každým rekurzivním voláním vám algoritmus umožňuje vyřadit alespoň čtvrtinu všech prvků. To poskytuje horní hranici zaručené lineární doby běhu pro deterministický algoritmus , protože je vyjádřena vztahem opakování . Obecně, pokud mají podmnožiny velikost , je doba běhu vyjádřena jako .