由于潜在的溢出,所有递归算法都不应该有O(inf)的最坏情况(空格)吗?
采用Fibonacci算法What is the space complexity of a recursive fibonacci algorithm?
答案是O(N)但是如果输入很大并且发生堆栈溢出会怎样。然后最坏的情况是O(inf)
答案 0 :(得分:0)
简答:否。
稍微长一点回答:正如评论中提到的每个人一样,Big-O表示法假定了无限的资源,因此实施问题(特别是与硬件相关的问题)没有任何影响。它只是对算法的描述,以及如果你给它任意大的输入它假设会如何缩放。
也就是说,如果您在定义中包含硬件约束,那么答案仍然是否定的,因为Big-O关注的是处理器周期,迭代或任务 - 这种做法的衡量标准。如果你在递归算法中得到太深,以至于你的堆栈用完了,你就会停止执行任何与算法相关的操作。它会停止,你将不再“做任何事情”了。没有什么可以衡量的,当然也不是无限的。
无论如何,Big-O的观点是有用的,有助于理解算法的理论。说“一切都是无限的大O”,即使它是正确的,也不会完成任何一项。它只是定义中的一个漏洞。