Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TA1_2.DOC
Скачиваний:
12
Добавлен:
02.11.2018
Размер:
444.42 Кб
Скачать

Определение.

Логарифмическая емкостная сложность РАМ- программы - это сумма по всем работавшим регистрам, включая сумматор, величин l(xi), где xi - наибольшее по абсолютной величине целое

число, содержавшееся в i-ом регистре за все время вычислений.

Пример.

Рассмотрим программу, считающую nn:

begin

read x

...

y=1

for (i=1...x) y=y*x // умножение выполняется n раз

write y

end

При равномерном весовом критерии каждая команда MULT требует одну единицу времени, поэтому на выполнение всех команд MULT тратится время O(n). При логарифмическом весовом критерии i-ая команда занимает l(ni) + l(n)  (i+1) log n, так что время выполнения всех команд MULT равно

Емкостная сложность определяется числами, которые хранились в регистрах от 0 до 3. При равномерном весовом критерии емкостная сложность составляет O(1), а при логарифмическом - O(n log n),поскольку наибольшее целое число среди содержавшихся в этих регистрах есть n, а

l(n)  n log n. Таким образом. сложности для программы из примера таковы:

Логарифмический критерий.

Рассмотрим i-ую команду:

l(ni)  i l(n)  пусть

( Для любого  существует схема со стоимостью (1+) ).

Пример.

Более эффективный алгоритм для xy:

1) read x, y ; z=1 ;

while (y0)

if (even(y)) //если четно

begin y/=2 ; x=x*x; end; // ? какая сложность

else

begin y-- ; z= z*x; end;

write z ;

2) более простой алгоритм :

while (y0)

begin

if (odd(y)) begin z= z*x ; y--; end;

y=y/2 ;

x=x*x ;

end;

(y) - инвариант цикла ; =(z*xy = ab)

в начале z=1 ; x=a ; y=b (сохранение инварианта)

в начале: 1* ab= ab ;

в конце z =ab ; y=0 ; ab = ab ;

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

z* xy = ab if (even(y)), т.е. y=2k , тогда z*(x*x)y/2 = ab

if (odd(y)), т.е. y=2k+1, тогда (z*x)*xy-1=ab

0.7. Модификации рам.

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

0.8. Неветвящиеся программы и равномерный весовой критерий.

Пример.

Схема Горнера вычисления полиномов .

p(x)=anxn+ an-1xn-1+...+ a1x+a0

Входными переменными служат коэффициенты a0 , a1,...an и неопределенная переменная x.

Выходной переменной будет p.

По правилу Горнера p(x) вычисляется так:

1) a1x+a0 для n=1

2) (a2 x +a1) x +a0 для n=2

3) (a3 x+a2)x+a1)x+a0 для n=3

Ниже приведена неветвящаяся программа, соответствующая этим выражениям.

Для каждого n есть неветвящаяся программа из 2n шагов, вычисляющая полином n-й степени. Для вычисления произвольного полинома n-й степени по его коэффициентам требуется n умножений и n сложений. Циклы допускаются, но это циклы [1, ..., k], которые можно представить копированием строки k раз. Таким образом, если в качестве модели брать неветвящиеся программы, правило Горнера оптимально.

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