基本算法设计策略
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大元,两组最小元比较得到最小元。递归的应用这个算 法!
TT((1n))0T,T(n22)1Tn22
T(n) 3n2 2
2.FFT
卷积:Βιβλιοθήκη Baidu
多项式的积:
m
n
A(x) ai xi 及B(x) bi xi
且
i0
i0
,
k
ck a jbk j
则
j 0
C(x)A(x)B(x)mnckx ,k 并 k0
2
XE[k] x[2n]W N 2nk x[2n]W N n/2k
n0
n0
N1
N1
2
2
XO [k] x[2n1]W N 2nk x[2n1]W N k/2 n
n0
n0
N 1
则 X [k] x [n ]W N kn X E [k] W N kX O [k] n 0 从而,可以将对N个量的傅氏变换变成为对两个规模更小的
k
]W
N
nk
k0
其它的一个重要性质:时域卷积对应于频域积。
多项式的积
两个多项式的积:
n1
A(x) aj x j j0
m1
B(x) bj x j j0
nm2
C(x)A(x)B(x) cjxj j0 j
其中 c j akbjk k 0
此即卷积运算;
序列运算可用蝶形表示:
对于以下的8个的情形, 这一描述复杂并且不直观。
这一变换基于运算中的性质:WNN 1
从算法分析角度:
N 1
N 1
N 1
2
2
X [k ] x [n ] W N kn x [2 n ]W N 2 n k x [2 n 1 ]W N (2 n 1 )k
n 0
n 0
n 0
于是:分别考虑对其奇数项和偶数项作傅氏变换:
N1
N1
2
(w+x)(y+z)=wy+(wz+xy)+xz
r(wx)(yz)
pwy
qxz
(102wx)1( 02yz)104p102(rpq)q
从而,仅需3次乘法即可完成 该算法即STARSSEN矩阵乘法的来源
极大极小
❖ 同时查找数组中的最大最小元 ❖ 用分治法解决上述问题: ❖ 如果集合中只有1个元素,则它既是最大值也是最小值; ❖ 如果有2个元素,则一次比较可得到最大和最小;; ❖ 如果把集合分成两个子集合,由两组最大元比较得到最
基本策略
分治法 贪婪法 动态规划法 搜索策略
§6.1分治法
快速排序算法的设计与分析 快速变换:FFT及快速数论变换
例:整数相乘 N位整数相乘需要 O(N 2 ) 次乘法 4837*5261= 4837=48*100+37=100*w+x 5261=52*100+61=100*y+z
4837*5261=(100*w+x)*(100*y+z)=10000wy+100(wz+xy)+xz
n0
n0
X [N 2 k] N n 0 1x [n ]W N (N 2 k)n X E [k] W N kX O [k]
复杂度
T(N) 2T( N ) N
22
T(2) 0
令 N 2m ,则得
T(2m)(m1)2m1
从而快速傅氏变换的复杂性度为
O(NlogN)
应用:大数乘法 利用FFT计算积A=1634,B=9827
序列(在小为一半)的变换。这样,将变换的量大大减小。
实际计算时,注意到对另外一半k N 时:
2
X[N 2k]N n 0 1x[n]W N (N 2k)n
N1
nN N1
x[n]W N kW n N2 x[n]W N kn(1)n
n0
n0
N1
N1
2
2
x[2n]W N 2nk x[2n1]W N (2n1)k
c(8 ,1 ,3 ,7 ,8,6 5,9 2 ,0 )
c(8 ,1 ,3 ,7 ,5 ,7,9 0 ,0 )
c(8,1 ,3,7,5,0,1,0 6 ) c(8,1,3,7,5,0,6,1)
即16057318
注意到可能的截断误差,使用数论变换更为适 合
数论变换
考虑在模F的域上的变换:
N 1
进行反变换:
c ( 2 . 8 , 2 7 . 8 8 , 7 8 . 9 6 , 7 9 . 3 9 , 7 9 . 1 2 , 6 7 . 1 2 , 9 . 2 0 , 3 0 . 3 1 )2
舍入成整数 :
c (2,2 8 ,8 9 ,7 0 ,7 9 ,6 7 ,9 ,2 0 )
数表示成 :
7
ci 10 i
i0
c (2,2 8 ,8 9 ,7 0 ,7 9 ,6 7 ,9 ,2 0 ) c (8 ,3,8 1 ,7 0 ,7 9 ,6 7 ,9 ,2 0 ) c (8 ,1 ,8,7 3 ,7 9 ,6 7 ,9 ,2 0 )
c (8 ,1 ,3 ,8,7 7 ,6 7 ,9 2 ,0 )
a 0 a 1 a 7 ( 4 ,3 ,6 ,1 ,0 ,0 ,0 ,0 ) b 0 b 1 b 7 ( 7 ,2 ,8 ,9 ,0 ,0 ,0 ,0 )
W 8ex2 p 8 i) (1 2i
1 2
即 W80.710.7i1
A 0 14 A 1 5 . 42 8 . 84 i A2 2 2i A 3 2 . 58 3 . 16 i A4 6 A 5 2 . 58 3 . 16 i A6 2 2i A 7 5 . 42 8 . 54 i
{ x [ i ]i} 0 , ,,N 1
DFT定义:序列
的离散傅氏变换为
N1
Xk xnejnk2N
n0
该变换的逆变换为:
N1
xnN 1 Xkejnk2N
k0
令 WN
j 2
e N
,则上式可写为
:
N 1
X [k ]
x[
n
]W
kn N
n0
x[n ]
1 N
N 1
X
[
B ( 2 , 2 . 0 1 6 . 8 i , 3 1 5 7 i , 1 1 . 9 0 . 1 1 i , 4 7 , 1 . 9 9 0 . 1 1 i , 7 1 7 i , 9 2 . 0 1 . 8 i ) 3 5
对A与B进行逐一做积 ci ai bi
C ( 3 , 1 . 7 6 1 2 . 6 i , 6 1 4 0 1 i 8 , 3 4 . 2 6 3 2 . 3 0 i , 2 8 , 3 8 . 2 2 3 4 . 3 0 i , 1 8 1 8 i , 2 1 6 . 7 2 1 2 . 6 i ) 6 0
TT((1n))0T,T(n22)1Tn22
T(n) 3n2 2
2.FFT
卷积:Βιβλιοθήκη Baidu
多项式的积:
m
n
A(x) ai xi 及B(x) bi xi
且
i0
i0
,
k
ck a jbk j
则
j 0
C(x)A(x)B(x)mnckx ,k 并 k0
2
XE[k] x[2n]W N 2nk x[2n]W N n/2k
n0
n0
N1
N1
2
2
XO [k] x[2n1]W N 2nk x[2n1]W N k/2 n
n0
n0
N 1
则 X [k] x [n ]W N kn X E [k] W N kX O [k] n 0 从而,可以将对N个量的傅氏变换变成为对两个规模更小的
k
]W
N
nk
k0
其它的一个重要性质:时域卷积对应于频域积。
多项式的积
两个多项式的积:
n1
A(x) aj x j j0
m1
B(x) bj x j j0
nm2
C(x)A(x)B(x) cjxj j0 j
其中 c j akbjk k 0
此即卷积运算;
序列运算可用蝶形表示:
对于以下的8个的情形, 这一描述复杂并且不直观。
这一变换基于运算中的性质:WNN 1
从算法分析角度:
N 1
N 1
N 1
2
2
X [k ] x [n ] W N kn x [2 n ]W N 2 n k x [2 n 1 ]W N (2 n 1 )k
n 0
n 0
n 0
于是:分别考虑对其奇数项和偶数项作傅氏变换:
N1
N1
2
(w+x)(y+z)=wy+(wz+xy)+xz
r(wx)(yz)
pwy
qxz
(102wx)1( 02yz)104p102(rpq)q
从而,仅需3次乘法即可完成 该算法即STARSSEN矩阵乘法的来源
极大极小
❖ 同时查找数组中的最大最小元 ❖ 用分治法解决上述问题: ❖ 如果集合中只有1个元素,则它既是最大值也是最小值; ❖ 如果有2个元素,则一次比较可得到最大和最小;; ❖ 如果把集合分成两个子集合,由两组最大元比较得到最
基本策略
分治法 贪婪法 动态规划法 搜索策略
§6.1分治法
快速排序算法的设计与分析 快速变换:FFT及快速数论变换
例:整数相乘 N位整数相乘需要 O(N 2 ) 次乘法 4837*5261= 4837=48*100+37=100*w+x 5261=52*100+61=100*y+z
4837*5261=(100*w+x)*(100*y+z)=10000wy+100(wz+xy)+xz
n0
n0
X [N 2 k] N n 0 1x [n ]W N (N 2 k)n X E [k] W N kX O [k]
复杂度
T(N) 2T( N ) N
22
T(2) 0
令 N 2m ,则得
T(2m)(m1)2m1
从而快速傅氏变换的复杂性度为
O(NlogN)
应用:大数乘法 利用FFT计算积A=1634,B=9827
序列(在小为一半)的变换。这样,将变换的量大大减小。
实际计算时,注意到对另外一半k N 时:
2
X[N 2k]N n 0 1x[n]W N (N 2k)n
N1
nN N1
x[n]W N kW n N2 x[n]W N kn(1)n
n0
n0
N1
N1
2
2
x[2n]W N 2nk x[2n1]W N (2n1)k
c(8 ,1 ,3 ,7 ,8,6 5,9 2 ,0 )
c(8 ,1 ,3 ,7 ,5 ,7,9 0 ,0 )
c(8,1 ,3,7,5,0,1,0 6 ) c(8,1,3,7,5,0,6,1)
即16057318
注意到可能的截断误差,使用数论变换更为适 合
数论变换
考虑在模F的域上的变换:
N 1
进行反变换:
c ( 2 . 8 , 2 7 . 8 8 , 7 8 . 9 6 , 7 9 . 3 9 , 7 9 . 1 2 , 6 7 . 1 2 , 9 . 2 0 , 3 0 . 3 1 )2
舍入成整数 :
c (2,2 8 ,8 9 ,7 0 ,7 9 ,6 7 ,9 ,2 0 )
数表示成 :
7
ci 10 i
i0
c (2,2 8 ,8 9 ,7 0 ,7 9 ,6 7 ,9 ,2 0 ) c (8 ,3,8 1 ,7 0 ,7 9 ,6 7 ,9 ,2 0 ) c (8 ,1 ,8,7 3 ,7 9 ,6 7 ,9 ,2 0 )
c (8 ,1 ,3 ,8,7 7 ,6 7 ,9 2 ,0 )
a 0 a 1 a 7 ( 4 ,3 ,6 ,1 ,0 ,0 ,0 ,0 ) b 0 b 1 b 7 ( 7 ,2 ,8 ,9 ,0 ,0 ,0 ,0 )
W 8ex2 p 8 i) (1 2i
1 2
即 W80.710.7i1
A 0 14 A 1 5 . 42 8 . 84 i A2 2 2i A 3 2 . 58 3 . 16 i A4 6 A 5 2 . 58 3 . 16 i A6 2 2i A 7 5 . 42 8 . 54 i
{ x [ i ]i} 0 , ,,N 1
DFT定义:序列
的离散傅氏变换为
N1
Xk xnejnk2N
n0
该变换的逆变换为:
N1
xnN 1 Xkejnk2N
k0
令 WN
j 2
e N
,则上式可写为
:
N 1
X [k ]
x[
n
]W
kn N
n0
x[n ]
1 N
N 1
X
[
B ( 2 , 2 . 0 1 6 . 8 i , 3 1 5 7 i , 1 1 . 9 0 . 1 1 i , 4 7 , 1 . 9 9 0 . 1 1 i , 7 1 7 i , 9 2 . 0 1 . 8 i ) 3 5
对A与B进行逐一做积 ci ai bi
C ( 3 , 1 . 7 6 1 2 . 6 i , 6 1 4 0 1 i 8 , 3 4 . 2 6 3 2 . 3 0 i , 2 8 , 3 8 . 2 2 3 4 . 3 0 i , 1 8 1 8 i , 2 1 6 . 7 2 1 2 . 6 i ) 6 0