Ejemplo 1: python heapq
>>> import heapq
>>> heap = []
>>> heapq.heappush(heap, (5, 'write code'))
>>> heapq.heappush(heap, (7, 'release product'))
>>> heapq.heappush(heap, (1, 'write spec'))
>>> heapq.heappush(heap, (3, 'create tests'))
>>> heapq.heappop(heap)#pops smallest
(1, 'write spec')
>>> heapq.nlargest(2,heap)#displays n largest values without popping
[(7, 'release product'),(5, 'write code')]
>>> heapq.nsmallest(2,heap)#displays n smallest values without popping
[(3, 'create tests'),(5, 'write code')]
>>> heap = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
>>> heapq.heapify(heap)#converts a list to heap
>>> heap
[0, 1, 2, 6, 3, 5, 4, 7, 8, 9]
>>> def heapsort(iterable):
... h = []
... for value in iterable:
... heappush(h, value)
... return [heappop(h) for i in range(len(h))]
...
>>> heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Ejemplo 2: código Python para heap usando heapify
#Implementing Heap Using Heapify Method in Python 3
#MaxHeapify,MinHeapify,Ascending_Heapsort,Descending_Heapsort
class heap:
def maxheapify(self,array):
n=len(array)
for i in range(n//2-1,-1,-1):
self._maxheapify(array,n,i)
def _maxheapify(self,array,n,i):
l=2*i+1
r=2*i+2
if l<n and array[l]>array[i]:
largest=l
else:
largest=i
if r<n and array[r]>array[largest]:
largest=r
if (largest!=i):
array[largest],array[i]=array[i],array[largest]
self._maxheapify(array,n,largest)
def minheapify(self,array):
n = len(array)
for i in range(n//2-1,-1,-1):
self._minheapify(array,n,i)
def _minheapify(self,array,n,i):
l=2*i+1
r=2*i+2
if l<n and array[l]<array[i]:
smallest = l
else:
smallest = i
if r < n and array[r]<array[smallest]:
smallest = r
if (smallest != i):
array[smallest], array[i] = array[i], array[smallest]
self._minheapify(array, n, smallest)
def descending_heapsort(self,array):
n = len(array)
for i in range(n // 2 - 1, -1, -1):
self._minheapify(array, n, i)
for i in range(n - 1, 0, -1):
array[0], array[i] = array[i], array[0]
self._minheapify(array, i, 0)
def ascending_heapsort(self,array):
n=len(array)
for i in range(n//2-1,-1,-1):
self._maxheapify(array,n,i)
for i in range(n-1,0,-1):
array[0],array[i]=array[i],array[0]
self._maxheapify(array,i,0)
b=[550,4520,3,2340,12]
a=heap()
a.maxheapify(b)
print('Max Heapify -->',b)
a.minheapify(b)
print('Min Heapify -->',b)
a.ascending_heapsort(b)
print('Ascending Heap Sort -->',b)
a.descending_heapsort(b)
print('Descending Heap Sort -->',b)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)