happycock(SSWW)速来接分!!
感谢你的补充~~
真想把给njluhao的100分收回来给一半你
(njluhao老兄莫怪哦~~:))
卷积算法:(from happycock(SSWW))
只是演示,为了简单,将一些初始化、动分数组省略了。VC6,TC2都能编译运行。
#include <stdio.h>
void juanji(int* a, int m, int* b, int n, int* r)
{
int i, j, t = m + n - 1;
for (i = 0; i < t; i++)
for (j = 0; j < m && j <= i; j++)
if (i - j < n) r[i] += a[j] * b[i - j];
}
void main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int b[4] = { 1, 1, 1, 1 };
int r[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }, i;
juanji(a, 5, b, 4, r);
for (i = 0; i < 8; i++) printf("%d ", r[i]);
}
问题点数:20、回复次数:6Top
1 楼njluhao(浩然)回复于 2003-08-01 00:22:16 得分 0
up!!Top
2 楼happycock(SSWW)回复于 2003-08-02 16:53:32 得分 10
接分,^_^Top
3 楼njluhao(浩然)回复于 2003-08-03 09:05:44 得分 0
我试过了,happycock(SSWW)兄的算法简练但是效率比我的算法要低一些,
因为每次循环j都是从0开始,需要加进去一些判断。
400*400个点的卷积我的用了0.006459s,而老兄用了0.007741s
呵呵~~
我还有一个用FFT的算法,楼主要的话联系njluhao@163.netTop
4 楼njluhao(浩然)回复于 2003-08-03 09:10:45 得分 10
500*500差距更大了,
我的0.008655s;happycock(SSWW)兄的0.011095s;
FFT快速卷积才0.003120s!Top
5 楼goto123(thinking)回复于 2003-08-03 10:55:33 得分 0
njluhao(浩然),给我发来吧~~goto123@163.netTop
6 楼happycock(SSWW)回复于 2003-08-03 13:00:20 得分 0
首先说的是,在序列很长的情况下,FFT比原始方法快很多,否则还要他干什么?因此你那程序说在序列长的情况下比我的好没意义——这时必须换FFT。
其次,在序列短的情况下,我不知道你的时间观念有多精确,几个毫秒都能感觉出来?
我的程序结果都出来了,你还在敲代码,你说谁快?Top




