Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.doc
Скачиваний:
9
Добавлен:
25.09.2019
Размер:
78.85 Кб
Скачать
  1. Стек. Основные базисные операции для работы со стеком. Организация стека на основе массива и связного списка.

Одномерная структура данных, в которой добавление и удаление эл-тов происходит с 1 конца, называемого вершиной(LIFO).

Основные операции – добавление(push), удаление(pop), чтение(peek), очистка(clear).

Если требуется стек больших размеров, который нужно заполнить почти полностью – на основе массива, если размер варьируется – на основе списка.

  1. Очередь. Основные операции для работы с очередью.

Одномерная структура данных, в которой добавление эл-та производится с одного конца, а исключение – с другого(FIFO).

Основные операции – добавление в конец(enqueue), удаление с начала(dequeue), чтение(peek), очистка(clear).

  1. Очередь с приоритетом. Основные операции для работы с приоритетной очередью

Абстрактный тип данных, предназначенный для представления взвешенных множеств(куч). Множество – взвешенное если каждому его эл-ту соответствует ключ(часть эл-та данных, которая используется для его идентификации и поиска среди других таких же эл-тов).

Основные операции – вставить новый эл-т со своим ключом, найти эл-т с мин/макс приоритетом, удалить элемент с мин/макс приоритетом, увеличить/уменьшить приоритет указанного эл-та на заданное положительное число.

  1. Деки. Логическая структура дека.

Очередь с двумя концами. Включение и исключение производится с двух концов.

Основные операции – включение/исключение справа/слева, определение размера, очистка.

  1. Списки как динамические структуры данных. Виды линейных списков. Способы формирования односвязных списков. Оценка сложности.

Динамическая структура данных – множество переменных, связанных между собой указателями.

Список – линейная последовательность элементов, каждый из которых содержит указатели на аналогичные элементы(соседи).

Списки : односвязные(каждый эл-т имеет указатель на следующий), двусвязные(каждый эл-т имеет указатель на следующий и предыдущий), двусвязные циклические(первый и последний эл-ты списка ссылаются друг на друга).

  1. Односвязный список. Включение элемента в начало списка. Удаление элемента из списка по заданному номеру.

  2. Односвязный список. Включение элемента в конец списка. Слияние двух списков.

Слияние – формирование из 2-х списков одного.

  1. Двусвязный список. Удаление и вставка элемента в список.

  2. Циклические списки. Просмотр циклического списка.

  3. Мультисписки. Нелинейные разветвленные списки.

Нелинейный разветвленный список – список, эл-ты которого тоже могут быть списками.

Характеристики разветвленного списка – порядок, глубина, длина.

Мультисписок – многосвязный список, каждый эл-т которого может входить одновременно в несколько односвязных списков.

  1. Особенности программирования рекурсивных функций. Линейная рекурсия (примеры).

Рекурсия не может быть безусловной(бесконечной).

При линейной рекурсии функции содержат единственный условный вызов самой себя. Любой циклический алгоритм можно преобразовать в линейно-рекурсивный и наоборот. Пример – факториал.

  1. Смешанная, ветвящаяся и бинарная рекурсия (примеры).

Смешанная рекурсия – две или более функции вызывают друг друга циклически. Пример – четное/нечетное.

Ветвящаяся – функция вызывается более одного раза.

Бинарная рекурсия – вызов других функций. Пример – ряд Фибоначчи.

  1. Рекурсия и поисковые задачи. Результат функции рекурсивного поиска, возврат последовательности, правила разработки.

С помощью рекурсии легко решаются задачи, связанные с поиском, основанные на полном или частичном переборе возможных вариантов. В процессе поиска задача разбивается на шаги, на каждом из которых выбирается и проверяется очередной элемент из множества, а алгоритм поиска повторяется для оставшихся данных.

Результат – логический, показывает можно ли через данную точку достигнуть выхода.

  1. Рекурсия и поисковые задачи. Ханойские башни. Генераторы перестановок, сортировки, алгоритмы с матрицами и другие.

