
- •Организация и описание данных.
- •Тема 4. Алгоритмы обработки текстовой информации 14
- •Тема 3. Методы и алгоритмы сортировки массивов и последовательностей данных.
- •Тема 4. Алгоритмы обработки текстовой информации
- •Тема 2. Определение, описание и представление в эвм основных структур данных
- •2.1. Массивы
- •2.2. Множества
- •2.3. Записи
- •2.4. Последовательности
- •2.5. Данные с динамической структурой
- •2.5.1. Рекурсивные типы данных
- •Тема 3. Методы и алгоритмы сортировки массивов
- •3.1. Сортировка массивов
- •3.1.1. Сортировка с помощью прямого включения (мпв)
- •3.1.2. Сортировка с помощью прямого выбора
- •3.1.3.Сортировка с помощью прямого обмена (Пузырьковая сортировка)
- •3.1.4. Шейкерная сортировка
- •3.1.5. Сортировка методом Шелла
- •3.1.6. Сортировка с помощью дерева
- •44 55 12 42 94 18 06 67
- •3.1.7. Сортировка с помощью разделения(метод Хоара)
- •3.1.8.Сортировка вычислением адреса
- •3.1.9. Поразрядная сортировка
- •3.1.10.Сортировка поразрядным группированием
- •3.2. Сортировка последовательностей
- •3.2.1. Трехленточная сортировка
- •3.2.2. Сортировка естественным слиянием
- •3.2.3. Многопутевая сортировка
- •3.2.4. Многофазная сортировка
- •Тема 4. Алгоритмы обработки текстовой информации
- •4.1. Алгоритм Кнута, Мориса м Пратта ( кмп - алгоритм )
- •4.2. Алгоритм Боуера и Мура ( бм - алгоритм )
- •4.3. Комбинированный алгоритм
- •Указания к выполнению контрольных работ
- •Общие требования по оформлению контрольных работ
- •Задания Задание 1. Сортировка массивов
- •Задание 2. Сортировка последовательностей
- •Задание 3. Обработка текстовой информации
3.1.6. Сортировка с помощью дерева
Идея сортировки состоит в следующем: пусть задан массив состоящий из N=8 элементов
44 55 12 42 94 18 06 67
I этап. - сделаем N/2 сравнений и определим в каждой паре наименьшее значение. Затем сделаем N/4 сравнений и определим наименьший из пары уже выбранных меньших и т.д.
06
/ \
12 06
/ \ / \
44 12 18 06
/ \ / \ / \ / \
44 55 12 42 94 18 06 67
II этап. - запоминаем наименьший элемент и спускаемся вдоль его и исключаем его из дерева, путем замены его на пустой элемент.
__
/ \
12 __
/ \ / \
44 12 18 __
/ \ / \ / \ / \
44 55 12 42 94 18 __ 67
III этап. - заменяем пустой элемент на элемент из соседней ветви в промежуточных вершинах.
12
/ \
12 18
/ \ / \
44 2 18 67
/ \ / \ / \ / \
44 55 12 42 94 18 __ 67
Затем повторяются этапы I и II до тех пор пока все дерево не будет пустым.
Количество сравнений: C = logn
3.1.7. Сортировка с помощью разделения(метод Хоара)
Суть метода состоит в том, что выбирается некоторый элемент - барьер просмотра; затем просматривается массив слева до обнаружения элемента, большего чем барьер, и справа от барьера до обнаружения элемента, меньшего чем барьер, после чего обнаруженные элементы меняются местами. Эта процедура выполняется до тех пор, пока оба просмотра не встретятся в середине барьера.
Исходный массив: 44 55 12 42 94 06 18 67
барьер: 42
18 55 12 42 94 06 44 67
18 06 12 42 94 55 44 67
Таким образом, получаем две части, стоящие справа и слева от барьера. Этот процесс далее применяется к этим двум частям, затем к частям частей и т.д., пока каждая из частей не будет состоять из одного элемента.
Одной из трудностей данного методы является выбор барьера (медианы).
Медианой для n элементов называется элемент, меньший или равный половине из n элементов и больший или равный другой половине из n элементов.
Например медиана для элементов: 16 12 99 95 18 87 10 равна 18. Т.о. задача поиска медианы тесно связана с проблемой сортировки, т.к. очевидный метод определения медианы заключается в том, чтобы отсортировать n элементов и из них выбрать средний элемент. Однако разделение, выполняемое в методе Хоара позволяет отыскать медиану значительно быстрее, т.к. здесь поиск медианы просто частный случай K=n/2.
Число сравнений: С = n * logn
Число пересылок: M = n * log(n)/6
3.1.8.Сортировка вычислением адреса
В данной сортировки используется метод преобразования значений в адрес таблицы. Каждому элементу массива присваивается некоторый адрес, например целая часть от деления элемента на некоторое число. Но может случится так, что двум и более элементам будет присвоен один и тот же адрес. Поэтому для перемещения величины по вычисленному адресу необходимо проверить, не занято ли уже это место. Если это так, то перемещаемая величина сравнивается с величиной, уже находящейся по этому адресу, и выполняется линейный поиск в требуемом направление для того, чтобы найти место для новой величины. В случае нахождение свободного пространства туда помещается рассматриваемый элемент. Если нет свободного пространства с учетом упорядоченности элементов, то необходимо переместить некоторые предыдущие элементы для освобождения места.
Пример :
номер данный 1 2 3 4 5 6 7 8 9 10 11 12
данные 19 13 05 27 01 26 31 16 02 09 11 21
вычисл. адрес 6 4 1 9 0 8 10 5 0 3 3 7
0 -- -- -- -- 01 01 01 01¦ 01x 01 01 01
1 -- -- 05 05 05 05 05 05V 05 05 05 05
2 -- -- -- -- -- -- -- -- 05 05x 05 05
3 -- -- -- -- -- -- -- -- -- 09¦ 09x 09
4 13 13 13 13 13 13 13 13 13 13¦ 11 11
5 -- -- -- -- -- -- -- 16 16 16¦ 13 11
6 19 19 19 19 19 19 19 19 19 19¦ 16 13
7 -- -- -- -- -- -- -- -- -- --¦ 19 16
8 -- -- -- -- -- 26 26 26 26 26V 26 19x
9 -- -- -- -- 27 27 27 27 27 27 27 21
10 -- -- -- -- -- -- 31 31 31 31 31 27
11 -- -- -- -- -- -- -- -- -- -- -- 31
В рассмотренном примере в таблице размещается 12 элементов. Наибольшее значение элемента меньше 36, поэтому преобразование адреса состоит в деление значения на 3 и выделения целой части, так целая часть 16 будет 5. Знак "х" указывает на конфликт между значениями, а стрелка на необходимость и направление перемещения.