0

可能性のあるすべての順列を配列にリストするスクリプトがあります。これは、確かに、単語リストの代わりに使用できます。これができれば、試行回数に制限を設けない限り、最終的にヒットしないということはあり得ない。

とにかく、スクリプトは明らかに膨大な量のメモリを消費し、サーバーに火をつけます。私が助けを必要としているのは、メモリ使用量を分散させる方法を見つけることです。たとえば、スクリプトを何らかの方法でリセットし、おそらくセッションを使用して、別のファイルまたは何かに移動して中断したところから続行するなどです。私は見当もつかない。

ここに私がこれまでに持っているものがあります:

<?php 
ini_set('memory_limit', '-1');
ini_set('max_execution_time', '0');

$possible = "abcdefghi";

$input = "$possible";

function string_getpermutations($prefix, $characters, &$permutations)
{
    if (count($characters) == 1)
        $permutations[] = $prefix . array_pop($characters);
    else
    {
        for ($i = 0; $i < count($characters); $i++)
        {
            $tmp = $characters;
            unset($tmp[$i]);

            string_getpermutations($prefix . $characters[$i], array_values($tmp), $permutations);
        }
    }
}
$characters = array();
for ($i = 0; $i < strlen($input); $i++)
    $characters[] = $input[$i];
$permutations = array();

print_r($characters);
string_getpermutations("", $characters, $permutations);

print_r($permutations);

?>

何か案は?:3

4

1 に答える 1

0

順列を XXX 順列ごとにファイルに保存し、必要に応じて正しい順序でファイルを再度開いて、順列を表示/使用することができます。(PhP メモリを解放できる限り、ファイルまたは必要なものは何でも)

順列をエコーし​​ているだけだと思いますが、それで何か他のことをしたいのでしょうか? だから、それはどういうわけか依存します。

また、順列を実行している間は、できるだけ早く未使用の変数をできるだけ多く設定解除するようにしてください。

編集:場合によっては、順列配列に対して行ったように参照を使用すると、メモリの使用量が増える可能性があります。試していない場合に備えて、有無にかかわらずどちらが優れているかを確認してください

于 2013-08-23T22:52:35.217 に答える