真的很大的排列列表

时间:2012-04-13 05:05:21

标签: algorithm permutation

我的问题不是语言特定的。我遇到了让循环处理排列的问题。我正在尝试编写代码以显示26^x的所有值,其中x是字符串的长度。不会提供输入字符串,因此x=1如果x=2显示 a < em>通过 zz az 被视为与 za 不同。

更具体地说,我想为更长的字符串运行它,长度超过100个字符,试图查看包含单词而不是随机字母的给定长度的字符串数。

3 个答案:

答案 0 :(得分:1)

根据对该问题的评论,尝试枚举所有可能的100个字符的字符串是不切实际的。

我建议生成给定长度的随机字符串的替代策略,而不是以结构化方式枚举。类似的东西:

count = 0
for i from 0 to simulation_length:
    random_string = ''
    for j from 0 to string_length:
        random_string += random_char()
    // containsWord(string) checks if the random string contains a word
    // this is tricky in and of itself
    if (containsWord(random_string)) count++
...

只要simulation_length足够,随机抽样将为您提供整个空间行为的表示。

答案 1 :(得分:1)

  

26 ^ x其中x是字符串的长度   ...我想为更长的字符串运行它,长度超过100个字符

你应该忘掉它。

让我们把事情放在眼里。英文字母中有26个字母,因此其中包含100个字符的字符串总数为......

3142930641582938830174357788501626427282669988762475256374173175398995908420104023465432599069702289330964075081611719197835869803511992549376

那是十进制数。以每毫秒1串的速度打印它们需要9.9 * 10 ^ 130年。这比宇宙存在的时间长7.3 * 10 ^ 120倍。

获取单词列表或将字典加载到内存中并改为使用它。

答案 2 :(得分:0)

这取决于你对'单词'的定义。如果'a'是一个单词,则很容易获得在100个字符序列中获得单词的概率的下限(大约为1/1 / e ^ 4)。同样,你可以考虑2个字母的单词和3个字母的单词,并提炼概率。在4或5个字母之后,这个概率变得非常准确,因为几乎没有更长的单词,而且它们随机发生是非常罕见的。