
- •Структура и алгоритмы обработки данных
- •Понятие алгоритма и структуры данных.
- •Анализ сложности и эффективности алгоритмов и структур данных.
- •Данные числовых типов. Данные целочисленного типа. Данные вещественного типа.
- •Данные числовых типов. Операции над данными числовых типов. Данные символьного типа.
- •Данные логического типа. Данные типа указатель.
- •Линейные структуры данных. Массив.
- •Линейные структуры данных. Строка.
- •Линейные структуры данных. Запись.
- •Линейные структуры данных. Множество.
- •Линейные структуры данных. Таблица.
- •Линейные структуры данных. Линейные списки. Циклические списки.
- •Линейные структуры данных. Разреженные матрицы.
- •Линейные структуры данных. Стек.
- •Линейные структуры данных. Очередь.
- •Линейные структуры данных. Дек.
- •Нелинейные структуры данных. Мультисписки. Слоенные списки.
- •Нелинейные структуры данных. Графы. Спецификация.
- •Нелинейные структуры данных. Графы. Реализация.
- •Нелинейные структуры данных. Деревья. Общие понятия.
- •Нелинейные структуры данных. Деревья. Обходы деревьев.
- •Нелинейные структуры данных. Деревья. Спецификация двоичных деревьев. Реализация. Основные операции.
- •Файлы. Организация.
- •Файлы. В-деревья. Представление файлов в-деревьями.
- •Файлы. В-деревья. Основные операции.
- •Файлы. В-деревья. Общая оценка в-деревьев.
- •Методы разработки алгоритмов. Метод декомпозиции. Динамическое программирование.
- •Методы разработки алгоритмов. Поиск с возвратом. Методы ветвей и границ.
- •Алгоритмы поиска. Поиск в линейных структурах.
- •Алгоритмы поиска. Хеширование данных.
- •Алгоритмы поиска. Использование деревьев в задачах поиска.
- •Алгоритмы поиска. Поиск в тексте.
- •Алгоритмы кодирования (сжатия) данных.
- •Алгоритмы сортировки. Сортировка подсчетом. Сортировка простым включением.
- •Алгоритмы сортировки. Сортировка методом Шелла. Сортировка простым извлечением.
- •Алгоритмы сортировки. Древесная сортировка. Сортировка методом пузырька.
- •Алгоритмы сортировки. Быстрая сортировка (Хоара). Сортировка слиянием.
- •Алгоритмы сортировки. Сортировка распределением. Сравнение алгоритмов внутренней сортировки.
- •Алгоритмы обхода графа. Поиск в глубину.
- •Алгоритмы обхода графа. Поиск в ширину (волновой алгоритм).
Методы разработки алгоритмов. Метод декомпозиции. Динамическое программирование.
Метод декомпозиции
Этот метод, называемый также методом «разделяй и властвуй», или методом разбиения, возможно, является самым важным и наиболее широко применимым методом проектирования эффективных алгоритмов. Он предполагает такую декомпозицию (разбиение) задачи размера n на более мелкие задачи, что на основе решений этих более мелких задач можно легко получить решение исходной задачи. В качестве примеров применений этого метода можно назвать сортировку слиянием или применение деревьев двоичного поиска.
Динамическое программирование
- подход «сверху вниз». Он запоминает решенные задачи, но очередность решения задач все равно контролирует рекурсия.
- подход «снизу вверх». Чаще всего, такой способ раза в три быстрее. Однако в ряде случаев такой метод приводит к необходимости решать большее количество подзадач, чем при рекурсии.
Очень часто для его написания приходится использовать как промежуточный результат нисходящую форму, а иногда безрекурсивная (итеративная) форма оказывается чрезвычайно сложной и малопонятной.
Таким образом, если алгоритм превышает отведенное ему время на тестах большого объема, то необходимо осуществлять доработку этого алгоритма.
Методы разработки алгоритмов. Поиск с возвратом. Методы ветвей и границ.
Иногда приходится иметь дело с задачей поиска оптимального решения, когда невозможно применить ни один из известных методов, способных помочь отыскать оптимальный вариант решения, и остается прибегнуть к последнему средству – полному перебору.
(РИСУНОК)
Эта формула позволяет индуктивно определить f(p) для каждой позиции p.
Метод ветвей и границ
Перебор, который осуществляет поиск с возвратом, можно уменьшить, используя идею метода «ветвей и границ». Эта идея состоит в том, что можно не искать точную оценку хода, про который стало известно, что
он не может быть лучше, чем один из ходов, рассмотренных ранее.
Эти рассуждения приводят к методу «ветвей и границ», гораздо более экономному, чем поиск с возвратом. Определим метод «ветвей и границ» как процедуру с двумя параметрами p и bound, вычисляющую f’(p, bound). Цель алгоритма – удовлетворить следующим условиям:
f’(p, bound) = f(p), если f(p) < bound,
f’(p, bound) > bound, если f(p) ≥ bound.
Алгоритмы поиска. Поиск в линейных структурах.
Поиск – процесс отыскания информации во множестве данных (обычно представляющих собой записи) путем просмотра специального поля в каждой записи, называемого ключом. Целью поиска является отыскание записи (если она есть) с данным значением ключа.
Поиск в линейных структурах
а)Последовательный (линейный) поиск
Последовательный поиск – самый простой из известных. Суть его заключается в следующем. Множество элементов просматривается последовательно в некотором порядке, гарантирующем, что будут просмотрены все элементы множества (например, слева направо). Если в ходе просмотра множества будет найден искомый элемент, просмотр прекращается с положительным результатом; если же будет просмотрено все множество, а элемент не будет найден, алгоритм должен выдать отрицательный результат.
б)Бинарный поиск
Этот алгоритм поиска предполагает, что множество хранится, как некоторая упорядоченная (например, по возрастанию) последовательность элементов, к которым можно получить прямой доступ посредством индекса. Фактически речь идет о том, что множество хранится в массиве и этот массив отсортирован.
На каждом шаге метода область поиска будет сокращаться вдвое. Как только область поиска сократится до одного элемента, можно будет проверить этот элемент на равенство искомому и сделать вывод о результате поиска.