【发布时间】:2011-12-29 03:31:44
【问题描述】:
在查找长度大于 7 的字符串的字符串排列时,我的代码有问题。例如“abcdefgh”。我必须找到最多 12 个长度的单词的排列。请查看我的代码并建议是否可以进行任何优化。
function permute($str)
{
if (strlen($str) < 2)
{
return array($str);
}
$permutations = array();
$tail = substr($str, 1);
foreach (permute($tail) as $permutation)
{
$length = strlen($permutation);
for ($i = 0; $i <= $length; $i++)
{
$permutations[] = substr($permutation, 0, $i) . $str[0] . substr($permutation, $i);
}
}
/* Return the result */
return $permutations;
}
$arr = permute('abcdefghijkl');
【问题讨论】:
-
你能估计出长度为
n的字符串的排列个数,这个数字增长的速度有多快? -
这有什么问题?排列在 O(n!) 中运行,因此将 12 个长度的字符串作为 12 运行应该需要很长时间!是一个很大的数字。
-
虽然有一个技巧可以在多项式时间内生成第 n 个排列,但是如果你想要所有排列,你需要计算所有 n!其中。
-
我的实际问题是从数据库中为 Anagrammer 游戏获取此字符串的所有可能组合。我累了.. 找不到长度为 12 的字符串的正确解决方案和算法
-
我认为您需要考虑一种不同的方法来做到这一点。您的数据库中似乎将有 10 亿条“in statements”?
标签: php optimization permutation