[2017.12.2]FFT学习笔记

本文详细介绍了快速傅里叶变换(FFT)算法及其在多项式乘法中的应用,并提供了清晰易懂的代码实现。通过阅读本文,读者可以深入理解FFT的工作原理及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

墙裂推荐两个博客:

http://blog.youkuaiyun.com/iamzky/article/details/22712347   画了图,写的很容易懂,配合《算法导论》服用更佳

http://blog.xlightgod.com/%e3%80%90uoj34%e3%80%91%e5%a4%9a%e9%a1%b9%e5%bc%8f%e4%b9%98%e6%b3%95/    XlightGod大佬的博客,写的很清楚,模板也非常棒

最后上我自己修改过的XlightGod的模板,符合自己风格

 1 #include<bits/stdc++.h>
 2 #define N 100010
 3 #define RG register
 4 #define inf 0x3f3f3f3f
 5 using namespace std;
 6 const double pi=acos(-1);
 7 typedef complex<double> C;
 8 C a[N],b[N];
 9 int L,m,n,R[N];
10 inline int gi(){
11     RG int x=0;RG char y=getchar();
12     while(y<'0'||y>'9') y=getchar();
13     while(y>='0'&&y<='9') x=x*10+y-'0',y=getchar();
14     return x;
15 }
16 inline void fft(C *x,int y){
17     for (RG int i=0;i<n;++i)
18     if(i<R[i]) 
19         swap(x[i],x[R[i]]);//交换位置,数组总要换回来吧
20     for (RG int i=1;i<n;i<<=1){//待合并区间长度
21     C wn(cos(pi/i),sin(y*pi/i)),even,odd;
22     //这里就不用再*2了,因为合并后的区间长度是i的两倍(这里的i可以理解为len/2)
23     for (RG int j=0;j<n;j+=i<<1){//起始位置
24         C w(1,0);
25         for (RG int k=0;k<i;++k,w*=wn){//第几个,类似于递归版的for(i~len/2)
26         even=x[j+k];
27         odd=w*x[j+i+k];
28         x[j+k]=even+odd;
29         x[j+i+k]=even-odd;
30         }
31     }
32     }
33 }
34 int main(){
35     freopen("34.in","r",stdin);
36     freopen("34.out","w",stdout);
37     n=gi();m=gi();
38     for (RG int i=0;i<=n;++i) a[i]=gi();
39     for (RG int i=0;i<=m;++i) b[i]=gi();
40     for (m+=n,n=1;n<=m;n<<=1) ++L;
41     for (RG int i=0;i< n;++i) R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));//递推
42     fft(a,1);fft(b,1);
43     for (RG int i=0;i<=n;++i) a[i]*=b[i];
44     fft(a,-1);
45     for (RG int i=0;i<=m;++i) printf("%d ",int(a[i].real()/n+0.5));
46     return 0;
47 }
View Code

 关于FFT和卷积,这篇博客写得不错

http://blog.youkuaiyun.com/xienaoban/article/details/69486299

转载于:https://www.cnblogs.com/Super-Nick/p/7955841.html

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值