С помощью рекурсии легко решаются задачи, связанные с поиском, основанные на полном или частичном переборе возможных вариантов. В процессе поиска задача разбивается на шаги, на каждом из которых выбирается и проверяется очередной элемент множества, а к оставшимся данным алгоритм поиска повторяется.

  1. Деревья как рекурсивные структуры данных. Основные определения и свойства. Логическое представление и изображение деревьев.

Дерево – граф, обладающий следующими св-вами:

а) существует 1 эл-т, на который не ссылается никакой другой – корень дерева.

б) начиная с корня, следуя по цепочке указателей можно получить доступ к любому эл-ту

в) на каждый эл-т, кроме корня, имеется единственная ссылка.

Ветви, нижележащие – поддеревья, вершины – потомки, листья – не ссылаются на другие узлы.

  1. Бинарные деревья. Вставка элемента.

Дерево, каждая вершина которого имеет не более 2-х потомков. Особенность – значения вершин левого поддерева меньше, правого – больше чем значение в самой вершине.

  1. Бинарные деревья. Удаление элемента.

3 варианта: удаляемый узел – лист, с 1 поддеревом, с 2 поддеревьями(найти следующий за ним узел, извлечь его из дерева и заменить им удаляемый узел).

  1. Бинарные деревья. Поиск. Алгоритм представления любого дерева и леса бинарными деревьями.

Основные операции поиска для бинарного дерева – нахождение конкретного значения, макс/мин, последующего, предыдущего для данного.

  1. Способы обхода бинарного дерева: нисходящий, восходящий, смешанный.

Нисходящий – от корневой вершины вниз к листьям.

Восходящий – от листьев вверх к корню.

Смешанный – от самого левого листа дерева через корень к самому правому листу.

  1. Поиск минимальной длины ветви дерева.(?)

  2. Сбалансированные деревья. Показатель сбалансированности. AVL-деревья.

Дерево, для каждого узла которого высота 2-х его поддеревьев различается не более чем на 1.

Узлы : левоперевешивающие(самый длинный путь по левому поддереву на 1 больше чем по правому), правоперевешивающие, сбалансированные.

  1. Виды балансировки деревьев. Балансировка через массив.

Операции балансировки : однократный правый(RR), однократный левый(LL), двукратный лево-правый(LR), двукратный право-левый(RL) повороты узлов.

  1. Красно-черные деревья.

Каждый узел дерева окрашен либо в красный, либо в черный, причем: каждый нулевой узел – черный, корневой – черный, у красного дети черные, всякий путь от корня к произвольной вершине имеет одинаковое кол-во черных узлов.

  1. Приложения деревьев. Дерево Хаффмана.

  2. Бинарная куча. Проверка основного свойства кучи.

Массив, обладающий определенными свойствами упорядоченности. По массиву строится дерево причем для всех i родитель >= потомкам. Проверка основного свойства кучи осуществляется с помощью процедуры heapify(проверяет, если дети >родителя –меняет местами).

  1. Бинарная куча. Определение родительской и дочерних вершин.

Для каждого элемента массива можно определить левую и правую вершины, кроме листьев, и наоборот, для всех, кроме корня можно определить родителя.

  1. Бинарная куча. Алгоритм построения кучи из произвольного массива.

buildheap(последовательно вызывает heapify для всех элементов, в порядке убывания номера).

  1. Бинарная куча. Извлечение наибольшего элемента. Оценка сложности

Extractmax( извлекает максимальный элемент не нарушая основного св-ва).

  1. Бинарная куча. Добавление элемента.

insertheap – добавляет новый элемент не нарушая основного свойства.

  1. Обзор куч: левосторонние, биномиальные, фибоначевы, тонкие и др. Оценка сложности(?)

Биномиальная - это набор биномиальных деревьев, узлам которых приписаны элементы взвешенного множества в соответствии с кучеобразным порядком, при котором вес элемента, приписанного узлу, не превосходит весов элементов, приписанных его потомкам.

Название рассматриваемых куч связано с использованием чисел Фибоначчи при анализе трудоемкости выполнения операций.

  1. Хэш-таблицы. Понятие, назначение и принцип организации.

Сочетание массивов и списков, структура для хранения и получения динамических данных.

Работа с одним большим множеством сводится к работе с массивом небольших множеств.