A Min-Heap és un arbre binari complet en el qual el valor de cada node intern és menor o igual que els valors dels fills d'aquest node.
Mapejar els elements d'un munt a una matriu és trivial: si un node s'emmagatzema a l'índex k , llavors és fill deixat s'emmagatzema a l'índex 2k+1 i la seva fill dret a l'índex 2k+2 per Indexació basada en 0 i per 1 indexació basada el nen esquerre estarà a 2k i el nen adequat estarà a 2k+1 .
Exemple de Min Heap:
5 13 / / 10 15 16 31 / / / 30 41 51 100 41>
Com es representa Min Heap?
Un Min Heap és un arbre binari complet. Un munt mínim es representa normalment com una matriu. L'element arrel estarà a Arriba[0] . Per a qualsevol node i, és a dir, Arr[i] :
- Arr[(i -1) / 2] retorna el seu node pare. Arr[(2 * i) + 1] retorna el seu node fill esquerre. Arr[(2 * i) + 2] retorna el seu node fill dret.
Operacions a Min Heap:
- getMin(): retorna l'element arrel de Min Heap. Temps La complexitat d'aquesta operació és O(1) . extractMin(): elimina l'element mínim de MinHeap. La complexitat temporal d'aquesta operació és O (Registre n) ja que aquesta operació necessita mantenir la propietat heap (cridant a heapify()) després d'eliminar root. insert() : inserció d'una nova clau pren O (Registre n) temps. Afegim una nova clau al final de l'arbre. Si la clau nova és més gran que la seva pare, no hem de fer res. En cas contrari, haurem de recórrer cap amunt per arreglar la propietat del munt violada.
A continuació es mostra la implementació de Min Heap a Python:
alternativa mylivecricket
Python 3
lexicogràficament
# Python3 implementation of Min Heap> > import> sys> > class> MinHeap:> > > def> __init__(> self> , maxsize):> > self> .maxsize> => maxsize> > self> .size> => 0> > self> .Heap> => [> 0> ]> *> (> self> .maxsize> +> 1> )> > self> .Heap[> 0> ]> => -> 1> *> sys.maxsize> > self> .FRONT> => 1> > > # Function to return the position of> > # parent for the node currently> > # at pos> > def> parent(> self> , pos):> > return> pos> /> /> 2> > > # Function to return the position of> > # the left child for the node currently> > # at pos> > def> leftChild(> self> , pos):> > return> 2> *> pos> > > # Function to return the position of> > # the right child for the node currently> > # at pos> > def> rightChild(> self> , pos):> > return> (> 2> *> pos)> +> 1> > > # Function that returns true if the passed> > # node is a leaf node> > def> isLeaf(> self> , pos):> > return> pos> *> 2> >> self> .size> > > # Function to swap two nodes of the heap> > def> swap(> self> , fpos, spos):> > self> .Heap[fpos],> self> .Heap[spos]> => self> .Heap[spos],> self> .Heap[fpos]> > > # Function to heapify the node at pos> > def> minHeapify(> self> , pos):> > > # If the node is a non-leaf node and greater> > # than any of its child> > if> not> self> .isLeaf(pos):> > if> (> self> .Heap[pos]>> self> .Heap[> self> .leftChild(pos)]> or> > self> .Heap[pos]>> self> .Heap[> self> .rightChild(pos)]):> > > # Swap with the left child and heapify> > # the left child> > if> self> .Heap[> self> .leftChild(pos)] <> self> .Heap[> self> .rightChild(pos)]:> > self> .swap(pos,> self> .leftChild(pos))> > self> .minHeapify(> self> .leftChild(pos))> > > # Swap with the right child and heapify> > # the right child> > else> :> > self> .swap(pos,> self> .rightChild(pos))> > self> .minHeapify(> self> .rightChild(pos))> > > # Function to insert a node into the heap> > def> insert(> self> , element):> > if> self> .size>> => self> .maxsize :> > return> > self> .size> +> => 1> > self> .Heap[> self> .size]> => element> > > current> => self> .size> > > while> self> .Heap[current] <> self> .Heap[> self> .parent(current)]:> > self> .swap(current,> self> .parent(current))> > current> => self> .parent(current)> > > # Function to print the contents of the heap> > def> Print> (> self> ):> > for> i> in> range> (> 1> , (> self> .size> /> /> 2> )> +> 1> ):> > print> (> ' PARENT : '> +> str> (> self> .Heap[i])> +> ' LEFT CHILD : '> +> > str> (> self> .Heap[> 2> *> i])> +> ' RIGHT CHILD : '> +> > str> (> self> .Heap[> 2> *> i> +> 1> ]))> > > # Function to build the min heap using> > # the minHeapify function> > def> minHeap(> self> ):> > > for> pos> in> range> (> self> .size> /> /> 2> ,> 0> ,> -> 1> ):> > self> .minHeapify(pos)> > > # Function to remove and return the minimum> > # element from the heap> > def> remove(> self> ):> > > popped> => self> .Heap[> self> .FRONT]> > self> .Heap[> self> .FRONT]> => self> .Heap[> self> .size]> > self> .size> -> => 1> > self> .minHeapify(> self> .FRONT)> > return> popped> > # Driver Code> if> __name__> => => '__main__'> :> > > print> (> 'The minHeap is '> )> > minHeap> => MinHeap(> 15> )> > minHeap.insert(> 5> )> > minHeap.insert(> 3> )> > minHeap.insert(> 17> )> > minHeap.insert(> 10> )> > minHeap.insert(> 84> )> > minHeap.insert(> 19> )> > minHeap.insert(> 6> )> > minHeap.insert(> 22> )> > minHeap.insert(> 9> )> > minHeap.minHeap()> > > minHeap.> Print> ()> > print> (> 'The Min val is '> +> str> (minHeap.remove()))> |
>
>
java llarg a int
Sortida:
The Min Heap is PARENT : 3 LEFT CHILD : 5 RIGHT CHILD :6 PARENT : 5 LEFT CHILD : 9 RIGHT CHILD :84 PARENT : 6 LEFT CHILD : 19 RIGHT CHILD :17 PARENT : 9 LEFT CHILD : 22 RIGHT CHILD :10 The Min val is 3>
Ús de les funcions de la biblioteca:
Fem servir heapq classe per implementar Heaps en Python. Per defecte, aquesta classe implementa Min Heap.
Python 3
# Python3 program to demonstrate working of heapq> > from> heapq> import> heapify, heappush, heappop> > # Creating empty heap> heap> => []> heapify(heap)> > # Adding items to the heap using heappush function> heappush(heap,> 10> )> heappush(heap,> 30> )> heappush(heap,> 20> )> heappush(heap,> 400> )> > # printing the value of minimum element> print> (> 'Head value of heap : '> +> str> (heap[> 0> ]))> > # printing the elements of the heap> print> (> 'The heap elements : '> )> for> i> in> heap:> > print> (i, end> => ' '> )> print> (> '
'> )> > element> => heappop(heap)> > # printing the elements of the heap> print> (> 'The heap elements : '> )> for> i> in> heap:> > print> (i, end> => ' '> )> |
>
>
Sortida:
nombres a l'alfabet
Head value of heap : 10 The heap elements : 10 30 20 400 The heap elements : 20 30 400>