从特定索引启动单词生成器

Starting word generator from specific index

我有一个密码列表生成器,它可以生成特定长度的一组特定字符的所有组合。 自然列表很长,生成需要相当长的时间。

我想并行处理该过程,但 运行 变成了 algorithm/math 问题。

例如,我想为 4 个字符长的密码生成 [a-z](26 个字母)的所有组合。 组合总数为 26^4 = 456.976

并行化为 ex。两个进程,我想要一个进程处理前半部分,另一个处理后半部分。每个 228.488 种组合。

现在回答问题... 应该处理后半部分的过程,热到我从数字 228.488 到生成器应该开始的字母组合?

我正在寻找一个通用的解决方案,这样即使更改了字母数或密码长度,它仍然可以使用。 当然这个早就解决了,说不定还有名字呢。我只是不知道那个名字,我不能 google 它。

我正在用 C# 实现这个

谢谢。

您正在探索整个 [a-z]^4 space。 space.

中有 26^4 个不同的元素

只需将 [a-z]^4 的一个元素视为以 26 为基数的 4 位数字。给定一个整数 i,你可以在 base 26 中找到它的表达式,并得到你正在寻找的 word

word[0] = i % 26
word[1] = (i / 26) % 26
word[2] = (i / 26 / 26) % 26
word[3] = (i / 26 / 26 / 26) % 26

如果您有 M 台机器,索引 j 处的机器可以从以下索引启动:j*(26^4/M).

因此,如果您的机器从索引开始:228488,它将以单词开头:

word[0] = 228488 % 26             = 0  => 'a'
word[1] = (228488 / 26) % 26      = 0  => 'a'
word[2] = (228488 / 26 / 26) % 26 = 0  => 'a'
word[3] = (228488 / 26 / 26 / 26) = 13 => 'm'