![](/user_photo/2706_HbeT2.jpg)
- •1.Рекурсия: прямая и косвенная.
- •2. Объект. Способы описания. Инкапсуляция. Полиморфизм. Наследование.
- •1.Процедуры и функции.
- •2. Способы представления графов.
- •1.Структура Unit-a.
- •2.Введение в Delphi. Главное окно: пиктографические кнопки, палитра компонентов. Окна: формы, инспектора объектов, кода программы. Основы визуального программирования.
- •1.Организация библиотек. Стандартные библиотечные модули и модули пользователя.
- •1.Файлы в Паскале: текстовые файлы, типизированные файлы, нетипизированные файлы, их назначение и использование.
- •2. Построение остовного дерева поиском в глубину (нерекурсивный вариант).
- •1.Создание удобного пользовательского интерфейса: системы меню, окна для ввода, корректировки, просмотра информации. Модуль Crt.
- •2.Сортировка подсчетом
- •1.Стандартные процедуры и функции Unit Graph. Методы создания анимации.
- •2.Основы визуального программирования. Пустая форма и ее модификация. Компоненты страницы Standard. Размещение нового компонента.
- •1.Сортировка обменом
- •2.Объект. Конструктор и деструктор. Виртуальные функции.
- •1.Переменные действительного типа, их объявление и использование.
- •2. Сортировка выбором
- •1.Статическое и динамическое распределение памяти. Понятие указателя.
- •2.Процедуры и функции модуля graph.
- •1.Доступ к системным ресурсам. Определение переменной как absolute.
- •2.Процедуры и функции модуля crt, их использование.
- •1.Динамические структуры данных и их организация с помощью указателей.
- •2.Файлы без типа, их применение.
- •1.Введение в комбинаторику. Генерация k–элементного подмножества данного множества. Размещения. Сочетания.
- •2. Законы алгебры логики. Таблицы истинности.?????
- •1.Генерация всех перестановок n–элементного множества в антилексикографическом порядке.
- •2. Создание и обработка типизированных файлов.?????
- •1.Алгоритм генерирования перестановок с минимальным числом транспозиций.
- •2. Объявление массивов????
- •1.Введение в теорию графов. Способы представления графов: матрицы смежности и инцидентности, списки инцидентностей.
- •2.Функции библиотеки dos. Прерывания. Обработка прерываний.?????
- •1.Связные компоненты графа. Деревья. Бинарное дерево как связный граф без циклов.????
- •2. Сортировка вставками
- •1.Поиск в глубину в графе
- •2. Итерационные циклы
- •Цикл с предусловием. Оператор while ... Do.
- •Цикл с постусловием. Оператор repeat... Until.
- •Обозначение циклов на блок-схемах согласно госТу.
- •1.Поиск в ширину в графе
- •2. Оператор выбора case
- •1.Эйлеровы пути в графе.
- •2. Ввод-вывод с помощью текстовых файлов.
- •1.Алгоритмы с возвратом, их реализация с помощью рекурсий и с использованием стека. Гамильтоновы циклы.
- •2. Объект. Инициализация и разрушение объекта.
- •1.Кратчайшие пути. Алгоритмы Дейкстры, Флойда.
- •2.Процедурные типы. Передача функций как параметров.
- •1.Передача параметров вызываемым программам.?????
- •2. Объект. Свойства объектов.
- •1.Очереди и операции над ними.
- •2. Сортировка слиянием
- •1.Структурированные типы данных: массивы, символьные переменные и строки, множества.
- •1. Массивы.
- •2. Строковый тип данных.
- •3. Множества.
- •4. Записи.
- •2. Условный оператор.
- •1.Создание и обработка одномерных динамических массивов.
- •2. Операторы цикла.
- •1.Стеки и операции над ними.
- •2. Поразрядная сортировка
- •1.Процедуры и функции.
- •2. Бинарные деревья, их создание. Способы обхода дерева.
- •1.Односвязные линейные списки и операции над ними.
- •2. Записи. Организация, размещение. Записи с вариантами.??????
- •1.Двухсвязные линейные списки и кольца, операции над ними.
- •2. Затем создаём два указателя:
- •1.Обход списка в прямом направлении и его вывод на экран монитора:
- •2.Обход списка в обратном направлении и его вывод на экран монитора:
- •2. Сортировка и поиск информации. Методы внутренней сортировки.
1.Кратчайшие пути. Алгоритмы Дейкстры, Флойда.
Алгоритм поиска кратчайших расстояний в графе
Графы широко используются как в самой математике, так и в ее приложениях. Они применяются при построении различных математических моделей: линий электропередачи, сетей автодорог, линий воздушных сообщений и пр.
Требуется посетить все вершины графа и вернуться в исходную вершину, минимизировав затраты на проезд (или минимизировав время).
Исходные данные – это граф, дугам которого приписаны положительные числа – затраты на проезд или время, необходимое для продвижения из одной вершины в другую. В общем случае граф является ориентированным, и каждые две вершины соединяют две дуги – туда и обратно.
Алгори́тм Де́йкстры
Это алгоритм на графах, изобретенный Э. Дейкстрой. Находит кратчайшее расстояние от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса. Алгоритм широко применяется в программировании и технологиях, например, его использует протокол OSPF для устранения кольцевых маршрутов.
Рассмотрим выполнение алгоритма на примере графа, показанного на рисунке. Пусть требуется найти расстояния от 1-й вершины до всех остальных.
Кружками обозначены вершины, линиями — пути между ними (ребра графа). В кружках обозначены номера вершин, над ребрами обозначена их «цена» — длина пути. Рядом с каждой вершиной красным обозначена метка — длина кратчайшего пути в эту вершину из вершины 1
Первый шаг. Рассмотрим шаг алгоритма Дейкстры для нашего примера. Минимальную метку имеет вершина 1. Её соседями являются вершины 2, 3 и 6.
Первый по очереди сосед вершины 1 — вершина 2, потому что длина пути до неё минимальна. Длина пути в неё через вершину 1 равна кратчайшему расстоянию до вершины 1 + длина ребра, идущего из 1 в 2, то есть 0 + 7 = 7. Это меньше текущей метки вершины 2, поэтому новая метка 2-й вершины равна 7.
Аналогичную операцию проделываем с двумя другими соседями 1-й вершины — 3-й и 6-й.
Все соседи вершины 1 проверены. Текущее минимальное расстояние до вершины 1 считается окончательным и пересмотру не подлежит (то, что это действительно так, впервые доказал Дейкстра). Вычеркнем её из графа, чтобы отметить, что эта вершина посещена
Второй шаг. Шаг алгоритма повторяется. Снова находим «ближайшую» из не посещенных вершин. Это вершина 2 с меткой 7.
Снова пытаемся уменьшить метки соседей выбранной вершины, пытаясь пройти в них через 2-ю. Соседями вершины 2 являются 1, 3, 4.
Первый (по порядку) сосед вершины 2 — вершина 1. Но она уже посещена, поэтому с 1-й вершиной ничего не делаем.
Следующий сосед вершины 2 — вершина 3. Если идти в неё через 2, то длина такого пути будет = 7 + 10 = 17. Но текущая метка третьей вершины равна 9<17, поэтому метка не меняется.
Ещё
один сосед вершины 2 — вершина 4. Если
идти в неё через 2-ю, то длина такого
пути будет = кратчайшее расстояние до
2 + расстояние между вершинами 2 и 4 = 7 +
15 = 22. Поскольку 22<
,
устанавливаем метку вершины 4 равной
22.
Все соседи вершины 2 просмотрены, замораживаем расстояние до неё и помечаем её как посещенную.
Третий шаг. Повторяем шаг алгоритма, выбрав вершину 3. После её «обработки» получим такие результаты:
Дальнейшие шаги. Повторяем шаг алгоритма для оставшихся вершин (Это будут по порядку 6, 4 и 5).
Алгоритм Флойда
Дан ориентированный граф G=<V,E> с матрицей весов А(Аггау[1 ..N,1 ..N] Of Integer). В результате должна быть сформирована матрица D кратчайших расстояний между всеми парами вершин графа и кратчайшие пути.
Идея алгоритма. Обозначим через Dm[i,j] оценку кратчайшего пути из £ в у с промежуточными вершинами из множества [l..m].
Тогда имеем: D0[I,j]:=A[I,j] и D(m+1)=Min{Dm[I,j],Dm[I,m+1]+Dm[m+1,j]} Второе равенство требует пояснения. Пусть мы находим кратчайший путь из г в у с промежуточными вершинами из множества [1..(m+1)]. Если этот путь не содержит вершину (m+1),то D(m+1)[I,j]=Dm[I,j] Если же он содержит эту вершину, то его можно разделить на две части: от i до (m+1) и от (m+1) до у.
Время работы алгоритма t≈O(N3)
Procedure Dist/ {*Ar D - глобальные структуры данных. *}
Var
m,i,j :Integer;
Begin
For i:=1 To N Do
For j:=1 To N Do D[i,j] :=A[i,j] ;
For i:=2 To N Do D[i,i] :=0;
For m:=l To N Do
For i:=2 To N Do
For j:=l To N Do D[i,j] :=Min{D[i,j]
D[i,m]+D[m,j]};
End;