方案中acc函数的时间复杂度?

时间:2012-02-13 09:34:47

标签: scheme complexity-theory time-complexity space-complexity

我一直在努力为这个函数找到一个紧密的约束时间复杂度,仅针对其中一个参数。我以为是O(p ^ 2)(或者说是相当大的theta),但我不确定了。

(define (acc p n)
  (define (iter p n result)
    (if (< p 1) 
        result
        (iter (/ p 2) (- n 1) (+ result n))))
  (iter p n 1))

2 个答案:

答案 0 :(得分:2)

@sarahamedani,为什么这是O(p ^ 2)?它看起来像O(log p)给我。运行时应该对n的值不敏感。

您正在汇总一系列数字,从n开始倒计时。 iter将迭代的次数取决于p在不小于1的情况下减半的次数。换句话说,p中最左边的'1'位的位置,减一,是iter将迭代的次数。这意味着iter的投放次数与log p成正比。

答案 1 :(得分:0)

您可能会尝试对其进行观察,或者更系统地从中进行观察。假设我们从头开始这样做,我们应该尝试从函数定义构建一个递归关系。

目前,我们可以假设一个非常简单的机器模型,其中算术运算和变量查找是恒定时间。

iter-cost成为计算iter计算所需步数的函数的名称,并将其作为p的函数,因为iter'终止仅取决于p。然后你应该能够为iter-cost(0)编写表达式。您能为iter-cost(1)iter-cost(2)iter-cost(3)iter-cost(4)执行此操作吗?

更一般地说,如果p大于零,您能表达iter-cost(p)吗?这将是常量和对iter-cost的重复调用。如果你可以表现为复发,那么你可以更好地以封闭的形式表达它。