SlideShare a Scribd company logo
1 of 36
На темы:
1.Итерация или рекурсия.
2.Метод полного перебора.
3.Метод Greedy- жадный алгоритм.
4.Метод перебора с возвратом.
5.Метод динамического перебора.
6.Разделяй и властвуй.
7.Метод ветвей и границ.
1.Итерация или рекурсия.
2.Метод полного перебора .
3.Метод Greedy- жадный алгоритм.
4.Метод перебора с возвратом.
5.Метод динамического перебора.
6.Разделяй и властвуй.
7.Метод ветвей и границ
 Рекурсия - это такой способ организации
обработки данных, при котором программа
вызывает сама себя непосредственно, либо с
помощью других программ.
 В программировании рекурсия — вызов
функции (процедуры) из неё же самой,
непосредственно (простая рекурсия) или
через другие функции (сложная рекурсия),
например, функция A вызывает функцию B, а
функция B — функцию A. Количество
вложенных вызовов функции или процедуры
называется глубиной рекурсии.
В основе рекурсивного вычислительного
процесса лежит рекурсивный цикл, который
реализуется через вызов рекурсивной
процедуры, причем каждая активация
рекурсивной процедуры эквивалентна одному
проходу итеративного цикла While.
Общая схема рекурсивного цикла:
Procedure Рекурсивный_Цикл (…);
begin
begin
< тело рекурсивного цикла; >
Рекурсивный_Цикл (…);
end;
end;
 Итерация - способ организации обработки
данных, при котором определенные
действия повторяются многократно, не
приводя при этом к рекурсивным вызовам
программ.
 Когда какое-то действие необходимо
повторить большое количество раз, в
программировании используются циклы.
 В основе итеративного вычислительного
процесса лежит итеративный цикл While,
Repeat-Until, For. Наиболее общим является
цикл While:
 While < условие цикла > do < тело цикла >;
Существует два важных положения,
известных в математике и в
программировании, определяющих
соотношение между итерацией и
рекурсией:
 - Любой итеративный цикл может быть
заменен рекурсией.
 - Рекурсия не всегда может быть заменена
итерацией.
 Перед специалистами самых различных
областей часто встает задача нахождения
элемента конечного множества,
обладающего заданными свойствами (если
такой элемент существует). Эта задача в
принципе может быть решена с помощью
перебора. Есть мнение, что такая
принципиальная возможность имеет
только теоретическое значение, так как
трудоемкость перебора слишком велика.
Между тем, любой общий метод, в том
числе и метод перебора, может оказаться
как хорошим, так и плохим. Все зависит от
конкретной задачи и способов реализации.
При этом реализация данного метода очень
зависима от достижений вычислительной
техники, а она в свою очередь не перестает
делать всё большие и большие успехи.
 В сущности, перебор - это решение задач, возникающих
из заданной, когда значение некоторого искомого
параметра фиксируется различным образом, и
производится выбор того из рассмотренных значений,
которое дает наиболее подходящее решение. Часто
каждая из рассматриваемых задач с фиксированным
значением данного параметра в свою очередь решается
переборными методами. Тогда говорят о
многоуровневом или иерархически устроенном
алгоритме. Основываясь на столь общем определении
перебора, можно дать лишь тривиальные рекомендации
о способах его выполнения (однако, и они иногда
полезны). К счастью, рассматриваемые задачи, кроме
возможности их решения методами перебора, обычно
имеют и другие характерные общие особенности. Это
позволяет создавать, изучать и применять общие
методы перебора.
 Основная задача при реализации переборных
методов заключается в нахождении такого
порядка элементов перебора, при котором
искомый элемент встретится как можно
раньше. Это задача сокращения перебора.
Существуют и другие проблемы, связанные с
этим методом, например, проблема
оптимизации генерации элементов перебора.
 Один из способов сокращения перебора тогда -
это отсечение бесперспективных ветвей. При
этом реально никакого отсечения может и не
происходить. Если, скажем, осуществлять
обход дерева вглубь, выбирая ветви слева на
право, то отсечение ветви - это такое
изображение дерева, при котором отсекаемая
ветвь окажется самой правой. Если же обход
некоторой ветви не осуществляется совсем,
то только в случае, когда формально
доказывается отсутствие на ней решения. В
связи с этим метод перебора часто называют
методом полного перебора.
 К алгоритмам полного перебора обращаются
тогда, когда нет других способов решить
определенную задачу. Например, никому в голову не
придет решать квадратное уравнение перебором
всех возможных значений, даже если известно, что
решением являются целые числа.
 Полный перебор – это решение “в лоб”,
построенное на подстановке и проверке
 всех возможных вариантов из области
 допустимых значений. На словах в
 решении задачи полного перебора нет
 ничего сложного, но на деле алгоритмы, которые
действительно ищут и находят решения подобным
способом за “приемлемое время” довольно таки
непростые.
Многие задачи на графах также
решать с помощью полного перебора, хотя для
их решения придуманы специальные методики
– оптимальные с точки зрения количества
операций алгоритмы, которые осуществляют
поиск решений на порядки быстрее, чем
обычный полный перебор. К таким задачам
относят поиск кратчайшего маршрута
между вершинами (алгоритм Дейкстры) или
поиск максимального пропускного потока в
графе. Если обобщить все вышесказанное, то
для решения некоторой задачи методом
полного перебора нужно разработать
алгоритм перебора всех возможных
кандидатов на решение и реализовать
процедуру проверки корректности решения для
каждого из них.
Вычислительная сложность алгоритмов
полного перебора оценивается по
следующей обобщенной формуле:
O(N!/(N-R)!)
, где N – количество элементов в области
поиска решений, а R – количество
элементов, образующих одно целое
решение задачи.
 Алгоритмы полного перебора довольно часто реализуют с помощью
