Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика / Основы теории алгоритмов.doc
Скачиваний:
168
Добавлен:
10.02.2015
Размер:
611.84 Кб
Скачать

1.3. Основные свойства алгоритма

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

  • дискретности;

  • понятности;

  • определенности (детерминированности);

  • массовости;

  • результативности (сходимости) и др.

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

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

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

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

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

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

Важным свойством, характеризующим алгоритм, является его сложность.

Сложность алгоритма — характеристика алгоритма, определяющая зависимость времени работы программы от объема обрабатываемых данных.

Для алгоритма обработки равных по объему данных продолжительность его работы является неизменной, а сложность алгоритма — постоянной. При этом время работы алгоритма обработки массивов данных зависит от размеров этих массивов.

Так, если время работы алгоритма по выполнению только операции чтения и занесения данных в оперативную память определяется выражением an+b, где а — время чтения и занесения в память одной информационной единицы, b — время выполнения вспомогательных функций, n — общее количество элементов исходных (входных данных) ал горитма (количество строк таблицы, количество переборов, сочетаний и др.), характеризующим линейную зависимость от n, то сложность такого алгоритма будет линейной. Например, для алгоритма обменной сортировки (сортировка по методу пузырька) n элементов списка сравнений позволяет определить число сравнений, выражаемое полиномом второй степени: (n2 - n) / 2. При этом сложность алгоритма будет квадратичной. Если сложность такого алгоритма оценивается для готовой программы, то вместо числа сравнений вычисляется число внутренних циклов, являющихся основой рассматриваемой программы.

Оценка сложности алгоритма по времени его работы алгоритма может определяться максимальным, минимальным и средним временем его выполнения. Различные используемые эвристические методы этой оценки дают различные значения указанного времени. Для приведенного примера сортировки оценки совпадают. Если же прекращать выполнение процедуры после выдачи результата об упорядочении списка, временные оценки работы алгоритма будут различны. Принято, что сложность задачи оценивается по реализациям правильных алгоритмов и представляет собой верхний предел для времени работы алгоритма. Однако может быть определен и нижний предел. Вполне очевидно, что для выполнения какого-либо вида обработки n элементов требуемое время по крайней мере будет пропорционально n.

Если рассмотреть пример алгоритма перемножения двух матриц размером n×n, то число реализаций оператора внутреннего цикла будет равно n3, а в соответствии с определением произведения матриц минимальное время работы также пропорционально n3. Таким образом, рассмотренные алгоритмы имеют полиномиальную оценку времени работы: n2 и n3. При этом алгоритм с оценкой n2 работает быстрее алгоритма с оценкой n3. С учетом рассмотренных примеров можно представить следующее содержание формальной сложности алгоритма.

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

Так, функции f(n) и g(n), а следовательно, и сложность алгоритмов будут одного порядка, если для больших n существует константа k, такая, что f(n)/g(n)≤k, то есть f(n)=O(g(n)). Таким образом, сложность алгоритма оценивается функцией изменения времени его выполнения. Для обозначения этой характеристики сложности принято понятие «временная сложность алгоритма», которая описывается функцией скорости роста времени выполнения и обозначается через известную O-символику.

Временная сложность алгоритма «время» выполнения алгоритма, выполняемое в шагах (инструкциях алгоритма), которые необходимо выполнить алгоритму для достижения запланированного результата.

Например, алгоритм чтения и занесения в память набора данных п оценивается линейной функцией роста времени О(n), алгоритм двоичного поиска в таблице с упорядоченными элементами оценивается как O(log2n), алгоритм простой обменной сортировки — O(n2), а умножения матриц — O(n3). Это значит, что если алгоритм поиска имеет сложность O(log2n) или сложность сортировки равна O(n2), то элемент данных будет найден, соответственно, за время, в худшем случае пропорциональное log2n, или сортировка информации будет выполнена в самом лучшем случае за время, пропорциональное n2. В процедуре сортировки оценка O(n2) является как минимальной, так и максимальной. Известны зависимости различных сложностей алгоритмов от возрастания n (табл. 1.3). Очевидно, что логарифмическая зависимость более приемлема, чем линейная, а линейная — предпочтительнее полиномиальной и экспоненциальной. Так, из таблицы 1.3 видно, что для всех задач, кроме самых коротких, экспоненциальная зависимость нежелательна, для информационных массивов, имеющих средние размеры, требуются чрезвычайно большие затраты времени, а для больших объемов данных нежелательна даже полиномиальная сложность.

Табл. 1.3. Примеры сложности алгоритмов по О-параметру

n

O(log2n)

O(n)

O(nlog2n)

O(n2)

O(2n)

O(n!)

O(nn)

1

0

1

0

1

2

1

1

5

2,3219

5

11,6096

25

32

120

3,125

10

3,3219

10

33,2193

100

1,024

3,6*106

1010

20

4,3219

20

86,4386

400

106

2,4*1018

1026

30

4,9669

30

147,2067

900

109

2,6*1032

2*1044

100

6,6439

100

664,3856

10000

1030

1051

10200

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