def test_pq1(self): pq = MinPQ() self.assertTrue(pq.is_empty()) for i in reversed(range(5)): print("pq.insert(", i, ")") pq.insert(i) self.assertEqual(pq.size(), 5) self.assertFalse(pq.is_empty()) self.assertEqual(pq.min(), 0)
def test_pq2(self): pq = MinPQ() pq2 = MinPQ() self.assertEqual(pq2 == pq, True) pq.insert(0) pq.insert(0) pq.insert(1) self.assertEqual(pq.min(), 0) self.assertEqual(pq.del_min(), 0) self.assertEqual(pq.del_min(), 0) self.assertEqual(pq.del_min(), 1)
def test_min_pq(self): minq = MinPQ([5, 4, 3, 2, 1, 0]) minq2 = MinPQ() minq2.insert(0) minq2.insert(1) self.assertEqual(minq2.capacity, 2) minq2.insert(2) self.assertEqual(minq2.capacity, 4) minq2.insert(3) minq2.insert(4) minq2.insert(5) self.assertEqual(minq2.min(), 0) minq2.del_min() self.assertEqual(minq2.min(), 1) self.assertEqual(minq2.size(), 5) minq2.del_min() minq2.del_min() self.assertEqual(minq2.capacity, 8) minq2.del_min() self.assertEqual(minq2.capacity, 4) minq2.del_min() minq2.del_min() self.assertRaises(IndexError, minq2.del_min)
def test_pq(self): pq = MinPQ([3, 10, 231, 5]) self.assertEqual(pq.is_empty(), False) self.assertEqual(pq.size(), 4) self.assertEqual(pq.capacity, 4) self.assertEqual(pq.min(), 3) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 5) self.assertEqual(pq.del_min(), 10) self.assertEqual(pq.del_min(), 231) self.assertRaises(IndexError, pq.min) self.assertRaises(IndexError, pq.del_min) self.assertEqual(pq.is_empty(), True) self.assertEqual(pq.num_items, 0)
def test_pq3(self): pq = MinPQ() self.assertTrue(pq.is_empty()) i = 1 print("pq.insert(", i, ")") pq.insert(i) self.assertEqual(pq.min(), 1) i = 5 print("pq.insert(", i, ")") pq.insert(i) self.assertEqual(pq.min(), 1) i = 3 print("pq.insert(", i, ")") pq.insert(i) self.assertEqual(pq.del_min(), 1) i = 4 print("pq.insert(", i, ")") pq.insert(i) self.assertEqual(pq.min(), 3) i = 2 print("pq.insert(", i, ")") pq.insert(i) self.assertEqual(pq.min(), 2) self.assertEqual(pq.del_min(), 2)
def test_2(self): pq = MinPQ([5, 4, 3, 2, 1]) self.assertEqual(pq.size(), 5) self.assertTrue(pq.capacity == 5) self.assertTrue(pq.capacity == pq.num_items) self.assertTrue(pq.arr == [1, 2, 3, 5, 4]) self.assertEqual(pq.min(), 1) self.assertEqual(pq.del_min(), 1) self.assertEqual(pq.del_min(), 2) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 4) self.assertEqual(pq.del_min(), 5) self.assertTrue(pq.capacity == 2) self.assertEqual(pq.size(), 0) self.assertTrue(pq.is_empty())
def test_1(self): pq = MinPQ() pq.insert(5) pq.insert(3) self.assertEqual(pq.capacity, 2) pq.insert(6) self.assertEqual(pq.size(), 3) self.assertTrue(pq.capacity == 4) self.assertEqual(pq.min(), 3) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 5) self.assertEqual(pq.del_min(), 6) self.assertEqual(pq.size(), 0) self.assertTrue(pq.is_empty()) self.assertTrue(pq.capacity == 2)
def test_use_case_one(self): """ Implementation of use case 1 as outlined in lab instructions""" pq_test = MinPQ() pq_test.insert(5) pq_test.insert(3) self.assertTrue(pq_test.capacity == 2) pq_test.insert(6) self.assertEqual(3, pq_test.size()) self.assertEqual(3, pq_test.min()) self.assertEqual(3, pq_test.del_min()) self.assertEqual(5, pq_test.del_min()) self.assertEqual(6, pq_test.del_min()) self.assertEqual(0, pq_test.size()) self.assertTrue(pq_test.is_empty()) self.assertEqual(2, pq_test.capacity)
def test_pq4(self): arr = [5, 2, 3, 4, 1] print(arr) pq = MinPQ(arr) print("pq.heapify(",arr,")") self.assertEqual(pq.size(), 5) self.assertEqual(pq.capacity, 5) self.assertFalse(pq.is_empty()) self.assertEqual(pq.min(), 1) self.assertEqual(pq.del_min(), 1) self.assertEqual(pq.del_min(), 2) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 4) self.assertEqual(pq.del_min(), 5) self.assertTrue(pq.is_empty())
def test_use_case_two(self): """ Implementation of use case 2 as outlined in lab instructions""" pq_test = MinPQ([5, 4, 3, 2, 1]) self.assertEqual(5, pq_test.size()) self.assertEqual(5, pq_test.capacity) self.assertEqual(pq_test.num_items, pq_test.capacity) self.assertTrue(pq_test.arr == [1, 2, 3, 5, 4]) self.assertEqual(1, pq_test.min()) self.assertEqual(1, pq_test.del_min()) self.assertEqual(2, pq_test.del_min()) self.assertFalse(pq_test.is_empty()) self.assertEqual(3, pq_test.del_min()) self.assertEqual(4, pq_test.del_min()) self.assertEqual(5, pq_test.del_min()) self.assertEqual(2, pq_test.capacity) self.assertEqual(0, pq_test.size()) self.assertTrue(pq_test.is_empty())
def create_huff_tree(list_of_freqs): """returns the root node of a Huffman Tree """ huff_tree = [] for idx in range(len(list_of_freqs)): if list_of_freqs[idx] != 0: huff_tree.append(HuffmanNode(list_of_freqs[idx], chr(idx))) huff_arr = MinPQ() huff_arr.heapify(huff_tree) while huff_arr.num_items > 1: node1 = huff_arr.del_min() node2 = huff_arr.del_min() freq = node1.freq + node2.freq char = min(node1.char, node2.char) new_huff_node = HuffmanNode(freq, char) new_huff_node.left = node1 new_huff_node.right = node2 huff_arr.insert(new_huff_node) return huff_arr.min()
def create_huff_tree(list_of_freqs): """Creates a huffman tree given a list of character frequencies. Arguments: list_of_freqs (list): List of character frequencies from cnt_freq() Returns: The root node of the huffman tree created from the list of frequencies """ pq_arr = [] for char, freq in enumerate(list_of_freqs): if freq > 0: pq_arr.append(HuffmanNode(chr(char), freq, None, None)) min_pq = MinPQ(pq_arr) while min_pq.size() > 1: left = min_pq.del_min() right = min_pq.del_min() min_char = min(left.char, right.char) parent_node = HuffmanNode(min_char, left.freq + right.freq, left, right) min_pq.insert(parent_node) return min_pq.min()
class MinPQTests(unittest.TestCase): def setUp(self): self.pq1 = MinPQ() self.pq2 = MinPQ() def test_eq_repr(self): self.assertEqual(repr(self.pq1), 'MinPQ([None, None])') self.assertEqual(self.pq1, self.pq2) self.assertEqual(self.pq1.size(), 0) self.assertEqual(self.pq2.size(), 0) self.pq1.insert(0) self.pq1.insert(4) self.pq1.insert(3) self.pq2.insert(4) self.pq2.insert(3) self.pq2.insert(0) self.assertEqual(repr(self.pq1), 'MinPQ([0, 4, 3, None])') self.assertEqual(self.pq1.size(), 3) self.assertEqual(self.pq1.min(), 0) self.assertEqual(self.pq1, self.pq2) def test_heapify(self): pq = MinPQ([9, 6, 5, 2, 3]) self.assertEqual(pq.arr, [2, 3, 5, 6, 9]) pq = MinPQ([6, 3, 7, 2, 8, 1]) self.assertEqual(pq.arr, [1, 2, 6, 3, 8, 7]) pq = MinPQ([1, 3, 6, 8]) self.assertEqual(pq.arr, [1, 3, 6, 8]) def test_insert_del_size(self): self.assertRaises(IndexError, self.pq1.del_min) self.pq1.insert(1) self.assertEqual(self.pq1.size(), 1) self.assertEqual(self.pq1.arr, [1, None]) self.pq1.insert(6) self.assertEqual(self.pq1.size(), 2) self.assertEqual(self.pq1.arr, [1, 6]) self.pq1.insert(5) self.assertEqual(self.pq1.size(), 3) self.assertEqual(self.pq1.arr, [1, 6, 5, None]) self.assertEqual(self.pq1.del_min(), 1) self.assertEqual(self.pq1.arr, [5, 6, None, None]) self.pq1.insert(1) self.assertEqual(self.pq1.arr, [1, 6, 5, None]) def test_1(self): pq = MinPQ() pq.insert(5) pq.insert(3) self.assertEqual(pq.capacity, 2) pq.insert(6) self.assertEqual(pq.size(), 3) self.assertTrue(pq.capacity == 4) self.assertEqual(pq.min(), 3) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 5) self.assertEqual(pq.del_min(), 6) self.assertEqual(pq.size(), 0) self.assertTrue(pq.is_empty()) self.assertTrue(pq.capacity == 2) def test_2(self): pq = MinPQ([5, 4, 3, 2, 1]) self.assertEqual(pq.size(), 5) self.assertTrue(pq.capacity == 5) self.assertTrue(pq.capacity == pq.num_items) self.assertTrue(pq.arr == [1, 2, 3, 5, 4]) self.assertEqual(pq.min(), 1) self.assertEqual(pq.del_min(), 1) self.assertEqual(pq.del_min(), 2) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 4) self.assertEqual(pq.del_min(), 5) self.assertTrue(pq.capacity == 2) self.assertEqual(pq.size(), 0) self.assertTrue(pq.is_empty())