【发布时间】:2010-11-15 16:46:35
【问题描述】:
我有100组A对象,每组对应一个查询点Qi,1 <= i <= 100。
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)
提前致谢!
【问题讨论】:
-
为你做了一些格式化。请使用编辑框上方的按钮正确格式化您的代码。
-
不是 C++ 女孩,所以不能真正提供有意义的答案,但有时对于这样的情况,最简单的解决方案是两种数据结构:映射或哈希表按索引查找项目,排序数组/堆/树集找到最小的项目。
标签: c++ data-structures heap stl-algorithm