假设我具有以下功能:(Haskell语法)
f x = (x,x)
该功能执行的工作(计算量)是多少?
起初我以为它显然是常数,但是如果
x
的类型不是有限的,那意味着x可以占用任意数量的内存呢?人们还必须考虑通过复制x
完成的工作,对吗?这使我相信,该函数完成的工作实际上在输入大小上是线性的。
这本身不是家庭作业,但是当我必须定义该函数完成的工作时出现:
f x = [x]
我相信,这也有类似的问题。
最佳答案
在非常非正式的情况下,完成的工作取决于您语言的操作语义。 Haskell,这很懒,因此您只需支付以下恒定因素即可:
x
(,)
分配一个堆单元格(,)
应用于其参数做完了O(1)工作,在调用方查看
f
的结果时执行。现在,如果您查看
(,)
内部,将触发进一步的评估-该工作取决于评估x
本身的工作。由于在Haskell中共享了对x
的引用,因此您只需对其进行一次评估。因此,如果您完全评估结果,Haskell中的功为O(x的功)。您的函数
f
仅添加常数因子。关于haskell - 计算由f x =(x,x)完成的功,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10825933/