рекурсии: на каждом шаге рекурсии осуществляют поиск части
решения для одного элемента, и, найдя его, рекурсивно запускают
тот же поиск для следующего элемента. Если для текущего
элемента решение найти не удается, то осуществляется переход к
предыдущему элементу (возврат из рекурсии на один шаг), где
 найденное решение отменяется и начинается поиск
 другого варианта.
 Как только найдены решения для всех элементов – найдено все
решение. Дальше, алгоритм сохраняет вариант решения и
продолжает искать другие.
 Цель предпринимаемой оптимизации - как можно скорее найти
хотя бы одно решение, а не все варианты заполнения кроссворда.
Таким образом, оптимизация рекурсивного алгоритма полного
перебора, направленная на минимизацию количества элементарных
операций.
 Для многих оптимизационных задач есть более
простые и быстрые алгоритмы, чем динамическое
программирование. В этой главе мы рассматриваем
задачи, которые можно решать с помощью жадных
алгоритмов (greedy algorithms). Такой алгоритм
делает на каждом шаге локально оптимальный выбор,
- в надежде, что итоговое решение также окажется
оптимальным. Это не всегда так – но для многих
задач такие алгоритмы действительно дают
оптимум.
 Принцип жадного выбора
Говорят, что к оптимизационной
задаче применим принцип жадного
выбора (greedy-choice property), если
последовательность локально
оптимальных (жадных) выборов
дает глобально оптимальное
решение. Различие между жадными
алгоритмами и динамическим
программированием можно
пояснить так: на каждом шаге
жадный алгоритм берет "самый
жирный кусок", а потом уже
пытается сделать наилучший
выбор среди оставшихся, каковы бы
они ни были; алгоритм
динамического программирования
принимает решение, просчитав
заранее последствия для всех
вариантов.
Оптимальность для подзадач
Говоря иными словами,
решаемые с помощью жадных
алгоритмов задачи обладают
свойством оптимальности для
подзадач (have optimal
substructure): оптимальное
решение всей задачи содержит в
себе оптимальные решения
подзадач.
 Классический пример
применения жадины: Васе
выгодно делать самые «дорогие
задания», а наименее дорогие
можно и не выполнять — тогда
прибыль будет максимальна.
Возникает вопрос: каким
образом распределить задания?
Будем перебирать задания в
порядке убывания стоимости и
заполнять расписание
следующим образом: если для
заказа есть еще хотя бы одно
свободное место в расписании
раньше его дедлайна, то
поставим его на самое последнее
из таких мест, в противном
случае в срок мы его не можем
выполнить, значит поставим в
конец из свободных мест.
Получается следующий код:
//tasks - массив заданий
Arrays.sort(tasks); //сортируем по убыванию
стоимости
TreeSet<Integer> time
= new TreeSet<Integer>();
for (int i = 1; i <= n; ++i) {
time.add(i);
}
int ans = 0;
for (int i = 0; i < n; ++i) {
Integer tmp = time.floor(tasks[i].time);
if (tmp == null) { // если нет свободного
места в расписании, то в конец
time.remove(time.last());
} else { //иначе можно выполнить задание,
добавляем в расписание
time.remove(tmp);
ans += tasks[i].cost;
}
}
 Жадные алгоритмы – это общее название подхода к решению задач
оптимизации. Они применимы в случаях, когда исходную задачу
можно разбить на ряд более простых подзадач, которые можно
решать в определенной последовательности, чтобы в результате
получить
 решение исходной задачи. Решив подзадачу мы уже
 не возвращаемся к ней. Жадный подход далеко не
 всегда дает
 Оптимальное решение, но
 во многих
 случаях получаемое решение
 оказывается достаточно
 близкимк оптимальному, а для
 некоторых задач известны
 и оптимальные жадные
 алгоримы (построение
 оптимального префиксного
 кода по Хаффману, построение
 остовного дерева максимального
 веса, планирование вычислений на процессоре с минимизацией
ожидания и другие).
 Основными достоинствами жадных алгоритмов
является их простота и нетребовательность к
ресурсам.
 Жадные (градиентные) алгоритмы, действуют по
принципу "максимальный выигрыш на каждом
шаге". Такая стратегия не всегда ведет к
конечному успеху - иногда выгоднее сделать не
наилучший, казалось бы, выбор на очередном шаге с
тем, чтобы в итоге получить оптимальное
решение.
 Но тем не менее, существует большое количество
задач, для которых применение жадных
алгоритмов оказывается оправданным.
 Метод полного перебора предполагает, что
решение рассматриваемой задачи может быть
найдено путем последовательного анализа
элементов Si, принадлежащий конечному
множеству S={S1,S2,S3…Sn},называемому
множеством возможных решений.
 В простейших случаях, элементы Si могут
быть представлены значениями какого-нибудь
порядкового типа:integer, boolean, char,
перечисления и интервального. В более
сложных задачах используются массивы,
записи(record) или множества.
 Общая схема алгоритма, основанного на
методе полного перебора, может быть
представлена с помощью цикла:
 For i:=1 to k do
 if SolutiePosibila(Si) then PrelucrareaSolutiei(Si)
 Где SolutiePosibila-это логическая функция,
возвращающая значение true, если элемент
удовлетворяет условиям задачи, и false-в
противном случае, а PrelucrareaSolutiei-
процедура, осуществляющая обработку
выбранного элемента.
 Такие алгоритмы реализуют операции,
связанные с обработкой конечных множеств:
 -объединение
 -пересечение
 -разность
 -генерирование всевозможных подмножеств
 -генерирование элементов декартова
произведения множеств
 - генерирование всевозможных перестановок,
