2011-05-05 13 views
13

Según http://en.wikipedia.org/wiki/Heap_%28data_structure%29#Comparison_of_theoretic_bounds_for_variants, se necesita Θ (logn) (que se traduce en O (logn)) para realizar la operación de disminución de la tecla. Sin embargo, parece que no hay ningún sitio que incluya una implementación de pila binaria con una operación de tecla de disminución.¿Admite un montón binario la operación de disminución de tecla?

Dada la falta de implementaciones en la web, ¿es posible realizar la operación de disminución de la clave en un montón binario?

+3

creo que es una pregunta perfectamente válida que está pidiendo ... – Patrik

+0

[he implementado en JavaScript] (https://github.com/mhluska/Snakeception/blob/master/src/binaryheap.coffee). –

+0

puede estar interesado en [pilas de Fibonacci] (https://en.wikipedia.org/wiki/Fibonacci_heap) que tienen operaciones de '' (1) '' disminuir-clave' –

Respuesta

10

me cuenta de esto:

  • Con el fin de realizar una tecla disminución en O (log n), tenemos que conocer la ubicación del elemento correspondiente con antelación. Un hash map y una buena función hash pueden garantizar O (1) tiempo amortizado. Después de cada modificación, tenemos que actualizar el mapa hash, que toma O (logn).
  • Después de determinar la ubicación de nuestro elemento, movemos nuestro elemento hacia arriba en caso de que tenga una prioridad mayor que su elemento principal (de manera similar a la inserción) o hacia abajo si tiene una prioridad menor que uno de sus elementos secundarios (en similar a la eliminación) y actualizar las ubicaciones de los elementos modificados en el mapa hash.
+1

Creo que es al revés. La actualización del mapa hash toma O (1) mientras que la tecla disminuir toma O (lg (n)). –

+1

Actualizar el mapa hash es O (log n) porque tiene que actualizarlo para cada operación 'swap (parent, child)'. Hay O (log n) tal operación en una operación 'decreasekey'. –

Cuestiones relacionadas