12年前,我在sci.math.num分析中提出了更多或更少的相同问题,但对于整数项较小的情况。托姆·穆德斯回答说这很棒的模块化方法。
编辑:上面的链接似乎已经死了,所以我在这里逐字回复
您可以使用模块化方法。当A是矩阵时,计算N的不同素数p是(A模p)的秩。当你使用素数的乘积足够大,则排名将等于排名的最大值你已经计算过了。具体来说。设A是n by m矩阵(n<=m),并且||A||是当r是A的秩时,A有一个r乘r的子矩阵Bdet(B)<>0。当素数的乘积Q超过det(B)时,必须至少是一个素数p,使得(B模p)的秩为r,因此(A模p)的秩为r。利用Hadamard的界,我们得到数据(B)<=r^{r/2}||A||^r<=n^{n/2}||A ||^n,所以你最多需要n个(logn)/2+log||A||)不同的素数。由于计算(A模p)的秩的复杂性为O(mn^2)(假设素数不太大,例如适合机器词)该算法是(直到一些对数因子)O(mn^3)。这比之前提出的分数自由算法的复杂度(O(mn^4))。您也可以使用上述的概率版本。至少取一组S2n((logn)/2+log||A||)不同素数并计算(A模p)的秩对于来自S的不同随机素数。对于这样的随机素数,概率(A模p)的秩是A的秩至少是1/2。当你发现对于p的N个选择,秩没有增加,那么概率你已经找到了正确的等级至少是1-(1/2)^N。取N=20失效概率不到百万分之一。增加集合S提高成功的概率。