求解List的时间复杂度

ezezas 2015-10-21 09:26:01
arrayList random access的时间复杂度为O(1),find的时间复杂度为O(n);
linkedList random access的时间复杂度为O(n),find的时间复杂度为O(n),如果linkedList是排好序的,find的时间复杂度是O(n/2);

上面的描述对吗?为什么排好序后复杂度是n/2呢,求解惑
...全文
419 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ezezas 2015-10-23
  • 打赏
  • 举报
回复
看了下源码,remove的时间复杂度不能统一而论 arraylist的remove(index) 根据下标来删,复杂度是O(1),remove(obj)是遍历,复杂度为O(n) linkedlist的remove(index) 采用二分查找,复杂度是O(n/2),remove(obj)是遍历,复杂度为O(n)
飏飏一蝶 2015-10-22
  • 打赏
  • 举报
回复
都是最坏时间复杂度 LinkedList可能因为是双向链表,可以左右同时开工一次可以搜2个 所以只从遍历的复杂度来看,n的一半
解开者 2015-10-22
  • 打赏
  • 举报
回复
remove也是先迭代找到指定元素然后删除,因为链表维护室常数时间所以加起来就是遍历的时间
tony4geek 2015-10-22
  • 打赏
  • 举报
回复
http://www.codeceo.com/article/java-container-2.html http://www.blogjava.net/killme2008/archive/2010/09/16/332168.html
ezezas 2015-10-22
  • 打赏
  • 举报
回复
引用 1 楼 qq118194716 的回复:
都是最坏时间复杂度 LinkedList可能因为是双向链表,可以左右同时开工一次可以搜2个 所以只从遍历的复杂度来看,n的一半
那么linkedList remove(obj)的时间复杂度是O(1)+O(n)还是O(1)+O(n/2)呢?
ezezas 2015-10-22
  • 打赏
  • 举报
回复
引用 楼主 ezezas 的回复:
arrayList random access的时间复杂度为O(1),find的时间复杂度为O(n); linkedList random access的时间复杂度为O(n),find的时间复杂度为O(n),如果linkedList是排好序的,find的时间复杂度是O(n/2); 上面的描述对吗?为什么排好序后复杂度是n/2呢,求解惑
那么linkedList remove(obj)的时间复杂度是O(1)+O(n)还是O(1)+O(n/2)呢?

50,462

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