logo

Tas minimum en Python

UN Min-Tas est un arbre binaire complet dans lequel la valeur de chaque nœud interne est inférieure ou égale aux valeurs des enfants de ce nœud.
Mapper les éléments d'un tas dans un tableau est trivial : si un nœud est stocké à l'index k , alors c'est enfant abandonné est stocké à l'index 2k+1 et son bon enfant à l'index 2k+2 pour Indexation basée sur 0 et pour 1 indexation basée l'enfant de gauche sera à 2k et le bon enfant sera à 2k+1 .

Exemple de tas minimum :



 5 13 /  /  10 15 16 31 / /  /  30 41 51 100 41>

Comment est représenté Min Heap ?
Un Min Heap est un arbre binaire complet. Un tas Min est généralement représenté sous forme de tableau. L'élément racine sera à Arr[0] . Pour tout ième nœud, c'est-à-dire Arr[je] :

    Arr[(i -1) / 2] renvoie son nœud parent. Arr[(2 * i) + 1] renvoie son nœud enfant gauche. Arr[(2 * i) + 2] renvoie son nœud enfant droit.

Opérations sur Min Heap :

    getMin() : Il renvoie l'élément racine de Min Heap. La complexité temporelle de cette opération est O(1) . extractMin() : Supprime l'élément minimum de MinHeap. La complexité temporelle de cette opération est O (Journal n) car cette opération doit conserver la propriété tas (en appelant heapify()) après avoir supprimé la racine. insert() : L'insertion d'une nouvelle clé prend O (Journal n) temps. Nous ajoutons une nouvelle clé à la fin de l'arborescence. Si la nouvelle clé est plus grande que son parent, nous n’avons rien à faire. Sinon, nous devons remonter pour corriger la propriété du tas violée.

Vous trouverez ci-dessous l’implémentation de Min Heap en Python –



services Web Java

Python3






# 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()))>

>

recherche binaire en java
>

Sortir :

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>

Utilisation des fonctions de la bibliothèque :
Nous utilisons tas classe pour implémenter Heaps en Python. Par défaut, Min Heap est implémenté par cette classe.

Python3


bash elif



# 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>=> ' '>)>

>

pages du serveur Java
>

Sortir :

Head value of heap : 10 The heap elements : 10 30 20 400 The heap elements : 20 30 400>