Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Методы разработки алгоритмов

Тема 5.

 

Существует достаточно большое число методов разработки эффективных алгоритмов решения задач различных классов.

Наиболее часто используются следующие методы:

1) «Разделяй и властвуй» - метод декомпозиции, метод сведения задачи к подзадачам, метод частных целей.

2) Балансировка. Этот метод применим только к алгоритмам, к которым уже применялся 1-ый метод.

3) Динамическое программирование.

4) «Жадный» алгоритм.

5) Метод программирования «с отходом назад» (Back Tracing), программирование с отслеживанием.

6) Метод локального поиска.

7) Метод подъема.

8) Метод эвристики.

9) Метод рекурсии.

10) Моделирование задач.

 


5.1 Метод «Разделяй и властвуй».

 

При решении задачи необходимо ответить на следующие вопросы:

1. Известно ли решение для какой-либо части задачи и можно ли решить оставшуюся неизвестной часть.

2. Известны ли частные случаи решения задачи, и можно ли разработать алгоритм решения задачи для ограниченного подмножества исходных операндов.

3. Существует ли в задаче неясные моменты (раскрытие глубины задачи).

4. Существует ил похожая задача того же класса и решение для нее. Можно ли изменить алгоритм решения второй задачи для получения решения первой.

В основе метода «Разделяй и властвуй» лежит разбиение задачи на подзадачи (декомпозиция).

Первый шаг – это разделение задачи на К подзадач со сложностью 1/К.

Властвование – второй шаг алгоритма. Это – использование рекурсионного процесса разбиения подзадач на еще более мелкие подзадачи до тех пор, пока подзадачи n-го уровня разделения будут достаточно малы для их тривиального решения.

 
 

 

 


… … … …

Третий этап метода – склеивание множества решений отдельных подзадач в общее решение.

Использование этого метода требует, чтобы в процессе разбиения подзадачи не повторялись и не пересекались друг с другом. Если это условие не выполняется, то данный метод решения не применим к таким задачам.

Примерами решаемых этим методом задач являются:

ü сортировка слиянием;

ü нахождение максимального/минимального элемента массива;

ü умножение длинных целочисленных значений;

ü алгоритм быстрого преобразования Фурье;

ü алгоритм «Ханойская башня»;

ü составление графика проведения чемпионата.

 

Задача 5.1.1

Отсортировать массив из n чисел в порядке возрастания.

Обменная сортировка:


               

               

 

               

 

               

 

 

1 итерация

 

2 итерация

 

3 итерация


 

Общая формула временной сложности записывается рекуррентно:

T(n)=n*(n-1)/2=O(n2)

Приведенный алгоритм построен на основе метода «Разделяй и властвуй».

Недостаток: в приведенном алгоритме размеры подзадач на каждой итерации одинаковы, поэтому при больших n этот алгоритм неэффективен.

 

Для повышения эффективности алгоритмов, разработанных методом «Разделяй и властвуй», используется метод балансировки, который заключается в разбиении задачи на подзадачи равных размеров.

Например:

Алгоритм сортировки слиянием.

6              

 

               

 

 

               

 

               

 

Вычислительная сложность этого алгоритма:

T2(n)=O(n*log(n)),

поэтому можно сделать вывод, что данный алгоритм также является рекурсивным.

Пример процедуры, реализующей этот алгоритм:

Procedure JointSort(P, R: integer;

var A, B: TArray);

var q: integer;

begin

if P=R then exit;

q:= (P+R) div2;

JointSort(P, q, A, B);

JointSort(q+1, R, B, A);

JointSort(P, q, R, B, A);

end;

 

Метод «Разделяй и властвуй» полезен, если задачу можно разбить на подзадачи за приемлемое время, а суммарный размер подзадач будет небольшим.

Если сумма размеров подзадач пропорциональна a*N, где а=const (a>1), то этот метод дает алгоритм с полиномиальной сложностью O(Nm).

Если разбиение задачи размером N приводит к N подзадачам, каждая из которых имеет сложность (N-1), то такой алгоритм будет иметь экспоненциальную сложность O(mN).

 

Задача 5.1.2

Составление сетевого графика выполнения работ.

Имеется комплекс взаимосвязанных работ N. Для каждой из работ задана трудоемкость выполнения. Имеется К рабочих. Требуется распределить рабочих по операциям таким образом, чтобы длительность выполнения всего комплекса работ была минимальной.

Примечание: не учитываются субъективные факторы, и невозможно перемещение рабочих с одной операции на другую в процессе выполнения.

Комплекс взаимосвязанных работ представляется в виде сетевого графика, где узлы графа – это события окончания предшествующих работ, дуги – работы.

Трудоемкость Ri,j характеризует затраты ресурсов на выполнение работы.

Пример сетевого графика:

 
 

 


L(0, М) – длительность выполнения работы. Эта величина определяется как совокупность возможных путей в графе

{I1, I2, I3}

В данном примере возможны 3 маршрута:

I1={(0, 1); (1, 3); (3, 5)}

I2={(0, 1); (1, 4); (4, 5)}

I3={(0, 2); (2, 4); (4, 5)}

I1=1+2+4=7 – «критический» путь Iкр.

I2=1+2+1=4

I1=2+3+1=6

Необходимо расставить по операциям заданное число рабочих.

Для случая, когда K=N задача является тривиальной.

Для K¹N имеется N(K-N) возможных вариантов расстановки.

 

Пусть N=7, К=10, тогда имеется 1296 вариантов размещения рабочих.

Решение этой задачи методом полного перебора вариантов неэффективно.

Используя метод «Разделяй и властвуй», разбивают исходную задачу на (К-N) последовательных подзадач. Затем решают вопрос о том, на какую операцию поставить 1-го свободного рабочего (для данного примера – 8-го рабочего). После этого размещают 2-го свободного рабочего, взяв за исходное ранее найденное решение и т.д.

Каждая из этих подзадач может быть сформулирована следующим образом: необходимо принять решение о добавлении одного работника на одну из работ комплекса, чтобы полученная расстановка минимизировала «критический» путь

Свободного рабочего размещают на одну из работ, входящих в «критический» путь, желательно, наиболее трудоемкую (здесь – (3, 5)).

Тогда получаем:

I1’=1+2+4/2=5 ® I3=6 ® Iкр

L(0, 5)=6

Поиск решения данным алгоритмом требует анализа не более N*(K-N) вариантов.

 

<== предыдущая лекция | следующая лекция ==>
 | Метод подъема или метод локального поиска
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 1566; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.