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 回答