平行骑士之旅算法
Posted
技术标签:
【中文标题】平行骑士之旅算法【英文标题】:Parallel Knight's Tour algorithm 【发布时间】:2015-12-06 04:27:12 【问题描述】:目前我有一个正在运行的骑士之旅算法。
我使用以下组合:
回溯 Warnsdorf 规则该算法执行以下操作:
Checks to see if the board is solved (all squares visited)
If true: return true
else proceed:
Make a set of possible moves from current positions
Sort the set based on the number of moves available from those positions.
Go through the set. (Recursive call made here)
If returned True:
Set Solution board to appropriate number
Return true
else
go back to last position
return false.
它工作正常。这不是最好的解决方案。
我正在尝试使用并行化来提高速度,特别是使用 C++ 线程 (#include<thread>
)。
这个算法是什么?到目前为止,我尝试过的唯一方法有错误共享问题、共享内存问题或根本无法运行。
【问题讨论】:
【参考方案1】:当然这是针对 C++ 的,在调用 #include<thread>
标头后,创建线程的简单方法是:
#include <iostream>
#include <thread>
void testThread()
std::cout<<"Thread\n";
int main(int argc, char * argv[])
std::testThread t(testThread);
t.join();
return 0;
std::testThread t(testThread);
调用线程创建,而t.join();
在完成后加入它们。但这一切都没有使用锁。如果我是你,我会在网上查看相同的示例 - 有大量资源 - 展示如何在安全庄园中实施锁。
需要注意的是,您必须确保代码的顺序版本实际上可以从并行运行中受益,因为创建线程的成本可能很高。
【讨论】:
抱歉,我花了一段时间才回复。我发现顺序版本在并行化(有点)时并不快。快速的起始位置(到 exe 不到 1 分钟)被附加线程减慢了。较慢的位置(从位置 6,5 开始需要 1-2 小时)受硬件限制。以上是关于平行骑士之旅算法的主要内容,如果未能解决你的问题,请参考以下文章