- •Структуры и алгоритмы обработки данных
- •230100.62 – Информатика и вычислительная техника
- •Стандартная постановка задачи
- •Пример постановки задачи
- •Пример постановки задачи в стандартной форме
- •Алгоритмы и их сложность
- •Основы анализа программ
- •Пример анализа алгоритмов
- •Выполнение операторов программы
- •Основы доказательства корректности
- •Динамическое программирование
- •Перемножение нескольких матриц
- •Когда применимо динамическое программирование
- •Наибольшая общая подпоследовательность
- •Жадные алгоритмы
- •Задача о выборе заявок
- •Абстрактные типы данных
- •Атд «Список»
- •Атд «Стек»
- •Атд «Очередь»
- •Множества
- •Хеширование
- •Словари, основанные на хеш-таблицах
- •Поиск слова в тексте
- •Сортировка
- •Сортировка вставками
- •Корневая сортировка
- •Пирамидальная сортировка
- •Переформирование пирамиды
- •Построение пирамиды
- •Сортировка слиянием
- •Управление с помощью таблиц
- •Способы представления графа
- •Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Алгоритмы обхода графа
- •Поиск в ширину
- •Задача о кратчайшем пути
- •Алгоритм Дейкстры
- •Алгоритм Беллмана-Форда
- •Задача перекресток
- •Максимальный поток
- •Метод Форда-Фалкерсона
- •Минимальные покрывающие деревья
- •Алгоритм Крускала
- •Алгоритм Прима
- •Минимальные покрывающие деревья
- •Поиск в глубину
- •Топологическая сортировка
- •Деревья
Множества
Множество является базовой структурой, которая лежит в основании всей математики..
При разработке алгоритмов множества используются как основа многих важных абстрактных типов данных.
Множеством называется некая совокупность элементов, каждый элемент или сам является множеством, или является примитивным элементом, называемым атомом.
Будем предполагать, что все элементы любого множества различны.
Все элементы одного множества имеют одинаковый тип данных (целые, символы, строки символов и т.п.)
Линейно упорядоченное множество S удовлетворяет условиям:
Для любых элементов a и b из множества S может быть справедливымтолько одно из следующих утверждений: a < b, a = b, a > b
Для любых элементов a, b, c из множества S таких, что a < b и b < c, следует a < c.
Операторы АТД, основанные на множествах:
1.UNION (A, B, C) - объединение множеств C = A B
2. INTERSECTION (A, B, C)- пересечение множеств
C = A B
3. DIFFERENCE (A, B, C)- разность множеств C = A \ B
4. MERGE (A, B, C)- слияние (объединение) непересекающихся множеств C = A B. Результат не определен, если A B ≠
5. функция MEMBER (x, A) имеет аргументами множество A и объект x того же типа, что и элементы множества A, и возвращает булево значение true, если x A, и значение false, если x A
6. MAKENULL(A) – процедура присваивает множеству A значение пустого множества.
7. Процедура INSERT (x, A) делает x элементом множества A.
8. Процедура DELETE (x, A) удаляет элемент x из множества A.
9. Процедура ASSIGN(A, B) присваивает множеству A в качестве значения множество B.
10 Функция MIN (A) возвращает наименьший элемент множества A. Для применения функции необходимо, чтобы множество A было параметризовано и его элементы были линейно упорядочены.
11. Функция EQUAL (A, B) возвращает значение true тогда и только тогда, когда множества A и B состоят из одних и тех же элементов.
12. Функция FIND (x) оперирует в среде, где есть набор непересекающихся множеств. Она возвращает имя (единственное) множества, в котором есть элемент x
Хеширование
Хеширование — преобразование по определённому алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем, хеш-кодом или сводкой сообщения (англ. message digest).
Хеширование применяется для сравнения данных: если у двух массивов хеш-коды разные, массивы гарантированно различаются; если одинаковые — массивы, скорее всего, одинаковы. В общем случае однозначного соответствия между исходными данными и хеш-кодом нет в силу того, что количество значений хеш-функций меньше, чем вариантов входного массива; существует множество массивов с разным содержимым, но дающих одинаковые хеш-коды — так называемые коллизии. Вероятность возникновения коллизий играет немаловажную роль в оценке качества хеш-функций.
Существует множество алгоритмов хеширования с различными свойствами (разрядность, вычислительная сложность, криптостойкость и т. п.). Выбор той или иной хеш-функции определяется спецификой решаемой задачи. Простейшими примерами хеш-функций могут служить контрольная сумма или CRC.
Словари
Абстрактый тип множеств с операторами MAKENULL, INSERT, DELETE и MEMBER называется DICTIONARY (Словарь)
Реализация словарей
Сортированные или неотсортированные связанные списки;
Двоичные векторы (когда элементы множества можно сопоставить с элементами множества целых чисел 1,…., N для некоторого N;
использование массивов фиксированной длины с указателями на последнюю заполненную ячейку этого массива
Оператор |
Способ реализации словаря |
||
1 |
2 |
3 |
|
INSERT |
O(N) |
O(1) |
O(N) |
DELETE |
O(N) |
O(1) |
O(N) |
MEMBER |
O(N) |
O(1) |
O(N) |
Прямая адресация применяется, когда количество возможных значений невелико
Ключи – числа из множества U= {0, 1, …, m-1}
Для хранения множества используется массив T[0..m-1], называемый таблицей с прямой адресацией (direct-address table).
