我必须比较两个非常大量的值,因为我将它们放在数组中,但它不起作用。以下是我使用的代码。这是最有效的方式吗?我已经将时间和记忆设置为无限制。 error 101 (connection reset) unknown error
这是chrome显示的错误
for ($k = 0; $k < sizeof($pid); $k++) {
$out = 0;
for ($m = 0; $m < sizeof($oid); $m++) {
if ($pid[$k] == $oid[$m]) // $pid have 300000 indexes
//and $oid have about 500000 indexes
{
$out++;
}
}
if ($out) {
echo "OID for ID ".$pid[$k]." = ".$out;
echo "<br>";
}
}
答案 0 :(得分:0)
不工作怎么样?不会给你答案吗?你正在比较每一对可能的。这有多少种组合?超过10 ^ 13。如果您没有先耗尽内存,那么在现代机器上需要花费一个小时的时间。
更有效的方法是首先对它们进行排序:NlogN + MlogM + N + M时间而不是N * M时间。
使用比较排序对大小x的列表进行排序需要x*log(x) time。然后,您可以从每个列表的前面走一次,相信如果有任何匹配,您将找到它们。这需要线性时间。