Boyer-Moore většinový hlasovací algoritmus

Boyer-Moore většinový hlasovací algoritmus  je algoritmus pro nalezení dominantního prvku v sekvenci. Převažujícím prvkem posloupnosti délky n je prvek této posloupnosti, který se v ní vyskytuje více než n/2krát. Složitost tohoto algoritmu je O(n) a požadovaná dodatečná paměť je O(1).

Algoritmus je pojmenován po R. Boyerovi a Jay Moore , kteří jej publikovali v roce 1981. [jeden]

Popis

Algoritmus vyžaduje zavedení dvou dalších proměnných: první bude obsahovat prvek posloupnosti, který je nejvhodnější pro roli převládajícího prvku z těch, které již byly uvažovány, a druhá je čítač a zpočátku se rovná nule. Algoritmus sestává z jednoho průchodu uvažovanou sekvencí. V každém kroku se provádějí následující akce: pokud je aktuální hodnota proměnné čítače nula, pak se tento prvek sekvence zapíše do první proměnné a čítač se rovná 1. Pokud je hodnota čítače jiná než nula , pak se aktuální prvek sekvence porovná s hodnotou zapsanou do první proměnné. Pokud se shodují, počítadlo se zvýší o 1, jinak se sníží o 1.

Pseudokód algoritmu :

Po zvážení všech prvků bude první proměnná obsahovat dominantní prvek sekvence, pokud nějaký existuje. Pokud však takový prvek v sekvenci není, pak první proměnná bude stále obsahovat nějaký prvek sekvence. Pokud tedy neexistuje jistota, že dominantní prvek existuje, měl by být proveden další průchod polem, aby se zajistilo, že se nalezený prvek v poli vyskytuje více než n/2krát. Pokud se v důsledku druhého průchodu ukáže, že prvek se nevyskytuje více než n/2krát, pak posloupnost dominantního prvku neobsahuje. [2]

Poznámky

  1. Boyer, RS & Moore, J. S. (1991), MJRTY – A Fast Majority Vote Algorithm , v Boyer, RS, Automated Reasoning: Essays in Honor of Woody Bledsoe , Automated Reasoning Series, Dordrecht, Nizozemsko: Kluwer Academic Publishers S. 105–117, doi : 10.1007/978-94-011-3488-0_5 , < http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA131702 >  . Původně publikováno jako technická zpráva v roce 1981.
  2. Cormode, Graham & Hadjieleftheriou, Marios (říjen 2009), Hledání častých položek v tocích dat , Communications of the ACM vol. 52 (10): 97 , DOI 10.1145/1562764.1562789  .