【发布时间】:2012-03-03 12:36:48
【问题描述】:
我有一个任务让我有点抓狂,有一个处理单词排列的部分,我浏览互联网后发现了一个做排列的函数,如下所示:
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 $permutations;
}
这显示结果:
print_r(array_unique(permute("abcdefghi"))); // found 362880
print_r(array_unique(permute("abcdefghij"))); // error
问题是,这个函数只能执行9个字符的所有排列(大约362880个组合,时间很长并且让浏览器在tinytime没有响应)。尝试执行最多 10 个字符的排列时,会出现错误消息:
致命错误:允许的内存大小为 134217728 字节已用尽(尝试分配 35 字节)
您有解决方案或其他方法来进行长度为 10 个或更多字符的排列吗?
【问题讨论】:
-
您正在尝试做一个简单的随机字符串生成器?因为如果是的话,我已经创建了一个,所以我可以发送给你......
-
在整数中,您尝试创建一个由 400 万个字符串组成的数组,每个字符串包含 10 个字符。那是 40 兆字节加上开销。错误消息说有大约 130 兆字节的限制。因此,对于开销而言,您想要的输出太大听起来似乎是合理的。计算一些不同的东西(一次生成一个排列而不是一次全部?)或增加你的限制。
-
#Frederick:为什么不呢,请发给我。谢谢,。 #nickb:同样...