我想多线程一个"蛮力"算法
我有一个函数bool check(const char *s, size_t n)
,用于检查大小为s
的字符串n
是否为密码。
对于我的字母表中可能存在的所有字符串组合(字母表中大约90个字符),都会调用此函数。
我能够在一个线程中完成它,但现在我想多线程化它。 我也希望我的每个线程都有相同的工作量我不希望一个线程必须测试1B组合而另一个只需要1k)。
我想过分拆负载"批次"组合。每个批次都有一个start
索引和一个stop
索引,因此拥有该批次的主题必须测试start
和stop
之间的所有组合。
我所说的组合索引是它的词典索引,例如字母[A,B,C]:
index combination
1 A
2 B
3 C
4 AA
5 AB
6 AC
7 BA
8 BB
... ...
例如,将为start=4
和stop=7
分配批次的线程将测试组合AA, AB, AC, BA
。
如何在线程中轻松生成批次的组合?优先考虑的是速度快,因为程序的整个要点都是强制性的。
还有另一种在线程之间拆分工作的快捷方法吗?
答案 0 :(得分:1)
如果您已经将所有字符串放在列表中,则可以使用词典顺序,但如果您想要生成字符串,则根本不容易使用。所以,我会忘记它作为一个想法。
相反,你可以做的是启动90个线程,给每个线程一个起始字母,并让每个线程考虑由给出的第一个字母组成的单词,以及剩余字母的所有组合。