¿Existe un algoritmo eficiente para combinar 2 max-heaps que se almacenan como matrices?Algoritmo para unir dos montones máximos?
Respuesta
Depende de qué tipo es el montón.
Si se trata de un montón estándar donde cada nodo tiene hasta dos hijos y que se llena de que las hojas están en un máximo de dos filas diferentes, no se puede obtener más que O (n) para fusionar.
Simplemente junte las dos matrices y cree una nueva pila de ellas que tome O (n).
Para un mejor rendimiento de fusión, puede usar otra variante de pila como un Fibonacci-Heap que se puede combinar en O (1) amortizado.
Actualización: en cuenta que es peor para insertar todos los elementos de la primera pila por uno para el segundo montón o viceversa desde una inserción toma O (log (n)). A medida que sus estados de comentario, no parece saber cómo el montón se construye de manera óptima en el principio (de nuevo por una pila binaria estándar)
- Crear una matriz y pone en los elementos de los dos montones de alguna arbitraria orden
- ahora comienza en el nivel más bajo. El nivel más bajo contiene cantidades mínimas triviales de tamaño 1, por lo que este nivel se hace
- sube de nivel. Cuando se viola la condición de montón de uno de los "sub-montículos", intercambie la raíz del "sub-montón" con su hijo más grande. Luego, el nivel 2 se realiza
- pasa al nivel 3. Cuando la condición de pila se viola, proceda como antes. Intercambie con su hijo más grande y procese recursivamente hasta que todo coincida con el nivel 3
- ...
- cuando llegue a la cima, ha creado un nuevo montón en O (n).
Omito una prueba aquí pero puede explicarlo ya que ha hecho la mayor parte del montón en los niveles inferiores donde no tuvo que intercambiar mucho contenido para restablecer la condición de montón. Ha operado en "sub montones" mucho más pequeños, que es mucho mejor de lo que haría si insertara cada elemento en uno de los montones => luego, continuaría siempre en todo el montón que toma O (n) cada vez .
Actualización 2: Un montón binomial permite la fusión en O (log (n)) y se ajustará a su requisito O (log (n)^2).
Dos pilas binarias de tamaños nyk se pueden combinar en las comparaciones O (log n * log k). Veo
Creo que lo que está buscando en este caso es un montón binomial.
Un montón binomial es una colección de árboles binomiales, un miembro de la familia de montón fusible. El peor tiempo de ejecución de una unión (fusión) en más de 2 binomios con n ítems totales en los montones es O (lg n).
Consulte http://en.wikipedia.org/wiki/Binomial_heap para obtener más información.
- 1. Combinando dos montones binarios perfectos?
- 2. El mejor algoritmo para unir colores.
- 3. Algoritmo para unir 2 listas con comodines
- 4. Expresión regular para unir dos frases separadas
- 5. unir dos consultas SQL
- 6. Unir dos subconsulta en MySQL
- 7. Algoritmo para unir rectángulos adyacentes en el polígono
- 8. Algoritmo para unir los socios preferidos en grupos de tres
- 9. XCode: ¿Cómo unir dos líneas?
- 10. Unir dos matrices en ColdFusion
- 11. Unir dos resultados en Powershell
- 12. Usar Ant para unir dos archivos de propiedades diferentes
- 13. Usando FFMPEG para unir dos archivos MTS juntos
- 14. Utilice el comando UNIX JOIN para unir dos archivos
- 15. unir dos tablas en una gran tabla
- 16. MySQL - ¿Unir dos tablas sin duplicados?
- 17. SQL - Unir dos tablas y contar elementos
- 18. consejos algoritmo para la búsqueda de elementos máximos dentro de un período de tiempo
- 19. Asignación de pilas y montones
- 20. ¿Cómo puedo unir dos caminos en C#?
- 21. Concatenar/fusionar/unir dos árboles AVL
- 22. ¿Cómo unir dos repositorios no relacionados?
- 23. ¿Cómo unir dos generadores en Python?
- 24. ¿Cómo unir dos líneas en vi?
- 25. MySQL cómo unir tablas en dos campos
- 26. ¿Cómo unir dos archivos wav usando python?
- 27. Unir dos archivos WAV de Java?
- 28. Para unir o unir todo, esa es la pregunta
- 29. ¿Cómo unir los resultados de dos consultas en SQL Server?
- 30. Aplicaciones del mundo real de montones binarios y montones de Fibonacci
Sí. ¿Qué has intentado hasta ahora? –
¿A qué te refieres con eficiencia? – PeterAllenWebb
bueno, si solo inserto cada elemento en un nuevo montón en un orden aleatorio que sería el promedio de O (nlogn), creo. así que estoy buscando tal vez O (log (n)^2) – ThP