如何在php中写出所有可能的单词? [复制]
Posted
技术标签:
【中文标题】如何在php中写出所有可能的单词? [复制]【英文标题】:How write all possible words in php? [duplicate] 【发布时间】:2011-11-08 09:08:25 【问题描述】:可能重复:Generate all combinations of arbitrary alphabet up to arbitrary length
我正在尝试在 php 中编写所有可能的 10 个字母 (zzzzzzzzzz) 的单词。我怎样才能做到这一点?它看起来像这样:http://i.imgur.com/sgUnL.png
我尝试了一些方法,但它们只随机生成 10 个字母,而不是从 1 个字母增加。顺便说一句,执行时间和它的大小都不是问题。我只需要对其进行算法,如果有人用代码显示它当然会更有帮助..
【问题讨论】:
26^10 种可能性 = 141 167 095 653 376,因此可能需要一段时间。 @NullUserException 没问题。 Re Tim 的评论可能需要一段时间:允许每个字符串一毫秒,我估计该程序将需要大约 4000 年才能运行。 (实际上,它实际上会比这长得多)。 另外,如果要将结果输出到磁盘,允许每个字符串 10 个字节,则需要 12 TB 的存储空间。同样,实际上它会更多,因为您需要某种文件结构,但我试图指出您提出的问题的规模。 Generate all combinations of arbitrary alphabet up to arbitrary length、Algorithm to return all combinations of k elements from n、Combinations, Dispositions and Permutations in PHP 的可能重复项 【参考方案1】:function words($length, $prefix='')
if ($length == 0) return;
foreach(range('a', 'z') as $letter)
echo $prefix . $letter, "\n";
words($length-1, $prefix . $letter);
用法:
words(10);
在这里试试:http://codepad.org/zdTGLtjY(单词最多 3 个字母)
【讨论】:
我喜欢第 16549 行中的单词:D【参考方案2】:版本 1:
for($s = 'a'; $s <= 'zzzzzzzzzz'; print $s++.PHP_EOL);
正如 Paul 在下面的 cmets 中所指出的,这只会发送到 zzzzzzzzyz
。慢一点(如果有人关心的话),但正确的版本是:
//modified to include arnaud576875's method of checking exit condition
for($s = 'a'; !isset($s[10]); print $s++.PHP_EOL);
【讨论】:
令人印象深刻.. 这真的很有表现力。 @arnaud576875 的答案是功能中的功能。这是一个非常简单而有效的答案,谢谢 Mchl .. 根据 OP 的问题,$s = 'aaaaaaaaaa'
可能是他想要的。 +1 尽管如此,以获得实际的最佳答案。
这些都不符合您的预期。 zz 给出了一个去 zyz 的列表,而 aaaaaaaaaa 只给出了一个。
第二个使用 !isset($s[10])
而不是 strlen($s) <= 10
快 4 倍(如果有人关心的话)【参考方案3】:
<?php
function makeWord($length, $prefix='')
if ($length <= 0)
echo $prefix . "\n";
return;
foreach(range('a', 'z') as $letter)
makeWord($length - 1, $prefix . $letter);
// Use the function to write the words.
$minSize = 1;
$maxSize = 3;
for ($i = $minSize; $i <= $maxSize; $i++)
makeWord($i);
?>
【讨论】:
以上是关于如何在php中写出所有可能的单词? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何编写 python 单行代码来创建文件中所有单词的列表? [复制]