Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bilety_po_AiP.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.1 Mб
Скачать
  1. Оценка сложности циклических алгоритмов. Примеры.

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

Введем обозначения:

Tтела цикла – временная сложность операторов, выполняемых в теле цикла;

Tусловия – количество операций, выполняемых при проверке условия цикла;

k – количество повторений тела цикла;

T(k) – временная сложность выполнения цикла, как функция, зависящая от параметра k.

Рассмотрим часто встречающиеся случаи:

1) Цикл с параметром c заголовком for i:=1 to n do

k = n, T(k) = k∙Tтела цикла.

2) Цикл с параметром с заголовком в общем виде for i:=a to b do

k = (b–a)+1, T(k) = k∙Tтела цикла.

3) Цикл с предусловием WhileDo. Условие в таком цикле всегда проверяется на 1 раз больше по сравнению с количеством выполнений тела цикла.

T(k) = (k+1) ∙Tусловия + k∙Tтела цикла, k ≥ 0.

4) Цикл с постусловием RepeatUntil. Количество выполнений тела цикла совпадает с количеством проверок условия цикла, минимально тела цикла выполняется 1 раз.

T(k) = k ∙Tусловия + k∙Tтела цикла, k ≥ 1.

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

– Нижняя оценка сложности Tmin соответствует случаю, когда тело цикла выполняется минимально возможное число раз, обозначим это число kmin .

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

– Средняя оценка сложности вычисляется как сумма произведений вероятности того, что цикл выполнится k раз, на сложность алгоритма при k итерациях цикла, при этом значение k последовательно пробегает все значения от kmin до kmax.

Taverage =

Пример:

Рассмотрим фрагмент алгоритма, в котором n – целое число, n и все значения n равновероятны.

x:=0;

For i:=1 to n do

x:=x+i;

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

Функция сложности T(k) = 1+2k. Поскольку количество повторений тела цикла k=n, можно переписать функцию сложности по-другому T(n) = 1+2n. Таким образом, параметром V, характеризующим сложность входных данных, является n (V=n).

Минимально цикл выполняется 0 раз, следовательно, Tmin = T(0) = 1.

Максимально возможное число повторений тела цикла равно 10, значит Tmax=T(10)=1+2∙10=21.

Поскольку все значения n равновероятны p0 = p1 = … = p10 = .

Tavareage = ∙T(0) + ∙T(1) + … + ∙T(10) = ∙ (1 + 3 + 5 + …+ 21) = ∙ = 11.

Управляющий граф содержит вложенные циклы. Возможно два случая:

    1. Количество повторений вложенного цикла не зависит от параметра внешнего цикла

Построить функцию сложности итеративного алгоритма умножения двух квадратных матриц А = {aij} и B = {bij} размера n x n, результатом которого является матрица C = {cij}, также размером n x n.

procedure MULTIPLY (n: integer; a, b: matrix; var c: matrix);

var i, j, k: integer;

begin

for i := 1 to n do {Цикл 1}

for j := 1 to n do {Цикл 2 и начало тела цикла 1}

begin

c[i, j] := 0; {Начало тела цикла 2}

for k := 1 to n do {Цикл 3}

c[i, j] := c[i, j] + a[i, k] * b[k, j]; {Тело цикла 3}

end {Конец тела цикла 2; конец тела цикла 1}

end;

Тип данных matrix определен вне процедуры как двумерный массив. Время доступа к элементам не учитываются при анализе алгоритмов. Прежде всего, выберем параметр V. Простой анализ текста показывает, что за параметр сложности данных можно взять размер n матриц, участвующих в вычислениях. Поскольку процедура представляет собой цикл по переменной i, то ее временная сложность

Тα(n) = n·T(1).

В свою очередь,

T(1) = T(2)

и, следовательно,

Тα(n) = n·(n·T(2)).

Тело цикла 2 состоит из одного оператора присваивания и цикла 3. Таким образом,

Тα(n) = n·(n·(1 + n·T(3))).

Тело цикла 3 включает умножение, сложение и присваивание (3 операции). Окончательно получаем

Тα(n) = n·(n·(1 + n·3)) = 3n3 + n2

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