我創建了一個程序來查找數字列表的中位數。數字列表是動態的,因爲可以刪除和插入數字(可以輸入重複數字),在此期間,新的中位數將被重新評估並打印出來。multimap的時間複雜性問題
我創建使用多重映射這個計劃,因爲
1)它被已經被排序的好處,
2)容易插入,刪除,搜索(因爲多重映射實現二進制搜索)
3)重複的條目被允許。
條目+刪除(表示爲N)的數量限制爲:0 < N < = 100,000。
我寫的程序工作並打印出正確的中位數,但速度不夠快。我知道unsorted_multimap比multimap快,但unsorted_multimap的問題是我必須對它進行排序。我必須對它進行排序,因爲要找到需要排序列表的中位數。所以我的問題是,使用unsorted_multimap然後快速排序條目是否可行?還是僅僅是荒謬的?只使用矢量,快速排列矢量並使用二分搜索會更快嗎?或者,我可能忘記了一些我從未想到的神話般的解決方案。我會承認,雖然我對C++並不陌生,但我的技能在時間複雜性上有點藥物。
我越是看我自己的問題,更多的我開始以爲只是用用快速排序和折半查找矢量效果會更好,因爲數據結構基本上已經實現了載體。
我不認爲地圖是這個問題的好數據結構。儘管我沒有比較兩者,但最好的表現可能來自矢量。 – evanmcdonnal 2013-03-14 19:57:27
@evanmcdonnal,我想你可能是對的。我正在考慮vector可能與quicksort和二進制搜索一樣快。 – user1066524 2013-03-14 19:59:12
我認爲這個問題是重複的:http://stackoverflow.com/questions/1387497/find-median-value-from-a-growing-set – 2013-03-14 20:04:48