问题描述 投票:0回答:1

作为旁注,通常将指数时间写成O(2

n
),因为N可以乘以常数以实现另一个指数(2
n
algorithm recursion big-o
1个回答
0
投票
(log(log(2) / log(b)N

),n的系数通常被认为是与大符号无关的。但是,在比较指数算法时考虑指数级的大型OS的不同基础绝对有用。

ok,因此,如果我迅速简化了功能,因此删除了恒定的时间操作:

void g(int n) // O(2^n)??? function A { if(n <= 1) return; g(n - 1); g(n - 2); g(n - 2); return; } void g(int n) // O(3^n) function B { if(n <= 1) return; g(n - 1); g(n - 1); g(n - 1); return; } 然后为每个函数创建呼叫计数器(计数包括初始基本呼叫):

int countCallsA(int n, int calls = 1) // for function A { if(n <= 1) return calls; return countCallsA(n - 1, calls) + 2 * countCallsA(n - 2, calls); }

int countCallsB(int n, int calls = 1) // for function B { if(n <= 1) return calls; return 3 * countCallsB(n - 1, calls); }
现在,很明显,对于正面,
n
实际上是执行简单的启动

countCallsB

,显示函数b具有预期的O(3
n
)时间。
对于
3^(n - 1)

,我们得到一系列结果,可以由

定义
        u
n
=u
n-1
 +2u
n-2,对于n≥3,其中u1

= 1 andu

2

= 4,
其中u
n=countCallsA. 如果un-1和un-2被取代,直到给定的n剩下任何东西(第一步将给出         un
=un-2 +2u
n-3
+ 2(u

n-3

+2un-4 ),然后很明显,所有两者都积聚成2n
是主要的术语。 任何一个直觉的解释,但仅出于完整性,解决递归公式就可以提供         un=2n + 0.5(-1)n-0.5,证明它以o(2n
)时间运行。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.