Beispiel #1
0
 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)
Beispiel #2
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)
Beispiel #4
0
 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)
Beispiel #5
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)
Beispiel #6
0
 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())
Beispiel #7
0
 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)
Beispiel #9
0
    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()
Beispiel #12
0
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()
Beispiel #13
0
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())