XML解析速度加快。 PHP

时间:2012-06-13 02:13:14

标签: php xml performance algorithm

我在这里询问一些可以加快这一过程的概念:

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并不是我能做的最好的。

1 个答案:

答案 0 :(得分:4)

XML解析不太可能是您的问题的原因。如果它与XML有关,它可能是I / O,这意味着从磁盘获取数据需要很长时间。

你正在做的是将$ xml中的所有元素与$ xml2中的所有元素组合,这是一个O(n ^ 2)复杂度问题。你可以尝试通过使用一个hashmap来降低复杂性,这在php中很容易,因为你有一个基本上是hashmap的关联数组:

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)的复杂性,比以前的版本好得多。