Skip to content
Ayas_Lan's Blog
Go back

分治算法

Edit page

最大间隔区间

问题情景: 给定在一个服务器上复制文件的n个无序时间戳x1,x2,x3,...,xnx_{1},x_{2}, x_{3}, ...,x_{n}.找到不进行复制文件的最大时间间隔。 本质:找到无序数值集合中,排序后相邻元素的最大差值。 即:

3-sum问题:

问题情境: 给定n个不同的整数,找到3个数字的和为0。

朴素算法:O(n3n^{3})

结合target_sum问题(双指针算法,单层O(N)):

分治的主定理

若时间复杂度满足式子:

T(n)=aT(Tb)+θ(nc)T(n) = aT\left(\frac{T}{b}\right)+ \theta (n^{c})

case1: 若c >logba> log_{b}^{a},则T(n) = θ(nc)\theta (n^{c}) case2: 若c = logbalog_{b}^{a},则T(n)=θ(nclogn)T(n) = \theta (n^{c}logn) case3:若c < logbalog_{b}^{a},则T(n) = θ(nlogba)\theta (n^{log_{b}^{a}})

主定理的收缩条件: 当递归满足形式:

T(N)<=T(αn)+T(βn)+O(N)T(N) <= T(\alpha n) + T(\beta n) + O(N)

计数逆序对

逆序对: 索引i < j的同时,对应的值ai>aja_{i} > a_{j}

问题: 给定一系列数据,找到有多少对逆序对。 merge and sort实现:

T(N)=2T(N2)+O(N)T(N) = 2T\left(\frac{N}{2}\right)+ O(N)

即T(N) = O(NlogN)

最近点对问题

给定平面上的n个点坐标,寻找具有最短欧氏距离的一对点。

算法实现:

T(N)=2T(N2)+O(NlogN)T(N) = 2T\left(\frac{N}{2}\right)+O(NlogN)

即T(N) = O(Nlog2Nlog^{2}N)

整数相乘

已知x与y分别为两个n位的整数,计算n * y: 朴素算法:

x=2n2x1+x0y=2n2y1+y0xy=(2n2x1+x0)+(2n2y1+y0)=2nx1y1+2n2(x1y0+x0y1)+x0y0\begin{aligned} x &= 2^{\frac{n}{2}} * x_{1} + x_{0}\\ y &= 2^{\frac{n}{2}} * y_{1} + y_{0} \\ xy &= \left(2^{\frac{n}{2}} * x_{1} + x_{0}\right)+ \left(2^{\frac{n}{2}} * y_{1} + y_{0}\right) = 2^{n}x_{1}y_{1} + 2^{\frac{n}{2}}(x_{1}y_{0} + x_{0}y_{1}) + x_{0}y_{0} \end{aligned}

得到

T(N)=4T(N2)+O(N)T(N) = 4T\left(\frac{N}{2}\right)+ O(N)

所以T(N) = O(N2N^{2})

加速算法:

x=2n2x1+x0y=2n2y1+y0xy=2nx1y1+2n2(x1y0+x0y1)+x0y0=2nx1y1+2n2((x1+x0)(y1+y0)x1y1x0y0)+x0y0\begin{aligned} x &= 2^{\frac{n}{2}} * x_{1} + x_{0}\\ y &= 2^{\frac{n}{2}} * y_{1} + y_{0} \\ xy &= 2^{n}x_{1}y_{1} + 2^{\frac{n}{2}}(x_{1}y_{0} + x_{0}y_{1}) + x_{0}y_{0}\\ &= 2^{n}x_{1}y_{1} + 2^{\frac{n}{2}}((x_{1} + x_{0})(y_{1} + y_{0}) - x_{1}y_{1} - x_{0}y_{0}) + x_{0}y_{0} \end{aligned}

得到递推式为:

T(N)<=T(N2)+T(N2)+T(1+N2)+O(N)T(N) <= T\left(\frac{N}{2}\right)+ T\left(\frac{N}{2}\right)+ T\left(1 + \frac{N}{2}\right)+ O(N)

得到T(N)=O(Nlog23)T(N) = O(N^{log_{2}^{3}})


Edit page
Share this post on:

Previous Post
正态总体的抽样分布,矩估计
Next Post
稳定匹配