- •Вопросы к экзамену по курсу «Основы алгоритмизации и программирования» иСиТ- I 2010/2011
- •Пирамидальная сортировка. Сортировка слиянием (однократное и циклическое слияние(?)).
- •Стек. Основные базисные операции для работы со стеком. Организация стека на основе массива и связного списка.
- •Очередь. Основные операции для работы с очередью.
- •Очередь с приоритетом. Основные операции для работы с приоритетной очередью
- •Деки. Логическая структура дека.
- •Списки как динамические структуры данных. Виды линейных списков. Способы формирования односвязных списков. Оценка сложности.
- •Алгоритмы вычисления хэш-функции.
Стек. Основные базисные операции для работы со стеком. Организация стека на основе массива и связного списка.
Одномерная структура данных, в которой добавление и удаление эл-тов происходит с 1 конца, называемого вершиной(LIFO).
Основные операции – добавление(push), удаление(pop), чтение(peek), очистка(clear).
Если требуется стек больших размеров, который нужно заполнить почти полностью – на основе массива, если размер варьируется – на основе списка.
Очередь. Основные операции для работы с очередью.
Одномерная структура данных, в которой добавление эл-та производится с одного конца, а исключение – с другого(FIFO).
Основные операции – добавление в конец(enqueue), удаление с начала(dequeue), чтение(peek), очистка(clear).
Очередь с приоритетом. Основные операции для работы с приоритетной очередью
Абстрактный тип данных, предназначенный для представления взвешенных множеств(куч). Множество – взвешенное если каждому его эл-ту соответствует ключ(часть эл-та данных, которая используется для его идентификации и поиска среди других таких же эл-тов).
Основные операции – вставить новый эл-т со своим ключом, найти эл-т с мин/макс приоритетом, удалить элемент с мин/макс приоритетом, увеличить/уменьшить приоритет указанного эл-та на заданное положительное число.
Деки. Логическая структура дека.
Очередь с двумя концами. Включение и исключение производится с двух концов.
Основные операции – включение/исключение справа/слева, определение размера, очистка.
Списки как динамические структуры данных. Виды линейных списков. Способы формирования односвязных списков. Оценка сложности.
Динамическая структура данных – множество переменных, связанных между собой указателями.
Список – линейная последовательность элементов, каждый из которых содержит указатели на аналогичные элементы(соседи).
Списки : односвязные(каждый эл-т имеет указатель на следующий), двусвязные(каждый эл-т имеет указатель на следующий и предыдущий), двусвязные циклические(первый и последний эл-ты списка ссылаются друг на друга).
Односвязный список. Включение элемента в начало списка. Удаление элемента из списка по заданному номеру.
Односвязный список. Включение элемента в конец списка. Слияние двух списков.
Слияние – формирование из 2-х списков одного.
Двусвязный список. Удаление и вставка элемента в список.
Циклические списки. Просмотр циклического списка.
Мультисписки. Нелинейные разветвленные списки.
Нелинейный разветвленный список – список, эл-ты которого тоже могут быть списками.
Характеристики разветвленного списка – порядок, глубина, длина.
Мультисписок – многосвязный список, каждый эл-т которого может входить одновременно в несколько односвязных списков.
Особенности программирования рекурсивных функций. Линейная рекурсия (примеры).
Рекурсия не может быть безусловной(бесконечной).
При линейной рекурсии функции содержат единственный условный вызов самой себя. Любой циклический алгоритм можно преобразовать в линейно-рекурсивный и наоборот. Пример – факториал.
Смешанная, ветвящаяся и бинарная рекурсия (примеры).
Смешанная рекурсия – две или более функции вызывают друг друга циклически. Пример – четное/нечетное.
Ветвящаяся – функция вызывается более одного раза.
Бинарная рекурсия – вызов других функций. Пример – ряд Фибоначчи.
Рекурсия и поисковые задачи. Результат функции рекурсивного поиска, возврат последовательности, правила разработки.
С помощью рекурсии легко решаются задачи, связанные с поиском, основанные на полном или частичном переборе возможных вариантов. В процессе поиска задача разбивается на шаги, на каждом из которых выбирается и проверяется очередной элемент из множества, а алгоритм поиска повторяется для оставшихся данных.
Результат – логический, показывает можно ли через данную точку достигнуть выхода.
Рекурсия и поисковые задачи. Ханойские башни. Генераторы перестановок, сортировки, алгоритмы с матрицами и другие.
С помощью рекурсии легко решаются задачи, связанные с поиском, основанные на полном или частичном переборе возможных вариантов. В процессе поиска задача разбивается на шаги, на каждом из которых выбирается и проверяется очередной элемент множества, а к оставшимся данным алгоритм поиска повторяется.
Деревья как рекурсивные структуры данных. Основные определения и свойства. Логическое представление и изображение деревьев.
Дерево – граф, обладающий следующими св-вами:
а) существует 1 эл-т, на который не ссылается никакой другой – корень дерева.
б) начиная с корня, следуя по цепочке указателей можно получить доступ к любому эл-ту
в) на каждый эл-т, кроме корня, имеется единственная ссылка.
Ветви, нижележащие – поддеревья, вершины – потомки, листья – не ссылаются на другие узлы.
Бинарные деревья. Вставка элемента.
Дерево, каждая вершина которого имеет не более 2-х потомков. Особенность – значения вершин левого поддерева меньше, правого – больше чем значение в самой вершине.
Бинарные деревья. Удаление элемента.
3 варианта: удаляемый узел – лист, с 1 поддеревом, с 2 поддеревьями(найти следующий за ним узел, извлечь его из дерева и заменить им удаляемый узел).
Бинарные деревья. Поиск. Алгоритм представления любого дерева и леса бинарными деревьями.
Основные операции поиска для бинарного дерева – нахождение конкретного значения, макс/мин, последующего, предыдущего для данного.
Способы обхода бинарного дерева: нисходящий, восходящий, смешанный.
Нисходящий – от корневой вершины вниз к листьям.
Восходящий – от листьев вверх к корню.
Смешанный – от самого левого листа дерева через корень к самому правому листу.
Поиск минимальной длины ветви дерева.(?)
Сбалансированные деревья. Показатель сбалансированности. AVL-деревья.
Дерево, для каждого узла которого высота 2-х его поддеревьев различается не более чем на 1.
Узлы : левоперевешивающие(самый длинный путь по левому поддереву на 1 больше чем по правому), правоперевешивающие, сбалансированные.
Виды балансировки деревьев. Балансировка через массив.
Операции балансировки : однократный правый(RR), однократный левый(LL), двукратный лево-правый(LR), двукратный право-левый(RL) повороты узлов.
Красно-черные деревья.
Каждый узел дерева окрашен либо в красный, либо в черный, причем: каждый нулевой узел – черный, корневой – черный, у красного дети черные, всякий путь от корня к произвольной вершине имеет одинаковое кол-во черных узлов.
Приложения деревьев. Дерево Хаффмана.
Бинарная куча. Проверка основного свойства кучи.
Массив, обладающий определенными свойствами упорядоченности. По массиву строится дерево причем для всех i родитель >= потомкам. Проверка основного свойства кучи осуществляется с помощью процедуры heapify(проверяет, если дети >родителя –меняет местами).
Бинарная куча. Определение родительской и дочерних вершин.
Для каждого элемента массива можно определить левую и правую вершины, кроме листьев, и наоборот, для всех, кроме корня можно определить родителя.
Бинарная куча. Алгоритм построения кучи из произвольного массива.
buildheap(последовательно вызывает heapify для всех элементов, в порядке убывания номера).
Бинарная куча. Извлечение наибольшего элемента. Оценка сложности
Extractmax( извлекает максимальный элемент не нарушая основного св-ва).
Бинарная куча. Добавление элемента.
insertheap – добавляет новый элемент не нарушая основного свойства.
Обзор куч: левосторонние, биномиальные, фибоначевы, тонкие и др. Оценка сложности(?)
Биномиальная - это набор биномиальных деревьев, узлам которых приписаны элементы взвешенного множества в соответствии с кучеобразным порядком, при котором вес элемента, приписанного узлу, не превосходит весов элементов, приписанных его потомкам.
Название рассматриваемых куч связано с использованием чисел Фибоначчи при анализе трудоемкости выполнения операций.
Хэш-таблицы. Понятие, назначение и принцип организации.
Сочетание массивов и списков, структура для хранения и получения динамических данных.
Работа с одним большим множеством сводится к работе с массивом небольших множеств.
