Algoritmo de voto mayoritario de Boyer-Moore

El algoritmo de voto mayoritario de Boyer-Moore  es un algoritmo para encontrar el elemento dominante en una secuencia. El elemento predominante de una secuencia de longitud n es un elemento de esta secuencia que aparece en ella más de n/2 veces. La complejidad de este algoritmo es O(n), y la memoria adicional requerida es O(1).

El algoritmo lleva el nombre de R. Boyer y Jay Moore , quienes lo publicaron en 1981. [una]

Descripción

El algoritmo requiere la introducción de dos variables adicionales: la primera contendrá el elemento de la secuencia, que es el más adecuado para el papel de elemento predominante de los ya considerados, y la segunda es un contador y es inicialmente igual a cero. El algoritmo consiste en un solo paso a través de la secuencia considerada. En cada paso, se realizan las siguientes acciones: si el valor actual de la variable del contador es cero, entonces este elemento de la secuencia se escribe en la primera variable y el contador se vuelve igual a 1. Si el valor del contador es diferente de cero , luego el elemento actual de la secuencia se compara con el valor escrito en la primera variable. Si coinciden, el contador se incrementa en 1; de lo contrario, se decrementa en 1.

Pseudocódigo del algoritmo :

Después de considerar todos los elementos, la primera variable contendrá el elemento dominante de la secuencia, si existe. Sin embargo, si no existe tal elemento en la secuencia, la primera variable seguirá conteniendo algún elemento de la secuencia. Por lo tanto, si no hay certeza de que exista el elemento dominante, se debe realizar un paso adicional a través de la matriz para asegurarse de que el elemento encontrado en la matriz aparezca más de n/2 veces. Si, como resultado de la segunda pasada, resulta que el elemento no aparece más de n/2 veces, entonces la secuencia del elemento dominante no contiene. [2]

Notas

  1. Boyer, RS & Moore, J S. (1991), MJRTY - A Fast Majority Vote Algorithm , en Boyer, RS, Automated Reasoning: Essays in Honor of Woody Bledsoe , Automated Reasoning Series, Dordrecht, Países Bajos: Kluwer Academic Publishers, Con. 105–117, doi : 10.1007/978-94-011-3488-0_5 , < http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA131702 >  . Publicado originalmente como informe técnico en 1981.
  2. Cormode, Graham & Hadjieleftheriou, Marios (octubre de 2009), Encontrar elementos frecuentes en flujos de datos , Comunicaciones de la ACM Vol. 52 (10): 97 , DOI 10.1145/1562764.1562789  .