索引,插入和从通用数据结构中删除的时间复杂度是多少?
时间:2020-03-06 14:37:01 来源:igfitidea点击:
没有大的O标记可用于对最常见的数据结构(包括数组,链表,哈希表等)进行操作的摘要。
解决方案
我想我将从链接列表的时间复杂度入手:
分度----> O(n)
最后插入/删除----> O(1)或者O(n)
在中间插入/删除-> O(1)并使用迭代器O(n)进行输出
最后插入的时间复杂度取决于我们是否有最后一个节点的位置,如果有,则为O(1),否则必须搜索链接列表,时间复杂度将跳至O (n)。
哈希表的摊销Big-O:
- 插入-O(1)
- 检索-O(1)
- 删除-O(1)
请注意,哈希算法有一个恒定因素,摊销意味着实际测得的性能可能会发生巨大变化。
红黑树:
- 插入-O(log n)
- 检索-O(log n)
- 删除-O(log n)
请记住,除非我们编写自己的数据结构(例如,C语言中的链表),否则它可能在很大程度上取决于我们选择的语言/框架中数据结构的实现方式。举个例子,看看苹果CFArray在Ridiculous Fish上的基准测试。在这种情况下,数据类型(Apple的CoreFoundation框架中的CFArray)实际上会更改数据结构,具体取决于数组中实际有多少个对象,从线性时间变为恒定时间(约30,000个对象)。
实际上,这是面向对象编程的美丽事物之一,我们不需要知道它是如何工作的,只要知道它是如何工作的,并且"它如何工作"就可以根据要求进行更改。