6
A
回答
7
是的,@
OCaml中运行时是O(n)
(其中n
是左操作数的长度)。
通常追加到一个不可变的单向链表(或不可变的双向链表)的末尾将始终为O(n)
。
1
总之,是的。
为了说明,一个简单的(不是尾递归)附加功能可以写成如下:
let rec (@) xs ys =
match xs with
| [] -> ys
| x::xs' -> x::(xs' @ ys)
所以内部追加(@
)打破了第一个列表(xs
),并使用cons
(::
)运算符来构建结果列表。很容易看到有n个预先步骤(::
),其中n
是第一个列表的长度。
3
是,如前所述,有两个原因,它必须是O(N):
你必须重复的单链表的末尾,这需要为O(n)
由于对是不可变的,你必须将所有对在第一个列表,以追加,这也需要为O(n)
一个相关的有趣的话题是尾递归与非尾递归WA ys追加
4
您的代码片段与您的问题不符,这表明您对操作员的操作或要使用的操作员感到困惑。
@
或List.append运算符连接2个列表,并且list1 @ list2
以O(长度(列表1))时间并且不是尾递归。 rev_append
是尾递归的,但仍然是O(n)。然而,将项目添加到列表的通常方法是使用::
构造函数,而item :: mylist
需要O(1)次。
相关问题
- 1. O(n)的运行时间算法
- 2. 什么是运行时间?它是O(n)吗?
- 3. 嵌套for循环的运行时间是O(n^2)?
- 4. haskell长度运行时间O(1)或O(n)
- 5. 时间复杂度O(N日志(log n)的)+ N O(L)
- 6. 下面的函数是O(n)时间和O(1)空间,其中n = | A |?
- 7. 在O(n)时间执行连接?
- 8. 时间复杂度 - O(n^2)到O(n log n)搜索
- 9. 时间复杂度:O(logN)或O(N)?
- 10. 用于向ArrayList中添加N个项目的Big-O运行时间
- 11. 以下程序的时间复杂度是多少? O(log n)是否正确?
- 12. Ideal跳过列表? O(n)运行时间?
- 13. KSum如何最小运行时间为O(N^k-1)?
- 14. Binomial堆:证明合并运行在O(日志n)时间
- 15. 从小于O(log(n))运行时间的排序数组中搜索
- 16. O(nlog * n)和O(n)之间?
- 17. 这是否解决O(N log(N))时间中的3SUM?
- 18. 合并排序用C与O(N *登录[N])运行
- 19. 找到O(1)的空间和O(n)的时间
- 20. 计数排序O(n + k)时间复杂度是什么k?
- 21. 程序运行时间
- 22. 图的O(m + n)时间算法
- 23. 分析运行时间,大O
- 24. 计算大O运行时间
- 25. 是log(n!)= O((log(n))^ 2)?
- 26. 证明修改后快速排序的运行时间= O(Nk)
- 27. 如何从O(n)运行时间的答案中删除重复项?
- 28. 为什么CompareToAll最快的运行时间是O(1)?
- 29. 为什么这个代码的运行时效率O(n^2)?
- 30. 如何确定的时间复杂度为O(M + N)或O(Math.max(M,N))
取决于如何完成附加。如果它是线性结构,并且您追加到最后,那么是的。如果它是一个线性结构头部的追加,那么它就是O(1),但是你有移动N-1个节点的开销。如果列表是链接的,并且该列表持有对头部和尾部的引用,则它是O(1)。 – mslot 2011-12-15 21:01:27