Curiosamente, esto se puede hacer en tiempo sublineal para una matriz ordenada con un modo frecuente: el hecho de que la matriz esté ordenada nos permite saltarnos un montón de elementos.
Supongamos que tenemos una matriz ordenada de enteros [math] n [/ math] con frecuencia de modo (desconocido) [math] m [/ math]. Deje que [math] 2 ^ k [/ math] sea la mayor potencia de [math] 2 [/ math] menor que [math] n [/ math]. Comience muestreando cada [matemático] 2 ^ k [/ matemático] th entero en la matriz, luego cada [matemático] 2 ^ {k-1} [/ matemático], cada [matemático] 2 ^ {k-2} [ / math] th, etc. hasta que encontremos dos enteros a distancia [math] 2 ^ i [/ math] que sean iguales. Como la distancia más grande entre dos enteros iguales es [matemática] m – 1 [/ matemática], debemos tener [matemática] 2 ^ i <m <2 ^ {i + 2} [/ matemática].
En este punto, el modo debe ser uno de los enteros [math] \ bigl \ lceil \ tfrac {n} {2 ^ i} \ bigr \ rceil [/ math] que hemos muestreado. Use búsquedas binarias para encontrar los puntos finales izquierdo y derecho de los intervalos iguales a cada uno de los enteros muestreados. El intervalo más largo será el modo.
- ¿En qué se diferencia la ramificación y el límite del retroceso?
- ¿Es cierto que no debería importarme tanto aprender lenguajes de programación sino construir una gran base de estructuras de datos y algoritmos?
- Cómo usar lower_bound para buscar una cadena en una estructura vectorial
- Si clasifica todos los pesos de una red neuronal entrenada en orden ascendente, ¿cómo se vería la curva de los datos ordenados?
- ¿Cuándo podrán los algoritmos de detección de imágenes filtrar imágenes ofensivas de manera confiable?
El tiempo de ejecución total es [matemáticas] O \ bigl (\ tfrac {n} {2 ^ i} + \ tfrac {n} {2 ^ i} \ cdot i \ bigr) = O \ bigl (\ tfrac {n (1 + \ log m)} {m} \ bigr) [/ math].