【发布时间】:2015-10-11 03:31:19
【问题描述】:
我正在编写一个程序来评估棋盘游戏(即 othello)中的大量位置。我的董事会代表是std::vector。由于同一位置在处理过程中可能出现更多次,因此我使用std::set<std::vector> 来存储检查的位置。
就性能而言,我不知道是否最好使用std::set(因为std::vector 实现了所需的所有运算符)或std::unordered_set 具有良好的本机 em>散列函数(即boost::hash_range(...))。
是否有其他好的解决方案可以实现相同的目标? (可能是不同的板表示[确定可用时的位板] 或不同的数据结构?)
编辑 ************************************** 编辑
这是获取板的伪代码:
enqueue initial board
while queue not empty:
dequeue a board
if board is already examined: //std::set search
continue
put board in examined boards
if board is solved:
print solution
else:
for each possible board that can arise out of this one:
add board to end of queue
【问题讨论】:
-
为什么不是向量的向量?
-
如果你在谈论性能,你需要衡量什么是快速解决你的问题。如果可能的话,
std::vector应该是比较的候选对象。 -
@NathanOliver 带有一个向量检查是否已经检查了一个位置需要 O(n)。使用集合 O(logn) 和 unsorted_set O(1)。当 n 非常大时,向量是一个瓶颈
-
我认为您的问题需要更多解释/示例,因为我不清楚您要做什么。
-
@NathanOliver 我用伪代码改进了这个问题:)
标签: c++ c++11 boost vector stl