这次的数字图像处理作业是用C/C++ 实现离散Fourier 变换和FFT。我偷了个大懒,花了两小时用Ruby 实现了一个。
首先是O(n2)的离散Fourier 变换。其实都很简单。
然后找了本台湾教授李家同写的《算法设计与分析导论》,伪码写得很详细。
接着用benchmark 比较一下性能:
这是我run 了近一个小时才得到的珍贵数据:
还有一个小问题,这个程序只能处理2 的幂次个元素的序列。如果你传入的参数不是2 的幂次个,就会得到一堆稀奇古怪的错误和Ruby 不适合数值计算的结论。
P.S.:
- 李家同是个文采学问都做得很好的人,极力推荐他的一篇散文生活思索: 樂盡所能 祇取所需
- Ruby最吸引我的一点就是它真正让我专注于我需要的东西(在这里是算法。如果你看过伪码就会发现Ruby 代码真的很“干净”)。