线段树讲稿统计的力量线段树学习PPT教案.pptxVIP

线段树讲稿统计的力量线段树学习PPT教案.pptx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

统计的力量

——线段树全接触

2024年9月13日清华大学张昆玮2许多算法的本质是统计根据D.E.Knuth的分类方法

计算机算法可以分为两类:数值算法与非数值算法其中的非数值算法包括:索引分类统计……

2024年9月13日清华大学张昆玮3线段树?大家都说:……常数很大?不好写?难调试?想不到?……

2024年9月13日清华大学张昆玮4一个悲剧POJ上的某题,时限很紧……大家都用树状数组,但是有人只会用线段树呢?而且我可以轻易改出一道不能用树状数组的题在线段树一次次TLE后,有一个ID发帖抱怨“下次写一个汇编版非递归线段树,再超时?”可是大家都知道,超时的代码已经2k了。其实我写的就是线段树。很快,而且不到1k。

2024年9月13日清华大学张昆玮5线段树用于统计运行速度快适应能力强编写方便结构简单容易调试关键在于灵活实现

线段树,从何而来?为什么在《算法导论》和黑书中都难见到其踪迹?2024年9月13日清华大学张昆玮6

2024年9月13日清华大学张昆玮7计算几何!计算几何在长期的发展中,

诞生了许多实用的数据结构。区间查询,穿刺查询都是计算几何解决的问题作为特例中的特例,线段树解决的问题是:一维空间上的几何统计高维推广(kd-tree…)可以进行正交查询由于竞赛中涉及计算几何的内容有限,不展开

2024年9月13日清华大学张昆玮8真正有用的是“点树”线段树把数轴分成区间来处理如[8,10),[10,11),…实际上我们面对的往往是离散量竞赛中出现的线段树往往因此退化为“点树”即,最底层的线段只包含一个点:如:[8,9)中只有整点8而已在之后的讨论中,我们不再区别“点树”与线段树

第一印象如果我给MM的第一印象不到80分的话……是不是老老实实地早点罢手比较好?2024年9月13日清华大学张昆玮9

2024年9月13日清华大学张昆玮10最经典的问题:区间和[0,4)[0,2)01[2,4)23[1,4)?

2024年9月13日清华大学张昆玮11核心思想:分治[1,4)in[0,4)左边,[1,2)in[0,2)Get1Get[2,4)in[2,4)虽然每次都有可能同时递归进入两棵子树,

但每层实际上只访问了两个节点。为什么?因为查询是连续的啊……其实还有别的核心思想后面再讲……

2024年9月13日清华大学张昆玮12因为查询是连续的?ABC如果同一层有三个被访问,依次为A,B,C查询是连续的,有了A和C,就一定包括B在树中的兄弟那我直接用B的父亲来计算好了,为什么要用B?

为什么用线段树?功利点说,没啥用的东西咱不学……2024年9月13日清华大学张昆玮13

且慢直接把原数组处理成前缀和Fori=2tondoA[i]+=A[i-1]Ans(a,b)=A[a]-A[b-1]区区区间和,用的着线段树?2024年9月13日清华大学张昆玮14

2024年9月13日清华大学张昆玮15这是为什么呢?原因是区间和的性质非常好满足区间减法区间减法什么的最讨厌了!后面再说!不过直接前缀和不是万能的!如果修改元素的话……

2024年9月13日清华大学张昆玮16真正的作用数据结构修改元素取前缀和直接存储原数组O(1)O(n)直接存储前缀和O(n)O(1)线段树O(logn)O(logn)沟通原数组与前缀和的桥梁其实……(其实什么,后面再讲)

怎么写?这个问题,本来是仁者见仁,智者见智的啊但是我要讲一点不那么“本来”的东西2024年9月13日清华大学张昆玮17

2024年9月13日清华大学张昆玮18朴素的递归算法访问线段如果要的是整条线段就直接返回如果与左子线段相交就递归处理如果与右子线段相交就递归处理合并所得到的解遗憾的是,这种朴素的方法并不是那么容易实现而且存在严重的效率问题(常数太大)

怎么办?2024年9月13日清华大学张昆玮19TLE

从存储方式讲起工欲善其事,必先利其器。2024年9月13日清华大学张昆玮20

2024年9月13日清华大学张昆玮21几个不那么重要的问题虽然可以设计出三叉,四叉,……线段树但是我们先从二叉树开始登高必自迩,行远必自卑多叉怎么办后面再讲(这还要讲?自己研究去)为了不处理各种特殊情况,假设二叉树是满的!不是满的?你的总区间是[0,1000)?你就当作[0,1024)不就好了?

2024年9月13日清华大学张昆玮22堆式存储是关键1245367指针退休了?后面再讲……

2024年9月13日清华大学张昆玮23一些简单的问题N的左儿子是2NN的右儿子是2N+1N的父亲是N1……不就是个堆存储么?不用讲了吧?

2024年9月13日清华大学张昆玮24换成二进制看看吧!11010010111110111

文档评论(0)

lookoudb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档