我有100組A對象,每組對應一個查詢點Qi,1 <= i <= 100
。deleteMin和按鍵操作搜索的有效數據結構
class A {
int id;
int distance;
float x;
float y;
}
以我算法的每次迭代中,我選擇一個查詢點Qi並從具有最小距離值對應的設定的對象中提取。然後,我必須在所有100個集合中找到這個特定的對象,用它的id進行搜索,然後刪除所有這些對象。
如果我爲每組對象使用一個堆,使用MIN(distance)
提取對象是很便宜的。但是,我不能在其他堆中使用id搜索相同的對象,因爲堆是用距離值組織的。此外,更新堆是昂貴的。
我考慮的另一個選項是使用每個集合的map<id, (distance, x, y)>
。通過id搜索(查找操作)的方式很便宜。但是,提取具有最小值的元素需要線性時間(它必須檢查映射中的每個元素)。
有沒有我可以使用的數據結構對於我需要的操作都是有效的?
- extract_min(距離)
- 發現(ID)
提前感謝!
爲你做了一些格式化。請使用編輯框上方的按鈕來正確格式化您的代碼。 – 2010-11-15 16:57:07
不是C++的女孩,所以不能真正提供有意義的答案,但有時對於這種情況,最簡單的解決方案是兩種數據結構:通過索引查找項目的映射或散列表,通過排序的數組/堆/樹設置以找到最小值項目。 – Juliet 2010-11-15 18:18:55