《算法导论》读书笔记 kirai 16/11/14 第30章 多项式与快速傅立叶变换(1)

多项式与快速傅立叶变换

按捺不住,终于还是想把FFT学一遍。在青岛站的热身赛看到一道题的数据范围特别大,顿时不知所措。虽然赛后告诉我暴力也可以过,但正解还是用FFT。感觉FFT已经很普及了,然而我还是不会。这让退役选手感觉亚历山大,决定退役后把这块知识补一补。这一章内容比较少,希望自己能顺利看完。

多项式表示

分为系数表示和点值表达。
  系数表达就是由一个向量表示系数,分别与自变量对应的幂次相乘求和的形式。求值的时候多采用秦九韶算法(霍纳法则)来做。
  如果求两个多项式乘积的话,还可以先计算两个自变量乘积的幂次,然后把对应的系数乘起来更新到一个系数向量里(比如系数向量a和b求乘积分别加和以后更新到c上,这个过程也被称为卷积),这个复杂度是O(n^2)的。
  点值表达就是已知自变量的一些赋值和结果,然后用这么一个集合来表达一个多项式。通过一个点值表达的集合来确定一个多项式的形式这个过程叫做“插值”。要判断插值是否可行,就是要判断这个集合是不是能唯一确定一个多项式。线性代数中我们学过,当且仅当一个矩阵可逆(对应行列式值不为0)的时候,矩阵作为系数的矩阵方程才有唯一解。这不就正好对应了点值表达的集合吗,把已知的{x}和已知的{y}表示出来,然后设对应的系数矩阵为{a}。矩阵的形式恰好是范德蒙德矩阵,这个矩阵对应的行列式的值我们也知道(是一连串的乘积),那就可以直接用对应行列式值不为0来判断这个矩阵是否可逆了,这样就能判断是不是有唯一解了。所以范德蒙德行列式当且仅当里面的所有基本的元素都不相等的时候,才可以唯一确定。

你可能感兴趣的:(《算法导论》读书笔记 kirai 16/11/14 第30章 多项式与快速傅立叶变换(1))