- •1. Основы теории сложности. Классы сложности np и p.
- •2. Сортировка и поиск . Проверка упорядоченности массива. Способы сортировки.
- •3.Обменная сортировка (метод "пузырька", шейкер-сортировка)
- •4. Сортировка разделением (быстрая сортировка). Распределяющая сортировка.
- •5. Сортировка подсчётом. Сортировка выбором (прямой выбор, линейный выбор, квадратичная )
- •7. Пирамидальная сортировка. Сортировка слиянием (однократное и циклическое)
- •8. Стек. Основные базисные операции для работы со стеком. Организация стека на основе массива и связного списка.
- •9. Очередь. Основные операции для работы с очередью
- •10. Очередь с приоритетом. Основные операции для работы с очередью с приоритетом.
- •11. Деки. Логическая структура дека.
- •12. Списки как динамические структуры данных. Виды линейных списков. Способы формирования односвязных списков. Оценка сложности.
- •13. Односвязный список. Включение элемента в начало списка. Удаление элемента из списка по заданному номеру.
- •14. Односвязный список. Включение элемента в конец списка. Слияние 2 списков.
- •15. Двухсвязный список. Удаление и вставка элемента в список.
- •16. Циклические списки. Просмотр циклического списка.
- •17. Мультисписки. Нелинейные разветвлённые списки.
- •18. Особенности программирования рекурсивных функций. Линейная рекурсия (пример).
- •19. Смешанная, ветвящаяся и бинарная рекурсия. (примеры)
- •20. Рекурсия и поисковые задачи. Результат функции рекурсивного поиска, возврат последовательности, правила разработки.
- •21. Рекурсия и поисковые задачи. Ханойские башни. Генераторы перестановок, сортировки, алгоритмы с матрицами и др.
- •22. Деревья как рекурсивные структуры данных. Основные определения и свойства. Логическое представление и изображение деревьев.
- •23. Бинарные деревья. Вставка элемента
- •24. Бинарные деревья. Удаление элемента
- •25. Бинарные деревья. Поиск . Алгоритм представления любого дерева и леса бинарными деревьями.
- •26. Способы обхода бинарного дерева: нисходящий, восходящий, смешанный.
- •28. Сбалансированные деревья. Показатель сбалансированности. Avl-деревья.
- •29.Виды балансировки деревьев. Балансировка через массив.
- •30. Красно-чёрные деревья.
- •31. Приложения деревьев.Дерево Хаффмана. (оставь здесь 10 шрифт!!!)
- •32. Бинарная куча. Проверка основного свойства кучи.
- •33. Бинарная куча. Определение родительской и дочерних вершин.
- •34. Бинарнаякуча. Алгоритм построения кучи из произвольного массива.
- •36. Бинарная куча. Добавление элемента.
- •39. Алгоритмы вычисления хэш-функции.
- •44. Задача поиска подстрок, простейший алгоритм.
- •47. Методы разработки алгоритмов. Метод декомпозиции, динамическое программирование
- •48. Методы разработки алгоритмов. Жадные алгоритмы, поиск с возвратом, локальный поиск.
16. Циклические списки. Просмотр циклического списка.
Циклический список-список, у которого последний элемент ссылается на первый, а первый -на последний. Он тоже может быть односвязным или двусвязным. Последний элемент кольцевого списка содержит указатель на первый, а первый (в случае двусвязного списка) — на последний.
Реализация такой структуры происходит на базе линейного списка. В каждом кольцевом списке есть указатель на первый элемент. В этом списке константы NULL не существует.
Также существуют циклические списки с выделенным головным элементом, облегчающие полный проход через список.
Для решения проблемы “концов списка” удобно бывает сделать его циклическим, то есть вместо указателей NULL записывать:
-указатель на последний элемент в качестве указателя на предыдущий в первом элементе списка;
-указатель на первый элемент в качестве указателя на последующий в последнем элементе списка.
Таким образом мы создаем выделенный головной элемент, облегчающий полный проход через список.
Тогда единственный элемент в циклическом списке будет иметь указатели на самого себя, а в процессе просмотра конец списка определяется фактом возвращения на его начало.
17. Мультисписки. Нелинейные разветвлённые списки.
Мультисписки
В программных системах, обрабатывающих объекты сложной структуры, могут решаться разные подзадачи, каждая из которых требует, возможно, обработки не всего множества объектов, а лишь какого-то его подмножества. Для того, чтобы при выборке каждого подмножества не выполнять полный просмотр с отсеиванием записей, к требуемому подмножеству не относящихся, в каждую запись включаются дополнительные поля ссылок, каждое из которых связывает в линейный список элементы соответствующего подмножества. В результате получается многосвязный список или мультисписок, каждый элемент которого может входить одновременно в несколько односвязных списков.
К достоинствам мультисписков помимо экономии памяти (при множестве списков информационная часть существует в единственном экземпляре) следует отнести также целостность данных - в том смысле, что все подзадачи работают с одной и той же версией информационной части и изменения в данных, сделанные одной подзадачей немедленно становятся доступными для другой подзадачи.
Каждая подзадача работает со своим подмножеством как с линейным списком, используя для этого определенное поле связок. Специфика мультисписка проявляется только в операции исключения элемента из списка. Исключение элемента из какого-либо одного списка еще не означает необходимости удаления элемента из памяти, так как элемент может оставаться в составе других списков. Память должна освобождаться только в том случае, когда элемент уже не входит ни в один из частных списков мультисписка. Обычно задача удаления упрощается тем, что один из частных списков является главным - в него обязательно входят все имеющиеся элементы. Тогда исключение элемента из любого неглавного списка состоит только в переопределении указателей, но не в освобождении памяти. Исключение же из главного списка требует не только освобождения памяти, но и переопределения указателей как в главном списке, так и во всех неглавных списках, в которые удаляемый элемент входил.
Нелинейным разветвленным списком является список, элементами которого могут быть тоже списки.
В обработке нелинейный список определяется как любая последовательность атомов и списков (подсписков), где в качестве атома берется любой объект, который при обработке отличается от списка тем, что он структурно неделим. Если мы заключим списки в круглые скобки, а элементы списков разделим запятыми, то в качестве списков можно рассматривать такие последовательности:
(a,(b,c,d),e,(f,g))
( )
((a))
Первый список содержит четыре элемента: атом a, список (b,c,d) (содержащий в свою очередь атомы b,c,d), атом e и список (f,g), элементами которого являются атомы f и g. Второй список не содержит элементов, тем не менее нулевой список, в соответствии с нашим определением является действительным списком. Третий список состоит из одного элемента: списка (a), который в свою очередь содержит атом а.