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

Scheme 方案中acc函数的时间复杂度?,scheme,complexity-theory,time-complexity,space-complexity,Scheme,Complexity Theory,Time Complexity,Space Complexity,我一直在试图找到这个函数的时间复杂度的一个紧界,它只涉及其中一个参数。我以为它是O(p^2)(或者更大的θ),但我不确定了 (define (acc p n) (define (iter p n result) (if (< p 1) result (iter (/ p 2) (- n 1) (+ result n)))) (iter p n 1)) (定义(acc p n) (定义(iter p n结果) (如果(

我一直在试图找到这个函数的时间复杂度的一个紧界,它只涉及其中一个参数。我以为它是O(p^2)(或者更大的θ),但我不确定了

(define (acc p n)
  (define (iter p n result)
    (if (< p 1) 
        result
        (iter (/ p 2) (- n 1) (+ result n))))
  (iter p n 1))
(定义(acc p n)
(定义(iter p n结果)
(如果(
@sarahamedani,为什么这是O(p^2)?在我看来它像O(logp)。运行时应该对
n
的值不敏感


您正在对一系列数字求和,从
n
开始倒计时。
iter
将迭代的次数取决于
p
可以减半而不少于1的次数。换句话说,
p
中最左边的“1”位的位置减去1,就是
iter
将迭代的次数。这意味着
iter
运行的次数与
logp

成正比,你可以尝试观察它,或者更系统地从它开始。假设我们是从头开始做这件事,我们应该尝试从函数定义建立一个递归关系

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

iter cost
作为计算
iter
所需步骤的函数名,并将其作为
p
的函数,因为
iter
的终止仅取决于
p
。然后您应该能够为
iter成本(0)
编写表达式。对于
iter成本(1)
iter成本(2)
iter成本(3)
,以及
iter成本(4)
,您能做到这一点吗


更一般地说,假设
p
大于零,你能表示
iter成本(p)
?它将以常量和反复调用
iter成本
表示。如果你可以把它表示为一个循环,那么你就可以更好地用封闭的形式来表达它。

只是为了学究,它在程序集O(p^2)中,纯粹从技术定义上讲。只是它也属于一个小得多的集合,我们试图说服OP,O(p^2)的上界太过宽松了。