0

このプロセスを高速化するためのいくつかの概念についてお尋ねします。

foreach($xml->results->concepts->concept as $value2){//This is the original game.
    $total_concepts++;
    foreach($xml1->results->concepts->concept as $value1){//This is similar game. 
        $total_similar_concepts++;
        if(strcmp($value2->name, $value1->name)==0){
            $comparisons++;
            break;
        }
    }
}

本質的に、私は元のゲームの各「コンセプト」を各「類似」ゲームの各「コンセプト」と比較しています。

このアルゴリズムは、完了するまでに平均で約 11.6 秒かかります。これをより速く実行するためにできることはありますか? おそらくxmlとして解析することは、私ができる最善のことではないと考えていました。

4

1 に答える 1

4

XML 解析が問題の原因である可能性はほとんどありません。XML に関係している場合は、おそらく I/O であり、ディスクからデータをフェッチするのに時間がかかります。

あなたがしていることは、$xml のすべての要素を $xml2 のすべての要素と組み合わせることです。これは O(n^2) の複雑さの問題です。本質的にハッシュマップである連想配列を取得したため、php では簡単です。

foreach($xml->results->concepts->concept as $value2) {
  $total_concepts++;
  $map[(string)$value2->name] = true;
}
foreach($xml1->results->concepts->concept as $value1) {
  $total_similar_concepts++;
  if (isset($map[(string)$value1->name]))
    $comparisions++;
}

最良の場合、これにより O(2n) の複雑さが得られ、以前のバージョンよりもはるかに優れています。

于 2012-06-13T02:20:35.850 に答える