我在这里询问一些可以加快这一过程的概念:
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并不是我能做的最好的。
答案 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)的复杂性,比以前的版本好得多。