Para encontrar la mediana de una matriz no ordenada, podemos hacer un montón mínimo en tiempo para elementos, y luego podemos extraer uno por uno elementos para obtener la mediana. Pero este enfoque llevaría tiempo .
¿Podemos hacer lo mismo por algún método en tiempo? Si podemos, ¿cómo?
Respuestas:
Este es un caso especial de un algoritmo de selección que se puede encontrar el -ésimo elemento más pequeño de una matriz con k es la media del tamaño de la matriz. Hay una implementación que es lineal en el peor de los casos.k k
Algoritmo de selección genérico
En primer lugar vamos a ver un algoritmok
find-kth
que encuentra el -ésimo elemento más pequeño de una matriz:La función
split(A, pivot)
devuelveL,R
tal que todos los elementos enR
son mayores quepivot
yL
todos los demás (menos una aparición depivot
). Entonces todo se hace de forma recursiva.Esto es en promedio pero O ( n 2 ) en el peor de los casos.O ( n ) O ( n2)
El peor caso lineal: el algoritmo de mediana de medianas
Un mejor pivote es la mediana de todas las medianas de subconjuntos
A
de tamaño 5, al llamar al procedimiento en el conjunto de estas medianas.Esto garantiza en todos los casos. No es tan obvio. Estas diapositivas de PowerPoint son útiles tanto para explicar el algoritmo como para la complejidad.O ( n )
Tenga en cuenta que la mayoría de las veces el uso de un pivote aleatorio es más rápido.
fuente
5
estándar? ¿Qué pasa si el tamaño de A es menor que 5?return A[k]
es incorrecto (a menos queA
se ordene lo que haría que el algoritmo sea discutible). Sisplit
sucedió dividir deA
tal manera quek = |L| + 1
todavía no sabes dónde está elk
elemento th. Su caso base es cuando|A| = 1
aún necesita hacer una de las dos llamadas recursivas.La idea principal del algoritmo es utilizar el muestreo. Tenemos que encontrar dos elementos que estén muy juntos en el orden ordenado de la matriz y que tengan la mediana entre ellos. Vea la referencia [MU2017] para una discusión completa.
[MU2017] Michael Mitzenmacher y Eli Upfal. "Probabilidad e informática: aleatorización y técnicas probabilísticas en algoritmos y análisis de datos", capítulo 3, páginas 57-62. Cambridge University Press, segunda edición, 2017.
fuente