【发布时间】:2012-09-23 00:07:21
【问题描述】:
我正在尝试创建一个 3 维布尔数组,它告诉我是否以前访问过 3d 空间中的某个位置以进行简单的导航算法。该数组可能非常大(大约为 1,000,000 x 1,000,000 x 1,000,000 或更大),所以我想知道声明该大小的数组并将每个布尔值设置为 false 是否会更快,或者使带有坐标键 (x, y, z) 和 bool 类型值的地图。
据我所知,数组需要 O(1) 来查找或修改坐标,而地图需要 O(log n) 来查找或插入值。显然,对于访问值,数组更快。但是,这是否抵消了声明这样一个数组所需的时间?
谢谢
【问题讨论】:
-
std::unordered_map平均为 O(1) -
为什么不使用哈希映射(C++11 中的
unordered_map)? -
即使每个单元格只有一位,您也需要超过 10^11 GB 的内存用于阵列。您可能应该考虑一种更好的方法。
-
速度是目前需要关注的错误优化。
-
您希望在数组中设置多少个元素?如果您最终希望使用数组的紧凑表示来访问所有单元格(例如,每个单元格使用一位而不是
bool)可能是最好的方法。如果您希望访问路径,则集合或哈希集(std::unordered_set;您可以通过元素的存在来确定值)的较小内存占用可以抵消更好的访问模式。
标签: c++ map std time-complexity