размещений или сочетаний элементов и т.д.
 Метод динамического
программирования является модификацией
метода простого перебора. В этом методе для
сокращения числа вариантов при переборе
вводится понятие доминирующая
последовательность – подмножество
вариантов, перспективных
 с точки зрения поиска
 оптимального решения.
 Вначале найдём длину наибольшей
подпоследовательности. Допустим,
 мы ищем решение для случая (n1, n2),
 где n1, n2 — длины первой и второй
строк.
 Пусть уже существуют решения для
всех
 подзадач (m1, m2), меньших заданной.
 Тогда задача (n1, n2) сводится к
меньшим подзадачам следующим
образом:
A B C B
0 0 0 0 0
D
0
←
0
←
0
←
0
←
0
C
0
←
0
←
0
↖
1
←
1
B
0
←
0
↖
1
←
1
↖
2
A
0
↖
1
←
1
←
1
↑
2
 В основу метода динамического программирования
положен принцип оптимальности,
сформулированный в 1957 г. американским
математиком Ричардом Беллманом: «Оптимальное
поведение обладает тем свойством, что каковы бы
ни были первоначальные состояние и решение в
начальный момент времени, последующие решения
должны составлять оптимальное поведение
относительно состояния, получающегося в
результате первого решения».
 Физическая сущность принципа оптимальности
заключается в том, что ошибка выбора решения в
данный момент не может быть исправлена в
будущем.
 Рассматривается следующая общая задача.
Имеется некоторая физическая система, в которой
происходит какой-то процесс, состоящий
из n шагов. Эффективность процесса
характеризуется некоторым показателем W,
который называют выигрышем. Пусть общий
выигрыш W за все n шагов процесса складывается из
выигрышей на отдельных шагах:
где wi — выигрыш на i-м шаге.
Если W обладает таким свойством, то
его называют аддитивным критерием.
 Процесс, о котором идет речь, представляет собой
управляемый процесс, т.е. имеется возможность
выбирать какие-то параметры, влияющие на его ход и
исход, причем на каждом шаге выбирается какое-то
решение, от которого зависит выигрыш на данном
шаге. Это решение называется шаговым
управлением. Совокупность всех шаговых управлений
представляет собой управление процессом в целом.
Обозначим его буквой U, а шаговые управления —
буквами
 Таким образом:
Шаговые управления в общем случае не числа, а, как правило,
векторы, функции и т.п.
Алгоритм метода динамического
программирования.
 Метод”разделяй и властвуй” представляет собой
обобщенный подход к разработке алгоритмов ,
основанный на:
1)повторяющемся разделении решаемой задачи большого
размера на две или более подзадачи такого же типа, но
меньшего размера
2)решении полученных подзадач прямым способом , если их
размеры это позволяют, или их разделении на другие
подзадачи еще меньшего размера
3)Обработке частичных решений соответствующих
подзадач с целью получения решения исходной задачи.
 Предположим, что на определенном шаге
алгоритма вычислено упорядоченное
множество:
А=(ai, ai+1, …, aj)
Но для получения решения необходима дальнейшая
обработка его элементов. Для того чтобы
разделить задачу на две близкие по размерам
подзадачи , положим
m=(j-i) div 2
И разделим множество А на два подмножества,
которые будут обработаны по отдельности:
A1=(ai, ai+1,…,ai+m);A2=(ai+m+1,…,aj)
Далее каждое из множеств А1 и А2 снова делится
на два подмножества А1-1, А1-2 и А2-1, А2-2
соответственно.
Общая схема алгоритма может быть
представлена с помощью следующей
рекурсивной процедуры:
Procedure DesparteSiStapineste(i, j: integer; var x:tip);
var m: integer;
x1,x2: tip;
procedure DesparteSiStapineste(I, j: integer; var x:tip );
var m: integer;
x1,x2: tip;
begin
if SolutieDirecta(I, j) then Prelucrare(I, j, x)
else
begin
m:= (j-i) div 2;
DesparteSiStapineste(i, i+m, x1);
DesparteSiStapineste(i+m +1, j, x2);
Combina(x1, x2, x);
end;
end.
 Методы этого типа широко используются
для решения дискретных оптимизационных
задач. Различные варианты
метода существенно используют специфику
задачи и поэтому заметно отличаются друг
от друга. Однако, все они основаны на
последовательном разбиении множества
допустимых решений на части (ветвление) и
вычислении оценок (границ), позволяющих
отбрасывать подмножества, заведомо не
содержащие оптимального решений.
 В методе ветвей и границ поиск решения задачи
осуществляется путем прохода некоторого
дерева порядка m, именуемого деревом
решений. Узлы этого дерева представляют
множество возможных состояний
S={s1,s2,…,sn}, в которых может находиться
изучаемая система. На дереве решений связи Si-
Sj типа предок-потомок указывают на то, что
из состояния si система может
непосредственно перейти в состояние sj в
результате относительно простых
преобразований или операций .
 В других случаях решение задачи
может быть представлено как
путь , связывающий корень дерева с
одним из терминальных узлов и
оптимизирующий определенный
критерий качества , например, кол-
во ходов в шахматной партии,
общее расстояние, которое проехал
автомобиль, суммарное время
чтения-записи файла и т.д.
 Формально задачи рассматриваемого типа
могут быть решены методом полного
перебора , для чего выполняются следующие
операции:
 -обходим дерево решений в глубину или в
ширину и находим конечные состояния
системы
 -строим множество всех возможных путей ,
соединяющих начальное состояние с
конечными состояниями
 -из множества полученных путей выбираем
те, которые оптимизируют заданный
критерий качества
 Схема вычислений метода ветвей и границ
