Алгоритмы и структуры данных
Курс лекций, 27 Октября 2013, автор: пользователь скрыл имя
Описание работы
Алгоритм - это точное предписание, определяющее вычислительный процесс, ведущий от варьируемых начальных данных к искомому результату.
ЭВМ в настоящее время приходится не только считывать и выполнять определенные алгоритмы, но и хранить значительные объемы информации, к которой нужно быстро обращаться. Эта информация в некотором смысле представляет собой абстракцию того или иного фрагмента реального мира и состоит из определенного множества данных, относящихся к какой-либо проблеме.
Работа содержит 1 файл
Kurs_lekc_alg_SD.doc
— 1.57 Мб (Скачать)Здесь построение MST начинается с графа, состоящего только из n вершин графа G и не имеющего ребер. Таким образом, каждая вершина является связанной (сама с собой) компонентой. Это дает n связанных компонентов. В процессе выполнения алгоритма связанные компоненты постепенно объединяются друг с другом, формируя остовное дерево (рис. 59).
При построении постепенно возрастающих связанных компонент поочередно проверяются ребра из множества E в порядке возрастания их длин. Если очередное ребро связывает две вершины из разных компонент, тогда оно добавляется в остовное дерево. Если это ребро связывает две вершины из одной компоненты, то оно отбрасывается, так как его добавление в связанную компоненту может
привести к образованию цикла. Число ребер, необходимое для ос-товного дерева равно n-1. Граф связан, а значит E содержит как минимум такое их количество. Когда остовное дерево будет содержать n-1 ребер, алгоритм завершается:
Создать список ребер L, в неубывающем по длине порядке while число отмеченных ребер < n-1 do begin Удалить w из головы списка L;
if w соединяет две несвязанных компоненты then
отметить
w и добавить к MST
else {w
- внутри компоненты}
не отмечать w {это приведет к циклу в MST}
end;
Сложность алгоритма для графа с n вершинами и m ребрами пропорциональна O(mlog m).
Библиографический список
- *Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. М.: Мир, 1979.
- Ахо А., Хопкрофт Дж., Ульман Дж. Структуры данных и алгоритмы. М.: Вильямс, 2001. 384 с.
3. *Бентли Д. Жемчужины творчества программистов. М.: Радио и
связь, 1990.
4. *Вирт Н. Алгоритмы + структуры данных = программы. М.: Мир,
1985.
5. *Вирт Н. Алгоритмы и структуры данных. М: Мир, 1989. 360 с.
- *Грин Д., Кнут Д. Математические методы анализа алгоритмов. М: Мир, 1987.
- *Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов. М.: Мир, 1981.
8. *Дейкстра Э. Дисциплина программирования. М: Мир, 1978.
9. *Кнут Д. Е. Искусство программирования для ЭВМ: В 3 т. М.:
Мир, 1976.
10. Кнут Д. Е. Искусство программирования: В 3 т. М.: Вильямс,
2000.
- *Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: Построение и анализ. М.: МЦНМО, 2001.
- Лэгсам Й., Огенстайн М. Структуры данных для персональных ЭВМ. М.: Мир, 1989. 586 с.
- *Структуры и алгоритмы обработки данных/ В. А. Матьяш, В. А. Путилов, В. В. Фильчаков, С. В. Щекин. Апатиты: КФ ПетрГУ,
2000. 80 с.
- *Оре О. Графы и их применение. М.: Мир, 1965.
- *Рейнгольд Э., Нивергельт Ю., Део Н. Комбинаторные алгоритмы. Теория и практика. М.: Мир, 1980.
- *Сибуя М., Ямамото Т. Алгоритмы обработки данных. М.: Мир,
1986. 218 с.
- *Успенский В. А., Семенов А. Л. Теория алгоритмов: основные открытия и приложения. М.: Наука, 1987.
- *Харари Ф. Теория графов. М.: Мир, 1973.
Русскоязычные ресурсы Internet
- http://algo.4u.ru/
- http://algolist.manual.ru/
- http://alglib.chat.ru/
- http://algo.do.ru/
- http://hcinsu.chat.ru/
- http://algolist.da.ru/
- http://progstone.narod.ru/
links/wantalgo.html - http://www.sevmashvtuz.edu/
links/algorithms.html
ОГЛАВЛЕНИЕ
Предисловие 3
ВВЕДЕНИЕ 4
Понятия алгоритма и структуры данных 4
Анализ сложности и эффективности алгоритмов и структур данных 7
1. СТРУКТУРЫ ДАННЫХ 11
1.1. Элементарные данные 11
1.1.1. Данные числовых типов 11
- Данные целочисленного типа 11
- Данные вещественного типа 12
- Операции над данными числовых типов 12
- Данные символьного типа 13
- Данные логического типа 1 4
- Данные типа указатель 1 4
1.2. Линейные структуры данных 16
- Массив 16
- Строка 1 7
- Запись 18
- Множество 19
- Таблица 20
- Линейные списки 21
- Линейный однонаправленный список 22
- Линейный двунаправленный список 27
1.2.7. Циклические списки 3 0
- Циклический однонаправленный список 30
- Циклический двунаправленный список 34
1.2.8. Разреженные матрицы 37
- Матрицы с математическим описанием местоположения элементов 37
- Матрицы со случайным расположением элементов 3 8
1.2.9. Стек 41
- Очередь 43
- Дек 46
1.3. Нелинейные структуры данных 49
- Мультисписки 49
- Слоеные списки 50
- Графы 51
- Спецификация 51
- Реализация 52
1.3.4. Деревья 55
- Общие понятия 55
- Обходы деревьев 57
- Спецификация двоичных деревьев 58
- Реализация 59
- Основные операции 61
1.4. Файлы 62
- Организация 6 4
- B-деревья 67
- Представление файлов B-деревьями 67
- Основные операции 69
- Общая оценка B-деревьев 76
2. АЛГОРИТМЫ ОБРАБОТКИ ДАННЫХ 7 8
- NP-сложные и труднорешаемые задачи 78
- Методы разработки алгоритмов 79
- Метод декомпозиции 79
- Динамическое программирование 81
- Поиск с возвратом 82
- Метод ветвей и границ 85
- Метод альфа-бета отсечения 86
- Локальные и глобальные оптимальные решения 8 7
2.3. Алгоритмы поиска 8 9
2.3.1. Поиск в линейных структурах 8 9
- Последовательный (линейный) поиск 89
- Бинарный поиск 91
2.3.2. Хеширование данных 92
- Функция хеширования 92
- Открытое хеширование 95
- Закрытое хеширование 98
- Реструктуризация хеш-таблиц 103
2.3.4. Поиск по вторичным ключам 104
- Инвертированные индексы 104
- Битовые карты 105
2.3.4. Использование деревьев в задачах поиска 106
- Упорядоченные деревья поиска 106
- Случайные деревья поиска 111
- Оптимальные деревья поиска 112
- Сбалансированные по высоте деревья поиска 113
2.3.5. Поиск в тексте 118
- Прямой поиск 118
- Алгоритм Кнута, Мориса и Пратта 120
- Алгоритм Боуера и Мура 123
2.4. Алгоритмы кодирования (сжатия) данных 12 5
- Основные виды сжатия 125
- Метод Хаффмана. Оптимальные префиксные коды 126
- Кодовые деревья 127
2.5. Алгоритмы сортировки 13 0
- Основные виды сортировки 130
- Алгоритмы внутренней сортировки 131
- Сортировка подсчетом 131
- Сортировка простым включением 132
- Сортировка методом Шелла 134
- Сортировка простым извлечением 136
- Древесная сортировка 137
- Сортировка методом пузырька 140
- Быстрая сортировка (Хоара) 141
- Сортировка слиянием 145
- Сортировка распределением 147
2.5.2.10. Сравнение алгоритмов внутренней сортировки... 150
2.5.3. Алгоритмы внешней сортировки 15 2
2.6. Алгоритмы на графах 153
- Алгоритм определения циклов 153
- Алгоритмы обхода графа 1 54
- Поиск в глубину 155
- Поиск в ширину (волновой алгоритм) 156
2.6.3. Нахождение кратчайшего пути 1 58
- Алгоритм Дейкстры 158
- Алгоритм Флойда 159
- Переборные алгоритмы 161
2.6.4. Нахождение минимального остовного дерева 164
- Алгоритм Прима 164
- Алгоритм Крускала 165
Библиографический список 167
Приложение. Русскоязычные ресурсы Internet 168
Рис. 15. Обходы деревьев
Рис. 15. Обходы деревьев
Рис. 17. Двоичное дерево и его организация