Слайд 2Понятие
Алгоритм – это формально описанная вычислительная процедура, получающая исходные данные и выдающая
![Понятие Алгоритм – это формально описанная вычислительная процедура, получающая исходные данные и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-1.jpg)
результат вычисления на выход.
Слайд 3Понятие через отображение
Алгоритм – это некая функция или отображение, которая определяется как
![Понятие через отображение Алгоритм – это некая функция или отображение, которая определяется](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-2.jpg)
F: X->Y
X – множество исходных данных
Y – множество значений
Слайд 4Виды алгоритмов
Механический или жесткий
Вероятностный
Эвристический
Линейный
Ветвящийся
Циклический
Вспомогательный
![Виды алгоритмов Механический или жесткий Вероятностный Эвристический Линейный Ветвящийся Циклический Вспомогательный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-3.jpg)
Слайд 5Свойства алгоритма
Детерминированность
Понятность
Результативность
Дискретность
Массовость
Конструктивность объектов
![Свойства алгоритма Детерминированность Понятность Результативность Дискретность Массовость Конструктивность объектов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-4.jpg)
Слайд 6Детерминированность
Предписание, задающее алгоритм должно выполняться однозначно и последовательно для получения конкретного и
![Детерминированность Предписание, задающее алгоритм должно выполняться однозначно и последовательно для получения конкретного и однозначного результата](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-5.jpg)
однозначного результата
Слайд 7Понятность
Все действия должны быть однозначно поняты и выполнены исполнителем, т.е. должны принадлежать
![Понятность Все действия должны быть однозначно поняты и выполнены исполнителем, т.е. должны](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-6.jpg)
системе действий данного исполнителя
Слайд 8Результативность
Указывает на наличие таких исходных данных, для которых реализуемый по заданному алгоритму
![Результативность Указывает на наличие таких исходных данных, для которых реализуемый по заданному](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-7.jpg)
вычислительный процесс должен через конечное число шагов остановиться и выдать искомый результат
Слайд 9Дискретность
Алгоритм представляет собой упорядоченное конечное множество шагов для получения результата, то есть
![Дискретность Алгоритм представляет собой упорядоченное конечное множество шагов для получения результата, то](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-8.jpg)
в любом алгоритме для каждого шага (кроме последнего), можно указать следующий за ним шаг.
Слайд 10Массовость
Каждый алгоритм предназначен для решения любой задачи из некоторого бесконечного множества однотипных
![Массовость Каждый алгоритм предназначен для решения любой задачи из некоторого бесконечного множества однотипных задач](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-9.jpg)
задач
Слайд 11Конструктивность объектов
Исходные объекты, промежуточные и конечные результаты – это конструктивные объекты, которые
![Конструктивность объектов Исходные объекты, промежуточные и конечные результаты – это конструктивные объекты,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-10.jpg)
могут быть построены целиком или допускают кодирование в каких-то алфавитах
Слайд 12Эффективность алгоритма
Скорость сходимости
Время выполнения
Удобство использования
Простота
Читаемость
![Эффективность алгоритма Скорость сходимости Время выполнения Удобство использования Простота Читаемость](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-11.jpg)
Слайд 13Способы описания алгоритма
Словестное описание
Математическая запись
Графическая запись
Запись на псевдокоде
Запись на ЯП
![Способы описания алгоритма Словестное описание Математическая запись Графическая запись Запись на псевдокоде Запись на ЯП](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-12.jpg)
Слайд 14Правильный алгоритм
Алгоритм считается правильным, если при любом допустимом входе он заканчивает работу
![Правильный алгоритм Алгоритм считается правильным, если при любом допустимом входе он заканчивает](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-13.jpg)
и выдает результат, удовлетворяющий требованиям задачи.
Алгоритм называется однозначным, если для одних и тех же данных он дает один и тот же ответ
Слайд 15Неправильный алгоритм
Не завершает работу
Дает неверный результат
![Неправильный алгоритм Не завершает работу Дает неверный результат](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-14.jpg)
Слайд 16Типы ошибок в алгоритме
Синтаксические
(a+b*(a+c)
Семантические
S*N, S – строка, N - число
Логические
Расстояние =
![Типы ошибок в алгоритме Синтаксические (a+b*(a+c) Семантические S*N, S – строка, N](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-15.jpg)
скорость + время
Слайд 17Этапы разработки программы
Анализ постановки задач
Построение математической модели
Разработка алгоритма
Анализ алгоритма
Док-во правильности алгоритма
Реализация алгоритма
Тестирование
![Этапы разработки программы Анализ постановки задач Построение математической модели Разработка алгоритма Анализ](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-16.jpg)
программы
Оформление документации
Слайд 18Анализ постановки задач
Выяснить при этом входную и выходную информацию, определить идею решения,
![Анализ постановки задач Выяснить при этом входную и выходную информацию, определить идею](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-17.jpg)
полноту входной информации, сформулировать, накладываемые на входную информацию ограничения (то есть описать спецификации)
Слайд 19Построение математической модели
Определить какие математические структуры больше подходят для задачи, существуют ли
![Построение математической модели Определить какие математические структуры больше подходят для задачи, существуют](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-18.jpg)
аналоги решения этой задачи. После чего проверить полноту математической модели, удобство работы с ней, реализации
Слайд 20Разработка алгоритма
На этом этапе необходимо тщательно обдумать алгоритм, уяснить его достоинства и
![Разработка алгоритма На этом этапе необходимо тщательно обдумать алгоритм, уяснить его достоинства](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-19.jpg)
недостатки, постараться избавиться от последних и усилить первые
Слайд 21Анализ алгоритма
Оценить какой это алгоритм(линейный, с ветвлениями, с циклами). Т.е. оценить его
![Анализ алгоритма Оценить какой это алгоритм(линейный, с ветвлениями, с циклами). Т.е. оценить](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-20.jpg)
сложность по памяти и/или быстродействию.
Слайд 22Док-во правильности алгоритма
Предусматривает как доказательство конечности алгоритма, так и анализ его работы
![Док-во правильности алгоритма Предусматривает как доказательство конечности алгоритма, так и анализ его](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-21.jpg)
на всех ветвях на разных типах входных данных
Слайд 23Реализация алгоритма
Это означает необходимость написания программы на некотором языке программирования и отладка
![Реализация алгоритма Это означает необходимость написания программы на некотором языке программирования и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-22.jpg)
его на реальном компьютере
Слайд 24Тестирование программы
Т.е. провести ее как теоретическое, так и экспериментальное тестирование. Для алгоритма
![Тестирование программы Т.е. провести ее как теоретическое, так и экспериментальное тестирование. Для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-23.jpg)
необходимо подготовить полный набор тестов (минимальное подмножество входных данных, покрывающее все случаи)
Слайд 25Оформление документации
Описать технические характеристики, структуру входных и выходных данных, правила использования программы,
![Оформление документации Описать технические характеристики, структуру входных и выходных данных, правила использования](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-24.jpg)
при необходимости – реализуемые алгоритмы и возможности модификации.
Слайд 26Размерность задачи
Размерностью задачи (l) будем называть количество информации достаточного для описания задачи
![Размерность задачи Размерностью задачи (l) будем называть количество информации достаточного для описания задачи](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-25.jpg)
Слайд 27Сложность алгоритма
Временная сложность - T(l)
время работы алгоритма
Емкостная сложность – S(l)
объем памяти для
![Сложность алгоритма Временная сложность - T(l) время работы алгоритма Емкостная сложность –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-26.jpg)
реализации алгоритма
Слайд 28Пример
for( i=0; i < n; i++)
for( j = n-1; j >
![Пример for( i=0; i for( j = n-1; j > i; j--](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-27.jpg)
i; j-- )
if ( a[j-1] > a[j] )
swap(a[j-1], a[j]);
l = n+1
T(l) = cn2
S(l) = n+3
Слайд 29Мера сложности алгоритма
Сложность в худшем случае
Усредненная сложность
![Мера сложности алгоритма Сложность в худшем случае Усредненная сложность](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-28.jpg)
Слайд 30Сложность в худшем случае
Зная время работы в худшем случае, мы можем гарантировать,
![Сложность в худшем случае Зная время работы в худшем случае, мы можем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-29.jpg)
что выполнение алгоритма закончится за некоторое время, даже не зная, какой именно вход (данного размера) попадется.
На практике «плохие» входы (для которых время работы близко к максимуму) могут часто попадаться. Например, для базы данных плохим запросом может быть поиск отсутствующего элемента (довольно частая ситуация).
Время работы в среднем может быть довольно близко к времени работы в худшем случае. Пусть, например, мы сортируем случайно расположенные n чисел в помощью процедуры Сортировка вставками.
Слайд 31Асимптотические обозначения
Анализируя алгоритм, можно стараться найти точное число выполняемых им действий. Но
![Асимптотические обозначения Анализируя алгоритм, можно стараться найти точное число выполняемых им действий.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-30.jpg)
в большинстве случаев достаточно оценить асимптотику роста времени работы алгоритма при стремлении размера входа к бесконечности (asymptotic efficiency)
Слайд 33f(n) = о(g(n))
2n = o(n2)
log2n = o(n)
n2/2 ≠ o(n2)
![f(n) = о(g(n)) 2n = o(n2) log2n = o(n) n2/2 ≠ o(n2)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-32.jpg)
Слайд 35f(n) = ω(g(n))
2n2 = ω(n)
n = ω(ln n)
n2/2 ≠ ω(n2)
![f(n) = ω(g(n)) 2n2 = ω(n) n = ω(ln n) n2/2 ≠ ω(n2)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-34.jpg)
Слайд 37f(n) = Θ(g(n))
n2/2 = Θ(n2)
n2-n+2 = Θ(n2)
Если f(n) = Θ(g(n)) и h(n)
![f(n) = Θ(g(n)) n2/2 = Θ(n2) n2-n+2 = Θ(n2) Если f(n) =](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-36.jpg)
= Θ(g(n)), это не значит, что f(n) = h(n)
Слайд 38f(n) = Θ(g(n))
Отыскивая асимптотически точную оценку для суммы, мы можем отбрасывать члены
![f(n) = Θ(g(n)) Отыскивая асимптотически точную оценку для суммы, мы можем отбрасывать](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-37.jpg)
меньшего порядка, которые при больших n становятся малыми по сравнению с основным слагаемым.
Заметим также, что коэффициент при старшем члене роли не играет
Слайд 39f(n) = O(g(n))
f(n) = O(g(n)), если найдется c>0 и n0, что
![f(n) = O(g(n)) f(n) = O(g(n)), если найдется c>0 и n0, что](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-38.jpg)
при всех n≥ n0 выполнено
0≤f(n)≤сg(n)
Говорят, что g(n) есть верхняя оценка f(n).
Слайд 40f(n) = Ω(g(n))
f(n) = Ω(g(n)), если найдется c>0 и n0, что при
![f(n) = Ω(g(n)) f(n) = Ω(g(n)), если найдется c>0 и n0, что](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-39.jpg)
всех n≥ n0 выполнено
0≤cg(n)≤f(n)
Говорят, что g(n) есть нижняя оценка f(n).
Слайд 41Теорема
f(n) = Θ(g(n))
равносильно условию
f(n) = O(g(n)) и f(n) = Ω(g(n))
![Теорема f(n) = Θ(g(n)) равносильно условию f(n) = O(g(n)) и f(n) = Ω(g(n))](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-40.jpg)
Слайд 42Транзитивность
f(n) = о(g(n)) и g(n) = о(h(n)) => f(n) = о(h(n))
f(n) =
![Транзитивность f(n) = о(g(n)) и g(n) = о(h(n)) => f(n) = о(h(n))](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-41.jpg)
ω(g(n)) и g(n) = ω(h(n)) => f(n) = ω(h(n))
f(n) = Θ(g(n)) и g(n) = Θ(h(n)) => f(n) = Θ(h(n))
f(n) = O(g(n)) и g(n) = O(h(n)) => f(n) = O(h(n))
f(n) = Ω(g(n)) и g(n) = Ω(h(n)) => f(n) = Ω(h(n))
Слайд 43Рефлекcивность
f(n) = Θ(f(n))
f(n) = O(f(n))
f(n) = Ω(f(n))
![Рефлекcивность f(n) = Θ(f(n)) f(n) = O(f(n)) f(n) = Ω(f(n))](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-42.jpg)
Слайд 44Симметричность
f(n) = Θ(g(n)) ⬄ g(n) = Θ(f(n))
![Симметричность f(n) = Θ(g(n)) ⬄ g(n) = Θ(f(n))](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-43.jpg)
Слайд 45Обращение
f(n) = O(g(n)) ⬄ g(n) = Ω(f(n))
![Обращение f(n) = O(g(n)) ⬄ g(n) = Ω(f(n))](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-44.jpg)
Слайд 46Эффективность алгоритмов
Полиномиальные – f(n) = O(nm)
Экспоненциальные - f(n) = O(ap(n))
Факториальные f(n) =
![Эффективность алгоритмов Полиномиальные – f(n) = O(nm) Экспоненциальные - f(n) = O(ap(n)) Факториальные f(n) = O(n!)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-45.jpg)
O(n!)
Слайд 47Полиномиальные алгоритмы
Постоянный - f(n) = O(1)
Линейный - f(n) = O(n)
Квадратный - f(n)
![Полиномиальные алгоритмы Постоянный - f(n) = O(1) Линейный - f(n) = O(n)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-46.jpg)
= O(n2)
Кубический - f(n) = O(n3)
Слайд 48Примеры полиномиальных алгоритмов
К линейным алгоритмам относится алгоритм нахождения суммы десятичных чисел, состоящих
![Примеры полиномиальных алгоритмов К линейным алгоритмам относится алгоритм нахождения суммы десятичных чисел,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-47.jpg)
из n1 и n2 цифр. Сложность алгоритма - O(n1 + n2).
Более общий класс полиномиальных алгоритмов –
алгоритмы деления,
извлечения квадратного корня,
решение систем линейных уравнений и др
Слайд 49Примеры экспоненциальных алгоритмов
Задачи, в которых требуется построить:
множество всех подмножеств данного множества,
![Примеры экспоненциальных алгоритмов Задачи, в которых требуется построить: множество всех подмножеств данного](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-48.jpg)
все полные подграфы некоторого графа все поддеревья некоторого графа.
Слайд 50Другие типы задач
Кратчайшее решение «пятнашек» размера nxn
Задача коммивояжёра
Проблема раскраски графа
Сапер (игра)
Тетрис
составление расписаний,
![Другие типы задач Кратчайшее решение «пятнашек» размера nxn Задача коммивояжёра Проблема раскраски](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-49.jpg)
учитывающих определенные условия;
размещение обслуживающих центров (телефон, телевидение, срочные службы) для максимального числа клиентов при минимальном числе центров;
оптимальная загрузка емкости (рюкзак, поезд, корабль, самолёт) при наименьшей стоимости;
оптимальный раскрой (бумага, картон, стальной прокат, отливки), оптимизация маршрутов в воздушном пространстве, инвестиций, станочного парка;
задача распознавания простого числа
Слайд 51Числа Фибоначчи
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55….
F0=0, F1=1,
![Числа Фибоначчи 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-50.jpg)
Fn=Fn-1+Fn-2, n>1
Рекурсивный алгоритм
Нерекурсивный алгоритм
Слайд 52Рекурсивный алгоритм
int Fibonacci(int n){
if(n==0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
![Рекурсивный алгоритм int Fibonacci(int n){ if(n==0) return 0; if(n==1) return 1; return Fibonacci(n-1)+Fibonacci(n-2); }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-51.jpg)
Слайд 53Нерекурсивный алгоритм
int Fibonacci(int n){
if(n==0)
return 0;
int prev = 0;
int current = 1;
for(int i=2;i<=n;++i)
{
int
![Нерекурсивный алгоритм int Fibonacci(int n){ if(n==0) return 0; int prev = 0;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1083321/slide-52.jpg)
temp = current;
current += prev;
prev = temp;
}
return current;
}