有效的方法来比较非常大的数值的PHP

时间:2011-04-08 19:06:28

标签: php arrays comparison large-data

喜 我要比较非常多的值,我使用数组,但内存不足。数组中的值大约为5000000,并且对于每个值,将再次执行5000000的循环。总之,将执行5000000 x 5000000个周期。

我正在做的只是运行两个循环。请让我知道一些有效的方法来执行此操作,因为此程序因内存而停止。

for($k=0;$k<sizeof($pid);$k++) // size of $pid = 5000000
{
$out =0;
        for ($m=0;$m<sizeof($outid);$m++) // size of $out 5000000
        {
                    if ($pid[$k] == $out[$m])
                    {
                            $out ++;
                    }

        }
}

3 个答案:

答案 0 :(得分:3)

如果你可以对两个列表进行排序,你只需要查看每个列表的一次,因为你可以有第一个列表的索引和第二个列表的索引。如果第一个索引处的元素小于第二个索引处的元素,则增加第一个索引,否则增加第二个索引。然后,您只需跟踪通过它们时有多少元素相等。

答案 1 :(得分:1)

对于大多数VB和PHP程序员来说,算法复杂性可能是一个复杂的主题 - 它并非无足轻重。

方法1

假设您找到了一种使用O(n^2)方法的方法,并且假设您的计算机可以在1秒内执行1000000次比较,并且您现在开始循环2:04:45 pm EEST | Wednesday, June 23, 2010,那么循环将以6:58:05 am EET | Monday, January 23, 2012

我不是PHP方面的专家,但我确定该页面在必须提供服务或页面超时异常的情况下有时间限制。这个限制可以是30s,90s或者你定义的限制,但你对这个循环所需的时间限制是愚蠢的。

方法2

您决定对数组进行排序,此操作对两个数组都需要O(n log n),要对O(n log n)进行比较。这将使总时间大约为3 * O(n log n),即100.5 seconds。或者33.49 seconds,如果数组是预先排序的。

如果我是你,我会选择方法2

如果您不确定,如何排序数组,然后提出新问题并描述您的数据。简而言之,您需要为数据实例配置自定义比较器。要在O(n log n)中进行比较,您不能使用线性比较,但需要一个有效的深度比较函数,通常内置在语言默认库中。如果您找不到或不知道如何使用它,那么请问另一个问题。

答案 2 :(得分:0)

你可以尝试数组相交函数http://ua.php.net/manual/en/function.array-intersect.php,它是基于C的,应该更加优化