
- •2 Данные. Типы данных. Структуры хранения данных.
- •4. Сложность алгоритма. Функции сложности. Оценка эффективности
- •5,6,7. Линейные структуры данных
- •8. Нелинейные структуры данных. Деревья.
- •9. Хуйня какая-то…
- •10 Простая сортировка
- •11 Сложные сортировки
- •13 Поиск
- •14 Поиск подстроки в строке.
- •15 Графы
- •16 Поиск в глубину и в ширину
- •17 Алгоритм построения остовного дерева
- •18 Поиск кратчайшего пути в графе
- •19 Кодирование
2 Данные. Типы данных. Структуры хранения данных.
Данные – информация предоставленная в формализованном виде для ЭВМ.
Структуры данных – множество элементов и множество связей между ними. Структуры данных подразделяются на абстрактные и физические.
Абстрактные (логические) – структуры данных рассматриваемые без учета их представления в машинной памяти.
Физические – структуры данных отображающие способ физического представления данных в машинной памяти.
Простые– структуры данных, которые не подразделяются на части больше чем БИТы.
Интегрированные – структуры данных составленные из других структур данных.
Связные структуры данных – имеются явно связанные элементы (деревья).
Не связные – структуры данных у которых нет явной связи между элементами (вектор, массив, стеки, очереди).
4. Сложность алгоритма. Функции сложности. Оценка эффективности
Сложность алгоритма - это функция, определяющая зависимость объёма работы от размера входных данных.
O(n!) означает, что с увеличением параметра n, время работы алгоритма растёт не быстрее, чем пропорционально n!.
f(x) = O(g(x)), если существует такое c > 0, что f(x) <= c∙g(x).
Классы сложности алгоритма:
Факториальная |
N! |
Экспоненциальная |
KN |
Полиномиальная |
NK |
Линейный логарифм |
N * log(N) |
Линейная |
K * N |
Логарифмическая |
K * log(N) |
Константная |
K |
P задачи: задача называется полиномиальной, если существует константа К и алгоритм имеющий сложность О(NK).
NP полные задачи: задача относится к классу NP, если ее решение некоторым алгоритмом может быть быстро (полиномиально) проверено.
P = NP: можно ли все задачи, решение которых проверяется с полиномиальной сложностью, решить за полиномиальное время ? Очевидно, что любая задача, принадлежащая классу P, принадлежит и классу NP, т.к. она может быть полиномиально проверена – задача проверки решения может состоять просто в повторном решении задачи.
5,6,7. Линейные структуры данных
Линейный список - это структура данных, состоящая из элементов связанных между собой.
Однонаправленный – 1 указатель.
Двунаправленный – 2 указателя.
Мультисписок – состоит из нескольких списков
Циклический – последний элемент указывает на первый.
Стек – структура данных, в которой доступ к элементам организован по принципу LIFO (последний зашел – первый вышел). Добавляются и удаляются элементы из головы стека. Стеки широко применяются в вычислительной технике. Например, для отслеживания точек возврата из подпрограмм используется стек вызовов.
Очередь – структура данных, в которой доступ к элементам организован по принципу FIFO (первый пришёл — первый вышел). Добавляются элементы в конец очереди, а удаляются из начала. Клавиатура работает по принципу очереди.
8. Нелинейные структуры данных. Деревья.
Дерево — это связный ациклический (отсутствие циклов, между парами вершин имеется только один путь) граф.
Бинарное дерево – это дерево имеющее не более 2-ух потомков.
Идеально сбалансированное бинарное дерево – это дерево, если для каждой его вершины количество вершин в левом и правом поддереве различаются не более чем на 1.
Бинарное дерево поиска – это бинарное дерево, для которого справедливо:
ключ левого потомка < ключ родителя < ключ правого потомка.
Обходы дерева:
Левый-Родитель-Правый 2) Родитель-Левый-Правый 3) Левый-Правый-Родитель
B-дерево - структура данных, сбалансированное, сильно ветвистое дерево во внешней памяти. Каждый узел B-дерева, кроме листьев, можно рассматривать как упорядоченный список, в котором чередуются ключи и указатели на сыновей.
Добавление ключа:
Определяем интервал, где должен находиться K. Пусть Y - соответствующий сын.
Рекурсивно добавляем K к дереву потомков Y.
Если узел Y полон, то расщепляем его на два. Узел Y1 получает первые T-1 из ключей Y и первые T его потомков, а узел Y2 - последние T из ключей Y и последние T-1 его потомков.
B+ дерево — структура данных, представляет собой сбалансированное дерево поиска. Является модификацией B-дерева, истинные значения ключей которого содержатся только в листьях, а во внутренних узлах — ключи-разделители, содержащие диапазон изменения ключей для поддеревьев.