Prioritní fronta
Author
Albert FloresPrioritní fronta je abstraktní datový typ v informatice. K jeho prvkům se na rozdíl od prvků obyčejné fronty váže ještě priorita: Pokud mají prvky stejnou prioritu, opouští frontu v pořadí, v jakém do ní byly vloženy, ale prvek s vyšší prioritou prvky s nižší prioritou předběhne a jde na výstup dříve.
Setříděná fronta tedy nabízí přinejmenším následující dvě operace:
zařaď do fronty s udanou prioritou: přijímá jako vstup prvek a jeho prioritu a prvek s jeho prioritou zařadí do fronty vydej nejstarší z prvků s nejvyšší prioritou: odstraní z fronty ten z prvků s nejvyšší prioritou, který je tam nejdéle, a vrátí ho jako svůj výstup
Někdy jsou implementovány i další funkce, například možnost zjistit prvek s nejvyšší prioritou bez toho, že by byl odstraněn.
Implementace
Prioritní frontu je možné implementovat různými způsoby. Jednodušší na naprogramování, ale náročnější na procesorový čas jsou implementace netříděným polem nebo spojovým seznamem. +more Taková řešení nabízejí vložení v konstantním čase, ovšem vydání prvku s nejvyšší prioritou má časovou náročnost O(n).
Rozšířenější je implementace pomocí haldy, kde má zařazení i vydání prvku s nejvyšší prioritou časovou náročnost O(\log n); platí to např. pro binární nebo binomiální haldu. +more Zvláštním případem je Fibonacciho halda, operace vložení do ní má asymptotickou složitost O(1) a vydání z ní toho prvku, jenž má nejvyšší prioritu, amortizovanou časovou složitost O(\log n).