继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第14天 算法与数据结构笔记4

降蓝
关注TA
已关注
手记 15
粉丝 0
获赞 0

课程名称:算法与数据结构
课程章节冒泡排序,希尔排序和排序算法大总结 1-4冒泡排序还能排序
主讲老师:Liuyubobobo

课程内容:

什么是线段树?(区间树)

  • 一棵二叉树的每个节点是存储的一个区间或者说是一个线段相应的信息,这里说的相应的信息不是指把这个区间内的元素都存进去,我们以求和为例,每一个节点相应存储的是这个节点所对应区间的数字的和。

为什么要使用线段树

最经典的线段树问题:区间染色
  有一面墙 ,长度为n,每次选择一段儿墙进行染色,m次操作后,我们可以看见多少种颜色?
图片描述

例如上图,我们第一次将[1,8]的位置染成蓝色,然后再将[5,9]的位置染成黄色,然后将[6,15]的位置染成红色,最后把[12,15]的颜色染成绿色,我们通过这几次操作可以发现,图中被重复染色的位置是会被覆盖的,比如[12,15]这个位置显示被染成红色,然后又被染成了绿色,但最后呈现的是绿色。我们也可以把“m次操作后,我们可以看见多少种颜色”这个问题,转化为“m次操作后,我们可以在[i, j]区间内看见多少种颜色”问题。对于这个问题我们可以使用数组来解决,但我们会发现,在使用数组实现的时候,不管是染色操作(更新区间),还是查询操作(查询区间),都需要对数组进行遍历,这样使用数组实现区间染色问题的时间复杂度就是O(n)。但这个时间复杂度的程序执行起来,数据量如果大了,执行效率是很低的。所以有了线段树这样的数据结构。

课程收获

通过本次学习我了解了 线段树的基本概念,受益良多。
图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP