示例#1
0
def k_largest(arr, k):
    h = MaxHeap()
    for item in arr:
        h.insert(item)
    for i in range(k):
        largest = h.extract()
        print(largest)
    return
示例#2
0
class PriorityQueue(object):
    def __init__(self, maxsize=None):
        self.maxsize = maxsize
        self._maxheap = MaxHeap(maxsize)

    def push(self, priority, value):
        entry = (priority, value)
        self._maxheap.add(entry)

    def pop(self, with_priority=False):
        entry = self._maxheap.extract()
        if with_priority:
            return entry
        else:
            return entry[1]

    def is_empty(self):
        return len(self._maxheap) == 0
示例#3
0
from heap import MinHeap, MaxHeap
from math import floor
import sys
#invariant: maintain min heap size = floor(n/2), median is the the max in max heap
with open('Median.txt') as f:
#with open('median10_test.txt') as f:
	a = [int(l) for l in f]
	minHeap = MinHeap([])
	maxHeap = MaxHeap([])
	medians = []
	for i in range(len(a)):
		if minHeap.size() == 0 and maxHeap.size() == 0:
			maxHeap.insert(a[i])
		else:
			if a[i] < maxHeap.top():
				maxHeap.insert(a[i])
			else:
				minHeap.insert(a[i])
			if minHeap.size() > floor((i+1)/2):
				maxHeap.insert(minHeap.extract())
			elif minHeap.size() < floor((i+1)/2):
				minHeap.insert(maxHeap.extract())
		medians.append(maxHeap.top())
	print(sum(medians)%10000)