【发布时间】:2021-04-29 10:04:54
【问题描述】:
我有一个结构数组,其中每个结构都是一个 2D 位置(一对 32 位值)。该数组用于跟踪地图上的兴趣点。
struct Point {
int x;
int y;
};
// ...
struct Point pointsOfInterest[1024];
问题是,这些兴趣点在不断变化,这意味着数组中的条目被非常频繁地添加或删除。最重要的是,每个报告的兴趣点可能已经存在于数组中,所以我不能盲目地添加新的而不检查它们是否已经存在。
此时数组未排序(新条目添加到末尾,交换和弹出删除),我遍历整个列表以查找要删除或重复检查的条目。我想知道加快这个过程的选项是什么。
- 在其他语言中,这是我分解字典或哈希集的地方。 C 中都不存在,所以我必须权衡添加类似内容的复杂性。
- 我考虑过对列表进行排序(即先按 X,然后按 Y)。但是考虑到更新的频率,我觉得我会比迭代时更频繁地敲击表格。但我对排序算法的了解很少。
- 在这里使用某种二叉树会更好吗?还是我会再次花费所有时间重新平衡树?
- 理论上,考虑到这些算法的(感知)复杂性,是否存在一个阈值,低于该阈值线性搜索仍然是可行的选择?
我假设这是一个已知已解决的问题,所以我希望在我花大量时间重新发明轮子和测试可能的解决方案之前找到正确的方向。
【问题讨论】:
-
您希望获得多少这些积分? “阈值”由分析确定,可能因系统而异,取决于具体的实现。