算法我就不贴了。算法就是算法导论的内容。
我直接写推导过程。
假设变化率为f(n+1)-f(n)
首先计算二进制数,这里我假设为3位二进制。
例如:f(5)-f(4),
5和4的二进制为101,100。所以逆序数为101,001
101对应的频率为5, 001对应的频率为1。书上的代码是fft变换,这里是反变换,所以1是顺时针转动。
这里高频的只有5,所以先计算5的转动过程。
我先介绍一下Fk转动过程,首先,最高位为1的Fk的都这样转动,第一次转动为,第二次转动为,第k次转动为,总共会转动次。至于转动的方向是根据k值的二进制序列,因为这里是反变换,所以1是顺时针,0是逆时针。如果最高位不为1,就不转动,次高位为1,开始转动,之后的0表示方向,继续按照上面的规律转动。
转动过程在生成的fn中起什么作用呢?我只能说是做加减组合之后就是生成fn的分量了,如何组合呢?关键就是符号的确定了。确定的方法就是数理逻辑。
以输入a0, a1, a2, a3为例,类比书上的算法过程,如图30-4。
输出y0是(a0+a2)+(a1+a3),注意这里面的ai其实是已经转动过的,我没有写出来,因为造成了麻烦,这里只关注符号。
输出y1是(a0-a2)+(a1-a3),
输出y2是(a0+a2)-(a1+a3),
输出y3是(a0-a2)-(a1-a3),
所以真值表如图所示: