
- •Понятие алгоритма и свойства алгоритмов.
- •Формализация понятия алгоритма: машина Тьюринга. Представление машин Тьюринга с помощью диаграмм. Табличное представление программ машины Тьюринга. Композиция машин Тьюринга. Примеры.
- •Двумерная таблица
- •С помощью диаграммы
- •Формализация понятия алгоритма: нормальные алгорифмы Маркова, определение и выполнение. Примеры.
- •Вычислимые функции. Базовый набор функций и операции над функциями: суперпозиция, примитивная рекурсия, минимизация. Классы вычислимых функций. Примеры.
- •Проблема алгоритмической разрешимости. Примеры неразрешимых алгоритмических проблем.
- •Методы разработки алгоритмов. Суперпозиция, итерация, рекурсия и др.
- •Технология разработки программ. Технология и методы тестирования программ.
- •Составление алгоритма.
- •Создание документации, помощи.
- •Рекурсивные алгоритмы: определение и виды рекурсии. Реализация рекурсии и использование стека. Рекурсия и итерация. Примеры, сравнение.
- •Задача анализа сложности алгоритмов. Временная и емкостная сложности. Оценки сложности. Использование управляющего графа для оценки сложности линейных и ветвящихся алгоритмов.
- •Оценка сложности циклических алгоритмов. Примеры.
- •Количество повторений вложенного цикла не зависит от параметра внешнего цикла
- •Количество повторений вложенного цикла зависит от параметра внешнего цикла
- •Оценка сложности рекурсивных алгоритмов: рекурсия с одним и многими рекурсивными вызовами, случай косвенной рекурсии.
- •If … then процедура_1
- •Оптимизация алгоритмов. Примеры.
- •Понятие сложности задачи и классы сложности задач. Понятие сводимости, полиномиальная сводимость.
- •Методы сортировок: сортировка массивов простыми включениями, сортировка массивов простым выбором, сортировка обменами. Анализ сложности алгоритмов сортировки.
- •Сортировка методом простого выбора
- •Сортировка методом простых вставок (метод прямого (простого) включения)
- •2 Пересылки записей
- •1 Пересылка записи
- •Методы сортировок: алгоритм быстрой сортировки. Анализ сложности алгоритма быстрой сортировки.
- •Обзор методов сортировок: сортировка Шелла, пирамидальная сортировка, сортировка слияниями, Шейкер-сортировка, сортировка подсчетом, цифровая сортировка и др.
- •Методы поиска: линейный поиск, метод бинарного поиска, поиск с помощью бинарного дерева, метод случайного поиска и др.
- •Алгоритмы внешней сортировки: метод естественного слияния, метод сбалансированного слияния. Двухпутевая и многопутевая реализации. Фибоначчиева сортировка.
- •Метод квадратичного рехеширования.
- •Рекурсивные типы данных: определение, примеры.
- •Id:integer; {номер вершины}
- •Операции над линейными списками: создание списков, включение элементов в списки (рассмотреть различные способы). Виды связных списков.
- •Операции над линейными списками: удаление элементов списков. Поиск элементов списков, сравнение списков.
- •Операции над бинарными деревьями: включение вершины в дерево. Обход деревьев, подсчет числа вершин в дереве. Подсчет числа вершин, удовлетворяющих заданному условию.
- •Операции над бинарными деревьями: удаление вершины дерева.
- •Понятие сбалансированности бинарного дерева. Приведение дерева к авл-сбалансированному виду: виды и формулы поворотов.
- •Анализ сложности алгоритмов работы с бинарными деревьями.
- •Деревья со многими потомками. Специальные виды деревьев: деревья формул, б-деревья, 2-3 деревья, красно-черные деревья.
- •Понятие графа. Способы представления графов. Операции над графами: добавление вершины, добавление дуги, создание графа.
- •Операции над графами: поиск вершины, удаление вершины, удаление дуги, текстовый вывод графа.
- •Алгоритмы поиска на графах: поиск в глубину и в ширину.
- •Примеры алгоритмов на графах (поиск кратчайшего пути, поиск циклов, алгоритм построения остовного дерева, выделения связных компонентов…).
- •Формальные языки и грамматики. Определение языка, описание языка. Понятие грамматики.
- •Классификация формальных языков. Понятие вывода.
- •Описание синтаксиса языка с помощью синтаксических диаграмм и бнф. Примеры.
- •Основы теории информации. Понятие энтропии. Измерение информации: вероятностный и алфавитный подходы.
- •Основы теории кодирования информации. Метод Шеннона-Фано. Код Хаффмана.
- •1. Принцип программного управления.
- •2. Принцип однородности памяти.
- •3. Принцип адресности.
- •Конвейеризация вычислений.
- •Иерархия запоминающих устройств эвм
- •Устройство процессора. Понятие архитектуры cisc, risc, vliw.
- •Работа процессора
- •Cisc-процессоры
- •Risc-процессоры
- •Misc-процессоры
- •Vliw-процессоры
- •Типы данных, поддерживаемые процессорами Intel, форматы данных.
- •Система команд Intel, классификация команд, форматы команд.
- •Объектно-ориентированное программирование (ооп): основные понятия.
Оценка сложности циклических алгоритмов. Примеры.
Управляющий граф содержит цикл, но не содержит вложенных циклов. В этом случае, временная сложность зависит от количества повторений цикла.
Введем обозначения:
Tтела цикла – временная сложность операторов, выполняемых в теле цикла;
Tусловия – количество операций, выполняемых при проверке условия цикла;
k – количество повторений тела цикла;
T(k) – временная сложность выполнения цикла, как функция, зависящая от параметра k.
Рассмотрим часто встречающиеся случаи:
1) Цикл с параметром c заголовком for i:=1 to n do
k = n, T(k) = k∙Tтела цикла.
2) Цикл с параметром с заголовком в общем виде for i:=a to b do
k = (b–a)+1, T(k) = k∙Tтела цикла.
3) Цикл с предусловием While … Do. Условие в таком цикле всегда проверяется на 1 раз больше по сравнению с количеством выполнений тела цикла.
T(k) = (k+1) ∙Tусловия + k∙Tтела цикла, k ≥ 0.
4) Цикл с постусловием Repeat … Until. Количество выполнений тела цикла совпадает с количеством проверок условия цикла, минимально тела цикла выполняется 1 раз.
T(k) = k ∙Tусловия + k∙Tтела цикла, k ≥ 1.
В случае, когда число повторений цикла равно константе, нижняя, верхняя и средняя оценки сложности совпадают, и их вычисление не требует особых пояснений. Рассмотрим случай, когда число повторений цикла является переменной величиной. В этом случае:
– Нижняя оценка сложности Tmin соответствует случаю, когда тело цикла выполняется минимально возможное число раз, обозначим это число kmin .
– Верхняя оценка сложности Tmax соответствует случаю, когда тело цикла выполняется максимально возможное число раз, обозначим это число kmax.
– Средняя оценка сложности вычисляется как сумма произведений вероятности того, что цикл выполнится k раз, на сложность алгоритма при k итерациях цикла, при этом значение k последовательно пробегает все значения от kmin до kmax.
Taverage
=
Пример:
Рассмотрим фрагмент алгоритма, в котором
n – целое число, n
и все значения n равновероятны.
x:=0;
For i:=1 to n do
x:=x+i;
Построим управляющий граф, внутри каждой вершины графа напишем ее вес.
Функция сложности T(k) = 1+2k. Поскольку количество повторений тела цикла k=n, можно переписать функцию сложности по-другому T(n) = 1+2n. Таким образом, параметром V, характеризующим сложность входных данных, является n (V=n).
Минимально цикл выполняется 0 раз, следовательно, Tmin = T(0) = 1.
Максимально возможное число повторений тела цикла равно 10, значит Tmax=T(10)=1+2∙10=21.
Поскольку все значения n
равновероятны p0 =
p1 = … =
p10 =
.
Tavareage
=
∙T(0)
+
∙T(1)
+ … +
∙T(10)
=
∙
(1 + 3 + 5 + …+ 21) =
∙
= 11.
Управляющий граф содержит вложенные циклы. Возможно два случая:
Количество повторений вложенного цикла не зависит от параметра внешнего цикла
Построить функцию сложности итеративного алгоритма умножения двух квадратных матриц А = {aij} и B = {bij} размера n x n, результатом которого является матрица C = {cij}, также размером n x n.
procedure MULTIPLY (n: integer; a, b: matrix; var c: matrix);
var i, j, k: integer;
begin
for i := 1 to n do {Цикл 1}
for j := 1 to n do {Цикл 2 и начало тела цикла 1}
begin
c[i, j] := 0; {Начало тела цикла 2}
for k := 1 to n do {Цикл 3}
c[i, j] := c[i, j] + a[i, k] * b[k, j]; {Тело цикла 3}
end {Конец тела цикла 2; конец тела цикла 1}
end;
Тип данных matrix определен вне процедуры как двумерный массив. Время доступа к элементам не учитываются при анализе алгоритмов. Прежде всего, выберем параметр V. Простой анализ текста показывает, что за параметр сложности данных можно взять размер n матриц, участвующих в вычислениях. Поскольку процедура представляет собой цикл по переменной i, то ее временная сложность
Тα(n) = n·T(1).
В свою очередь,
T(1) = n·T(2)
и, следовательно,
Тα(n) = n·(n·T(2)).
Тело цикла 2 состоит из одного оператора присваивания и цикла 3. Таким образом,
Тα(n) = n·(n·(1 + n·T(3))).
Тело цикла 3 включает умножение, сложение и присваивание (3 операции). Окончательно получаем
Тα(n) = n·(n·(1 + n·3)) = 3n3 + n2