php中字符串的置换
我在查找长度大于7的字符串的字符串排列时遇到了代码问题。例如“abcdefgh”。我必须找到长度不超过12的单词排列。请查看我的代码,并建议是否可以进行任何优化php中字符串的置换,php,optimization,permutation,Php,Optimization,Permutation,我在查找长度大于7的字符串的字符串排列时遇到了代码问题。例如“abcdefgh”。我必须找到长度不超过12的单词排列。请查看我的代码,并建议是否可以进行任何优化 function permute($str) { if (strlen($str) < 2) { return array($str); } $permutations = array(); $tail = substr($str, 1); foreach (pe
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');
函数排列($str)
{
如果(strlen($str)<2)
{
返回数组($str);
}
$permutations=array();
$tail=substr($str,1);
foreach(permute($tail)作为$permutation)
{
$length=strlen($permutation);
对于($i=0;$i来说,解决方案的核心似乎应该是不检查所有内容。例如,如果你给我“地震”一词,那么很明显,字典中没有任何以“qk”开头的词,因此检查q k
形式的所有排列是不必要的。这种类型的检查将为您节省大量比较和查找操作。仅此“qk”示例就排除了362880(9!)个您需要检查的排列
因此,与其计算所有排列,然后从字典中找出与其中一个排列匹配的排列,我会确保您生成的每个排列实际上首先是一个可能的单词。您能估计长度为n
的字符串的排列数,以及该数的增长速度吗它?排列在O(n!)中运行因此,运行12个长度的字符串需要很长时间,因为12!是一个很大的数字。虽然有一个技巧可以在多项式时间内生成第n个置换,但如果你想要所有置换,你需要计算所有n!个。我的实际问题是从数据库中获取所有可能的字符串组合,用于语法游戏。我很累。。找不到长度为12的字符串的正确解决方案和算法。我认为您需要考虑另一种方法来完成此操作。您的数据库中似乎将有10亿条“in语句”?