Upgrade to Pro — share decks privately, control downloads, hide ads and more …

САКОД – 2 курс весна 2021 – 7.1 занятие

САКОД – 2 курс весна 2021 – 7.1 занятие

ТиМПИ

April 06, 2021
Tweet

More Decks by ТиМПИ

Other Decks in Programming

Transcript

  1. 2/15 2/15 Топологическая сортировка: постановка задачи Рис. 1 Ацикличный орграф

    G Рис. 2 Представление графа G с направлением стрелок слева-направо Топологическая сортировка – упорядочивание вершин бесконтурного (ацикличного) ориентированного (направленного) графа согласно частичному порядку, заданному ребрами орграфа на множестве его вершин.
  2. 3/15 3/15 Топологическая сортировка: наивное решение Рис. 3 Визуализация топологической

    сортировки графа G Наивный алгоритм: 1. Проходим по всем вершинам и ищем те, у которых нет входящих вершин. 2. Запоминаем индекс первой совпавшей вершины. 3. Удаляем вершину и смежные ей ребра. 4. Повторяем пока не пройдем все вершины. Рис. 4 Псевдокод алгоритма ind 1 2 3 4 5 6 p(i) 2 1 5 4 6 3
  3. 4/15 4/15 Топологическая сортировка: очередь Алгоритм через очередь: 1. Создаем

    пустую очередь. 2. Проходим по всем вершинам и заносим в очередь индексы вершин (истоков), у которых нет входящих дуг. 3. Достаем элемент из очереди и запоминаем его. 4. Удаляем вершину и смежные ей ребра, при этом проверяем смежные вершины. В случае, если при удалении ребра степень вершины равна 0, то добавляем его в очередь. 5. Повторяем пока не пройдем все вершины из очереди. Рис. 5 Псевдокод алгоритма через очередь
  4. 5/15 5/15 Топологическая сортировка: поиск в глубину 5 1 2

    3 4 6 Рис. 6 Граф G с расстояниями до выхода Рис. 7 Обход в глубину графа G Алгоритм через очередь: 1. Запускаем обход графа в глубину. 2. Помечаем вершины соответственно из времени до выхода. 3. Запоминаем индексы вершин в порядке по убыванию времени выхода. Рис. 8 Псевдокод для сортировки через dfs
  5. 6/15 6/15 Раскраска графа: определения и термины (Правильной) раскраской графа

    G или k-раскраской называется отображение: 𝜌 = 𝑉 → (𝑐1 , . . . , 𝑐𝑘 ); что для любых двух смежных вершин u и v выполняется ) 𝜌(𝑢) ≠ 𝜌(𝑣 . Хроматическим числом графа G называется наименьшее число цветов k в которое можно раскрасить вершины графа. Другими словами, для которого существует k-раскраска. ) 𝜒(𝐺 Задача о нахождении не разрешима за полиномиальное время. ) 𝜒(𝐺 Хроматический многочлен — число способов раскрасить граф G в k цветов. ) 𝑃(𝐺, 𝑘
  6. 8/15 8/15 Раскраска графа: алгоритм Алгоритм раскраски графа: 1. Упорядочиваем

    вершины по невозрастанию степени. 2. Окрашиваем первую неокраженную вершину в цвет сi . 3. Выбрать цвет окраски сi . 4. Идем по упорядоченному списку вершин и проверяем, смежна ли вершина всем окрашенным в цвет сi . 5. Если не смежна ни одной из окрашенных в цвет сi вершинам, то окрашиваем и переходим к п. (4), в противном случае переходим к п. (4). 6. Выбираем другой цвет, т.е. (i++) и переходим к п. (2). 7. Если не осталось не окрашенных вершин, то остановка. Вершина 4 2 1 3 5 Степень 4 3 2 2 1 Цвет Рис. 10 Пример раскраски графа
  7. 9/15 9/15 Эйлеровы циклы: задача о 7 мостах Загадка Как

    пройти по всем мостам, не проходя ни по одному из них дважды? Рис. 11 Мосты о которых говорится в загадке
  8. 10/15 10/15 Эйлеровы циклы: задача о 7 мостах Рис. 12

    Задача о мостах, вид сверху Рис. 13 Задача о мостах, граф
  9. 11/15 11/15 Эйлеровы циклы: определения Эйлеров путь — путь в

    графе, который проходит по каждому ребру, причем ровно один раз. Эйлеров обход — обход графа, посещающий эйлеров путь. Эйлеров цикл — замкнутый эйлеров путь, т.е. выходя из вершины (v), и пройдя по всем ребрам ровно один раз мы вернемся в исходную вершину (v). Эйлеров цикл — это объединение всех простых циклов графа. Граф называется эйлеровым, если он содержит эйлеров цикл. Граф называется полуэйлеровым, если он содержит эйлеров путь, но не содержит эйлеров цикл. Критерий эйлеровости для графа G=(V,E): Критерий полуэйлеровости для графа G=(V,E): существует эйлеров цикл тогда и только тогда (и граф эйлеров), когда: 1. Все вершины имеют четную степень. 2. Все компоненты связности кроме, может быть одной, не содержат ребер. существует эйлеров путь тогда и только тогда, когда: 1. Количество вершин с нечетной степенью меньше или равно двум. 2. Все компоненты связности кроме, может быть одной, не содержат ребер.
  10. 12/15 12/15 Эйлеровы циклы: поиск 1. Поиск путей и циклов:

    исходя из критериев эйлеровости. 2. Алгоритм Флёри: • Начинаем с некоторой вершины v и каждый раз вычеркиваем пройденное ребро. • Не проходим по ребру, если удаление этого ребра приводит к разбиению графа на две связные компоненты (не считая изолированных вершин), т.е. необходимо проверять, является ли ребро мостом или нет. 3. Алгоритм на основе циклов: • создаем массив cycles; • пока есть цикл, проходящий через v, находим его (например обходом в глубину); • добавляем все вершины найденного цикла в массив cycles (сохраняя порядок обхода); • удаляем цикл из графа; • идем по элементам массива cycles; • каждый элемент cycles[i] добавляем к ответу; • из каждого элемента рекурсивно вызываем себя с первого пункта.