【发布时间】:2014-01-05 21:06:29
【问题描述】:
我有一个arr[N],需要为arr 可以采用的所有可能值集实现一个查找数组,例如数组为bool arr[N] 的最简单情况的 2^N 个可能值。
这可以通过定义一个 N 维布尔查找数组来完成。例如,对于 N=4 和 arr 是布尔值,它将是 bool lookup[2][2][2][2]。然后lookup 可以通过lookup[arr[0]][arr[1]][arr[2]][arr[3]] 存储和检索arr 的任何可能值。
这写起来很尴尬,而且性能可能也低效,因为N 变化很大,所以实际实现必须使用for 循环进行存储和检索。这是一个问题,因为查找是一种非常常见的操作,而使它们尽可能快是本练习的重点。
还有其他方法可以实现这个想法吗?我对布尔值arr 的解决方案感兴趣,可能使用某种位表示,以及更通用的解决方案,其中arr 中的值范围大于2。
【问题讨论】:
-
@FredOverflow:我相信。我正在遍历一个排列图,节点必须不会被访问两次,否则算法将无法在合理的时间内完成。此外,我正在以特定方式遍历图表,在大多数情况下,不必遍历所有排列或任何接近的排列。
-
可能与 stackoverflow.com/questions/19709529/… 相关,但应适用于 bool,因为
std::vector<bool>是专门的...
标签: c++ c arrays algorithm data-structures