Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
21.05.2015
Размер:
2.41 Mб
Скачать

1_4. Анализ алгоритмов

Цели

  • Оценить качество алгоритмов с помощью количественных критериев

  • Сравнить различные алгоритмы для решения заданной алгоритмической задачи

Алгоритм - понятное и точное предписание исполнителю совершить последовательность действий, направленных на достижение поставленной цели.

Алгоритм имеет исходные данные (вход алгоритма) и выдает некоторый результат

Алгоритмическая задача.

  • входные данные

  • необходимый результат.

Алгоритм называют правильным, если на любом допустимом входе он заканчивает работу и выдает результат, удовлетворяющий требованиям задачи.

Сложность алгоритмов

  • Временная сложность алгоритма — количество элементарных шагов, которые он выполняет.

  • Объемная сложность алгоритма — количество оперативной памяти, необходимой для его выполнения.

Классы сложности алгоритмов

Труднорешаемые задачи

Не найден полиномиальный алгоритм.

Класс NP – задачи, проверяемые за полиномиальное время.

P=NP?

NP-полные задачи

Задача факторизации целого числа не является NP-полной

Примеры труднорешаемых задач

  • Задача о рюкзаке

Задан набор n предметов с массами mi и стоимостями ci. Максимальная масса рюкзака M. Выбрать подмножество предметов так, чтобы

Σ mi ≤ M и Σ сi → max.

  • Задача коммивояжера

Имеется n городов, nxn матрица A = (aij) содержит попарные расстояния между городами. Найти замкнутый маршрут, содержащий все города по одному разу, и имеющий минимальную длину.

Методы анализа рекуррентных алгоритмов

Метод подстановки

Метод итераций

Анализ дерева рекурсии

Применение общей теоремы

Пример: сортировка слиянием

Под слиянием понимается объединение двух (или более) упорядоченных последовательностей в одну упорядоченную последовательность при помощи циклического выбора элементов, доступных в данный момент.

Алгоритм сортировки

  1. Сначала разделим массив пополам,

  2. Отсортируем обе половины с помощью рекурсивного вызова

  3. Выполним слияние отсортированных половин в один массив

Оценка сложности сортировки слиянием

T(n) = 2 T (n/2) + n.

Предположим T(n) = O(nlogn).

T(n)≤cnlogn. Пусть оценка верна для n/2.

T(n)≤ 2c(n/2)log(n/2)+n ≤ cnlog(n/2) + n ≤ cnlogn – cnlog2+n ≤ cnlogn

Теорема о рекуррентных соотношениях

a≥0, b>1 – константы, f(n) – функция,

T(n)=aT(n/b)+f(n), тогда

1)если f(n)=O(nlogba-ε) для некоторого ε>0, то T(n) = Ө(nlogba)

2)если f(n)= Ө(nlogba), то T(n) = Ө(nlogbalog n)

3)если f(n)=Ω(nlogba+ε) для некоторого ε>0 и если af(n/b)<cf(n) для некоторого с<1 и n>n0, то T(n) = Ө(f(n))

1_4 «Генерация комбинаторных объектов»

При решении практических задач часто приходится выбирать из некоторого конечного множества объектов подмножество элементов, обладающих теми или иными свойствами, размещать элементы множеств в определенном порядке и т. д. Эти задачи принято называть комбинаторными задачами.

Многие из комбинаторных задач решаются с помощью двух основных правил — суммы и произведения.

Правило сложения. Если удается разбить множество объектов на классы и каждый объект входит в один и только один класс, то общее число объектов равно сумме числа объектов во всех классах.

Правило умножения. Даны два произвольных конечных множества объектов А и В. Количество объектов в А равно N, в В М. Составляются упорядоченные пары , где принадлежит А) и . Количество таких пар (объектов) равно N*M. Правило обобщается и на большее количество множеств объектов.

Определение: Перестановкой чисел от 1 до называется последовательность длины, в котором они встречаются только один раз.

Например, рассмотрим все перестановки при .

123

132

321

312

213

231 Всего

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

Задача коммивояжера. Имеется N городов. Известны расстояния между городами, записанные при помощи квадратной матрицы , где— расстояние отдогорода. Найти маршрут, проходящий через все города один раз, и вернуться с минимальной длиной.

12345678

75643218

34526718

Для решения такой задачи необходимо найти перестановки чисел от 1 до . Для каждой такой перестановки считается длина и затем находится минимальная.

Задачу можно решить, перебрав все перестановки. Полиномиального алгоритма не придумано.

Соседние файлы в папке ГОСы