
- •Понятие алгоритма и свойства алгоритмов.
- •Формализация понятия алгоритма: машина Тьюринга. Представление машин Тьюринга с помощью диаграмм. Табличное представление программ машины Тьюринга. Композиция машин Тьюринга. Примеры.
- •Двумерная таблица
- •С помощью диаграммы
- •Формализация понятия алгоритма: нормальные алгорифмы Маркова, определение и выполнение. Примеры.
- •Вычислимые функции. Базовый набор функций и операции над функциями: суперпозиция, примитивная рекурсия, минимизация. Классы вычислимых функций. Примеры.
- •Проблема алгоритмической разрешимости. Примеры неразрешимых алгоритмических проблем.
- •Методы разработки алгоритмов. Суперпозиция, итерация, рекурсия и др.
- •Технология разработки программ. Технология и методы тестирования программ.
- •Составление алгоритма.
- •Создание документации, помощи.
- •Рекурсивные алгоритмы: определение и виды рекурсии. Реализация рекурсии и использование стека. Рекурсия и итерация. Примеры, сравнение.
- •Задача анализа сложности алгоритмов. Временная и емкостная сложности. Оценки сложности. Использование управляющего графа для оценки сложности линейных и ветвящихся алгоритмов.
- •Оценка сложности циклических алгоритмов. Примеры.
- •Количество повторений вложенного цикла не зависит от параметра внешнего цикла
- •Количество повторений вложенного цикла зависит от параметра внешнего цикла
- •Оценка сложности рекурсивных алгоритмов: рекурсия с одним и многими рекурсивными вызовами, случай косвенной рекурсии.
- •If … then процедура_1
- •Оптимизация алгоритмов. Примеры.
- •Понятие сложности задачи и классы сложности задач. Понятие сводимости, полиномиальная сводимость.
- •Методы сортировок: сортировка массивов простыми включениями, сортировка массивов простым выбором, сортировка обменами. Анализ сложности алгоритмов сортировки.
- •Сортировка методом простого выбора
- •Сортировка методом простых вставок (метод прямого (простого) включения)
- •2 Пересылки записей
- •1 Пересылка записи
- •Методы сортировок: алгоритм быстрой сортировки. Анализ сложности алгоритма быстрой сортировки.
- •Обзор методов сортировок: сортировка Шелла, пирамидальная сортировка, сортировка слияниями, Шейкер-сортировка, сортировка подсчетом, цифровая сортировка и др.
- •Методы поиска: линейный поиск, метод бинарного поиска, поиск с помощью бинарного дерева, метод случайного поиска и др.
- •Алгоритмы внешней сортировки: метод естественного слияния, метод сбалансированного слияния. Двухпутевая и многопутевая реализации. Фибоначчиева сортировка.
- •Метод квадратичного рехеширования.
- •Рекурсивные типы данных: определение, примеры.
- •Id:integer; {номер вершины}
- •Операции над линейными списками: создание списков, включение элементов в списки (рассмотреть различные способы). Виды связных списков.
- •Операции над линейными списками: удаление элементов списков. Поиск элементов списков, сравнение списков.
- •Операции над бинарными деревьями: включение вершины в дерево. Обход деревьев, подсчет числа вершин в дереве. Подсчет числа вершин, удовлетворяющих заданному условию.
- •Операции над бинарными деревьями: удаление вершины дерева.
- •Понятие сбалансированности бинарного дерева. Приведение дерева к авл-сбалансированному виду: виды и формулы поворотов.
- •Анализ сложности алгоритмов работы с бинарными деревьями.
- •Деревья со многими потомками. Специальные виды деревьев: деревья формул, б-деревья, 2-3 деревья, красно-черные деревья.
- •Понятие графа. Способы представления графов. Операции над графами: добавление вершины, добавление дуги, создание графа.
- •Операции над графами: поиск вершины, удаление вершины, удаление дуги, текстовый вывод графа.
- •Алгоритмы поиска на графах: поиск в глубину и в ширину.
- •Примеры алгоритмов на графах (поиск кратчайшего пути, поиск циклов, алгоритм построения остовного дерева, выделения связных компонентов…).
- •Формальные языки и грамматики. Определение языка, описание языка. Понятие грамматики.
- •Классификация формальных языков. Понятие вывода.
- •Описание синтаксиса языка с помощью синтаксических диаграмм и бнф. Примеры.
- •Основы теории информации. Понятие энтропии. Измерение информации: вероятностный и алфавитный подходы.
- •Основы теории кодирования информации. Метод Шеннона-Фано. Код Хаффмана.
- •1. Принцип программного управления.
- •2. Принцип однородности памяти.
- •3. Принцип адресности.
- •Конвейеризация вычислений.
- •Иерархия запоминающих устройств эвм
- •Устройство процессора. Понятие архитектуры cisc, risc, vliw.
- •Работа процессора
- •Cisc-процессоры
- •Risc-процессоры
- •Misc-процессоры
- •Vliw-процессоры
- •Типы данных, поддерживаемые процессорами Intel, форматы данных.
- •Система команд Intel, классификация команд, форматы команд.
- •Объектно-ориентированное программирование (ооп): основные понятия.
Операции над бинарными деревьями: удаление вершины дерева.
При удалении вершины со значением поля inf=x из дерева надо рассмотреть три возможных варианта
1. Узла со значение, равным х , нет.
2. Узел со значением х имеет не более одного потомка.
Если вершина является конечной или из нее выходит только одно ребро, то нужно изменить соответствующую ссылку у предшествующей вершины:
Если удаляемый узел имеет только одного "сына", то его значение
можно заменить значением этого "сына"
3. Узел со значением х имеет двух потомков.
Если у удаляемого элемента 2 "сына", заменяем его элементом с
наименьшим значением среди потомков правого "сына" (или элементом с
наибольшим значением среди потомков левого "сына")
Процедура Delete выполняет все описанные действия, используя
вспомогательную процедуру del .
procedure Delete (var root:refnode; x:integer);
var q:refnode;
procedure del(var r:refnode);
begin
if r^.right<>nil then del(r^.right)
else begin
q^.inf:=r^.inf;
q:=r;
r:=r^.left;
end
end;
begin
if root=nil then write(“Такой вершины в дереве нет”)
else if x<root^.inf then Delete(root^.left,x)
else if x>root^.inf then Delete(root^.right,x)
else
begin {удаляем вершину, на которую указывает root}
q:=root;
if q^.right=nil then
root:=q^.left
else
if q^.left=nil then
root:=q^.right
else
del(q^.left);
dispose(q);
end;
end;
Понятие сбалансированности бинарного дерева. Приведение дерева к авл-сбалансированному виду: виды и формулы поворотов.
Идеальное дерево - дерево, в котором все вершины располагаются на h уровнях: корень - на 1-м, две вершины на 2-м, четыре - на 3-м. Новая вершина может быть помещена только на h+1 уровень. Количество операций при поиске и вставке в деревьях этого вида O(h) или O(log n) .
Вырожденное дерево - дерево, которое представляет собой линейный список элементов, упорядоченных по возрастанию или убыванию информационных полей, количество операций при поиске и вставке O(n) .
Бинарное дерево назовем идеально сбалансированным, если для каждой его
вершины количество вершин в левом и правом поддереве различаются не более
чем на 1
Бинарное дерево поиска называется сбалансированным по высоте, если для
каждой его вершины высота ее двух поддеревьев различается не более, чем на 1.
Деревья, удовлетворяющие этому условию, часто называют АВЛ-деревьями
Есть 4 варианта нарушения балансировки:
LL-поворот
Надо преобразовать дерево t в новую форму: (A x B) z R ⇒ A x (B z R)
p1 := p^.left;
p^.left := p1^.right;
p1^.right := p;
p := p1;
RR-поворот
Симметричная ситуация имеет место, если новая вершина включается в
поддерево R дерева t=A x (b z R) . В этом случае преобразование балансировки
будет обратным: A x (B z R) ⇒ (A x B) z R
p1 := p^.right;
p^.right := p1^.left;
p1^.left := p;
p := p1;
LR-поворот
Преобразование (A x (C y D)) z R ⇒ (A x C) y (D z R)
Фрагмент программы:
p1 := p^.left;
p2 := p1^.right;
p1^.right := p2^.left;
p2^.left := p1;
p^.left := p2^.right;
p2^.right := p;
p := p2;
RL-поворот
Двукратный (двойной) R-L-поворот выполняется, когда «перевес» идет по
пути R-L от узла с нарушенной балансировкой. Выполняется преобразование:
A x ((C y D) z R) ⇒ (A x C) y (D z R) .
Фрагмент программы:
p1 := p^.right;
p2 := p1^.left;
p1^.left := p2^.right;
p2^.right := p1;
p^.right := p2^.left;
p2^.left := p;
p := p2;