sam*_*ner 28 java complexity-theory priority-queue time-complexity
remove()Java中Priority Queue类的函数的复杂性(大哦)是多少?我无法在任何地方找到任何记录,我认为它是O(n),考虑到你必须在删除之前找到该元素然后重新洗牌.但我看到其他人不同意并认为这是O(登录).有任何想法吗?
小智 33
这种混淆实际上是由你的"删除"功能引起的.在java中,有两个删除函数.
remove() - >这是删除头/根,它需要O(logN)时间.
remove(Object o) - >这是删除任意对象.查找此对象需要O(N)时间,删除它需要O(logN)时间.
Har*_*ari 27
删除的复杂性是O(N),因为contains的复杂性是O(N)(在java的优先级队列类中)
在您自己的优先级队列实现中,O(logN)的一种方法是维护一个辅助数据结构,如HashMap,它维护从优先级队列中的值到其在队列中的位置的映射.因此,在任何给定时间 - 您将知道任何值的索引位置.
请注意,此修改不会影响任何现有操作的运行时间 - 您只需要在heapify操作期间更新映射.
小智 6
根据Oracle文档:“实施说明:此实现为入队和出队方法(提供,轮询,remove()和add)提供O(log(n))时间;为remove(Object)和contains(Object)提供线性时间)方法;以及检索方法的固定时间(窥视,元素和大小)。”
| 归档时间: |
|
| 查看次数: |
30112 次 |
| 最近记录: |