- •Структуры и алгоритмы обработки данных
- •230100.62 – Информатика и вычислительная техника
- •Стандартная постановка задачи
- •Пример постановки задачи
- •Пример постановки задачи в стандартной форме
- •Алгоритмы и их сложность
- •Основы анализа программ
- •Пример анализа алгоритмов
- •Выполнение операторов программы
- •Основы доказательства корректности
- •Динамическое программирование
- •Перемножение нескольких матриц
- •Когда применимо динамическое программирование
- •Наибольшая общая подпоследовательность
- •Жадные алгоритмы
- •Задача о выборе заявок
- •Абстрактные типы данных
- •Атд «Список»
- •Атд «Стек»
- •Атд «Очередь»
- •Множества
- •Хеширование
- •Словари, основанные на хеш-таблицах
- •Поиск слова в тексте
- •Сортировка
- •Сортировка вставками
- •Корневая сортировка
- •Пирамидальная сортировка
- •Переформирование пирамиды
- •Построение пирамиды
- •Сортировка слиянием
- •Управление с помощью таблиц
- •Способы представления графа
- •Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Алгоритмы обхода графа
- •Поиск в ширину
- •Задача о кратчайшем пути
- •Алгоритм Дейкстры
- •Алгоритм Беллмана-Форда
- •Задача перекресток
- •Максимальный поток
- •Метод Форда-Фалкерсона
- •Минимальные покрывающие деревья
- •Алгоритм Крускала
- •Алгоритм Прима
- •Минимальные покрывающие деревья
- •Поиск в глубину
- •Топологическая сортировка
- •Деревья
Словари, основанные на хеш-таблицах
Элемент с ключом k записывается в позицию номер h(k) в хеш-таблице (hash table) T[0..m-1],
где h:U {0, 1, …, m-1} – хеш-функция.
Коллизия – совпадение хеш-значений двух разных ключей.
Разрешение коллизий:
с помощью цепочек (открытое хеширование);
открытая адресация (закрытое хеширование).
Анализ хеширования с цепочками
(открытое хеширование)
Пусть T – хеш-таблица с m позициями, в которую занесено n элементов/
Коэффициент заполнения таблицы α = n / m
Худший случай – θ (n)
Средняя стоимость поиска
Гипотеза равномерного хеширования – предполагаем, что каждый данный элемент может попасть в любую из позиций таблицы с равной вероятностью, независимо от того, куда попал другой элемент.
Теорема 1. Пусть T - хеш-таблица с цепочками, имеющая коэффициент заполнения α. Предположим, что хеширование равномерно. Тогда при поиске элемента, отсутствующего в таблице, будет просмотрено в среднем α элементов таблицы, а среднее время такого поиска (включая время на вычисление хеш-функции) будет равно θ (1+ α)
Теорема 2. При равномерном хешировании среднее время успешного поиска в хеш-таблице с цепочками есть θ (1+ α), где α - коэффициент заполнения.
Ключи как натуральные числа
Хеш – функции
Деление с остатком
h(k) = k mod m
Умножение
Универсальное хеширование
Открытая адресация
(Закрытое хеширование)
Все записи хранятся в самой хэш-таблице. Каждая ячейка таблицы содержит либо элемент динамического множества, либо NIL.
h:U × {0, 1, …, m-1} {0, 1, …, m-1}
Последовательность испробованных мест для данного ключа k имеет вид
‹h(k,0), h(k,1), . . . , h(k,m-1)›
Функция h должна быть такой, чтобы каждое из чисел от 0 до m - 1 встретилось в этой последовательности ровно один раз.
Пусть h’:U {0, 1, …, m-1} – обычная хеш-функция.
Линейная последовательность проб
h(k,i) = (h’(k) + i) mod m
Квадратичная последовательность проб
h(k,i) = (h’(k) +с1i + c2i2 ) mod m
Двойное хеширование
h(k,i) = (h’1(k) +i h’2(k) ) mod m
Анализ хеширования с открытой адресацией
Теорема 3. Математическое ожидание числа проб при поиске в таблице с открытой адресацией отсутствующего в ней элемента не превосходит 1/(1- α ) (хеширование предполагается равномерным)
Теорема 4. Математическое ожидание числа проб при успешном поиске элемента в таблице с открытой адресацией 1/ α * ln (1/(1- α ) )
Поиск слова в тексте
Нечисленный алгоритм
Поиск слова в тексте
Текст хранится в виде последовательности литер. Необходимо отыскать в нем первое появление определенного «слова», которое можно определить как последовательность литер не длиннее самого текста.
текст: array[0..m-1] of character
слово: array[0..n-1] of character
i:=0; j:=0;
while (i < n) and (j < m – n) do
begin
i:=0;
while (i < n) and (слово[i]= текст[j+i]) do i:=i+1;
if i< n then j:= j+1;
end
Утверждения
Инвариант цикла
Обозначения:
Текст – D, длина текста - M
Слово – K, длина слова - N
[диапазоны для i и j]
[все подпоследовательности D до j-ой K
нет в D подпоследовательностей, равных K
[подпоследовательность D, начинающаяся с j, равна K до позиции i-1]
PETER_PIPER_PICKER_A_PECK
P ICK
P ICK
Буква Расстояние
A 4
B 4
C 1
D 4
