Advertisement
DonCoutinho

forewaldinHo

Oct 22nd, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.94 KB | None | 0 0
  1. class FibonacciHeap(BinomialHeap): #we inherit all methods from BinomialHeap.
  2.     #Overwrite those you want to change, add new methods, do whatever you like :)
  3.     def delete(self, node): #deletes a node from the heap
  4.         if self._minTree == node:
  5.             self._deleteMin()
  6.         else:
  7.             y = node.Parent
  8.             x= node
  9.             for child in node.Childlist:
  10.                 child._Parent = None
  11.                 child.Marked = False
  12.             self._listOfTrees.extend(node.Childlist) # Tested( takes the children up)
  13.             y._childlist.remove(node)
  14.            
  15.             while (y != None):
  16.                
  17.                 if y.Parent == None:
  18.                     break
  19.                 if (not y.Marked):
  20.                     y.Marked = True
  21.                     break
  22.                 else:
  23.                     x = y
  24.                     y = x.Parent
  25.                     #self._listOfTrees.extend(node)
  26.                     self._addTree(x)
  27.                     x.Marked = False
  28.                     y._childlist.remove(x)
  29.                      
  30.    
  31.     def decreaseKey(self, node, delta):
  32.         y = node.Parent
  33.         x = node
  34.         y._childlist.remove(node)
  35.         #self._listOfTrees.extend(node)
  36.         self._addTree(node)
  37.         node.Marked = False
  38.         node._Parent = None
  39.         node.Key= node.Key - delta
  40.         self._updateMinPtrWithNewNode(node)
  41.         while(y != None):
  42.             #Rank implicit
  43.             if y.Parent == None:
  44.                 break
  45.             if not y.Marked:
  46.                 y.Marked = True
  47.                 break
  48.             else:
  49.                 x = y
  50.                 y = x.Parent
  51.                 #self._listOfTrees.extend(node)
  52.                 self._addTree(x)
  53.                 x.Marked = False
  54.                 y._childlist.remove(x)
  55.                
  56.                
  57.    
  58.     def merge(self, other): #merges another Fibonacci Heap into this one
  59.         self._listOfTrees.extend(other._listOfTrees)#Extend
  60.         self._updateMinPtrWithNewNode(other._minTree)#Update minTree
  61.        
  62.          
  63.    
  64.     def insert(self, key, value): #inserts a new node with given key
  65.         #and value into the heap
  66.         node = HeapNode(key,value)
  67.         self._addTree(node)
  68.         return node
  69.    
  70.     def deleteMin(self): #removes and returns key and value of a node
  71.         #with minimal key
  72.         node = self._minTree
  73.         for child in node.Childlist:
  74.             child._Parent = None
  75.             child.Marked = False
  76.         self._listOfTrees.extend(node.Childlist)
  77.         self._listOfTrees.remove(node)
  78.         self._minTree = None # if its emptynow
  79.         if(len(self._listOfTrees)>0): # Update MinTree Pointer
  80.             self._minTree = self._listOfTrees[0]
  81.             for potential in self._listOfTrees:
  82.                  self._updateMinPtrWithNewNode(potential)
  83.         self._tidyUp() #tidy up via bucketsort
  84.         return node.Key, node.Value
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement