Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кратч пути1 .doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2.98 Mб
Скачать

Лекция 1. Введение

А зачем мне все это нужно? (Из частной беседы)

Действительно, зачем программисту теория графов?

Во-первых, графы могут рассматриваться как модели самих программ, данных и процессов. Э. Дейкстра высказал однажды такую мысль: при грамотном программировании на тысячу строк программного текста нужно написать в десять раз больше рассуждений и доказательств, гарантирующих применимость программы.

Во-вторых, графы служат удобной структурой данных для представления объектов обработки информации. Расширение традиционного круга задач, решаемых на ЭВМ (перевод текста, распознавание речи, составление расписаний, игровые программы, экспертные и информационные системы и т.д.), за последние несколько десятков лет превратили комбинаторику и теорию графов в основной инструмент решения огромного числа задач.

В этой работе будут рассмотрены основные методы конструирования алгоритмов на графах, в особенности, методы систематического обхода графа. Также будут рассмотрены несколько задач, являющихся модельными для большого класса задач.

Для них будут даны: алгоритм решения + анализ его вычислительной сложности. Алгоритмы представляют собой сжатые варианты программ, написанных на языке ПАСКАЛЬ.

ВЫЧИСЛИТЕЛЬНАЯ СЛОЖНОСТЬ равна числу элементарных шагов, выполняемых алгоритмом в самом плохом случае, и зависит от размерности входных данных.

Объясним более точно, что подразумевается под «элементарным шагом».

Допустим, что транслятор типичной ЭВМ переводит программу в машинный язык, имеющий арифметические операции, условные переходы, операции ввода-вывода, команды переноса из памяти в буфер и т.д.. Выполнение любой такой операции будем считать ЭЛЕМЕНТАРНЫМ ШАГОМ.

Очевидно, что сложность алгоритма будет зависеть от конкретного транслятора. Однако нас будет интересовать не абсолютная сложность, а с точностью до умножения на произвольную постоянную. Другими словами, нас интересует, как быстро растет сложность при неограниченном увеличении размерности входных данных. Такая сложность называется АСИМПТОТИЧЕСКОЙ и не зависит от способа трансляции.

Будем использовать следующие обозначения.

Пусть f(n) и g(n) — неотрицательные функции, n — размерность задачи, C>0 — некоторая постоянная. Тогда f(n) имеет порядок О(g(n)), если f(n)Cg(n) для всех n, больших некоторого номера. Читается это так: «f(n) порядка не более, чем g(n)». Определенная таким образом сложность иногда называется ВРЕМЕННОЙ, в отличие от сложности по памяти.

Лекция 2. Графы и деревья

И молвил Морж: «Пришла пора Подумать о делах О башмаках и сургуче, Капусте, королях…» Льюис Кэррол «Алиса в Зазеркалье».

Этот рассказ о графах и деревьях будет не менее краток, чем тот, который услышали устрицы о королях и капусте.

Здесь будут даны лишь основные определения теории графов. Желающих ознакомиться с графами более подробно отошлем к книге О. Оре «Графы и их применение» или к любом учебнику по дискретной математике. Итак, нанесем на плоскость несколько точек и некоторые из них соединим попарно:

Рис. 1

У нас получился ГРАФ. Точки изображают вершины,а соединяющие их линии соответствуют ребрам. Дадим имена вершинам и запишем математическое определение графа.

НЕОРИЕНТИРОВАННЫМ ГРАФОМ будем называть такую произвольную пару G=<V, E>, что E Í {(u-v): u, v V и u v}.

V — множество вершин, Е — множество ребер графа G. Наш рисунок — это изображение графа на плоскости.

Если граф на плоскости можно изобразить так, чтобы его ребра пересекались только в вершинах, он называется ПЛАНАРНЫМ или ПЛОСКИМ.

Если ребро е графа G соединяет две вершины u и v, то будем говорить, что u и v смежны между собой.

СТЕПЕНЬ ВЕРШИНЫ определим как число ребер, смежных ей.

Вершину нулевой степени будем называть ИЗОЛИРОВАННОЙ (V5 на рис. 1).

?Bопрос 1. Чему равна степень вершины V3 на рис. 1?

ПУТЕМ в графе G=<V, E> назовем последовательность вершин V1, V2, …, Vk такую, что k 0 и любые две соседние вершины соединены ребром. Для неориентированных графов вместо термина «путь» часто используют термин «ЦЕПЬ». Вершины V0 и Vk будем называть НАЧАЛО и КОНЕЦ пути, k-длиной пути.

Путь, начало и конец которого совпадают, назовем ЦИКЛОМ.

Если все ребра пути (цикла) различны, будем говорить о ПРОСТОМ ПУТИ (ЦИКЛЕ).

Если все вершины V1 … Vk различны, будем говорить об ЭЛЕМЕНТАРНОМ ПУТИ.

Если вершины цикла, кроме V1=Vk, различны, получим ЭЛЕМЕНТАРНЫЙ ЦИКЛ.

?Вопрос 2. Перечислите все элементарные циклы графа G на рис. 1.

ПОДГРАФОМ G' графа G будем называть такой произвольный граф G'=<V', E'>, что V' Í V и E' Í E.

Если для любой пары вершин существует путь, их соединяющий, граф СВЯЗНЫЙ.

У НЕСВЯЗНОГО графа не все вершины можно соединить путем с фиксированной вершиной А. Те вершины, которые можно соединить путем с А, и смежные им ребра образуют СВЯЗНУЮ КОМПОНЕНТУ вершины А. Граф на рис. 1 двусвязен.

?Вопрос 3. Перечислите элементы, входяшие в компоненты связности графа G (рис. 1).

ДЕРЕВОМ называется связный граф, не содержащий циклов.

Рис. 2

?Вопрос 4. Сколько ребер у дерева с 9 вершинами?

Ответы.

Ответ 1. 4.

Ответ 2. (V2-V4-V3-V2), (V2-V1-V4-V3-V2), (V2-V1-V3-V2), (V4-V3-V1-V4), (V2-V4-V1-V3-V2), (V2-V4-V1-V2), (V1-V2-V4-V3-V1).

Ответ 3. 1 компонента = вершины {V1, V2, V3, V4, V6} и соединяющие их ребра. 2 компонента = {V5}.

Ответ 4. Дерево с 2-мя вершинами имеет одно ребро. Всякий раз, присоединяя к дереву следующую вершину, присоединяем одно ребро. Для дерева m = n-1. Для n=9: m=8.