Aquellos de ustedes que han leído mis preguntas anteriores conocen mi trabajo para comprender e implementar quicksort y quickselect, así como algunos otros algoritmos básicos.C++ Cálculo eficiente de una media móvil
La selección rápida se usa para calcular el k-ésimo elemento más pequeño en una lista desordenada, y este concepto también se puede usar para buscar la mediana en una lista desordenada.
Esta vez, necesito ayuda para diseñar una técnica eficiente para calcular con la mediana, porque la selección rápida no es una buena opción, ya que necesita volver a calcular cada vez que cambia la lista. Debido a que quickselect tiene que reiniciarse cada vez, no puede aprovechar los cálculos previos realizados, por lo que estoy buscando un algoritmo diferente que sea similar (posiblemente) pero que sea más eficiente en el área de ejecutar medianas.
Esto puede hacerse en un tiempo lineal utilizando la partición de tipo algo rápido, pero tiene peor momento n^2. Elija un punto aleatorio en su colección como pivote y mueva los otros elems para que los elementos más pequeños que el pivote estén a la izquierda y los más grandes o iguales estén a la derecha. Si el pivote está en el medio, es la mediana, si no, vaya al trozo que tiene la mediana (el trozo de mayor tamaño). Repetir. Otro algoritmo que garantiza el tiempo lineal es la mediana de las medianas descrita en CLRS y creo también en wikipedia. Mira eso. – Adrian