0
看着關於https://msdn.microsoft.com/en-us/library/dd412070(v=vs.110).aspx的文檔,我看不到一種方法。理想情況下,我希望能夠在O(log(n))
時間內找到SortedSet<int>
的中位數(中間元素或兩個中間的總和)(顯然,我知道我可以通過轉換爲列表或數組來執行此操作)。簡單的查詢:SortedSet <T>是否有一種簡單的方法來查找中間元素?
看着關於https://msdn.microsoft.com/en-us/library/dd412070(v=vs.110).aspx的文檔,我看不到一種方法。理想情況下,我希望能夠在O(log(n))
時間內找到SortedSet<int>
的中位數(中間元素或兩個中間的總和)(顯然,我知道我可以通過轉換爲列表或數組來執行此操作)。簡單的查詢:SortedSet <T>是否有一種簡單的方法來查找中間元素?
很不幸,你是對的。 SortedSet
不提供獲取中位數的內置方式。這是因爲SortedSet
的底層數據結構是紅黑樹。 (例如,參見維基百科上的Red-black tree)
您是否可以使用其他類型的集合或它是否必須是SortedSet?否則,我建議將其轉換爲列表或數組,並通過訪問索引length+1/2
處的奇數值length
或元素length/2
和length/2 - 1
的平均值來獲得O(1)時間的中位數。
很好的答案。另外,我相信可以修改紅黑樹來跟蹤每個節點的總項目數,並且如果已知該計數,那麼通過O(log(n))中的索引訪問元素的信息就足夠了, ) 時間。 'SortedSet'不這樣做,但是一個自定義的實現可能非常適合OP。 – hvd