Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемИгорь Соколинский
1 Алгоритмы на графах Топологическая сортировка поиском в глубину Югов Иван Олегович МОУ Гимназия 10, г. Тверь
2 Домашнее задание Предприятие «Авто-2010» выпускает двигатели известных во всём мире автомобилей. Двигатель состоит ровно из n деталей, пронумерованных от 1 до n, при этом деталь с номером i изготавливается за p i секунд. Специфика предприятия «Авто- 2010» заключается в том, что там одновременно может изготавливаться лишь одна деталь двигателя. Для производства некоторых деталей необходимо иметь предварительно изготовленный набор других деталей. Генеральный директор «Авто-2010» поставил перед предприятием амбициозную задачу за наименьшее время изготовить деталь с номером 1, чтобы представить её на выставке. Требуется написать программу, которая по заданным зависимостям порядка производства между деталями найдёт наименьшее время, за которое можно произвести деталь с номером 1.
3 Домашнее задание Первая строка входного файла details.in содержит число n (1 n ) количество деталей двигателя. Вторая строка содержит n натуральных чисел p 1, p 2, …, p n, определяющих время изготовления каждой детали в секундах. Время для изготовления каждой детали не превосходит 10 9 секунд. Каждая из последующих n строк входного файла описывает характеристики производства деталей. Здесь i -я строка содержит число деталей k i, которые требуются для производства детали с номером i, а также их номера. Сумма всех чисел k i не превосходит Известно, что не существует циклических зависимостей в производстве деталей. В первой строке выходного файла details.out должны содержаться два числа: минимальное время ( в секундах), необходимое для скорейшего производства детали с номером 1 и число k деталей, которые необходимы для этого производства. Во второй строке требуется вывести через пробел k чисел номера деталей в том порядке, в котором их следует производить для скорейшего производства детали с номером 1. Ограничение по времени 2 сек. Ограничение по памяти 64 Мб.
4 Домашнее задание details.indetails.out
5 Топологическая сортировка Для топологической сортировки можно использовать поиск в глубину. Используем поиск в глубину от всех вершин со входящей степенью 0. Будем нумеровать вершины, из которых выходим, в обратном порядке. При этом окажется, что граф отсортирован топологический.
6 Топологическая сортировка
7 Почему так происходит? Не бывает рёбер из вершин, которые были покинуты раньше, в вершины, которые были покинуты позже. Как это доказать? Предположим, что это не так. Пусть имеются вершины A и B, причём в процессе DFS вершина A была покинута раньше, чем вершина B. Пусть теперь существует ребро из A в B.
8 Топологическая сортировка Рассмотрим момент времени, когда мы покидаем A (но ещё не покинули B). Два случая: 1) 1) Покидаем A и ещё не посещали B. 2) 2) Покидаем A и посетили B. Однако: 1) Из чёрной вершины в белую не бывает рёбер. 2) Есть серый путь из B в A, что с ребром из A в B даёт цикл, но граф ациклический.
9 Топологическая сортировка Альтернативное начало фиктивная вершина. 0
10 Топологическая сортировка Если оказалось, что граф содержит циклы: как будет вести себя алгоритм топологической сортировки отсечением вершин? как будет вести себя алгоритм топологической сортировки поиском в глубину?
11 Домашнее задание Какое максимальное количество рёбер может быть в ориентированном ациклическом графе с n вершинами? Может ли быть так, что правильным результатом топологической сортировки графа оказывается любой порядок его вершин? Решить задачу о производстве деталей с помощью DFS Как использовать топологическую сортировку для определения наличия циклов в графе?
12 Источники Курс «Базовые алгоритмы для школьников» (Станкевич А. С., Абакумов К. В., Мухачёва М. А.) «Интернет-университет информационных технологий»
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.