大数乘法(快速傅立叶变换)上

博客搬家:最爱午后红茶

在谈论大数乘法前,先来看看多项式乘法,假设

A = 7x^3 + 5x^2 + 3x + 4

B = 4x^2 + 6

C = A * B

那传统的做法就是这样:

                                  7x^3 + 5x^2  +  3x  + 4

                                             4x^2            + 6

                       ---------------------------------------

                            +42x^3 + 30x^2 + 18x + 24

     28x^5 + 20x^4 +12x^3 + 16x^2

-----------------------------------------------------------

    28x^5 + 20x^4 + 54x^3 + 46x^2 + 18x + 24

若A 和 B 都有 n 个系数,很明显这样做的时间复杂度为O(n^2),当n很大时效果相当不理想

        像 B = 4x^2 + 6 这样的式子叫系数表示法;如果我们把 B 一般化,即 B = b0 + b1x + b2x^2;则我们至少需要 3 对 (x, y) 值才能求出 b0, b1, b2。这里 b0 = 6, b1 = 0, b2 = 4;例如 B 在x0 = 1, x1 = 2, x2 = 3 的情况下的解分别为 y0 = 10, y1 = 22, y2 = 42。那我们也可以用 {(1, 10),(2, 22),(3, 42)},即 {(x0, y0),(x1, y1),(x2, y2)} 来表示唯一的多项式B,即假如我们在不知道b0, b1, b2的情况下可以用{(1, 10),(2, 22),(3, 42)} 来唯一表示多项式B,即唯一确定b0, b1, b2。当然 x0, x1, x2 也可以取其他值,但对于这个例子一定要取够3个,因为有3个未知数 b0, b1, b2;对应的 y0, y1, y2 也会不同,这就叫点值表示法。

        为什么要这样做?还是上面那个例子,我们用点值表示法算一遍C = A * B,(A 和 B 的xi要对应相同)还是假设取x0 = 1, x1 = 2, x2 = 3,我们发现 A 有4个未知数,所以要多一个x3,假设x3 = 4;为了方便计算,我们把 B 的 (x3, y3) 也算出来。

A = {(1, 19),(2, 86),(3, 247),(4, 544)}

B = {(1, 10),(2, 22),(3, 42),(4, 70)}

xi 不变,yi对应相乘得到 Ci = (xi, yai * ybi)

C = {(1, 190),(2, 1892),(3, 10374),(4, 38080)}

到这里我们发现对于一般情况的等长度的两个多项式相乘,结果的长度会接近加倍,比如

A = a0 + a1x + a2x^2 + a3x^3

B = b0 + b1x + b2x^2 + b3x^3

C = A * B = c0 + c1x + c2x^2 + c3x^3 + c4x^4 + c5x^5 + c6x^6

         因此有n个系数的两个多项式相乘(比如A * B)时仅用其n个点值相乘是不能正确表示结果的(比如C),所以我们要使用足够多的点值,比如这里 A 和 B 都应该至少使用7个点值。如下(数有点大,偷下懒。。。)

A = {(x0, y0),(x1, y1),(x2, y2),(x3, y3),(x4, y4),(x5, y5),(x6, y6)}

B = {(x0, y0'),(x1, y1'),(x2, y2'),(x3, y3'),(x4, y4'),(x5, y5'),(x6, y6')}

C = {(x0, y0*y0'),(x1, y1*y1'),(x2, y2*y2'),(x3, y3*y3'),(x4, y4*y4'),(x5, y5*y5'),(x6, y6*y6')}

        这样C的点值才能表示唯一的6次多项式(7个未知系数有6次幂),最后,用某方法(重点下面讲)把C的点值表示法转换成系数表示法就达到了目的,这个过程叫插值

        所以,先理下思路

1)分别计算A、B足够多的点值(也叫求值

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值