我正在使用已排序的字典來維護項目列表,其中我經常需要監視頂級x項目的狀態。每次我更新一個項目時,我想快速找出我所指的項目正在使用的索引。我知道我可以枚舉整個列表並計算出我的位置,但是我在查找具有O(log n)或更好時間的東西,畢竟所有已排序的字典都位於RedBlack樹上。每個節點應該能夠跟蹤它的孩子,這應該是一個快速計算。查找SortedDictionary中項目索引的最有效方法
回答
您可以簡單地改變你的SortedDictionary<TKey, TValue>
爲SortedList<TKey, TValue>
,然後使用IndexOfKey(key)
:
var s = new SortedList<string, string>
{ { "a", "Ay" }, { "b", "Bee" }, { "c", "Cee" } };
// Outputs 1
Console.WriteLine(s.IndexOfKey("b"));
內部使用Array.BinarySearch<TKey>()
,所以這將是爲O(log ñ),這是爲O快(ñ)(如果你通過遍歷它從前到後搜索)。
如果你需要一個O(1)插入和除了O(log(n)search? – 2012-03-29 13:09:46
@eranotzer:那麼你將需要使用一個'字典
可以構建樹結構以通過索引訪問項目或以lgN時間報告現有項目的索引,只需要非常少的額外時間來插入和刪除。一種方法是跟蹤每個節點的左右分支中有多少項(插入或刪除時,更改子節點的計數時更改父節點的節點數)。但是,如果一個以樹爲基礎的結構不提供這樣的設施,我知道沒有簡單的方法來改造它。
這是我正在尋找的角度 - 但是我正在尋找一個已經擁有它的結構,或者一個簡單的改造方法。 – Superman 2010-09-08 02:10:05
- 1. 查找行索引的有效方法?
- 2. 有效的方法來查找ArrayList中的對象索引
- 3. 查找通用列表中項目索引的簡單方法
- 4. 在redis中查詢二級索引的最有效方法
- 5. 查找Python 3列表中唯一值索引的最有效方法
- 6. C# - 如何找到SortedDictionary中有類似鍵的所有項目?
- 7. 更好的方法來找到ArrayList中的項目的索引?
- 8. 查找列表項目的索引
- 9. 查找特定項目的BindingSource索引
- 10. 索引檢索SortedDictionary <>
- 11. 索引文檔中單詞的最有效方法?
- 12. 在Python中查找索引和更改值的最佳方法
- 13. 從SortedDictionary中查找帶有最大值的鍵?
- 14. 使用流API查找列表中項目的所有索引
- 15. 是否有更高效的Java 8 Stream方法來查找int []中的索引?
- 16. 按索引查找列表項目
- 17. c#查找contextSubMenu項目索引點擊
- 18. 在C/C++中列出項目的最有效方法
- 19. 從哈希數組中提取項目的最有效方法
- 20. 從數組中刪除項目的最有效方法?
- 21. 查找大列表中不同項目的最佳方法
- 22. 在數組/對象中查找項目的最快方法
- 23. 查找數組中缺失整數的最有效方法
- 24. 在對象列表中查找objetcs的最有效方法
- 25. 查找大數中下一個增量的最有效方法
- 26. 在xml文件中查找值的最有效方法?
- 27. 在sqlite3中查找大量「最新」事件的有效方法
- 28. 查找元組中下一個元素的最有效方法
- 29. 更有效的在WMP媒體庫中查找媒體項目的方法?
- 30. 尋找最近點的有效方法?
你有沒有考慮切換到'SortedList'?它可以通過索引進行'O(1)'檢索。儘管如此,它在插入和刪除方面確實有着不俗的表現。 –
Ani
2010-09-07 23:49:24
由於這是一個樹結構,因此沒有索引的概念。只有具有左側和右側子鏈接的節點。 – 2010-09-07 23:51:09
我不明白這個問題 - 樹中的項目沒有索引。 – Lee 2010-09-07 23:53:02