You are on page 1of 4

Estructuras de datos dinmicas/Colas de prioridad y montones

Estructuras de datos dinmicas/Colas de prioridad y montones


Colas de prioridad y montones
Una cola de prioridad soporta acceso y eliminacin del elemento de mayor prioridad: primero() y suprimir(). Puede implementarse como una lista ordenada por prioridad, cuya complejidad para el caso peor en la operacin insertar es O(N), un rbol binario de bsqueda, con complejidad media en las operaciones primero() y suprimir(): O(log N), o un rbol binario de bsqueda equilibrado.

Montculo binario, montn o heap


Un montculo es un rbol binario que satisface las siguientes condiciones: Es completo, con la excepcin del nivel inferior, que debe llenarse de izquierda a derecha. Las hojas estn en dos niveles adyacentes. Para cada nodo X con padre P, se cumple que el dato en P es mayor o igual que el dato en X. Ventajas: Soporta las operaciones insertar y suprimir en tiempo O(log N) en el caso peor. Soporta insertar en tiempo constante en promedio y primero en tiempo constante en el peor caso.

Operaciones
Insertar El procedimiento comienza con la creacin de un hueco en la siguiente posicin disponible del vector. El elemento se coloca si no se viola la propiedad de ordenacin del montculo. Si no, se desplaza el elemento situado en el padre del nodo a dicho hueco. Se contina con el proceso hasta que se pueda colocar el elemento. Suprimir Suprimir un elemento de la cola de prioridad consiste en eliminar la raz. La eliminacin del elemento con prioridad mayor implica colocar el ltimo elemento en un hueco que se crea en la raz. El hueco se hunde en el rbol a travs de los hijos con prioridad mayor hasta que el elemento se pueda colocar sin violar la propiedad de ordenamiento del montculo. Mtodo introducir() Aade un objeto a la cola de prioridad, pero no garantiza que se mantenga la propiedad de ordenacin del montculo. Mtodo privado arreglarMontculo() Restablece el orden en el montculo. Llama al mtodo hundir(int) sobre cada nodo en sentido inverso al recorrido por niveles, cuando se realice la llamada con el nodo i se habrn procesado todos los descendientes del nodo i con una llamada a hundir(). No hace falta ejecutar hundir sobre las hojas, por lo que se comienza con el nodo de mayor ndice que no sea una hoja.

Estructuras de datos dinmicas/Colas de prioridad y montones

Implementacin de un montculo
Un rbol binario completo se puede representar usando un array, colocando la raz en la posicin 1 y almacenando su recorrido por niveles en el vector. Dado un elemento en la posicin i del vector: Hijo izquierdo: posicin 2i, Hijo derecho: posicin 2i +1 Padre: posicin i/2 (parte entera) Se necesita mantener un entero que indique cuntos nodos hay actualmente en el rbol.

Ordenacin mediante montones (Heapsort)


Se puede usar una cola de prioridad para ordenar N elementos insertndolos en un montculo binario y extrayndolos llamando a suprimir() N veces. O(N log N) en el caso peor.

Montculo binomial
Un montculo binomial es similar a un montculo binario, pero soporta eficientemente la fusin de dos montculos.

rbol Binomial
Definicin recursiva: Un rbol binomial de orden 0 es un nodo. Un rbol binomial de orden k tiene una raz de grado k y sus hijos son races de rboles binomiales de orden k-1, k-2, ..., 2, 1, 0 (en ese orden). Un rbol binomial de orden k tiene nodos, y altura k. Por su estructura, un rbol binomial de orden k puede ser construido a partir de dos rboles de orden k-1 en forma trivial, agregando uno de ellos como el hijo ms a la izquierda del otro.

Estructura de un montculo binomial


Un montculo binomial se implementa como un conjunto de rboles binomiales que satisfacen las propiedades del montculo: Cada rbol binomial en el montculo cumple la propiedad de montculo: la prioridad de un nodo es menor que la de su padre. Puede haber como mximo un rbol binomial de cada orden. La segunda propiedad implica que un montculo binomial con n elementos contiene lg(n+1) logaritmo binario de n+1- rboles binomiales como mximo. de hecho, el nmero y los rdenes de estos rboles est determinado por n: cada rbol corresponde al dgito menos significativo en la representacin binaria de n. Por ejemplo, 13 es 1101 en binario, , y el montculo binomial con 13 elementos consistir en tres rboles binomiales de rdenes 3, 2, y 0.

Operaciones
Fusin Como el nodo raz tiene el elemento con mayor prioridad del rbol, comparando las claves de las races, se obtiene la de mayor prioridad, que ser la clave del nodo raz. Entonces, el otro rbol se convierte en un subrbol del rbol combinado. Si uno solo de los montculos contiene un rbol de orden j, ste rbol se lleva el montculo fusionado. Si ambos montculos contienen un rbol de orden j, ambos rboles son fusionados en uno de orden j+1 de tal manera que la propiedad de montculo se cumpla. Ms tarde puede hacer falta fusionar este rbol con otro de orden j+1 presente en alguno de los montculos. En la ejecucin del algoritmo, se deben examinar como mximo tres rboles de cada orden (dos provenientes de cada montculo fusionado y uno compuesto de dos rboles ms pequeos). Cada rbol tiene como mximo orden lg n, por lo tanto su tiempo de ejecucin es de O(lg n).

Estructuras de datos dinmicas/Colas de prioridad y montones Insercin La insercin de un nuevo elemento dentro de un montculo puede realizarse simplemente creando un nuevo montculo que contenga slo dicho elemento, y fusionar este nuevo montculo con el original en tiempo de O(lg n). Encontrar Primero Para encontrar el elemento con mayor prioridad del montculo, simplemente debe buscarse el mnimo entre las races de los rboles binomiales, lo cual puede realizarse en un tiempo de O(lg n). Eliminar Primero Luego de buscar el elemento entre las races de los rboles binomiales, tomar los subrboles del nodo encontrado, reordenarlos de modo de formar otro montculo binomial, y fusionarlo con el montculo original. Incrementar prioridad Luego de incrementar la prioridad de un elemento, puede resultar con mayor prioridad que su padre, violando la propiedad de montculo. Si es ese el caso, debe intercambiarse la posicin del elemento con la de su padre, sucesivamente hasta que se cumpla la propiedad de montculo. Cada rbol binomial tiene lg n de altura como mximo, de manera que toma un tiempo del O(lg n). Eliminar Para eliminar un elemento cualquiera del montculo, debe incrementarse su prioridad de manera que sea la mayor del montculo, y luego ejecutar la operacin Eliminar Primero.

Resumen de la complejidad de las operaciones


Las siguientes operaciones se ejecutan en un tiempo de O(log n) en un montculo binomial con n elementos: Insertar un nuevo elemento Encontrar el elemento con mayor prioridad Eliminar el elemento con mayor prioridad Incrementar la prioridad de un elemento Eliminar un elemento cualquiera Fusionar con otro montculo

Implementacin
Como ninguna operacin requiere acceso aleatorio a las races de los rboles binomiales, stas pueden ser almacenadas en una lista enlazada, ordenada en forma creciente de acuerdo al orden del rbol.

Fuentes y contribuyentes del artculo

Fuentes y contribuyentes del artculo


Estructuras de datos dinmicas/Colas de prioridad y montones Fuente: http://es.wikibooks.org/w/index.php?oldid=190770 Contribuyentes: Ezarate, LadyInGrey, Rgfernan, 6 ediciones annimas

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/

You might also like