我隐约记得一些关于双基系统以加快矩阵乘法的事情。
双碱基系统是一个冗余系统,它对一个数字使用两个碱基。
n = Sum(i=1 --> l){ c_i * 2^{a_i} * 3 ^ {b_i}, where c in {-1,1}
冗余意味着可以通过多种方式指定一个数字。
您可以查找Todor Cooklev的Vassil Dimitrov撰写的文章“用于矩阵多项式计算的混合算法”。
尽力提供最好的简短概述。
他们试图计算矩阵多项式G(N,A) = I + A + ... + A^{N-1}
。
支持N是复合的G(N,A) = G(J,A) * G(K, A^J)
,如果我们申请J = 2,则得到:
/ (I + A) * G(K, A^2) , if N = 2K
G(N,A) = |
\ I + (A + A^2) * G(K, A^2) , if N = 2K + 1
也,
/ (I + A + A^2) * G(K, A^3) , if N = 3K
G(N,A) = | I + (A + A^2 + A^3) * G(K, A^3) , if N = 3K + 1
\ I + A * (A + A^2 + A^3) * G(K, A^3) , if N = 3K + 2
因为(显然)(其中一个)这些方程在第一个系统中很快,而在第二个系统中更好,所以最好选择一个依赖于的方程N
。但这需要对2和3都进行快速的模运算。这就是为什么要引入双基数的原因-您基本上可以对它们两者进行快速的模运算,从而为您提供一个组合系统:
/ (I + A + A^2) * G(K, A^3) , if N = 0 or 3 mod 6
G(N,A) = | I + (A + A^2 + A^3) * G(K, A^3) , if N = 1 or 4 mod 6
| (I + A) * G(3K + 1, A^2) , if N = 2 mod 6
\ I + (A + A^2) * G(3K + 2, A^2) , if N = 5 mod 6
请看一下文章以获得更好的解释,因为我不是该领域的专家。