
- •1. Понятия «информация» и наука «информатика». Их происхождение. Информация как смысловое свойство материи
- •2. Подходы к определению понятия «информация»
- •3. Носители информации. Знаки и сигналы
- •4. Виды и свойства информации
- •5,6,7. Измерение информации
- •8. Общая характеристика информационных процессов
- •9. Кодирование информации
- •10. Неравномерное кодирование, проблема разности кодов, код Фано
- •11. Код Хаффмана. Блочное кодирование
- •12. Избыточность кода, первая теорема Шеннона
- •13. Передача информации, основные составляющие процесса передачи информации, характеристики, процесс обработки информации, формулировка второй теоремы Шеннона
- •14. Интуитивное понятие алгоритма, его основные свойства, роль алгоритмов, способы представления алгоритмов
- •15. Формализация понятия алгоритма, конкретные реализации, нормальные подстановки Маркова, существование алгоритмически неразрешимых проблем
- •16. Понятие формального языка, проблемы применения естественных языков для представления алгоритмов, нотация Бэкуса-Наура, как способ описания формального языка
- •17. Время выполнения алгоритмов, понятие сложности алгоритма, классификация скоростей роста, некоторые приемы определения сложности алгоритмов (правило сумм и т.Д.), асимптотическая сложность
- •18. Алгоритмы сортировки, оценка сложности конкретных алгоритмов (метод пузырька или вставки)
- •19. Классы входных данных
- •20. Полиномиальные алгоритмы. Задачи np-класса. Примеры
- •23. Эвристический подход, понятие "жадного" алгоритма, пример решения задачи коммивояжера, алгоритм Крускала
- •24. Алгоритмы на графах, решение задачи раскраски графа с помощью жадного алгоритма, принципиальная теоретическая важности задачи раскраски, ее применение
- •25. Алгоритмы на графах, решение задачи о минимальной телефонной сети, построение минимального оставного дерева
18. Алгоритмы сортировки, оценка сложности конкретных алгоритмов (метод пузырька или вставки)
Несколько правил анализа программ:
Время выполнения операторов присваивания, чтения и записи обычно имеют порядок константы O(1).
Время выполнения последовательности операторов определяется с помощью правил сумм.
Время выполнения условных операторов состоит из времени выполнения условно исполняемых операторов и времени выполнения самого выражения.
Время выполнения логического выражения имеет порядок O(1).
Время выполнения всей конструкции if then else состоит из времени выполнения условия и наибольшего из времени, необходимого для исполнения операторов, исполняемых при значении true или false.
Время выполнения цикла является суммой времён всех исполняемых итераций цикла, в свою очередь состоящих из времени выполнения операторов тела цикла и времени вычисления прекращения условия цикла (обычно O(1))
Время выполнения каждого цикла, если их несколько, определяется отдельно.
Пример: сортировка по возрастанию заданного массива методом “пузырька”.
begin
(1) for i:=1 to n-1 do
(2) for j:=n downto i+1 do
(3) if A[j-1]>A[j] then begin
(4) t:= A[j-1];
(5) A[j-1] := A[j];
(6) A[j]:= t;
end;
end;
(4), (5), (6) O(max(1,1,1)) = O(1)
Внутренний цикл выполняется n-i раз. O(n-i)·O(1)=O(n-i).
Оператор
в (1) строке выполняется n-1
раз ⇒
Время работы алгоритма: O((n2-n)/2) [O(n2)]
Сложность сортировки выбором, перемешиванием, вставками и пузырьком: O(n2). Сортировка слиянием: O(n log n).
19. Классы входных данных
Роль входных данных в анализе алгоритмов велика. Выделить группы; определить вероятности, с которыми элементы принадлежат группам; надо чтобы алгоритм в группах работал одно и тоже время.
Наилучший случай. Набор данных, при которых алгоритм проработает минимальное время.
Наихудший случай. Очень важен: максимальное время работы, которое определяет сложность задачи.
Средний случай.
В основе анализа лежит определение различных групп, на которые следует разбить возможные наборы входных данных.
Определяется вероятность, с которой входной набор данных принадлежит каждой группе
.
Подсчитывается время работы алгоритма на данных каждой группы
.
Среднее
время работы вычисляется по формуле:
n – размер данных
m – число групп
i – номер группы
for i := 1 to n do
if (a[ i ] = target) then return i
end if
end for
m = N
,
При записи алгоритма на первом этапе выбирают значимую операцию или группу операций. На втором — какие из этих операций содержатся в теле алгоритма. Все операторы сравнения считаются эквивалентными. В качестве значимых используют операции двух типов: сравнение и арифметические операции.
20. Полиномиальные алгоритмы. Задачи np-класса. Примеры
До сих пор все рассматриваемые алгоритмы и задачи решались за разумное время. Все эти алгоритмы имели полиномиальную сложность.
Задача
называется полиномиальной, т. е.
Относятся к классу P,
если
k-const
и алгоритм, решающий эту задачу за время
,
где n
– длина входа алгоритма.
При этом предполагается худший случай. Для большинства реальных задач из класса P k<b, тогда про задачи класса P – это задачи, решаемые за реальное время.
Преимущества:
Класс P инвариантен по модели вычислений.
Класс P замкнут (сумма и произведение полиномов есть полином).
Нетрудно убедится, что задачи, которые мы не можем отнести к полиномиальным.
Задача о коммивояжере:
Задан набор городов. Определить порядок городов, посетив все по одному разу и вернуться в начальный так, чтобы путь(стоимость) был минимальным.
8 городов — 40320 вариантов. 10 городов — 3628800.
Предположим, что есть алгоритм. Подсчитать стоимость путешествия через 15 городов - уйдёт 40 лет. Для 20 городов — 100 млн. компьютеров должны будут работать 9 месяцев.
Переборный
вариант этой задачи относится к классу
.
Будет заниматься поиском путей решения таких задач.
Класс NP.
Задачи недетерминированной полиномиальной сложности. Значение слов объясняется следующим: на 1-ом шаге определяется недетерминированный алгоритм, генерирующий возможное решение задачи; на 2-ом шаге проверяется действительно ли ответ, полученный на 1-ом шаге является решением задачи.
Проблема:
не знаем сколько применять оба шага.
Число обращений к ним может оказаться
экспоненциальным,
или
.
Задача о коммивояжере принадлежит классу NP. Примеры: о раскраске графа, о построении минимального оставного дерева.
Для каждой задачи можно предложить этот двухшаговый алгоритм.
NPC (NP-полные) задачи. Одним из способов решения задачи является приведение её к другой задаче. Среди задач класса NP выделяется класс NPC задач, они относятся к самым сложным задачам NP. Если нам удастся найти полиномиальное решение какой-нибудь из них, то это будет означать, что все задачи класса NP будут допускать полиномиальный алгоритм решения.
Доказывается, что задача является NP-полной. Указывается способ сведения к ней всех задач класса NP.
Задача о конъюнктивной нормальной форме (представляет собой булево выражение, (связанных между собой операцией and элементов или их отрицаний) связанных операцией or).
Существуют ли у переменных такие значения истинности, подстановка которых делает всё выражение истинным. Число переменных и сложность не ограничены, поэтому число комбинаций велико, что относит её к NP, а в 1971 году Кук доказал полноту задачи о КНФ.
Типичные NP задачи:
О раскраске графа.
О раскладке по ящикам.
Упаковка.
Об истинности КНФ.
Коммивояжера.
21=22. Обзор методов конструирования эффективных алгоритмов, примеры решаемых задач
1. Метод декомпозиции ("разделяй и властвуй"). Основная идея предполагает такую декомпозицию, что из более мелких задач легко получить решение задачи.
+ легкость разработки
+ в большинстве случаев дает более эффективный алгоритм.
Рекурсия. "Ханойская башня". На стержне n-дисков. На больший ложится меньший, но не наоборот. Количество операций 2n-1. Нередко не удается разбить задачу на подзадачи. Методом декомпозиции решаются многие задачи: сортировка вставками - умножение длинных чисел.
2. Динамическое программирование. Иногда не удается разбить задачи на более мелкие задачи. В таких случаях помогают методы динамического программирования. Беллман ввел понятие динамического программирования для характеристики алгоритмов, меняющихся от ситуации. Динамическое программирование - процесс пошагового решения задачи., когда выбирается одно решение из множества, которые оптимизирует целевую функцию.
- метод оптимального распределения ресурсов
- поиск кратчайшего пути в сетях
- задача триангуляции (выбрать такую совокупность хорд, что никакие две хорды не будут пересекаться)
3. Вероятностный алгоритм. Алгоритмы, в основе которых лежат вероятностные методы.
- Монте-Карло (выдают результат, его правильность возрастает с увеличением времени работы)
- Лас-Вегаса (никогда не дает неправильного результата и чем дольше работает, тем больше вероятность правильности)
- Шервудский (похож на Лас-Вегас. Применяется, когда разница между средним и наихудшим случаем очень велико).
4. Метод ветвей и границ.
- поиск минимальной и максимальной конфигурации
- задача коммивояжера
5. Алгоритмы моделирования поведения биологических процессов и систем.
- алгоритм моделирования наследственности (алгоритмы, моделирующие поведение, в том числе генетический алгоритм)
- нейросетевые
- эволюционные вычисления
- муравьиные алгоритмы
Моделирует процессы саморегуляции на основе низкоуровневых взаимодействий. (прямое общение - контакт, косвенное - феромоны).