Esempio n. 1
0
class InsertTests(AbstractHeapTest):
    def test_insert_in_empty_heap(self):
        self.setHeapState([])
        self.heap.insert(1)
        self.assertHeapState([1])

    def test_insert_minimum_element(self):
        self.setHeapState([1, 2, 3, 4, 5, 5])
        self.heap.insert(0)
        self.assertHeapState([0, 2, 1, 4, 5, 5, 3])

    def test_insert_maximum_element(self):
        self.setHeapState([1, 2, 3, 4, 5, 5])
        self.heap.insert(10)
        self.assertHeapState([1, 2, 3, 4, 5, 5, 10])

    def test_insert_middle_element(self):
        self.setHeapState([1, 2, 3, 4, 5, 5])
        self.heap.insert(2)
        self.assertHeapState([1, 2, 2, 4, 5, 5, 3])

    def test_insert_with_random(self):
        for i in range(100):
            self.heap.insert(random.randint(0, 100))
            self.verify_heap()

    def test_insert_with_random_and_priority_function(self):
        self.heap = Heap(prior_func=lambda x: x[1])
        for i in range(100):
            self.heap.insert(('a', random.randint(0, 100)))
            self.verify_heap()
    def test_delete_min(self):
        heap = self.build_basic_heap()

        self.assertEqual(2, heap.delete_min())

        self.assertEqual([0, 5, 7, 12, 23, 34, 88], heap.heap_list)

        heap = Heap()

        self.assertEqual(None, heap.delete_min())

        heap.insert(4)

        self.assertEqual(4, heap.delete_min())
Esempio n. 3
0
def find_tasks_metrics(n: int, tasks_durations: Sequence[int]) -> List[Metric]:
    """
    Возвращает массив, в котором для каждой задачи указан процессор и время,
    когда задача будет им выполнена.

    :param n: количество процессоров
    :param tasks_durations: массив с длительностями задач
    :return: массив из кортежей (a, b) для каждой задачи, где a - номер
        процессора (нумерация с нуля), b - время исполнения (отсчет начинается
        с нуля)
    """
    # В куче хранятся кортежи - время освобождения процессора и его номер
    p = Heap([(0, proc_num) for proc_num in range(n)])
    res = []
    for i in range(len(tasks_durations)):
        time, p_num = p.extract_min()
        res.append((p_num, time))
        p.insert((time + tasks_durations[i], p_num))
    return res
    def build_basic_heap(self):
        heap = Heap()

        heap.insert(23)
        heap.insert(12)
        heap.insert(7)
        heap.insert(5)
        heap.insert(34)
        heap.insert(88)
        heap.insert(2)

        return heap