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

分块感想

时间:2017-05-27 21:54:53      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:n个元素   大小   进制   序列   数据打包   预处理   结构   比较   程序   

                                       分块大法好

     数据结构+算法=程序,这句话是个大神讲的。可见数据结构几乎占了算法题中的半壁江山。

   数据结构的基本思想就是分块:树状数组是按其二进制表达来分块的,线段树是根据其区间长度分块……(将原序列分解为若干连续不想相交的子序列)

   分块就被誉为“万能数据结构”,其思想个人认为比较好理解。 就是讲数据打包,对整个包的数据的询问可以直接预处理得出。修改包中的元素则需维护整个包的信息。(这是分块我认为最重要的两个性质(优缺点));但分块的大小不同于树状数组,线段树……(其块的大小不变)现在讨论一下块的大小多少合适:

     设块的大小为m,有n个元素组成序列;则查询的时间复杂度:

           对于整个块,每个块时间复杂度O(1)(不是O(1)以后讨论,结论不变)为O(n/m);

           对于散块,就是每次查询最前面最后面多出的那些东东,为O(m)

            所以查询总的时间复杂度为O(m)+O(n/m),由算术平均不等式得出m+(n/m)<=2sqrt(n)当且仅当m=n/m时成立

  修改时结论不变

  所以块的大小为sqrt(n)时时间复杂度最优 

 

 

 

 

 

 

  

  

 

分块感想

标签:n个元素   大小   进制   序列   数据打包   预处理   结构   比较   程序   

原文地址:http://www.cnblogs.com/dancer16/p/6914407.html

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