我有一個大型的數據集Person
列表中排隊的對象。我希望數據結構能夠有效地執行以下操作。數據結構,有恆定的時間插入,包含,刪除和獲取索引的元素
- 在隊列末尾添加一個
Person
。 - 刪除第一個
Person
。 - 查找是否存在特定的
Person
,如果存在,請將其刪除並將其放在隊列末尾。 - 以其位置獲取特定的
Person
。
對於所有這些操作,是否可能有O(1)次? 到目前爲止,我已經提出了兩種方法,但它們並不是最優的。
ArrayList<Person>
+HashMap<Person, Integer>
的
HashMap
存儲Person
對象的索引。這給出O(n)的時間進行操作2和3(除去元件在ArrayList
)ArrayDeque<Person>
/LinkedList<Person>
他們給O代表第一2點的操作(1),但爲O(n)的最後二。
在我的情況下,空間複雜度不能大於O(n)。操作4不太密集,所以我可以容忍一個稍微低效的方法來做到這一點。
任何建議,將不勝感激。提前致謝!
我不認爲你可以減少最後兩個操作的複雜性。爲了搜索列表,時間複雜度肯定是O(n),直到列表被排序。 – Karan
@Karan使用散列表可以在O(1)時間內搜索。我認爲至少有三個操作可以在O(1)中,如果不是全部的話。 – Dabiuteef