-1

我必须比较两个非常多的值,为此我将它们放在数组中,但它不起作用。下面是我使用的代码。这是最有效的方法吗?我也将时间和内存设置为无限。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>";
    } 
}
4

1 回答 1

0

不行怎么办?不给你答案?
您正在比较每一对可能的配对。那是多少种组合?超过 10^13。如果您没有先用完内存,那么在现代机器上这将花费大约一个小时。

更有效的方法是先对它们进行排序:NlogN + MlogM + N + M 时间,而不是 N*M 时间。
使用比较排序对大小为 x 的列表进行排序需要x*log(x) 时间。然后,您可以从每个列表的前面走一次,确信如果有任何匹配项,您会找到它们。这需要线性时间。

于 2011-04-04T02:13:05.090 回答