- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
線段树在算法中的应用[朱凯迪]
FILENAME 线段树在算法中的应用[朱凯迪].doc
宁波工程学院学年论文
PAGE
- PAGE 13 -
线段树在算法中的应用
作者:朱凯迪
作者单位:宁波工程学院
Email:zukaidi@163.com
摘 要: 计算机信息学竞赛中出现了越来越多的统计,查找,规划,排序,染色等等的题目。平衡二叉树和线段树是两种最常见的解决此类问题的数据结构。可是平衡二叉树有一个缺点,就是变成复杂度很高。我们可以看到在某些题目中,线段树是它的有力替代品。这篇论文主要介绍了线段树的操作,优化以及应用。该论文也会系统地介绍染色问题使用线段树的一般解法。
关键词:线段树 数据结构 信息学 算法
线段树的定义及特征
一棵二叉树,记为T(a, b),参数a, b表示该结点表示的区间[a, b]。区间长度b-a记为L。递归定义T[a, b]:
若L1:[a, (a + b) div 2]为T的左儿子
[(a + b) div 2, b]为T的右儿子。
若L=1:T为一个叶子结点。
表示区间[1, 10]的线段树表示如图1-1所示:
(图1-1)
定理1:线段树把区间任意一条线段都分成不超过条线段。
证明:
在区间(a, b)中,对于线段(c, d),如果(c = a)或(d = b),那么线段在(a, b)中被分为不超过。
用归纳法证明,如果是单位区间,最多被分为一段,成立。
如果区间(a, b)的左儿子与右儿子成立,那么如果当c = a时,
若d = (a + b) div 2那么相当与其左儿子分该线段,所分该线段树不超过,即不超过,成立。
若d (a + b) div 2那么相当于该线段被分为它左儿子表示的线段,加上右儿子分该线段,线段数不超过,也不超过,成立。
对于d = b的情况证明类似,不在赘述。
在区间(a, b)中,对于任意线段也用归纳法证明。
对于单位区间,最多分为一段,成立。
若(a, b)的左儿子与右儿子均成立,则对于线段(c, d)
若d = (a +b) div 2则该区间所分该线段等于其左儿子区间所分该线段,线段数小于,成立。
若c (a + b) div 2则该区间所分该线段等于其右儿子区间所分该线段,线段数小于,成立。
若1、2均不成立,则此线段在左儿子区间分该线段满足d V.Lson.b Lson为Left Son的缩写,表示左儿子。,分该线段数不超过,而在右儿子区间分该线段满足c = V.Rson.a Rson为Reft Son的缩写,表示右儿子。,分该线段不超过,所以在该区间分该线段不超过,成立。
Lson为Left Son的缩写,表示左儿子。
Rson为Reft Son的缩写,表示右儿子。
这个结论为线段数能在的时间内完成一条线段的插入、删除、查找等工作提供了理论依据。
除了以上性质,线段数还具有以下一些性质:
线段数是一个平衡树,树的高度为。
任两个结点要么是包含关系要么没有公共部分,不可能重叠。
给定一个叶子p,从根到p路径上所有结点代表的区间都包含点p,且其它结点代表的区间都不包含p。
线段树的基本存储结构和操作
2.1 线段数的基本存储结构
线段数的一个结点的最基本存储数据结构如图2-1-1所示:
struct Seg{
struct Seg{
int left, right, mid;
Seg *lson, *rson;
};
(图2-1-1)
也可以用数组模拟二叉树,则结构体中不需要两个指针变量。
其中left和right分别表示该结点的左右端点,而mid则是中点。这样就不需要在每次再计算了。而lson和rson分别指向该结点的左儿子和右儿子,如果没有,则为NULL。
这只是线段树结点的最基本结构,在解决实际问题时,还需要根据实际情况添加各种需要储存的数据。如[ZOJ]1610 Count the Colors /onlinejudge/showProblem.do?problemCode=1610,染色问题。下文会具体讲解。中,我建立的线段树结点结构体
/onlinejudge/showProblem.do?problemCode=1610,染色问题。下文会具体讲解。
struct tree{
struct tree{
int l, r, col, mid;
tree *lc, *rc;
};
(图2-1-2)
其中l, r各代表左右端点,mid代表中点,col代表颜色。lc和rc各代表左儿子和右儿子。
2.2 线段数的基本操作
2.2.1 线段树的建立操作
在对线段树进行操作前,我们需要建立起线段树的结构。我们使用结构
体数组来保存线段树,这样对于非叶节点,若它在数组中编号为 num,则
您可能关注的文档
- 線性代数在桥梁分析中的应用.doc
- 線性代数环境科学中的应用.doc
- 線性代数复习与研究.doc
- 線性代数的学习和在实际中的应用.doc
- 線性代数的应用案例.doc
- 線性卷积与圆周卷积的计算.docx
- 線性代数的应用论文.doc
- 線性卷积和圆周卷积的关系.doc
- 線性回归在实际问题中的应用.doc
- 線性卷积与循环卷积的比较.doc
- 2025年江苏南京市浦口区教育局所属部分事业单位招聘教师59人笔试模拟试题及参考答案详解.docx
- 2025年江苏南京市浦口区教育局所属部分事业单位招聘教师59人笔试模拟试题及参考答案详解1套.docx
- 临床精神病学试题及答案2025版.docx
- 《河湖生态流量确定和保障技术规范》.pdf
- 临床普外科试题及答案2025版.docx
- 水利工程材料课件.pptx
- 2025年江苏南京市浦口区教育局所属部分事业单位招聘教师59人笔试模拟试题及参考答案详解一套.docx
- 奶粉中阪崎肠杆菌检验方法 第1部分:分离与计数方法.pdf
- 2025年江苏南京市浦口区教育局所属部分事业单位招聘教师59人笔试模拟试题及答案详解1套.docx
- 2025年民航职业技能鉴定全真模拟模拟题含答案详解(精练).docx
文档评论(0)