Recursion 确定递归程序的工作/时间复杂性
嗨,我很难理解我大学课程中递归程序的复杂性,几天后就要期末考试了。语言是miranda,但我主要无法理解如何确定跟踪的每个级别上的“工作量”。有人能解释一下在前面的测试示例中答案是如何形成的吗?提前谢谢Recursion 确定递归程序的工作/时间复杂性,recursion,big-o,time-complexity,Recursion,Big O,Time Complexity,嗨,我很难理解我大学课程中递归程序的复杂性,几天后就要期末考试了。语言是miranda,但我主要无法理解如何确定跟踪的每个级别上的“工作量”。有人能解释一下在前面的测试示例中答案是如何形成的吗?提前谢谢 Example Trace p9 [1,2,3,4,5,6] => 3:[2,3,4,5,6] ++ p9 [2,3,4,5,6] | | 3:[3,
Example Trace
p9 [1,2,3,4,5,6]
=> 3:[2,3,4,5,6] ++ p9 [2,3,4,5,6]
|
|
3:[3,4,5,6] ++ p9 [3,4,5,6]
|
|
3:[4,5,6] ++ p9 [4,5,6]
etc.
a) 如果输入的长度为n,则计算中有n-1个级别,因为每次递归调用都会从列表中删除一个元素,直到列表的长度为1为止
b) 第一级的功与n+1成正比
因为++运算符取决于
最左边的列表。
下一级的功与n成正比
下一级的功与n-1成正比
等,直到最后一次通话时,工作是2个单位
c) 因此,水平上的平均功是成比例的
至n/2
d) 因此,总功与n^2成正比
e) 因此,复杂度为O(n^2)