我有一个大的二维网格,比如说 10000 X 10000。我需要从这些网格中选择 1000 个随机点,但我还需要注意这两个点都不相同。我想到的标准方法是在选择每个点之后,我应该检查所有先前的条目以查看该点是否已被选择,但对于大网格和大量点来说,这似乎会变得低效。有更好的方法吗?
我正在使用 C++
对于大网格和大量点来说,这似乎会变得低效
不必要。低效率有两个潜在来源:
- 由拒绝采样引起的开销(即必须不断尝试,直到找到尚未选择的点)。鉴于您选择了 0.001% 的点,因此随机选择同一点两次的机会非常小。因此,重试的成本应该可以忽略不计。
- 检查随机选择的点是否已被选择的开销。如果您将所有先前选择的点存储在合适的数据结构中,则可以在以下位置完成
O(1)
时间。为了这,std::unordered_set
将是一个很好的候选人。集合的大小将随着您需要选择的元素的数量线性增长,并且完全独立于网格大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)