Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
математ.основы прогр.2.doc
Скачиваний:
9
Добавлен:
07.09.2019
Размер:
1.19 Mб
Скачать

2.7 Анализ алгоритмов

Одну и ту же задачу можно решить различными алгоритмами. Эффективность работы каждого из них оценивается различными критериями или характеристиками. Но прежде чем оценивать эффективность алгоритма, нужно доказать, что он правильно решает задачу. В противном случае вопрос об эффективности не имеет смысла. Если алгоритм решает поставленную задачу, то можно посмотреть, насколько он эффективен.

Наиболее естественным оценить эффективность алгоритма было бы фиксировать время его работы. Но трудно признать этот критерий за оценочный, так как на его величину оказывает влияние степень совершенства конструкции ЭВМ. Другим критерием эффективности является фактическое количество операций алгоритма. Число операций определяет относительное время выполнения алгоритма.

При анализе эффективности алгоритмов чаще всего используется условная характеристика «время работы алгоритма» - это число элементарных шагов, которые он выполняет. Остается определиться – что подразумевать под элементарным шагом. Наиболее целесообразно исходить из того, сколько вычислительных ресурсов требует решение одной и той же задачи при использовании сравниваемых алгоритмов (время работы, память).

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

1) аддитивные операторы – сложения, вычитания, увеличение или уменьшение счетчика;

2) мультипликативные операторы – умножение, деление, взятие остатка по модулю.

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

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

.

Р е ш е н и е. Рассмотрим процесс вычисления многочлена по двум возможным схемам.

1) Представим порядок вычисления следующим образом:

.

Если обозначить через Сi количество значимых операций, то для первой схемы получаем

;

;

;

.

С учетом наличия трех операций сложения получим итоговое значение количества значимых операций

.

2) Введем вспомогательную процедуру

.

Тогда порядок вычисления степенного многочлена можно представить так:

.

Подсчитаем поэтапно «стоимость» вычислительных процедур:

;

;

;

;

.

С учетом операций сложения получим:

.

В ы в о д. Стоимость второго алгоритма вычисления степенного многочлена «дешевле» первого на три единицы, т.е. возможно снижение «стоимости» вычисления почти на 30%. Очевидно, что снижение сложности вычислений по мере роста степени многочлена будет тем большим, чем выше максимальная степень многочлена.

В составе алгоритма достаточно часто применяются циклы. Если стоимость однократного вычисления в цикле составляет С, а цикл предполагает повторение вычислений т раз, то общая стоимость вычислений дает вклад в размере С∙т в общее число операций. Если цикл реализуется с переменным значением счетчика, то множитель т будет записан как сумма

.

Если алгоритм вычисления представлен в виде текста программы, то можно ввести понятие «стоимости» Сi в удобной для анализа размерности (например, число символов, число операций вычисления, число ячеек памяти и т.д.). Безусловным исходным объектом для анализа в этом случае будет построчный текст программы.

В качестве примера рассмотрим программу сортировки массива цифр, например, по возрастающей его элементов. Как известно, предложено множество способов реализации этой задачи, имеющей большое практическое применение в области прикладных задач. Выберем метод вставок. Суть его в следующем.

Предположим, имеем неорганизованный массив чисел . Говорят, что п=6 – длина массива. Обозначим эту величину через length(A). Последовательность сортировки представлена на рисунке 2.7.

Рисунок 2.7 – Алгоритм сортировки вставкой

В таблице 2.4 представлена программа Inserthion-sort(A) сортировки методом вставки.

Таблица 2.4 – Текст программы

Содержание процедуры

Стоимость

Число раз

1

For j→2 to length(A)

C1

n

2

Do key→A(j)

C2

n-1

3

Добавить A(j) к отсортированной части А(1, j-1)

0

4

i→j-1

C4

n-1

5

While i>0 and A(i)>key

C5

6

Do A(i+1)→A(i)

C6

7

i→j-1

C7

8

A(i+1)→key

C8

n-1

Для каждого j от 2 до п подсчитаем сколько раз будет исполнена строка 5, и обозначим это число через tj (строки внутри цикла выполняются на один раз меньше, чем проверка, так как последняя проверка выводит из цикла). Строка стоимостью С, повторенная т раз, дает вклад (С∙т) в общее число операций. Сложив вклады всех строк, получим:

Предположим, что введен уже отсортированный массив. Тогда цикл в строке 5 завершается после первой же проверки (так как A(j)≤key при i=j-1), поэтому все tj равны единице, и общее время есть:

.

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

,

где а,bконстанты, зависящие от стоимости (С1, С2, …,С8).

Если же массив находится в наихудшем состоянии (отсортирован по убывающей), то время его работы будет максимальным. Каждый элемент A(j) придется сравнивать со всеми элементами А(1), А(2), …, А(j-1). При этом tj=j. Поэтому в худшем случае время работы вычислений равно:

Теперь функция Т(п) – квадратичная, т.е. имеет вид:

.

Итак, на примере сортировки мы получили

или .

Каково же реальное время выполнения процедуры? Ответ на этот вопрос требует привлечения вероятности, так как массив (первичная информация) может находиться в промежуточном состоянии. Поэтому вводится понятие наихудшего случая, наилучшего случая и среднего случая.

Так как процедура сортировки массива может быть выполнена рядом способов, интересно привести сравнительные данные по времени выполнения алгоритмов по другим способам. Например,

  1. сортировка методом пузырька дает время

;

  1. сортировка Шелла

;

  1. пирамидальная сортировка

.

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

Список рекомендуемой литературы

1. Шикин Е.В., Шикина Г.Е. Исследование операций: Учебник. - М.: ТК Велби, изд-во Проспект, 2008.- 280 с.

2. Хедми А.Таха. Введение в исследование операций: Пер.с англ. – М.: Издательский дом «Вильямс», 2007. – 912 с.

3. Острейковский В.А. Информатика: Учебн. для вузов. М.: Высш.шк.,2001. – 511 с.

4. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ: Пер. с англ. – М.: МЦНМО: Бином. Лаборатория знаний. 2004. – 960 с.

5. Беллман Р. Динамическое программирование. — М.: Изд-во иностранной литературы, 1960.

6. Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 15. Динамическое программирование // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4

7. Акулич И.Л. Математическое программирование в примерах и задачах.- М: Высшая школа.1986.-318с.

8. Лунгу К. Н. Линейное программирование. Руководство к решению задач. - М.: ФИЗМАТЛИТ, 2005. - 128 с. 

Учебное издание

Кадиев Александр Мазаевич

Казанов Юрий Константинович

МАТЕМАТИЧЕСКИЕ ОСНОВЫ

ПРОГРАММИРОВАНИЯ

Учебное пособие

–––––––––––––––––––––––––––––––––––––––––––––––––––––––

Подписано в печать

Формат 60x84 1/16

Объем 3,0 п.л. Тираж 100 экз. Заказ

–––––––––––––––––––––––––––––––––––––––––––––––––––––––

ГОУ ВПО “Московский государственный университет

приборостроения и информатики”