Scheme 方案中acc函数的时间复杂度?
我一直在试图找到这个函数的时间复杂度的一个紧界,它只涉及其中一个参数。我以为它是O(p^2)(或者更大的θ),但我不确定了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结果) (如果(
(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)的上界太过宽松了。