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())
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