2015-12-17 57 views
-2

是否存在c#中的數據結構,代表c#中的堆# 如果不是那麼什麼是最好的數據結構用於在有效時間內找到最小元素並允許重複元素 謝謝advancec代表堆的數據結構

回答

3

通過存儲排序項目,可以在O(1)中檢索最小元素。然後,您將從列表中取出第一個項目。這可能(不是如果您將元素添加到最後一個索引)犧牲插入性能。

要得到它在O(1)你將不得不使用線性搜索算法,但仍然存儲排序的值。在List那將是List[0]

在C#中,您可以使用Sorted Collection完成快速檢索。

然而,分類收集使用二進制搜索以檢索項目,導致O(log n),即使最小的元素的位置是1

另一種方法是使用Sorted Set。在那裏你必須自己寫IComparer,你可以read about it here。允許它存儲重複值。

我建議你也有一個read over here

+0

爲什麼當在所提及的'SortedCollection'類中實際使用自平衡二叉搜索樹時,可以在'O(1)'中檢索最小元素?還是我錯了? –

+0

我應該澄清一點。感謝您指出了這一點。 – Emz

+1

SortedSet類有什麼問題?只是出於好奇。它不允許重複嗎? – ScoobyDrew18