Пример #1
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())
 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)
Пример #3
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)
Пример #4
0
 def test_pq2(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)
     self.assertEqual(pq.del_min(), 0)
     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.assertTrue(pq.is_empty())
     self.assertEqual(pq.size(), 0)
 def test_full_functionality(self):
     """ Tests the bulk functionality of the MinPQ class"""
     pq_test = MinPQ()
     pq_test.insert(6)
     self.assertEqual(2, pq_test.capacity)
     self.assertEqual(pq_test.size(), pq_test.num_items)
     pq_test.insert(7)
     self.assertEqual([6, 7], pq_test.arr)
     pq_test.insert(2)
     self.assertEqual(3, pq_test.size())
     self.assertEqual([2, 7, 6, None], pq_test.arr)
     self.assertFalse(pq_test.is_empty())
     self.assertEqual(2, pq_test.del_min())
     self.assertEqual(6, pq_test.del_min())
     self.assertEqual(7, pq_test.del_min())
     self.assertTrue(pq_test.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())
Пример #7
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)
Пример #8
0
def create_huff_tree(list_of_freqs):
    """ Create a Huffman Tree from list of character frequencies
        Args:
            list_of_freqs(list): list with length of 256 characters
        Returns:
            MinPQ: the root node of the Min Priority Queue constructed from
                   the Huffman Nodes
    """

    priority_queue_list = []
    for each in range(len(list_of_freqs)):
        if list_of_freqs[each] > 0:
            char = chr(each)
            freq = list_of_freqs[each]
            node = HuffmanNode(freq, char)
            priority_queue_list.append(node)

    priority_queue = MinPQ(priority_queue_list)

    if priority_queue.size() == 0:
        return None

    while priority_queue.size() > 1:
        # Retrieves the two smallest occurring Nodes from the queue
        node_1 = priority_queue.del_min()
        node_2 = priority_queue.del_min()

        # Determine the representation of the min chr representation
        min_chr = min(node_1.char, node_2.char)

        # Sum the different frequencies, create new Node, and add to queue
        sum_freq = node_1.freq + node_2.freq
        new_node = HuffmanNode(sum_freq, min_chr, node_1, node_2)
        priority_queue.insert(new_node)

    return priority_queue.del_min()
Пример #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())
Пример #10
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()
Пример #11
0
 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)
Пример #12
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())