码迷,mamicode.com
首页 > 其他好文 > 详细

最高科技——疯狂的前缀和

时间:2014-07-16 17:56:40      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:算法   时间   c   优化   递归   rac   

求\[\sum_{k=1}^N f_k\]

显然这玩意是可以\(O(N)\)的,看起来也不能再优化了。

但是在这个宇宙中确实还存在着更快的算法……

令\[g_n=\sum_{d|n}f_d , F_n=\sum_{k=1}^{n}f_k\]

因为\[\sum_{k=1}^N g_k = \sum_{k=1}^N {f_k \lfloor \frac Nk \rfloor} = \sum_{k=1}^N F_{\lfloor \frac Nk \rfloor}\]

整理得到\[F_N=\sum_{k=1}^N g_k - \sum_{k=2}^N F_{\lfloor \frac Nk \rfloor}\]

如果能够在 \(O(\sqrt{N})\)的时间内求出\(\sum_{k=1}^N g_k\),那么可以在\(O(N^\frac 34)\)的时间内计算出\(F(N)\)。

\(\sum_{k=1}^N g_k\)对于某些特殊的\(g_k\)能做的很快,例如\[\sum_{k=1}^N\sum_{d|k}\mu(d)=1\]\[\sum_{k=1}^N \sum_{d|k}\phi(d)=\sum_{k=1}^N k=\frac{N(N+1)}{2}\]

如果\(g_n\)能够很快的计算,那么可以对于\(n \leq N^\frac 23\)线性暴力计算\(F_n\),否则递归计算,可以做到\(O(N^\frac 23)\)。

最高科技——疯狂的前缀和,布布扣,bubuko.com

最高科技——疯狂的前缀和

标签:算法   时间   c   优化   递归   rac   

原文地址:http://www.cnblogs.com/zhuohan123/p/3847466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!