
- •Понятие алгоритма и свойства алгоритмов.
- •Формализация понятия алгоритма: машина Тьюринга. Представление машин Тьюринга с помощью диаграмм. Табличное представление программ машины Тьюринга. Композиция машин Тьюринга. Примеры.
- •Двумерная таблица
- •С помощью диаграммы
- •Формализация понятия алгоритма: нормальные алгорифмы Маркова, определение и выполнение. Примеры.
- •Вычислимые функции. Базовый набор функций и операции над функциями: суперпозиция, примитивная рекурсия, минимизация. Классы вычислимых функций. Примеры.
- •Проблема алгоритмической разрешимости. Примеры неразрешимых алгоритмических проблем.
- •Методы разработки алгоритмов. Суперпозиция, итерация, рекурсия и др.
- •Технология разработки программ. Технология и методы тестирования программ.
- •Составление алгоритма.
- •Создание документации, помощи.
- •Рекурсивные алгоритмы: определение и виды рекурсии. Реализация рекурсии и использование стека. Рекурсия и итерация. Примеры, сравнение.
- •Задача анализа сложности алгоритмов. Временная и емкостная сложности. Оценки сложности. Использование управляющего графа для оценки сложности линейных и ветвящихся алгоритмов.
- •Оценка сложности циклических алгоритмов. Примеры.
- •Количество повторений вложенного цикла не зависит от параметра внешнего цикла
- •Количество повторений вложенного цикла зависит от параметра внешнего цикла
- •Оценка сложности рекурсивных алгоритмов: рекурсия с одним и многими рекурсивными вызовами, случай косвенной рекурсии.
- •If … then процедура_1
- •Оптимизация алгоритмов. Примеры.
- •Понятие сложности задачи и классы сложности задач. Понятие сводимости, полиномиальная сводимость.
- •Методы сортировок: сортировка массивов простыми включениями, сортировка массивов простым выбором, сортировка обменами. Анализ сложности алгоритмов сортировки.
- •Сортировка методом простого выбора
- •Сортировка методом простых вставок (метод прямого (простого) включения)
- •2 Пересылки записей
- •1 Пересылка записи
- •Методы сортировок: алгоритм быстрой сортировки. Анализ сложности алгоритма быстрой сортировки.
- •Обзор методов сортировок: сортировка Шелла, пирамидальная сортировка, сортировка слияниями, Шейкер-сортировка, сортировка подсчетом, цифровая сортировка и др.
- •Методы поиска: линейный поиск, метод бинарного поиска, поиск с помощью бинарного дерева, метод случайного поиска и др.
- •Алгоритмы внешней сортировки: метод естественного слияния, метод сбалансированного слияния. Двухпутевая и многопутевая реализации. Фибоначчиева сортировка.
- •Метод квадратичного рехеширования.
- •Рекурсивные типы данных: определение, примеры.
- •Id:integer; {номер вершины}
- •Операции над линейными списками: создание списков, включение элементов в списки (рассмотреть различные способы). Виды связных списков.
- •Операции над линейными списками: удаление элементов списков. Поиск элементов списков, сравнение списков.
- •Операции над бинарными деревьями: включение вершины в дерево. Обход деревьев, подсчет числа вершин в дереве. Подсчет числа вершин, удовлетворяющих заданному условию.
- •Операции над бинарными деревьями: удаление вершины дерева.
- •Понятие сбалансированности бинарного дерева. Приведение дерева к авл-сбалансированному виду: виды и формулы поворотов.
- •Анализ сложности алгоритмов работы с бинарными деревьями.
- •Деревья со многими потомками. Специальные виды деревьев: деревья формул, б-деревья, 2-3 деревья, красно-черные деревья.
- •Понятие графа. Способы представления графов. Операции над графами: добавление вершины, добавление дуги, создание графа.
- •Операции над графами: поиск вершины, удаление вершины, удаление дуги, текстовый вывод графа.
- •Алгоритмы поиска на графах: поиск в глубину и в ширину.
- •Примеры алгоритмов на графах (поиск кратчайшего пути, поиск циклов, алгоритм построения остовного дерева, выделения связных компонентов…).
- •Формальные языки и грамматики. Определение языка, описание языка. Понятие грамматики.
- •Классификация формальных языков. Понятие вывода.
- •Описание синтаксиса языка с помощью синтаксических диаграмм и бнф. Примеры.
- •Основы теории информации. Понятие энтропии. Измерение информации: вероятностный и алфавитный подходы.
- •Основы теории кодирования информации. Метод Шеннона-Фано. Код Хаффмана.
- •1. Принцип программного управления.
- •2. Принцип однородности памяти.
- •3. Принцип адресности.
- •Конвейеризация вычислений.
- •Иерархия запоминающих устройств эвм
- •Устройство процессора. Понятие архитектуры cisc, risc, vliw.
- •Работа процессора
- •Cisc-процессоры
- •Risc-процессоры
- •Misc-процессоры
- •Vliw-процессоры
- •Типы данных, поддерживаемые процессорами Intel, форматы данных.
- •Система команд Intel, классификация команд, форматы команд.
- •Объектно-ориентированное программирование (ооп): основные понятия.
Проблема алгоритмической разрешимости. Примеры неразрешимых алгоритмических проблем.
Алгоритмическая проблема – проблема, в которой требуется найти единый метод (алгоритм) для решения бесконечной серии однотипных единичных задач.
Будем считать, что задача м.б. решена, если построен алгоритм, приводящий к результату, а именно к решению задачи. В этом случае задачу будем называть алгоритмически разрешимой.
Кроме того, будем считать алгоритмически разрешимой, для которой не построен алгоритм, а только каким-либо математическим методом доказали, что алгоритм может быть построен.
Если для некоторой задачи не удается построить алгоритм или доказать возможность его существования, тогда нужно попытаться доказаь невозможность построения адгоритма для данной задачи. Если она доказана, то задачу называют алгоритмически неразрешимой.
1900 Гилберт сделал доклад о 23 открытых проблемах.
10-я проблема – задача о разрешимости диофантова уравнения.
P(x1…xn)=Q(x1…xn), P,Q – полиномы
Задано уравнение с произвольными неизвестными и целочисленными коэффициентами. Указать способ, при помощи которого можно было бы после конечного числа операций установить, разрешимо ли это уравнение в целых числах.
1970 Матиясевич доказал, что 10 проблема Гилберта является алгоритмически неразрешимой.
Ставить и решать алгоритмически точно вопросы алгоритмически разрешимых задач стало возможно после появления формального (точного) определения понятия алгоритма.
Доказательство неразрешимости проблемы не означает, что не могут быть созданы алгоритмы, решающие ее частный случай.
Докажем существование алгоритмически неразрешимых проблем. В качестве понятия, уточняющего понятие алгоритма, используем машину Тьюринга.
От противного.
Предположим, что для любой функции существует машина Тьюринга.
Утверждение 1. Множество всех машин Тьюринга счётно. Программу машины Тьюринга можно записать одним длинным, но конечным словом.
Поскольку множество всех конечных слов в конечном алфавите счетно, следовательно множество всех м.Т. также счетно.
Утверждение 2. Множество всех функций несчетно.
Предположим, что можно перенумеровать все функции. Докажем, что существует функция, у которой нет номера путем построения этой функции.
U(n)=1, если fn(n) не определена
=fn(n)+1, если fn(n) определена
N – номер одной из уже пронумерованных функций.
Предположим, мы ошиблись и у нашей вновь построенной u есть номер, и он равен m
U(m)=1, если fm(m) не определена
=fn(m)+1, если fm(m) определена
Если fm(m) не определена, то почему-то возвращает результат 1. Предположение, что u принадлежит списку перенумерованных функций неправильное, значит множество всех функций несчетно.
Тогда существует функция, у которой нет соответствующей машины Тьюринга, ее алгоритма
Методы разработки алгоритмов. Суперпозиция, итерация, рекурсия и др.
Ключевым подходом в алгоритмизации является сведение задачи к подзадачам, а способ такого сведения определяет метод разработки алгоритмов.
Суперпозиция – самый простой метод. Состоит в том, что решение сложной задачи представляется как последовательное решение более простых задач, при этом результат решения предыдущей задачи используется в качестве входных данных для решения следующей задачи.
Разбивать задачу на подзадачи, можно:
разбивать исходные и выходные данные на части и упрощать их; под разбиением понимаем разделение структуры данных на части, например, разделение вектора из десяти компонент на два по пять компонент или разделение текста на предложения; под упрощением понимаем такие ситуации, когда, например X – число и его нельзя разбить на части, но его можно разложить в сумму X=X1+X2, так, что результаты f(X1) и f(X2), отыскиваются проще, чем f(X).
производить декомпозицию функции f, т.е превращать ее в суперпозицию более простых, f(X)=g(h(s(X))) или f(X)=g(X,h(X),s(X))
На практике используется совмещение этих методов.
Итерация – частный случай предыдущего метода. Разложение задачи в последовательность однородных подзадач.
f(X)=g(g(g(g(X))) или f(X)=g(X,s(X),s(X),s(X))
Однородность подзадач позволяет значительно сократить длину текста алгоритма за счет применения операторов повторения (циклов).
Метод последовательного приближения
Частный случай итерации. Сначала каким-либо образом угадывается значение x0, близкое к решению. Далее это решение «уточняется». Чаще всего абсолютная точность недостижима, поэтому процесс потенциально бесконечен. Для того чтобы этого избежать, несколько изменяют начальную формулировку задачи: требуется отыскать не точное решение, а приближенное.
Метод обратной функции
Иногда обратная задача решается значительно более просто, чем исходная. Тогда имеющийся алгоритм решения обратной задачи, можно использовать для решения прямой задачи.
Рекурсия
При использовании рекурсии решение задачи сводится к решению той же самой задачи, но на более простом входном наборе данных. При этом появляется необходимость в дополнительных вычислениях, связанных со сведением одного набора данных к другому. При вычислении рекурсивной функции всегда выделяется рекурсивная и не рекурсивная части.
Метод полного перебора
Метод полного перебора применим в тех случаях, когда решение принадлежит некоторой конечной области и может быть найдена простая функция для проверки выбранного решения. Сложность заключается в том, что при увеличении количества исходных данных быстро увеличивается необходимое число проверок.