Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOSy / ГОСы / шп I.doc
Скачиваний:
56
Добавлен:
21.05.2015
Размер:
2.32 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) = 2T(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) = Ө(nlogbalogn)

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 до . Для каждой такой перестановки считается длина и затем находится минимальная.

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

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