Сравнение большого количества значений с использованием массивов php - PullRequest
0 голосов
/ 04 апреля 2011

Мне нужно сравнить два очень больших числа значений, для этого я поместил их в массивы, но это не сработало. Ниже приведен код, который я использую. Это самый эффективный способ? Я также установил неограниченное время и память. 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>";
    } 
}

1 Ответ

0 голосов
/ 04 апреля 2011

не работает как? Не дам тебе ответ?
Вы сравниваете каждую возможную пару. Сколько комбинаций это? Более 10 ^ 13. На современной машине это займет около часа, если сначала не хватит памяти.

Более эффективный способ - сначала отсортировать их: NlogN + MlogM + N + M time вместо времени N * M.
Сортировка списка размера x с сортировкой сравнения занимает x * log (x) время . Затем вы можете перейти от начала каждого списка один раз, будучи уверенными, что если найдутся совпадения, вы их найдете. Это занимает линейное время.

...