gpt4 book ai didi

php - 具有超过 3700 万种可能性的多个 foreach

转载 作者:可可西里 更新时间:2023-11-01 13:16:36 25 4
gpt4 key购买 nike

我的任务是使用 8 个 block 中的数据创建所有可能性的列表。

这 8 个 block 有以下几种可能性:

*Block 1: 12 possibilities
*Block 2: 8 possibilities
*Block 3: 8 possibilities
*Block 4: 11 possibilities
*Block 5: 16 possibilities
*Block 6: 11 possibilities
*Block 7: 5 possibilities
*Block 8: 5 possibilities

这给出了 37,171,200 种可能性。

我尝试简单地做并限制只显示具有正确字符串长度的返回值,如下所示:

foreach($block1 AS $b1){
foreach($block2 AS $b2){
foreach($block3 AS $b3){
foreach($block4 AS $b4){
foreach($block5 AS $b5){
foreach($block6 AS $b6){
foreach($block7 AS $b7){
foreach($block8 AS $b8){
if (strlen($b1.$b2.$b3.$b4.$b5.$b6.$b7.$b8) == 16)
{
echo $b1.$b2.$b3.$b4.$b5.$b6.$b7.$b8.'<br/>';
}
}
}
}
}
}
}
}
}

但是执行时间太长,无法计算。我想知道是否有人知道这样做的更简单方法?

最佳答案

您可以通过缓存字符串前缀并记住它们的长度来改进您的算法。这样您就不必为每个组合都这样做。

$len = 16:

// array for remaining characters per level
$r = array($len);
// array of level parts
$p = array();
foreach ($block1 AS &$b1) {
// skip if already too long
if (($r[0] - strlen($b1)) <= 0) continue;
$r[1] = $r[0] - strlen($b1);
foreach ($block2 AS &$b2) {
if (($r[1] - strlen($b2)) <= 0) continue;
$r[2] = $r[1] - strlen($b2);
foreach ($block3 AS $b3) {
// …
foreach ($block8 AS &$b8) {
$r[8] = $r[7] - strlen($b8);
if ($r[8] == 0) {
echo implode('', $p).'<br/>';
}
}
}
}
}

此外,在 foreach 中使用引用将阻止 PHP 在内部使用数组的副本。

关于php - 具有超过 3700 万种可能性的多个 foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com