может быть изображена следующей
последовательностью операторов ПАСКАЛЯ:
 InitializareaListei;
repeat
Ramifica;
Margineste;
until Gasit or ListaEsteVida
 Метод ветвей и границ может быть применен
для решения тех задач, из условия которых
следуют правила или операции , необходимые
для непосредственного построения дерева
решений. Обычно в таких задачах
моделируется поведение воображаемого
партнера, цели или намерения которого
противоположным вашим: военные игры,
сценарии экономического развития ,игра в
шахматы или шашки и т.д.

More Related Content

What's hot

лекция 2
лекция 2лекция 2
лекция 2amjad1977a
 
аром амінокислоти
аром амінокислотиаром амінокислоти
аром амінокислотиOksana Kamenetska
 
презентація аферентна.pdf
презентація аферентна.pdfпрезентація аферентна.pdf
презентація аферентна.pdfssuser798f45
 
мінеральні добрива урок на конкурс
мінеральні добрива урок на конкурсмінеральні добрива урок на конкурс
мінеральні добрива урок на конкурсОксана Чепиль
 
Antibiotics of the aromatic structure (chloramphenicol)
Antibiotics of the aromatic structure (chloramphenicol)Antibiotics of the aromatic structure (chloramphenicol)
Antibiotics of the aromatic structure (chloramphenicol)Liudmila Sidorenko
 
Dezechil acido bazic si hidro-elec
Dezechil acido bazic si hidro-elecDezechil acido bazic si hidro-elec
Dezechil acido bazic si hidro-elecAnca Cucu
 
Основні принципи приймання товару
Основні принципи приймання товару Основні принципи приймання товару
Основні принципи приймання товару Artem352
 
требования к оформлению презентаций
требования к оформлению презентацийтребования к оформлению презентаций
требования к оформлению презентацийIrina Trofimovich
 
Випробування на гранічний вміст домішок згідно ДФУ.
Випробування на гранічний вміст домішок згідно ДФУ.Випробування на гранічний вміст домішок згідно ДФУ.
Випробування на гранічний вміст домішок згідно ДФУ.Олена Колісник
 
презентация фазовые Ii часть
презентация фазовые Ii частьпрезентация фазовые Ii часть
презентация фазовые Ii частьkassy2003
 
презентація до теми 10. похідні бензолсулфокислоти та сульфанілової кислоти
презентація до теми 10. похідні бензолсулфокислоти та сульфанілової кислотипрезентація до теми 10. похідні бензолсулфокислоти та сульфанілової кислоти
презентація до теми 10. похідні бензолсулфокислоти та сульфанілової кислотиmedchem_nfau
 
Властивості розчинів
Властивості розчинівВластивості розчинів
Властивості розчинівsveta7940
 

What's hot (20)

лекция 2
лекция 2лекция 2
лекция 2
 
кількість речовини
кількість речовиникількість речовини
кількість речовини
 
Glucose, sucrose
Glucose, sucroseGlucose, sucrose
Glucose, sucrose
 
1 8
1 81 8
1 8
 
Lex tmsl 08v1
Lex tmsl 08v1Lex tmsl 08v1
Lex tmsl 08v1
 
Ahorcado
AhorcadoAhorcado
Ahorcado
 
аром амінокислоти
аром амінокислотиаром амінокислоти
аром амінокислоти
 
презентація аферентна.pdf
презентація аферентна.pdfпрезентація аферентна.pdf
презентація аферентна.pdf
 
мінеральні добрива урок на конкурс
мінеральні добрива урок на конкурсмінеральні добрива урок на конкурс
мінеральні добрива урок на конкурс
 
Antibiotics of the aromatic structure (chloramphenicol)
Antibiotics of the aromatic structure (chloramphenicol)Antibiotics of the aromatic structure (chloramphenicol)
Antibiotics of the aromatic structure (chloramphenicol)
 
Dezechil acido bazic si hidro-elec
Dezechil acido bazic si hidro-elecDezechil acido bazic si hidro-elec
Dezechil acido bazic si hidro-elec
 
Основні принципи приймання товару
Основні принципи приймання товару Основні принципи приймання товару
Основні принципи приймання товару
 
требования к оформлению презентаций
требования к оформлению презентацийтребования к оформлению презентаций
требования к оформлению презентаций
 
Випробування на гранічний вміст домішок згідно ДФУ.
Випробування на гранічний вміст домішок згідно ДФУ.Випробування на гранічний вміст домішок згідно ДФУ.
Випробування на гранічний вміст домішок згідно ДФУ.
 
блокады
блокадыблокады
блокады
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
презентация фазовые Ii часть
презентация фазовые Ii частьпрезентация фазовые Ii часть
презентация фазовые Ii часть
 
Життя без алергії
Життя без алергіїЖиття без алергії
Життя без алергії
 
презентація до теми 10. похідні бензолсулфокислоти та сульфанілової кислоти
презентація до теми 10. похідні бензолсулфокислоти та сульфанілової кислотипрезентація до теми 10. похідні бензолсулфокислоти та сульфанілової кислоти
презентація до теми 10. похідні бензолсулфокислоти та сульфанілової кислоти
 
Властивості розчинів
Властивості розчинівВластивості розчинів
Властивості розчинів
 

Similar to презентации по информатике

практика 5
практика 5практика 5
практика 5student_kai
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхSergey Vasilyev
 
presentation Algoritm
presentation Algoritmpresentation Algoritm
presentation Algoritmklochkova
 
Презентация "Алгоритмы"
Презентация "Алгоритмы"Презентация "Алгоритмы"
Презентация "Алгоритмы"Johnny_Lean
 
Понятие алгоритма
Понятие алгоритмаПонятие алгоритма
Понятие алгоритмаllubovcer
 
