您好我几天后无法理解大学课程中递归程序的复杂性。语言是miranda,但我主要不明白如何确定工作量'在每个级别的跟踪。任何人都可以解释在前面的测试示例中如何制定答案?提前谢谢。
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)