Leí una pregunta y estoy buscando información sobre cómo resolverla:
Los números se generan aleatoriamente y se almacenan en una matriz (en expansión). ¿Cómo haría un seguimiento de la mediana?
Hay dos estructuras de datos que pueden resolver el problema. Uno es el árbol binario equilibrado, el otro son dos montones que mantienen el rastro de la mitad más grande y la mitad más pequeña de los elementos. Creo que estas dos soluciones tienen el mismo tiempo de ejecución O(n lg n), pero no estoy seguro de mi criterio.
¿Cuál es la mejor manera de hacer un seguimiento de la mediana?
Mi intento:
En esta pregunta, creo que un montón es la mejor manera de realizar un seguimiento de la mediana. Hay dos montones, el montón grande y el montón pequeño, que no necesitan ser secuenciales. Primero, calculamos el valor medio de los elementos en la matriz. Si el elemento es menor que el valor medio, colocamos el num en el montón pequeño. Por el contrario, ponemos el num al gran montón. Si el número del montón grande es igual al número del montón pequeño, el mayor en el montón pequeño y el más pequeño en el montón grande son la mediana. Si los dos montones tienen un tamaño diferente, simplemente sacamos el elemento raíz del montón con un tamaño más grande y lo empujamos a la raíz del montón de tamaño más pequeño. Para el montón grande, el elemento raíz es el más pequeño, y para el montón pequeño, el elemento raíz es el más grande. De esta manera, si los dos montones tienen el mismo tamaño o una diferencia digital,
Creo que esta solución tiene el tiempo de ejecución como O (m * n), m significa los tiempos que ajustamos los montones de desequilibrio.
¿Es esta la mejor manera de hacer un seguimiento de la mediana?
std::nth_elementalguien?