Алгоритмы
АлгоритмыАлгоритмы
АлгоритмыSchool 242
 
Методы построения и анализа алгоритмов
Методы построения и анализа алгоритмовМетоды построения и анализа алгоритмов
Методы построения и анализа алгоритмовNick535
 

Similar to презентации по информатике (20)

лекция 9
лекция 9лекция 9
лекция 9
 
лекция 5
лекция 5лекция 5
лекция 5
 
практика 5
практика 5практика 5
практика 5
 
Algoritm
AlgoritmAlgoritm
Algoritm
 
лекция 8
лекция 8лекция 8
лекция 8
 
алгоритм
алгоритмалгоритм
алгоритм
 
Параллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данныхПараллельные алгоритмы обработки данных
Параллельные алгоритмы обработки данных
 
presentation Algoritm
presentation Algoritmpresentation Algoritm
presentation Algoritm
 
пр 15.docx
пр 15.docxпр 15.docx
пр 15.docx
 
прак 15.docx
прак 15.docxпрак 15.docx
прак 15.docx
 
информатика лекции 4
информатика лекции 4информатика лекции 4
информатика лекции 4
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
Презентация "Алгоритмы"
Презентация "Алгоритмы"Презентация "Алгоритмы"
Презентация "Алгоритмы"
 
Понятие алгоритма
Понятие алгоритмаПонятие алгоритма
Понятие алгоритма
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
 
лекция 6
лекция 6лекция 6
лекция 6
 
Алгоритмы
АлгоритмыАлгоритмы
Алгоритмы
 
Методы построения и анализа алгоритмов
Методы построения и анализа алгоритмовМетоды построения и анализа алгоритмов
Методы построения и анализа алгоритмов
 
лек11 7
лек11 7лек11 7
лек11 7
 
лек11 7
лек11 7лек11 7
лек11 7
 

More from Nick535

Структура операционных систем
Структура операционных системСтруктура операционных систем
Структура операционных системNick535
 
Cистемное программное обеспечение
Cистемное программное обеспечениеCистемное программное обеспечение
Cистемное программное обеспечениеNick535
 
Оптические диски
Оптические дискиОптические диски
Оптические дискиNick535
 
Внутренняя память компьютера
Внутренняя память компьютераВнутренняя память компьютера
Внутренняя память компьютераNick535
 
Устройства вывода
Устройства выводаУстройства вывода
Устройства выводаNick535
 
Устройства ввода
Устройства вводаУстройства ввода
Устройства вводаNick535
 
Основные устройства персонального компьютера
Основные устройства персонального компьютераОсновные устройства персонального компьютера
Основные устройства персонального компьютераNick535
 
Битва за Берлин
Битва за БерлинБитва за Берлин
Битва за БерлинNick535
 
Битва под Москвой.
Битва под Москвой.Битва под Москвой.
Битва под Москвой.Nick535
 
Курская битва
Курская битваКурская битва
Курская битваNick535
 
Блокада Ленинграда
Блокада ЛенинградаБлокада Ленинграда
Блокада ЛенинградаNick535
 
Вторая мировая война
Вторая мировая войнаВторая мировая война
Вторая мировая войнаNick535
 
советско финская война
советско финская войнасоветско финская война
советско финская войнаNick535
 
Pervaya mirovaya voyna
Pervaya mirovaya voynaPervaya mirovaya voyna
Pervaya mirovaya voynaNick535
 
Личная гигиена
Личная гигиена Личная гигиена
Личная гигиена Nick535
 
Эволюция экономической жизни
Эволюция экономической жизниЭволюция экономической жизни
Эволюция экономической жизниNick535
 
Язык Html
Язык HtmlЯзык Html
Язык HtmlNick535
 
Статистика
СтатистикаСтатистика
СтатистикаNick535
 
ОС в реальном времени
ОС в реальном времениОС в реальном времени
ОС в реальном времениNick535
 
Правоохранительные органы Молдовы
Правоохранительные органы МолдовыПравоохранительные органы Молдовы
Правоохранительные органы МолдовыNick535
 

More from Nick535 (20)

Структура операционных систем
Структура операционных системСтруктура операционных систем
Структура операционных систем
 
Cистемное программное обеспечение
Cистемное программное обеспечениеCистемное программное обеспечение
Cистемное программное обеспечение
 
Оптические диски
Оптические дискиОптические диски
Оптические диски
 
Внутренняя память компьютера
Внутренняя память компьютераВнутренняя память компьютера
Внутренняя память компьютера
 
Устройства вывода
Устройства выводаУстройства вывода
Устройства вывода
 
Устройства ввода
Устройства вводаУстройства ввода
Устройства ввода
 
Основные устройства персонального компьютера
Основные устройства персонального компьютераОсновные устройства персонального компьютера
Основные устройства персонального компьютера
 
Битва за Берлин
Битва за БерлинБитва за Берлин
Битва за Берлин
 
Битва под Москвой.
Битва под Москвой.Битва под Москвой.
Битва под Москвой.
 
Курская битва
Курская битваКурская битва
Курская битва
 
Блокада Ленинграда
Блокада ЛенинградаБлокада Ленинграда
Блокада Ленинграда
 
Вторая мировая война
Вторая мировая войнаВторая мировая война
Вторая мировая война
 
советско финская война
советско финская войнасоветско финская война
советско финская война
 
Pervaya mirovaya voyna
Pervaya mirovaya voynaPervaya mirovaya voyna
Pervaya mirovaya voyna
 
Личная гигиена
Личная гигиена Личная гигиена
Личная гигиена
 
Эволюция экономической жизни
Эволюция экономической жизниЭволюция экономической жизни
Эволюция экономической жизни
 
