php实现穷举
穷举法的基本概念
穷举法是一种通过遍历所有可能的解来寻找正确答案的算法方法。在PHP中,可以通过循环结构(如for、while)或递归函数实现穷举。

示例1:数字组合穷举
以下代码生成3位数字的所有可能组合(0-9):

for ($i = 0; $i <= 9; $i++) {
for ($j = 0; $j <= 9; $j++) {
for ($k = 0; $k <= 9; $k++) {
echo "$i$j$k\n";
}
}
}
示例2:字符串排列穷举
使用递归实现字符串所有字符的排列组合:
function permute($str, $l, $r) {
if ($l == $r) {
echo $str . "\n";
} else {
for ($i = $l; $i <= $r; $i++) {
$str = swap($str, $l, $i);
permute($str, $l + 1, $r);
$str = swap($str, $l, $i);
}
}
}
function swap($a, $i, $j) {
$temp = $a[$i];
$a[$i] = $a[$j];
$a[$j] = $temp;
return $a;
}
$string = "abc";
permute($string, 0, strlen($string) - 1);
示例3:密码破解模拟
通过穷举法模拟简单密码破解(4位纯数字):
$targetPassword = "1234";
for ($guess = 0; $guess <= 9999; $guess++) {
if (str_pad($guess, 4, "0", STR_PAD_LEFT) == $targetPassword) {
echo "Password found: $guess";
break;
}
}
优化建议
- 限制范围:根据问题特点缩小穷举范围(如密码已知为4位时无需遍历其他长度)。
- 并行处理:对大范围穷举可使用多线程或分布式计算(PHP需依赖扩展如
parallel)。 - 剪枝策略:在递归中提前终止不符合条件的分支(如排列问题中去重)。
注意事项
- 穷举法时间复杂度高,需谨慎用于大规模问题。
- 实际密码破解涉及法律问题,示例仅作学习用途。






