Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Nizov_TOI_-_Shpargalka.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
920.58 Кб
Скачать

18. Алгоритмы сортировки, оценка сложности конкретных алгоритмов (метод пузырька или вставки)

Несколько правил анализа программ:

  1. Время выполнения операторов присваивания, чтения и записи обычно имеют порядок константы O(1).

  2. Время выполнения последовательности операторов определяется с помощью правил сумм.

  3. Время выполнения условных операторов состоит из времени выполнения условно исполняемых операторов и времени выполнения самого выражения.

Время выполнения логического выражения имеет порядок O(1).

Время выполнения всей конструкции if then else состоит из времени выполнения условия и наибольшего из времени, необходимого для исполнения операторов, исполняемых при значении true или false.

  1. Время выполнения цикла является суммой времён всех исполняемых итераций цикла, в свою очередь состоящих из времени выполнения операторов тела цикла и времени вычисления прекращения условия цикла (обычно 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. Классы входных данных

Роль входных данных в анализе алгоритмов велика. Выделить группы; определить вероятности, с которыми элементы принадлежат группам; надо чтобы алгоритм в группах работал одно и тоже время.

  1. Наилучший случай. Набор данных, при которых алгоритм проработает минимальное время.

  2. Наихудший случай. Очень важен: максимальное время работы, которое определяет сложность задачи.

  3. Средний случай.

    1. В основе анализа лежит определение различных групп, на которые следует разбить возможные наборы входных данных.

    2. Определяется вероятность, с которой входной набор данных принадлежит каждой группе .

    3. Подсчитывается время работы алгоритма на данных каждой группы .

Среднее время работы вычисляется по формуле:

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 – это задачи, решаемые за реальное время.

Преимущества:

    1. Класс P инвариантен по модели вычислений.

    2. Класс 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 задачи:

    1. О раскраске графа.

    2. О раскладке по ящикам.

    3. Упаковка.

    4. Об истинности КНФ.

    5. Коммивояжера.

21=22. Обзор методов конструирования эффективных алгоритмов, примеры решаемых задач

1. Метод декомпозиции ("разделяй и властвуй"). Основная идея предполагает такую декомпозицию, что из более мелких задач легко получить решение задачи.

+ легкость разработки

+ в большинстве случаев дает более эффективный алгоритм.

Рекурсия. "Ханойская башня". На стержне n-дисков. На больший ложится меньший, но не наоборот. Количество операций 2n-1. Нередко не удается разбить задачу на подзадачи. Методом декомпозиции решаются многие задачи: сортировка вставками - умножение длинных чисел.

2. Динамическое программирование. Иногда не удается разбить задачи на более мелкие задачи. В таких случаях помогают методы динамического программирования. Беллман ввел понятие динамического программирования для характеристики алгоритмов, меняющихся от ситуации. Динамическое программирование - процесс пошагового решения задачи., когда выбирается одно решение из множества, которые оптимизирует целевую функцию.

- метод оптимального распределения ресурсов

- поиск кратчайшего пути в сетях

- задача триангуляции (выбрать такую совокупность хорд, что никакие две хорды не будут пересекаться)

3. Вероятностный алгоритм. Алгоритмы, в основе которых лежат вероятностные методы.

- Монте-Карло (выдают результат, его правильность возрастает с увеличением времени работы)

- Лас-Вегаса (никогда не дает неправильного результата и чем дольше работает, тем больше вероятность правильности)

- Шервудский (похож на Лас-Вегас. Применяется, когда разница между средним и наихудшим случаем очень велико).

4. Метод ветвей и границ.

- поиск минимальной и максимальной конфигурации

- задача коммивояжера

5. Алгоритмы моделирования поведения биологических процессов и систем.

- алгоритм моделирования наследственности (алгоритмы, моделирующие поведение, в том числе генетический алгоритм)

- нейросетевые

- эволюционные вычисления

- муравьиные алгоритмы

Моделирует процессы саморегуляции на основе низкоуровневых взаимодействий. (прямое общение - контакт, косвенное - феромоны).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]