Tengo una PriorityQueue que contiene referencias a algunos objetos. Cuando inicialmente inserto los elementos en la cola de prioridad, el ordenamiento es mantenido por la estructura de datos. Ahora, después de una operación de eliminación, actualizo algunas de las referencias que están siendo retenidas por la cola de prioridad. Idealmente, esto requiere una operación de reheapify en la cola de prioridad, pero como es obvio, ya que estoy modificando las referencias seleccionadas externamente, no se puede desencadenar una reheapify. Entonces, ¿cuál es la mejor manera de asegurar que puedo obtener la ventaja de un montón como máximo de extracción rápida en presencia de modificaciones a elementos arbitrarios dentro de la cola? Veo que necesito una mejor estructura de datos?Reheapify java.util.PriorityQueue después de actualizar los elementos
Para ser más específico, necesito una implementación de algo así como un montón de Fibonacci en Java. http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm ¿Está eso disponible?
Tengo una implementación de un montón Fibonacci en Java si estás interesado. Está disponible en línea en http://www.keithschwarz.com/interesting/code/?dir=fibonacci-heap. ¡Espero eso ayude! – templatetypedef
Incluso los montones de fibonacci no son elásticos frente a los cambios fuera de banda en los pesos de los elementos. Creo que debes eliminar un elemento antes de modificarlo y volver a insertarlo después. –
eliminar un elemento arbitrario del montón requerirá O (n) construcción de montón, supongo. –