【发布时间】:2014-12-08 16:33:10
【问题描述】:
我想出了这段代码,它采用升序排列的两个 SORTED 列表,然后将这两个列表合并为一个列表,保持升序排序。我试图分析它,看看它的时间复杂度是多少。我的信念是,在最坏的情况下,我们将不得不遍历整个列表,并且由于有 2 个列表,我们将不得不进行嵌套递归,这意味着最坏情况的 O(n^2) 时间。但是,由于我们在递归之前比较了两个元素的大小,我认为这可能是 O(log n) 时间。如果我错了,请纠正我。谢谢
这是我的递归:
mergeLists::[Integer]->[Integer]->[Integer]
mergeLists [] [] =[]
mergeLists [] (y:ys) =(y:ys)
mergeLists (x:xs) [] =(x:xs)
mergeLists (x:xs) (y:ys)
|(x<y) =x:mergeLists xs (y:ys)
|otherwise =y:mergeLists (x:xs) ys
【问题讨论】:
-
通常定义为左偏,即当x==y时,拉x,而不是y:
| y>x = y : ...。
标签: performance algorithm haskell recursion