Анализ алгоритма точного решения задачи о сумме



Рассмотрим лучший и худший случай для данного алгоритма:

a. В лучшем случае, когда последний элемент массива совпадает со значением V: V=S[N],необходимо выполнить только одно суммирование, что приводит к оценке: (N)=Q(N);

b. В худшем случае, если решения вообще нет, то придется проверить все варианты, и (N) = Q (N* ).

Получим детальную оценку для худшего случая, используя принятую методику подсчета элементарных операций:

(N) = 2+N*(3+2)+2+( -1)*{2+N*(3+5)+1+1+ +2+2} (7.2)

Для получения значения - количества операций, необходимых для увеличения счетчика на «1» рассмотрим по шагам проходы цикла While, в котором выполняется эта операция:

CNT Количество проходов в While Операций
001 1 6+2
010 0 2
011 2 2*6+2
100 0 2
101 1 6+2
110 0 2
111 3 3*6+2

РЕКУРСИВНЫЕ ФУНКЦИИ И АЛГОРИТМЫ

Рекурсивные функции

а) Терминологическое введение

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

Под индукцией понимается метод доказательства утверждений, который строится на базе индукции при n=0,1, затем утверждение полагается правильным при n=n b и проводится доказательство для n+1.

Под рекурсией понимается метод определения функции через её предыдущие и ранее определенные значения, а так же способ организации вычислений, при котором функция вызывает сама себя с другим аргументом.

Термин рекуррентные соотношения связан с американским научным стилем и определяет математическое задание функции с помощью рекурсии.

Основной задачей исследования рекурсивно заданных функций является получение f(n) в явной или как еще говорят «замкнутой» форме, т.е. в виде аналитически заданной функции. В связи с этим рассмотрим ряд примеров:

б) Примеры рекурсивного задания функций

1. f(0)=0 f(n)= f(n-1)+1

 

2. f(0)=1 f(n)= n*f(n-1)

Последовательная подстановка дает – f(n)=1*2*3*…*n = n!

Для полноты сведений приведем формулу Стирлинга для приближенного вычисления факториала для больших n:

3. f(0)=1 f(1)=1 f(n)= f(n-1)+ f(n-2), n>=2

Эта рекурсивная функция определяет числа Фибоначчи: 1 1 2 3 5 8 13, которые достаточно часто возникают при анализе различных задач, в том числе и при анализе алгоритмов. Отметим, что асимптотически

4. f(0)=1 f(n)= f(n-1)+ f(n-2)+…+1 = f(i)+1

Для получения функции в явном виде рассмотрим ее последовательные значения: f(0)=1, f(1)=2, f(2)=4, f(3)=8, что позволяет предположить, что f(n)= , точное доказательство выполняется по индукции.

5. f(0)=1 f(n)= 2*f(n-1)

Мы имеем дело с примером того, что одна и та же функция может иметь различные рекурсивные определения – f(n)= , как и в примере 4, что проверяется элементарной подстановкой.

6. f(0)=1 f(1)=2 f(n)= f(n-1)*f(n-2)

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

Обозначив через Fn - n-ое число Фибоначчи, имеем: f(n)= .


Дата добавления: 2018-02-28; просмотров: 452; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!