- •В. Д. Колдаев Лабораторный практикум по курсу « Структуры и алгоритмы обработки данных »
- •Часть 1
- •Лабораторная работа № 1 « Методы сортировки »
- •Теоретические сведения
- •Методы сортировки
- •Сортировка вставкой
- •Сортировка обменом
- •Сортировка Шелла
- •Быстрая сортировка (сортировка Хоара)
- •Сортировка в нелинейных структурах
- •Турнирная сортировка
- •Пирамидальная сортировка
- •Функция сложности алгоритма
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Основные функции системы
- •Варианты заданий
- •Лабораторная работа №2 «Методы поиска».
- •Теоретические сведения
- •Методы поиска
- •Последовательный поиск.
- •Бинарный поиск.
- •Фибоначчиев поиск.
- •Интерполяционный поиск.
- •Поиск по бинарному дереву.
- •Поиск по бору.
- •Поиск хешированием.
- •Алгоритмы поиска словесной информации
- •Алгоритм Бойера - Мура
- •Лабораторное задание
- •Методика выполнения лабораторной работы
- •Варианты заданий
- •Использовать алгоритмы Кнута - Морриса – Пратта, Бойера – Мура, Рабина для поиска текстовой информации. Лабораторная работа № 3 «итеративные и рекурсивные алгоритмы»
- •Теоретические сведения
- •Рекурсивные структуры данных
- •Лабораторное задание
- •Требования к отчету
- •Контрольные вопросы
- •Литература
- •Лабораторная работа № 4 «Алгоритмы построения остовного дерева сети».
- •Теоретические сведения
- •Лабораторное задание
- •Литература
- •Задание : Построить остовное дерево графа методами Крускала и Прима.
- •Решить задачи
- •Лабораторная работа № 5. Алгоритмы нахождения на графах кратчайших путей.
- •Теоретические сведения
- •Метод динамического программирования.
- •Метод Дейкстры
- •Алгоритм Флойда
- •Алгоритм Йена
- •Литература
- •Лабораторное задание.
- •Варианты заданий
- •Задание 2: Найти кратчайший путь между тремя парами вершин методом Дейкстры
- •Решить задачи
- •Составить программу для нахождения кратчайшего пути
- •Лабораторная работа № 6 « Эвристические алгоритмы »
- •Теоретические сведения
- •Волновой алгоритм.
- •Двухлучевой алгоритм.
- •Пример 2. Осуществить трассировку элементов а и в .
- •Четырехлучевой алгоритм.
- •Маршрутный алгоритм.
- •Геометрическая модель задачи о лабиринте
- •Алгоритмы составления расписания.
- •Литература
- •Лабораторное задание.
- •Решить задачи
Сортировка Шелла
В методе Шелла сравниваются не соседние элементы, а элементы, расположенные на расстоянии d(гдеd– шаг между сравниваемыми элементами)d= [n/2]. После каждого просмотра шагdуменьшается вдвое. На последнем просмотре он сокращается доd= 1.
Например, пусть дан список, в котором число элементов чётно:
{40, 11, 83, 57, 32, 21, 75, 64}
Список длины nразбивается наn/2 частей, т.е.d= [n/2] = 4.
-
Исходный массив
40
11
83
57
32
21
75
64
d= 4
32
11
75
57
40
21
83
64
Полученный массив
32
11
75
57
40
21
83
64
Рис. 5. Метод Шелла (d=4 )
-
Исходный массив
32
11
75
57
40
21
83
64
d= 2
32
11
75
40
57
21
75
75
57
57
83
64
Полученный массив
32
11
40
21
75
57
83
64
Рис. 6. Метод Шелла (d=2 )
При первом просмотре сравниваются элементы, отстоящие друг от друга на d= 4 (рис.5), т.е. k1иk5,k2иk6и т.д. Еслиki >ki+d, то происходит обмен между позициями i и (i+d). Перед вторым просмотром выбирается шагd= [d/ 2] = 2 ( рис.6 ). Затем выбираем шагd= [d/ 2] = 1 ( рис.7 ), т.е. имеем аналогию с методом стандартного обмена.
Сложность метода Шелла O(0,3n(log2n)2).
-
Исходный список
32
11
40
21
75
57
83
64
d =1
11
32
32
40
21
40
40
75
57
75
75
83
64
83
Полученный список
11
32
21
40
57
75
64
Рис. 7. Метод Шелла (d=1 )
Быстрая сортировка (сортировка Хоара)
В методе быстрой сортировки фиксируется какой-либо ключ (базовый), относительно которого все элементы с большим весом перебрасываются вправо, а с меньшим – влево. При этом весь список элементов делится относительно базового ключа на две части. Для каждой части процесс повторяется.
Поясним метод на примере.
На рис.8 представлен первый этап быстрой сортировки. В первой строке указана исходная последовательность.
Примем первый элемент последовательности за базовый ключ, выделим его квадратом и обозначим k0= 40. Установим два указателя : i иj, из которых i начинает отсчёт слева (i=1), аj– справа (j=n).
Сравниваем базовый ключ k0и текущий ключkj. Еслиk0<=kj, то устанавливаемj=j-1 и проводим следующее сравнениеk0 иkj. Продолжаем уменьшатьjдо тех пор, пока не достигнем условияk0>kJ. После этого меняем местами ключиk0 иkj(шаг 3 на рис.8 ).
Номер шага |
i j |
Примечание | |||||||
40 |
11 |
83 |
57 |
32 |
21 |
75 |
64 |
Исходный список | |
1 |
|
|
|
|
|
|
|
|
k0<kj |
2 |
|
|
|
|
|
|
|
|
k0<kj |
3 |
|
|
|
|
|
|
|
|
Обмен; k0>kj |
4 |
|
|
|
|
|
|
|
|
ki<k0 |
5 |
|
|
|
|
|
|
|
|
Обмен; ki>k0 |
6 |
|
|
|
|
|
|
|
|
Обмен; k0>kj |
7 |
|
|
|
|
|
|
|
|
Обмен; ki>k0 |
|
21 |
11 |
32 |
57 |
83 |
75 |
64 |
Полученный список |
Рис. 8. Метод Хоара
Теперь начинаем изменять индекс i = i + 1 и сравнивать элементы kiиk0. Продолжаем увеличение i до тех пор, пока не получим условиеki>k0, после чего следует обменkiиk0(см.шаг5). Снова возвращаемся к индексуj, уменьшаем его. Чередуя уменьшениеjи увеличение i, продолжаем этот процесс с обоих концов к середине до тех пор, пока не получим i =j(см.шаг 7).
В отличие от предыдущих рассмотренных сортировок уже на первом этапе имеют место два факта: во-первых, базовый ключ k0 = 40 занял своё постоянное место в сортируемой последовательности; во-вторых, все элементы слева отk0 будут меньше него, а справа- больше него. Таким образом, по окончании первого этапа имеем:
21, 11, 32 40 57, 83, 75, 64
левая часть правая часть
Указанная процедура сортировки применяется независимо к левой и правой частям.
Сложность метода Хоара O(nlog2n).