algorithm - 调用了多少次生成器?

标签 algorithm recursion

假设我有以下算法:

procedure(n)
   if n == 1 then break
   R = generaterandom()
   procedure(n/2)

现在我明白了这个算法的复杂度是 log(n) 但它是 log(n) 调用随机生成器还是 log( n)-1 因为当 n==1 时它不会被调用。

很抱歉,如果这很明显,但我一直在四处寻找,并没有在任何地方真正说明确切的答案是什么。

最佳答案

生成器有ceil(log(n))次调用


使用归纳法证明:

假设:
ceil(log(k))为每个 k<n 调用生成器

基地:
log_2(1) = 0 => 0 次调用

步骤:
任意n>1有一个电话,然后从假设ceil(log(n/2)递归调用中的更多调用。
这给了我们一共ceil(log(n/2))+1 = ceil(log(n/2)) + log(2) = ceil(log(n/2 * 2)) = ceil(log(n))通话

QED

注意:此处所有日志均以2为底。

关于algorithm - 调用了多少次生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15019945/

相关文章:

arrays - 如何改进算法来检查数组中是否有一个元素等于数组中任何其他两个元素之间的差值?

c# - 在递归调用中跟踪项目编号 C#

c++ - 为什么这个递归函数在列表中搜索项目,导致堆栈溢出?

java - 递归相关: Product of two numbers

返回二叉树中最短分支长度的算法

java - 如何找到从0到180和-180到0的最近角度

C 递归中使用if或while的区别

java - 递归骑士之旅中变量的正确声明(Java作业)

c++ - 图像降尺度算法

algorithm - Big O 的复杂性可以有不止一个答案吗?