- •Структуры и алгоритмы обработки данных Методическое пособие
- •Ктн е. В. Курапова, кф-мн е. П. Мачикина
- •Оглавление
- •ВвЕдение
- •Необходимые понятия и определения
- •Основные структуры данных
- •Задача сортировки массивов
- •Трудоемкость методов сортировки массивов
- •Задача сортировки последовательностей
- •Теорема о сложности сортировки
- •Задача поиска элементов с заданным ключом
- •Методы сортировки с квадратичной трудоемкостью
- •Метод прямого выбора
- •Алгоритм на псевдокоде
- •Пузырьковая сортировка
- •Алгоритм на псевдокоде
- •Шейкерная сортировка
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Метод Шелла
- •Метод прямого включения
- •Алгоритм на псевдокоде
- •Метод Шелла
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Быстрые методы сортировки массивов
- •Пирамидальная сортировка
- •Свойства пирамиды
- •Алгоритм на псевдокоде
- •Построение (1, 8)-пирамиды
- •Сортировка
- •Алгоритм на псевдокоде
- •Метод Хоара
- •Алгоритм на псевдокоде
- •Проблема глубины рекурсии.
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Работа с линейными списками
- •Указатели. Основные операции с указателями
- •Основные операции с линейными списками
- •Методы сортировки последовательностей
- •Метод прямого слияния
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Цифровая сортировка
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Двоичный поиск в упорядоченном массиве
- •Алгоритм двоичного поиска
- •Алгоритм на псевдокоде
- •Обозначим
- •Найден – логическая переменная, в которой будем отмечать факт успешного завершения поиска.
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Сортировка данных с произвольной структурой
- •Сравнение данных произвольной структуры
- •Сортировка по множеству ключей. Индексация
- •Алгоритм на псевдокоде (на примере пузырьковой сортировки)
- •Индексация через массив указателей
- •Варианты заданий
- •Двоичные деревья
- •Основные определения и понятия
- •Различные обходы двоичных деревьев
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Идеально сбалансированное дерево поиска
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Случайное дерево поиска
- •Определение случайного дерева поиска
- •Добавление вершины в дерево
- •Алгоритм на псевдокоде
- •Удаление вершины из дерева
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Сбалансированные по высоте деревья (авл-деревья)
- •Определение и свойства авл-дерева
- •Повороты при балансировке
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Удаление вершины из дерева
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Определение б-дерева порядка m
- •Поиск в б-дереве
- •Алгоритм на псевдокоде
- •Построение б-дерева
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Определение двоичного б-дерева
- •Добавление вершины в дерево
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Деревья оптимального поиска (доп)
- •Определение дерева оптимального поиска
- •Точный алгоритм построения доп
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Хэширование и поиск
- •Понятие хэш-функции
- •Алгоритм на псевдокоде
- •Метод прямого связывания
- •Метод открытой адресации
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Элементы теории кодирования информации
- •Необходимые понятия
- •Кодирование целых чисел
- •Алфавитное кодирование
- •Оптимальное алфавитное кодирование
- •Алгоритм на псевдокоде
- •Почти оптимальное алфавитное кодирование
- •Алгоритм на псевдокоде
- •Алгоритм на псевдокоде
- •Варианты заданий
- •Рекомендуемая литература
- •Псевдокод для записи алгоритмов
- •Структуры и алгоритмы обработки данных
- •630102, Г. Новосибирск, ул. Кирова, 86.
Алгоритм на псевдокоде
Алгоритм А2(Root – указатель на корень дерева,
L, R – левая и правая границы рабочей части массива)
wes=0, summa=0
IF (L<=R)
DO (i=L, L+1, …,R) wes=wes+ V[i].w OD
DO (i=L, L+1,…,R-1)
IF (summa<wes/2 and summa + V[i].w>=wes/2) OD
summa=summa+ V[i].w
OD
Добавление в СДП (Root, V[i])
A2(Root, L, i-1)
A2(Root, i+1, R)
FI
Пример. Рассмотрим процесс построения приближенного ДОП алгоритмом А2 для строки символов из предыдущего примера. Предварительно упорядочим символы по алфавиту.
Таблица 4 Упорядоченный набор вершин
А |
В |
Е |
И |
К |
Л |
Н |
О |
П |
Р |
Т |
У |
4 |
3 |
2 |
1 |
2 |
1 |
2 |
3 |
1 |
2 |
1 |
1 |
В качестве корня дерева выбираем вершину V5=К, поскольку
, .
Все вершины левее вершины V5 образуют левое поддерево, вершины правее V5 – правое поддерево. Далее алгоритм применяется для каждого из поддеревьев в отдельности. Посчитаем средневзвешенную высоту построенного дерева.
P=2.1+3.2+3.2+4.3+2.3+2.3+2.3+1.4+1.4+1.4+1.4+1.5=65
hср=65/23=2.82
Рисунок 60 Дерево, построенное приближенным алгоритмом А2
Приведем некоторые свойства рассмотренных приближенных алгоритмов:
Сложность алгоритмов как функция от n (количество элементов) зависит следующим образом: время Т = О(n log n), память М = О(n) при n→∞. (Время определяется трудоемкостью сортировки элементов, а память – размером массива для хранения элементов)
Дерево, построенное приближенным алгоритмом А1, равносильно случайному (с точки зрения средней высоты) при n→∞, т.е. алгоритм А1– плохой.
Дерево, построенное приближенным алгоритмом А2, асимптотически приближается к оптимальному (с точки зрения средней высоты) при n→∞, т.е. алгоритм А2 является хорошим.
ИСДП нельзя считать даже приближением к дереву оптимального поиска.
Варианты заданий
Написать процедуру вычисления матрицы весов и матрицы средневзвешенных весов для заданного набора вершин и их весов.
Реализовать точный алгоритм построения ДОП.
Написать процедуру вычисления средневзвешенной высоты ДОП.
Реализовать в виде процедур приближенные алгоритмы построения ДОП.
Построить ДОП из 100 чисел с произвольными весами с использованием точного алгоритма. Определить средневзвешенную высоту построенного дерева.
Построить почти оптимальные деревья из 100 чисел с использованием приближенных алгоритмов А1 и А2. Сравнить средневзвешенные высоты этих деревьев и ДОП, построенного точным алгоритмом.
Построить ДОП ключевых (зарезервированных) слов языка Паскаль (частоты слов определить путем сканирования собственных программ на Паскале).
Построить ДОП ключевых (зарезервированных) слов языка Си (частоты слов определить путем сканирования собственных программ на Си).
Графически изобразить ДОП из 20 чисел на экране. (Показать значения вершин и их веса).
Графически изобразить на экране ДОП ключевых слов языка Паскаль (или Си).