Язык Html
Язык HtmlЯзык Html
Язык Html
 
Статистика
СтатистикаСтатистика
Статистика
 
ОС в реальном времени
ОС в реальном времениОС в реальном времени
ОС в реальном времени
 
Правоохранительные органы Молдовы
Правоохранительные органы МолдовыПравоохранительные органы Молдовы
Правоохранительные органы Молдовы
 

презентации по информатике

  • 1. На темы: 1.Итерация или рекурсия. 2.Метод полного перебора. 3.Метод Greedy- жадный алгоритм. 4.Метод перебора с возвратом. 5.Метод динамического перебора. 6.Разделяй и властвуй. 7.Метод ветвей и границ.
  • 2. 1.Итерация или рекурсия. 2.Метод полного перебора . 3.Метод Greedy- жадный алгоритм. 4.Метод перебора с возвратом. 5.Метод динамического перебора. 6.Разделяй и властвуй. 7.Метод ветвей и границ
  • 3.  Рекурсия - это такой способ организации обработки данных, при котором программа вызывает сама себя непосредственно, либо с помощью других программ.  В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная рекурсия), например, функция A вызывает функцию B, а функция B — функцию A. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.
  • 4. В основе рекурсивного вычислительного процесса лежит рекурсивный цикл, который реализуется через вызов рекурсивной процедуры, причем каждая активация рекурсивной процедуры эквивалентна одному проходу итеративного цикла While. Общая схема рекурсивного цикла: Procedure Рекурсивный_Цикл (…); begin begin < тело рекурсивного цикла; > Рекурсивный_Цикл (…); end; end;
  • 5.  Итерация - способ организации обработки данных, при котором определенные действия повторяются многократно, не приводя при этом к рекурсивным вызовам программ.  Когда какое-то действие необходимо повторить большое количество раз, в программировании используются циклы.  В основе итеративного вычислительного процесса лежит итеративный цикл While, Repeat-Until, For. Наиболее общим является цикл While:  While < условие цикла > do < тело цикла >;
  • 6. Существует два важных положения, известных в математике и в программировании, определяющих соотношение между итерацией и рекурсией:  - Любой итеративный цикл может быть заменен рекурсией.  - Рекурсия не всегда может быть заменена итерацией.
  • 7.  Перед специалистами самых различных областей часто встает задача нахождения элемента конечного множества, обладающего заданными свойствами (если такой элемент существует). Эта задача в принципе может быть решена с помощью перебора. Есть мнение, что такая принципиальная возможность имеет только теоретическое значение, так как трудоемкость перебора слишком велика. Между тем, любой общий метод, в том числе и метод перебора, может оказаться как хорошим, так и плохим. Все зависит от конкретной задачи и способов реализации. При этом реализация данного метода очень зависима от достижений вычислительной техники, а она в свою очередь не перестает делать всё большие и большие успехи.
  • 8.  В сущности, перебор - это решение задач, возникающих из заданной, когда значение некоторого искомого параметра фиксируется различным образом, и производится выбор того из рассмотренных значений, которое дает наиболее подходящее решение. Часто каждая из рассматриваемых задач с фиксированным значением данного параметра в свою очередь решается переборными методами. Тогда говорят о многоуровневом или иерархически устроенном алгоритме. Основываясь на столь общем определении перебора, можно дать лишь тривиальные рекомендации о способах его выполнения (однако, и они иногда полезны). К счастью, рассматриваемые задачи, кроме возможности их решения методами перебора, обычно имеют и другие характерные общие особенности. Это позволяет создавать, изучать и применять общие методы перебора.
  • 9.  Основная задача при реализации переборных методов заключается в нахождении такого порядка элементов перебора, при котором искомый элемент встретится как можно раньше. Это задача сокращения перебора. Существуют и другие проблемы, связанные с этим методом, например, проблема оптимизации генерации элементов перебора.
  • 10.  Один из способов сокращения перебора тогда - это отсечение бесперспективных ветвей. При этом реально никакого отсечения может и не происходить. Если, скажем, осуществлять обход дерева вглубь, выбирая ветви слева на право, то отсечение ветви - это такое изображение дерева, при котором отсекаемая ветвь окажется самой правой. Если же обход некоторой ветви не осуществляется совсем, то только в случае, когда формально доказывается отсутствие на ней решения. В связи с этим метод перебора часто называют методом полного перебора.
  • 11.  К алгоритмам полного перебора обращаются тогда, когда нет других способов решить определенную задачу. Например, никому в голову не придет решать квадратное уравнение перебором всех возможных значений, даже если известно, что решением являются целые числа.  Полный перебор – это решение “в лоб”, построенное на подстановке и проверке  всех возможных вариантов из области  допустимых значений. На словах в  решении задачи полного перебора нет  ничего сложного, но на деле алгоритмы, которые действительно ищут и находят решения подобным способом за “приемлемое время” довольно таки непростые.
  • 12. Многие задачи на графах также решать с помощью полного перебора, хотя для их решения придуманы специальные методики – оптимальные с точки зрения количества операций алгоритмы, которые осуществляют поиск решений на порядки быстрее, чем обычный полный перебор. К таким задачам относят поиск кратчайшего маршрута между вершинами (алгоритм Дейкстры) или поиск максимального пропускного потока в графе. Если обобщить все вышесказанное, то для решения некоторой задачи методом полного перебора нужно разработать алгоритм перебора всех возможных кандидатов на решение и реализовать процедуру проверки корректности решения для каждого из них.
  • 13. Вычислительная сложность алгоритмов полного перебора оценивается по следующей обобщенной формуле: O(N!/(N-R)!) , где N – количество элементов в области поиска решений, а R – количество элементов, образующих одно целое решение задачи.
  • 14.  Алгоритмы полного перебора довольно часто реализуют с помощью рекурсии: на каждом шаге рекурсии осуществляют поиск части решения для одного элемента, и, найдя его, рекурсивно запускают тот же поиск для следующего элемента. Если для текущего элемента решение найти не удается, то осуществляется переход к предыдущему элементу (возврат из рекурсии на один шаг), где  найденное решение отменяется и начинается поиск  другого варианта.  Как только найдены решения для всех элементов – найдено все решение. Дальше, алгоритм сохраняет вариант решения и продолжает искать другие.  Цель предпринимаемой оптимизации - как можно скорее найти хотя бы одно решение, а не все варианты заполнения кроссворда. Таким образом, оптимизация рекурсивного алгоритма полного перебора, направленная на минимизацию количества элементарных операций.
  • 15.  Для многих оптимизационных задач есть более простые и быстрые алгоритмы, чем динамическое программирование. В этой главе мы рассматриваем задачи, которые можно решать с помощью жадных алгоритмов (greedy algorithms). Такой алгоритм делает на каждом шаге локально оптимальный выбор, - в надежде, что итоговое решение также окажется оптимальным. Это не всегда так – но для многих задач такие алгоритмы действительно дают оптимум.
  • 16.  Принцип жадного выбора Говорят, что к оптимизационной задаче применим принцип жадного выбора (greedy-choice property), если последовательность локально оптимальных (жадных) выборов дает глобально оптимальное решение. Различие между жадными алгоритмами и динамическим программированием можно пояснить так: на каждом шаге жадный алгоритм берет "самый жирный кусок", а потом уже пытается сделать наилучший выбор среди оставшихся, каковы бы они ни были; алгоритм динамического программирования принимает решение, просчитав заранее последствия для всех вариантов. Оптимальность для подзадач Говоря иными словами, решаемые с помощью жадных алгоритмов задачи обладают свойством оптимальности для подзадач (have optimal substructure): оптимальное решение всей задачи содержит в себе оптимальные решения подзадач.
  • 17.  Классический пример применения жадины: Васе выгодно делать самые «дорогие задания», а наименее дорогие можно и не выполнять — тогда прибыль будет максимальна. Возникает вопрос: каким образом распределить задания? Будем перебирать задания в порядке убывания стоимости и заполнять расписание следующим образом: если для заказа есть еще хотя бы одно свободное место в расписании раньше его дедлайна, то поставим его на самое последнее из таких мест, в противном случае в срок мы его не можем выполнить, значит поставим в конец из свободных мест. Получается следующий код: //tasks - массив заданий Arrays.sort(tasks); //сортируем по убыванию стоимости TreeSet<Integer> time = new TreeSet<Integer>(); for (int i = 1; i <= n; ++i) { time.add(i); } int ans = 0; for (int i = 0; i < n; ++i) { Integer tmp = time.floor(tasks[i].time); if (tmp == null) { // если нет свободного места в расписании, то в конец time.remove(time.last()); } else { //иначе можно выполнить задание, добавляем в расписание time.remove(tmp); ans += tasks[i].cost; } }
  • 18.  Жадные алгоритмы – это общее название подхода к решению задач оптимизации. Они применимы в случаях, когда исходную задачу можно разбить на ряд более простых подзадач, которые можно решать в определенной последовательности, чтобы в результате получить  решение исходной задачи. Решив подзадачу мы уже  не возвращаемся к ней. Жадный подход далеко не  всегда дает  Оптимальное решение, но  во многих  случаях получаемое решение  оказывается достаточно  близкимк оптимальному, а для  некоторых задач известны  и оптимальные жадные  алгоримы (построение  оптимального префиксного  кода по Хаффману, построение  остовного дерева максимального  веса, планирование вычислений на процессоре с минимизацией ожидания и другие).
  • 19.  Основными достоинствами жадных алгоритмов является их простота и нетребовательность к ресурсам.  Жадные (градиентные) алгоритмы, действуют по принципу "максимальный выигрыш на каждом шаге". Такая стратегия не всегда ведет к конечному успеху - иногда выгоднее сделать не наилучший, казалось бы, выбор на очередном шаге с тем, чтобы в итоге получить оптимальное решение.  Но тем не менее, существует большое количество задач, для которых применение жадных алгоритмов оказывается оправданным.
  • 20.  Метод полного перебора предполагает, что решение рассматриваемой задачи может быть найдено путем последовательного анализа элементов Si, принадлежащий конечному множеству S={S1,S2,S3…Sn},называемому множеством возможных решений.  В простейших случаях, элементы Si могут быть представлены значениями какого-нибудь порядкового типа:integer, boolean, char, перечисления и интервального. В более сложных задачах используются массивы, записи(record) или множества.
  • 21.  Общая схема алгоритма, основанного на методе полного перебора, может быть представлена с помощью цикла:  For i:=1 to k do  if SolutiePosibila(Si) then PrelucrareaSolutiei(Si)  Где SolutiePosibila-это логическая функция, возвращающая значение true, если элемент удовлетворяет условиям задачи, и false-в противном случае, а PrelucrareaSolutiei- процедура, осуществляющая обработку выбранного элемента.
  • 22.  Такие алгоритмы реализуют операции, связанные с обработкой конечных множеств:  -объединение  -пересечение  -разность  -генерирование всевозможных подмножеств  -генерирование элементов декартова произведения множеств  - генерирование всевозможных перестановок, размещений или сочетаний элементов и т.д.
  • 23.  Метод динамического программирования является модификацией метода простого перебора. В этом методе для сокращения числа вариантов при переборе вводится понятие доминирующая последовательность – подмножество вариантов, перспективных  с точки зрения поиска  оптимального решения.
  • 24.  Вначале найдём длину наибольшей подпоследовательности. Допустим,  мы ищем решение для случая (n1, n2),  где n1, n2 — длины первой и второй строк.  Пусть уже существуют решения для всех  подзадач (m1, m2), меньших заданной.  Тогда задача (n1, n2) сводится к меньшим подзадачам следующим образом: A B C B 0 0 0 0 0 D 0 ← 0 ← 0 ← 0 ← 0 C 0 ← 0 ← 0 ↖ 1 ← 1 B 0 ← 0 ↖ 1 ← 1 ↖ 2 A 0 ↖ 1 ← 1 ← 1 ↑ 2
  • 25.  В основу метода динамического программирования положен принцип оптимальности, сформулированный в 1957 г. американским математиком Ричардом Беллманом: «Оптимальное поведение обладает тем свойством, что каковы бы ни были первоначальные состояние и решение в начальный момент времени, последующие решения должны составлять оптимальное поведение относительно состояния, получающегося в результате первого решения».  Физическая сущность принципа оптимальности заключается в том, что ошибка выбора решения в данный момент не может быть исправлена в будущем.  Рассматривается следующая общая задача. Имеется некоторая физическая система, в которой происходит какой-то процесс, состоящий из n шагов. Эффективность процесса характеризуется некоторым показателем W, который называют выигрышем. Пусть общий выигрыш W за все n шагов процесса складывается из выигрышей на отдельных шагах: где wi — выигрыш на i-м шаге. Если W обладает таким свойством, то его называют аддитивным критерием.
  • 26.  Процесс, о котором идет речь, представляет собой управляемый процесс, т.е. имеется возможность выбирать какие-то параметры, влияющие на его ход и исход, причем на каждом шаге выбирается какое-то решение, от которого зависит выигрыш на данном шаге. Это решение называется шаговым управлением. Совокупность всех шаговых управлений представляет собой управление процессом в целом. Обозначим его буквой U, а шаговые управления — буквами  Таким образом: Шаговые управления в общем случае не числа, а, как правило, векторы, функции и т.п.
  • 28.  Метод”разделяй и властвуй” представляет собой обобщенный подход к разработке алгоритмов , основанный на: 1)повторяющемся разделении решаемой задачи большого размера на две или более подзадачи такого же типа, но меньшего размера 2)решении полученных подзадач прямым способом , если их размеры это позволяют, или их разделении на другие подзадачи еще меньшего размера 3)Обработке частичных решений соответствующих подзадач с целью получения решения исходной задачи.
  • 29.  Предположим, что на определенном шаге алгоритма вычислено упорядоченное множество: А=(ai, ai+1, …, aj) Но для получения решения необходима дальнейшая обработка его элементов. Для того чтобы разделить задачу на две близкие по размерам подзадачи , положим m=(j-i) div 2 И разделим множество А на два подмножества, которые будут обработаны по отдельности: A1=(ai, ai+1,…,ai+m);A2=(ai+m+1,…,aj) Далее каждое из множеств А1 и А2 снова делится на два подмножества А1-1, А1-2 и А2-1, А2-2 соответственно.
  • 30. Общая схема алгоритма может быть представлена с помощью следующей рекурсивной процедуры: Procedure DesparteSiStapineste(i, j: integer; var x:tip); var m: integer; x1,x2: tip; procedure DesparteSiStapineste(I, j: integer; var x:tip ); var m: integer; x1,x2: tip; begin if SolutieDirecta(I, j) then Prelucrare(I, j, x) else begin m:= (j-i) div 2; DesparteSiStapineste(i, i+m, x1); DesparteSiStapineste(i+m +1, j, x2); Combina(x1, x2, x); end; end.
  • 31.  Методы этого типа широко используются для решения дискретных оптимизационных задач. Различные варианты метода существенно используют специфику задачи и поэтому заметно отличаются друг от друга. Однако, все они основаны на последовательном разбиении множества допустимых решений на части (ветвление) и вычислении оценок (границ), позволяющих отбрасывать подмножества, заведомо не содержащие оптимального решений.
  • 32.  В методе ветвей и границ поиск решения задачи осуществляется путем прохода некоторого дерева порядка m, именуемого деревом решений. Узлы этого дерева представляют множество возможных состояний S={s1,s2,…,sn}, в которых может находиться изучаемая система. На дереве решений связи Si- Sj типа предок-потомок указывают на то, что из состояния si система может непосредственно перейти в состояние sj в результате относительно простых преобразований или операций .
  • 33.  В других случаях решение задачи может быть представлено как путь , связывающий корень дерева с одним из терминальных узлов и оптимизирующий определенный критерий качества , например, кол- во ходов в шахматной партии, общее расстояние, которое проехал автомобиль, суммарное время чтения-записи файла и т.д.
  • 34.  Формально задачи рассматриваемого типа могут быть решены методом полного перебора , для чего выполняются следующие операции:  -обходим дерево решений в глубину или в ширину и находим конечные состояния системы  -строим множество всех возможных путей , соединяющих начальное состояние с конечными состояниями  -из множества полученных путей выбираем те, которые оптимизируют заданный критерий качества
  • 35.  Схема вычислений метода ветвей и границ может быть изображена следующей последовательностью операторов ПАСКАЛЯ:  InitializareaListei; repeat Ramifica; Margineste; until Gasit or ListaEsteVida
  • 36.  Метод ветвей и границ может быть применен для решения тех задач, из условия которых следуют правила или операции , необходимые для непосредственного построения дерева решений. Обычно в таких задачах моделируется поведение воображаемого партнера, цели или намерения которого противоположным вашим: военные игры, сценарии экономического развития ,игра в шахматы или шашки и т.д.