解决一个运行次的递归关系
Resolving a running time of recursive relations
我的算法在下面给出,我知道这个算法有一个指数 运行 时间,但我不知道如何用数学来表示。有人对此有任何想法吗?
如果(n = 1 或 n = 2)则 return n
其他
return 2 * RecursiveMNum(n - 1) * RecursiveMNum(n - 2)
正如您对 n=1 所说的那样,调用函数一次即可获得答案,n=2 也是如此。 n=3 的调用次数等于 n=1 的调用次数加上 n 的调用次数=2。因此调用次数的顺序是 1,1,2,3 ..... 。这确实是 Fibonacci 系列。如果你知道黄金数字的概念,这个系列中两个连续数字的比率约为 1.6 ( Golden Number ),这接近于黄金数字。
现在 a^n 等指数级数的连续比率是 a。在我们的例子中,我们可以说 a 大约是 1.6。因此,它确实呈指数增长,即。你可以说它是 O(a^n),其中 a 大约是 1.6。您还可以在此处查看第 n 个斐波那契数的封闭形式:Nth Fibonacci 这证明了参数的合理性,因为它具有指数形式。
如您所见,复杂性取决于调用 2 * RecursiveMNum(n - 1) * RecursiveMNum(n - 2)
,因为另一个将在 O(1) 上计算。
所以你可以使用Substitution解决这个问题。
T(n) = T(n-1) + T(n-2) < 2T(n-1)
现在
2T(n-1)=2(2T(n-2))=2(2(2T(n-3)))=...=2^kT(n-k)=...=2^nT(0)=O(2^n)
T(0) = Θ(1) (base case)
所以你可以说它通常具有 O(2^n)
的复杂性。
我的算法在下面给出,我知道这个算法有一个指数 运行 时间,但我不知道如何用数学来表示。有人对此有任何想法吗?
如果(n = 1 或 n = 2)则 return n
其他 return 2 * RecursiveMNum(n - 1) * RecursiveMNum(n - 2)
正如您对 n=1 所说的那样,调用函数一次即可获得答案,n=2 也是如此。 n=3 的调用次数等于 n=1 的调用次数加上 n 的调用次数=2。因此调用次数的顺序是 1,1,2,3 ..... 。这确实是 Fibonacci 系列。如果你知道黄金数字的概念,这个系列中两个连续数字的比率约为 1.6 ( Golden Number ),这接近于黄金数字。
现在 a^n 等指数级数的连续比率是 a。在我们的例子中,我们可以说 a 大约是 1.6。因此,它确实呈指数增长,即。你可以说它是 O(a^n),其中 a 大约是 1.6。您还可以在此处查看第 n 个斐波那契数的封闭形式:Nth Fibonacci 这证明了参数的合理性,因为它具有指数形式。
如您所见,复杂性取决于调用 2 * RecursiveMNum(n - 1) * RecursiveMNum(n - 2)
,因为另一个将在 O(1) 上计算。
所以你可以使用Substitution解决这个问题。
T(n) = T(n-1) + T(n-2) < 2T(n-1)
现在
2T(n-1)=2(2T(n-2))=2(2(2T(n-3)))=...=2^kT(n-k)=...=2^nT(0)=O(2^n)
T(0) = Θ(1) (base case)
所以你可以说它通常具有 O(2^n)
的复杂性。