Пример #1
0
class HeapMemory(LearnerMemory):
    def __init__(self, memory_size=1e+6):
        self.history = BinaryHeap()
        self.memory_size = memory_size

    def append(self, item):
        if len(self.history) == self.memory_size:
            self.history.trim()
        self.history.insert(item, self.history.max_priority())

    def sample(self, sample_size: int):
        return self.history.sample(sample_size)

    def change_priority(self, ind, priority):
        self.history.change_priority(ind, priority)

    def sort(self):
        self.history.sort()

    def __len__(self):
        return len(self.history)
Пример #2
0
	def test_negative_priority(self):
		custom_heap = BinaryHeap()
		custom_heap.insert(wa, -50)
		custom_heap.insert(wb, -100)
		self.heap._check_rep()
		self.assertEqual(custom_heap.array(), [wa, wb])
from binaryheap import BinaryHeap

if __name__ == "__main__":
    heap = BinaryHeap()
    data = [("dog", 1), ("cat", 2), ("bat", 3), ("slug", 1), ("rat", 4),
            ("mule", 3), ("fish", 2), ("goat", 5), ("fly", 3), ("snail", 4),
            ("bird", 6), ("fox", 2)]
    for x in data:
        print("Insert:", x)
        heap.insert(x)
        print(heap)
        print("-" * 50)
    print("-" * 50)
    for i in range(11):
        print("Delete:", heap.peek())
        heap.delete_max()
        print(heap)
        print("-" * 50)
Пример #4
0
class TestBinaryHeap(unittest.TestCase):
	def setUp(self):
		self.heap = BinaryHeap()

	# insert: 
	def test_insert(self):
		self.heap.insert(wa, 100)
		self.heap._check_rep()
		self.assertEqual(self.heap.array(), [wa])

	def test_insert_two(self):
		self.heap.insert(wa, 100)
		self.heap.insert(wb, 50)
		self.heap._check_rep()
		self.assertEqual(self.heap.array(), [wa, wb])

	def test_insert_out_of_order(self):
		self.heap.insert(wa, 50)
		self.heap.insert(wb, 100)
		self.heap._check_rep()
		self.assertEqual(self.heap.array(), [wb, wa])

	def test_negative_priority(self):
		custom_heap = BinaryHeap()
		custom_heap.insert(wa, -50)
		custom_heap.insert(wb, -100)
		self.heap._check_rep()
		self.assertEqual(custom_heap.array(), [wa, wb])

	def test_insert_many(self):
		self.heap.insert(wa, -100)
		self.heap.insert(wb, -50)
		self.heap.insert(wc, 0)
		self.heap.insert(wd, 50)
		self.heap.insert(we, 100)
		self.assertEqual(set(self.heap.array()), {wa, wb, wc, wd, we})
		self.heap._check_rep()

	def test_sort(self):
		self.heap.insert(wa, -100)
		self.heap.insert(wb, 50)
		self.heap.insert(wc, 0)
		self.heap.insert(wd, -50)
		self.heap.insert(we, 100)
		self.heap.sort()
		self.heap._check_rep()
		self.assertEqual(self.heap.array(), [we, wb, wc, wd, wa])

	def test_decrease_key(self):
		self.heap.insert(wa, -100)
		self.heap.insert(wb, 50)
		self.heap.insert(wc, 0)
		self.heap.insert(wd, -50)
		self.heap.insert(we, 100)
		self.heap.sort()
		self.heap._check_rep()
		self.assertEqual(self.heap.array(), [we, wb, wc, wd, wa])

		self.heap.change_priority(wb, -2000)
		self.assertNotEqual(self.heap.array(), [we, wb, wc, wd, wa])
		self.heap._check_rep()

		self.heap.sort()
		self.assertEqual(self.heap.array(), [we, wc, wd, wa, wb])
		self.heap._check_rep()

	def test_increase_key(self):
		self.heap.insert(wa, -100)
		self.heap.insert(wb, 50)
		self.heap.insert(wc, 0)
		self.heap.insert(wd, -50)
		self.heap.insert(we, 100)
		self.heap.sort()
		self.heap._check_rep()
		self.assertEqual(self.heap.array(), [we, wb, wc, wd, wa])

		self.heap.change_priority(wb, 2000)
		self.assertNotEqual(self.heap.array(), [we, wb, wc, wd, wa])
		self.heap._check_rep()
		self.heap.sort()
		self.assertEqual(self.heap.array(), [wb, we, wc, wd, wa])

	def test_max_priority(self):
		self.heap.insert(wa, very_big_number)
		self.assertEqual(self.heap.max_priority(), very_big_number)

	def test_max_priority_multiple(self):
		self.heap.insert(wc, 20)
		self.heap.insert(wa, very_big_number)
		self.heap.insert(we, -500)
		self.assertEqual(self.heap.max_priority(), very_big_number)
from binaryheap import BinaryHeap

if __name__ == "__main__":
    heap = BinaryHeap()
    data = [
        ("dog", 1),
        ("cat", 2),
        ("bat", 3),
        ("slug", 1),
        ("rat", 4),
        ("mule", 3),
        ("fish", 2),
        ("goat", 5),
        ("fly", 3),
        ("snail", 4),
        ("bird", 6),
        ("fox", 2),
    ]
    for x in data:
        print("Insert:", x)
        heap.insert(x)
        print(heap)
        print("-" * 50)
    print("-" * 50)
    for i in range(11):
        print("Delete:", heap.peek())
        heap.delete_max()
        print(heap)
        print("-" * 50)