En la discusión de la estructura de datos de montón, por ejemplo en CLRS, la cola de máxima prioridad solo necesita INSERTAR, MÁXIMA, EXTRAER-MÁX y CLAVE AUMENTAR. ¿Pero por qué no tiene también DECREASE-KEY, por lo menos, su operación también invalidará la propiedad Heap? ¿Es prácticamente irrelevante?¿Por qué la cola de máxima prioridad no tiene DECREASE-KEY?
Respuesta
FWIW my CLR V1 habla de INSERT, MIN, EXTRACT-MIN, UNION, DECREASE-KEY, y DELETE, pero podemos convertirlo a su versión dando la vuelta a los letreros.
Creo que este conjunto está impulsado por los requisitos de los algoritmos que usan colas de prioridad, como el árbol de expansión mínima, el camino más corto de Dijstra y (sospecho) A *. Por ejemplo, si mira el comienzo del capítulo sobre árboles de expansión mínima, puede ver una nota que el algoritmo de Prim puede acelerarse si reemplaza montones binarios con montones de fibonacci.
"my CLR V1"? ¿Puedes explicar por favor? Exactamente, lo que estaba preguntando en realidad corresponde a "¿Por qué la cola de prioridad mínima no tiene INCREASE-KEY?" –
"my CLR v1" se refiere a la primera edición del libro, que no tenía a Stein como autor. Sin embargo, el segundo párrafo responde a su pregunta: los algoritmos que utilizan colas de prioridad solo necesitan poder mover entradas antes en la cola, no más tarde. – Novelocrat
Nada le impide implementar DECREASE-KEY en su pila binaria. Se puede hacer en O (log N) sin romper ninguna invariante.
Supongo que no está incluido, porque no se necesita con mucha frecuencia.
¿Cuál es su pseudo código para implementar esto? ¿Simplemente heapify en la ubicación actual? –
Suponiendo que "heapify" significa mover el nodo actual hacia abajo hasta que las invariantes del montón estén satisfechas, entonces sí. – svick
Si tiene MAX-HEAP, DECREASE-KEY será MAX-HEAPIFY en la sección 6.2 "Mantenimiento de la propiedad Heap" de CLRS, 3ª edición.
- 1. ¿Por qué el framework .Net no tiene una clase de cola de prioridad?
- 2. ¿Por qué index.html tiene prioridad sobre index.php?
- 3. Java: cola de prioridad
- 4. Qué metaetiqueta tiene prioridad
- 5. C# cola de prioridad
- 6. Cambiar la prioridad en una cola de prioridad personalizada
- 7. ¿Tiene R una cola de prioridad como PriorityQueue de Java?
- 8. ¿Java tiene una cola de prioridad mínima indexada?
- 9. Par dentro de la cola de prioridad
- 10. Longitud máxima para la cola de scala
- 11. ¿Una cola de prioridad que permite una actualización de prioridad eficiente?
- 12. Implementación de cola de prioridad de Brodal
- 13. Implementación de cola de prioridad en C
- 14. ¿Estructura de cola de prioridad utilizada?
- 15. método de limpieza de cola de prioridad
- 16. Cola de prioridad de doble terminación
- 17. Cola de prioridad eliminar tiempo de complejidad
- 18. Servicio con cola de prioridad en Android
- 19. ¿Por qué las colas de prioridad usan principalmente 0 como la prioridad más importante?
- 20. Cola de prioridad concurrente en .NET 4.0
- 21. ¿Por qué no es esta cola recursiva?
- 22. Base de datos de la Cola de prioridad
- 23. Cola de prioridad de STL en la clase personalizada
- 24. ¿Por qué un PriorityQueue no actuaría como una cola?
- 25. Repriorización de la cola de prioridad (manera eficiente)
- 26. ¿Por qué la longitud máxima de la cadena C es literalmente diferente de la máxima char []?
- 27. Eliminación de un elemento arbitrario de la cola de prioridad
- 28. Cambiar prioridad de subproceso no tiene un efecto
- 29. Comparación de implementaciones de cola de prioridad en Haskell
- 30. Interrumpir el tie en una cola de prioridad usando python
Creo que esto está relacionado con la forma en que las colas de prioridad mínima no suelen tener INCREASE-KEY, a pesar de que es una operación perfectamente bien definida. Creo que esto es algo que no surge mucho. Además, ¡no obtendrás exactamente la reputación de 1337! – templatetypedef
Podría jurar que hice esta misma pregunta antes, pero no puedo encontrarla. –
https://cs.stackexchange.com/questions/10203/increase-key-and-decrease-key-in-a-binary-min-heap – max