线段树

线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。

使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。

线段树基本信息

中文名称 线段树 外文名称 Segment Tree
功能 单点、区间的修改、查询 时间复杂度 log(n)(建树为nlogn)

上面的都是些基本的线段树结构,但只有这些并不能做什么,就好比一个程序有输入没输出,根本没有任何用处。

最简单的应用就是记录线段是否被覆盖,随时查询当前被覆盖线段的总长度。那么此时可以在结点结构中加入一个变量int count;代表当前结点代表的子树中被覆盖的线段长度和。这样就要在插入(删除)当中维护这个count值,于是当前的覆盖总值就是根节点的count值了。

另外也可以将count换成bool cover;支持查找一个结点或线段是否被覆盖。

实际上,通过在结点上记录不同的数据,线段树还可以完成很多不同的任务。例如,如果每次插入操作是在一条线段上每个位置均加k,而查询操作是计算一条线段上的总和,那么在结点上需要记录的值为sum。

这里会遇到一个问题:为了使所有sum值都保持正确,每一次插入操作可能要更新O(N)个sum值,从而使时间复杂度退化为O(N)。

解决方案是Lazy思想:对整个结点进行的操作,先在结点上做标记,而并非真正执行,直到根据查询操作的需要分成两部分。

根据Lazy思想,我们可以在不代表原线段的结点上增加一个值toadd,即为对这个结点,留待以后执行的插入操作k值的总和。对整个结点插入时,只更新sum和toadd值而不向下进行,这样时间复杂度可证明为O(logN)。

对一个toadd值为0的结点整个进行查询时,直接返回存储在其中的sum值;而若对toadd不为0的一部分进行查询,则要更新其左右子结点的sum值,然后把toadd值传递下去,再对这个查询本身,左右子结点分别递归下去。时间复杂度也是O(nlogN)。

线段树造价信息

市场价 信息价 询价
材料名称 规格/型号 市场价
(除税)
工程建议价
(除税)
行情 品牌 单位 税率 供应商 报价日期
线段母线 1000A 查看价格 查看价格

众联兴

m 13% 众联兴电力科技有限公司
线段母线 1600A 查看价格 查看价格

众联兴

m 13% 众联兴电力科技有限公司
线段母线 2500A 查看价格 查看价格

众联兴

m 13% 众联兴电力科技有限公司
线段母线 400A 查看价格 查看价格

众联兴

m 13% 众联兴电力科技有限公司
线段母线 1250A 查看价格 查看价格

众联兴

m 13% 众联兴电力科技有限公司
线段母线 4000A 查看价格 查看价格

众联兴

m 13% 众联兴电力科技有限公司
线段母线 630A 查看价格 查看价格

众联兴

m 13% 众联兴电力科技有限公司
线段母线 800A 查看价格 查看价格

众联兴

m 13% 众联兴电力科技有限公司
材料名称 规格/型号 除税
信息价
含税
信息价
行情 品牌 单位 税率 地区/时间
线卷车 DSJ23-122 查看价格 查看价格

台班 汕头市2012年2季度信息价
线卷车 DSJ23-122 查看价格 查看价格

台班 汕头市2011年3季度信息价
线卷车 DSJ23-122 查看价格 查看价格

台班 汕头市2011年1季度信息价
线卷车 DSJ23-122 查看价格 查看价格

台班 广州市2010年4季度信息价
线卷车 DSJ23-122 查看价格 查看价格

台班 汕头市2010年4季度信息价
线卷车 DSJ23-122 查看价格 查看价格

台班 韶关市2010年8月信息价
线卷车 DSJ23-122 查看价格 查看价格

台班 汕头市2010年2季度信息价
线卷车 DSJ23-122 查看价格 查看价格

台班 广州市2010年1季度信息价
材料名称 规格/需求量 报价数 最新报价
(元)
供应商 报价地区 最新报价时间
线段 防护等级IP66 250A|6105m 4 查看价格 肇庆市伊顿母线有限公司 广东  肇庆市 2015-12-29
线段 SHM-28三相四线密集型母线槽 250A|4518m 4 查看价格 东莞市盛辉电气设备有限公司 广东  东莞市 2015-11-03
线段 SHM-28三相四线密集型母线槽 630A|6394m 4 查看价格 东莞市盛辉电气设备有限公司 广东  东莞市 2015-09-21
线段 防护等级IP66 2000A|734m 4 查看价格 肇庆市伊顿母线有限公司 广东  肇庆市 2015-09-09
线段 防护等级IP66 6000A|6902m 4 查看价格 肇庆市伊顿母线有限公司 广东  肇庆市 2015-09-05
线段 防护等级IP66 3000A|4181m 4 查看价格 肇庆市伊顿母线有限公司 广东  肇庆市 2015-08-22
线段 SHM-28三相四线密集型母线槽 1000A|6615m 4 查看价格 东莞市盛辉电气设备有限公司 广东  东莞市 2015-07-27
线段 SHM-28三相四线密集型母线槽 2500A|6523m 4 查看价格 东莞市盛辉电气设备有限公司 广东  东莞市 2015-07-02

C++

支持以下操作

1 x 若x不存在,插入x

2 x 若x存在,删除x

3 输出当前最小值,若不存在输出-1

4 输出当前最大值,若不存在输出-1

5 x 输出x的前驱,若不存在输出-1

6 x 输出x的后继,若不存在输出-1

7 x 若x存在,输出1,否则输出-1

Pascal

基本操作

线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。

对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。

使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,因此有时需要离散化让空间压缩。

线段树至少支持下列操作:

Insert(t,x):将包含在区间 int 的元素 x 插入到树t中;

Delete(t,x):从线段树 t 中删除元素 x;

Search(t,x):返回一个指向树 t 中元素 x 的指针。

线段树常见问题

  • cad如何合并多条线段?

    输入PE,会提示是否转为多线段,此时输入(Y)。如果本身就是多线段,系统就不会提示。此时按提示做或按J(合并)操作。

  • 什么是线段比例尺

    【1】线段比例尺就是在图上有一段线段表示比例,限度长度不确定,但是表示的实际距离可以通过比例尺计算,比如:线段长1厘米,那么图上1厘米的距离在实际上的距离就是2000000厘米。

  • KLA(11)线段非法

    与其它梁有重叠。 解决办法:检查该梁两端、并检查与其相接的梁端,采用重画、打断、修剪等功能,去除重叠部分,重提梁跨(这一步很重要)后即可。

线段树是建立在线段的基础上,每个结点都代表了一条线段[a,b]。长度为1的线段称为元线段。非元线段都有两个子结点,左结点代表的线段为[a,(a + b) / 2],右结点代表的线段为[((a + b) / 2)+1,b]。

下图就是两棵长度范围为[1,5][1,10]的线段树。

长度范围为[1,L] 的一棵线段树的深度为log (L) + 1。这个显然,而且存储一棵线段树的空间复杂度为O(L)。

线段树支持最基本的操作为插入和删除一条线段。下面以插入为例,详细叙述,删除类似。

将一条线段[a,b] 插入到代表线段[l,r]的结点p中,如果p不是元线段,那么令mid=(l+r)/2。如果b<mid,那么将线段[a,b] 也插入到p的左儿子结点中,如果a>mid,那么将线段[a,b] 也插入到p的右儿子结点中。

插入(删除)操作的时间复杂度为O(logn)。

poj

Mobile phones

Matrix

codevs

p1082 线段树练习3

p1081 线段树练习2

p1080 线段树练习

变体点树

相信对算法设计或者数据结构有一定了解的人对线段树都不会太陌生。它是能够在log(MaxLen)时间内完成线段的添加、删除、查询等操作。但一般的实现都有点复杂而线段树应用中有一种是专门针对点的。(点树?)它的实现却非常简单。

这种数据结构有什么用?我们先来考虑一下下面的需求(全部要求在LogN时间内完成):如何知道一个点在一个点集里的大小"排名"?很简单,开一个点数组,排个序,再二分查找就行了;如何在一个点集内动态增删点?也很简单,弄个平衡树就行了(本来平衡树比线段树复杂得多,但自从世界上有了STL set这么个好东东,就……^_^)那如果我既要动态增删点,也要随时查询到一个点的排名呢?那对不起,可能就要出动到我们的"点树"了。

其实现原理很简单:每当增加(或删除)一个大小为X的点时,就在树上添加(或删除)一条(X,MaxLen)的线段(不含端点),当要查询一个点的排名时,只要看看其上有多少条线段就可以了。针对这一需求,这里有个非常简单的实现(见以下代码,十多行,够短了吧?)其中clear()用于清空点集;add()用于添加一个点;cntLs()返回小于n的点的个数,也就是n的升序排名,类似地cntGt是降序排名。

这个点树有什么用呢?其中一个应用是在O(NlogN)时间内求出一个排列的逆序数,方法是每读到一个数x,就让逆序数+=cntGt(x);然后再add(x)。

这个实现还可以进行一些扩展。比如删除del(int n),只要把add(int n)中的++size换成--size,把a[i/2]++改成a[i/2]--即可。另外还可以通过二分查找功能在O(logN)时间内查到排名第n的点的大小。应该也可以三四行内搞定。

补充:杨弋同学在2008年信息学奥赛冬令营上新发明了一种线段树的省空间堆式存储法,具体方法可以见08年冬令营课件.

实现代码及测试程序

树状数组

另一种功能上比较类似的数据结构:"树状数组"。它们有不少相似之处:

针对点集的处理(添加、删除、查找);

相似的时空复杂度(logN时间,2N空间);

相似的编程复杂度(都比线段树简短得多);

因此,所有可以用树状数组解决的问题都可以用这个"点树"来解决,另外它还有以下好处:

更直观的转移;

同时支持自下而上和自上而下两种方向的查找和更新,而后者树状数组不支持,所以树状数组不提供某些功能,比如说O(logN)求点集中第k小数。

ZKW线段树

ZKW线段树由清华大学张昆玮发现,是一种新的用非递归方式实现的线段树,具体请参考张昆玮先生本人的讲稿《统计的力量》 。

线段树文献

盾构过小半径曲线段 盾构过小半径曲线段

格式:pdf

大小:265KB

页数: 7页

评分: 4.7

浅析盾构过小半径曲线段施工 (中铁十一局城市轨道工程有限公司 胡军凯 邮编: 430074) 【内容提要】: 以广州地铁 6 号线大坦沙~如意坊盾构区间 500m 半径转弯为例 , 分析和探讨盾构掘进过小半径曲线段地技术要点和措施 ,形成一篇盾构施工技术总结 ,以便对今 后盾构施工进行借鉴和参考 . 【关键词】: 盾构施工 土压平衡 管片选型 小半径曲线 1 引言 盾构施工是以盾构机盾壳为临时支撑 ,对土体进行开挖 , 同时用钢筋混凝土管片对围岩进 行衬砌地一种机械化隧道施工方法 .大如盾构区间采用地是海瑞克土压平衡盾构机 , 其原理 是:刀盘开挖切削下来地渣土进入土仓积累起来 , 形成土压作用在掌子面上 ,当渣土积累到一 定地数量时 ,这个压力与开挖面地土压力 . 地下水压力平衡 ,从而使掌子面保持稳定而不坍塌 . 此时只需维持土仓地进土量与螺旋输送机从土仓地输出地渣土量相等 , 就能持

立即下载
边跨直线段施工工艺 边跨直线段施工工艺

格式:pdf

大小:265KB

页数: 9页

评分: 4.3

广州南部地区快速路(仑头 ~龙穴岛) SD5 珠 江 特 大 桥 (138+250+138)m连续—刚构边跨直线段 施工工艺(概要) 编制: 审核: 批准: 中铁大桥局集团第三工程有限公司 珠江特大桥项目部 二 00四年三月十六日 目 录 1.概况 2.编制依据 3.主要施工方案说明 4.主要的机械设备、材料投入 5.主要的材料投入 6.主要的劳动力投入 7.施工流程框图 8.附:边跨直线段施工支架及临时墩方案图 1、概况 珠江特大桥主桥(138m+250m+138m)上部结构为双幅单箱室三向预 应力结构的连续刚构。主桥箱梁采用悬臂现浇施工, 箱梁纵向分块为 11.7m (边跨尾段) +2.2m(边跨合拢段) +12×5m+7×4m+10×3m(29个悬浇段 )+ 10×3m+7×4m+12×5m(29个悬浇段)+2.2m(中跨合拢段)。其中 11.7m+2.2m 边跨尾段加边跨合拢段

立即下载

其基本形状为凸-凹结构,齿顶处齿廓曲线为外凸曲线,齿根处为内凹曲线。但由于微线段齿轮的齿形特殊,需要利用特殊的公式进行计算,因此在CAD三维建模时只能通过输入若干点进行绘制,步骤复杂效率低。 另外,由于微线段齿轮的性能受其齿形影响很大,在相同的模数和数下,当压力角增量、初始基圆、初始压力角、齿顶高系数和顶隙系数取不同数值时,其齿形是不同的,其性能也差别很大。

微线段齿轮的原理:

微线段齿轮的齿廓曲线由微段曲线或微段直线光滑连接而成,微段曲线长度为1微米以下,齿轮的齿根处齿廓为内凹齿廓曲线,其最少齿数为3个齿。微段曲线为渐开线曲线,并可用微段直线替代。齿数为3-8个齿时,齿顶高系数范围为0.8-1.4,齿根系数为0.1-0.2,齿厚增大至0.5-0.7πm,齿槽宽为2-3mm。

齿轮可为直齿齿轮,或为斜齿齿轮。

微线段齿轮的构造:

微线段的加工方式采用目前广泛应用的范成法。根据微线段齿轮的原理,先构造出基本齿条,再利用范成原理得到齿轮齿廓。我们先构造出标准微线段齿条的齿廓,它由很多微段渐开线精妙连接而成,每个微段渐开线上两端点的曲率中心是在不同位置、不同半径的基圆上,并且这些曲率中心均在齿条的节线上。

微线段齿轮的优点:

从微线段齿轮构造原理可知,理论上,微线段齿轮具有无穷大的接触强度(因为是凸对凹的啮合方式,而且我们在构造时就已确定每个啮合点的曲率半径相同,故其综合曲率半径为零,接触强度为无穷大)。

与渐开线齿轮相比,微线段齿轮不仅具有很高的接触强度,还具有较高的弯曲强度。由于齿轮的弯曲强度主要与齿根厚度有关,而接触强度主要与综合曲率半径有关,而我们所构造微线段齿轮的齿形不仅具有较厚的齿根厚度,而且采用了凸对凹的啮合形式,在构造点上综合曲率为零,因此,这种齿轮具有较高的接触强度和弯曲强度。

传动效率高。传动效率实验研究表明,在相同的工况下,微线段齿轮的传动效率比渐开线齿轮要高3%左右,这对于机械传动尤其是高速、重载情况下的大功率传动具有十分重要的意义。

最少齿数少,宜于小型化。研究表明,微线段齿轮的最少齿数为3

微线段齿轮是日本首次提出的。近年来,合肥工业大学对此进行了长期研究,申请了相关发明专利,在国内外著名期刊上发表了相关著作,制造了微线段齿轮的加工刀具,正在实际生产中加以应用,取得丰硕成果。

目前,微线段齿轮在各个领域都有应用,特别是在重载变速箱及航空领域方面,合肥工业大学自动变速器研究室在该方面做出重大努力,并取得卓越成果。在该领域的研究中,合肥工业大学通过仿真及实验分析,对微线段齿轮的承载能力及动态性能方面进行了深入的分析,最终得出该类型齿轮在各方面皆优于渐开线齿轮的结论,同时,通过产学研项目,合肥工业大学成功的将微线段齿轮应用到实际的生产及实践中,并取得良好的效果。

在求线段长度的计算题中,有许多要利用比例线段定理求解.这样的方法我们称为比例线段法。例如,已知两边b,c及b,c夹角的平分线ta,求作三角形。其思路要点是:如图1,假设△ABC为所求,即AB=c,AC=b,∠A的平分线AD=ta,延长BA至E,使AE=b,连结EC,因而AD∥EC,所以利用成比例线段AD/EC=BA/BE,EC=ta(b c)/c,于是△ACE可作出并成为奠基三角形(如图1),当ta同时大于或等于b,c时,本题无解,否则有一解 。

下面讨论将线段比例的性质运用到几何作图中去的方法。

首先指出,两线段的比,根据定义是“用同一长度单位去量两线段所得的量数之比”。所以四条线段组成的比例实际上是它们四个量数两两之比所组成的等量关系。因此,关于数的比例的各个性质,也适用于线段的比例 。

【例1】求作一个三角形与已知三角形相似,且使它的面积等于已知三角形面积的九倍。

已知△ABC,

求作三角形:与△ABC相似,面积是△ABC面积的九倍。

分析设△EFG符合条件: △EFG∽△ABC,S△EFG=9S△ABC

因为相似三角形面积的比等于对应边的平方比,设与边AB对应的边是EF,则有

,所以
,EF=3AB。EF可以作出,再根据相似形的性质,可以作出△EFG。

作法 ①作EF =3AB。

②作∠GEF=∠CAB,作∠GFE=∠CBA,EG、FG交于G。

△EFG就是所求作的三角形,图2。

证明 ∵∠E=∠A,∠F=∠B (作图),

∴ △EFG∽△ABC,

又:EF= 3AB,即

(作图),

(相似形性质及等量代换),

∴ △EFG符合条件。

讨论 仅有一解 。

【例2】已知两线段的f和,又知它们的比例中项,求作该两线段。

已知 线段l、f,且I= m n,f²= m.n,

求作 线段m、n。

分析 考虑到直角三角形中斜边上的高是斜边被垂足分成的两条线段的比例中项,如果将斜边取成l,高取成f,则被垂足分成的两条线段就分别是m,n。

作法 ①作AB=l,以AB为直径画半圆。

②作直线t // AB 交半圆周于C,且使t与AB间的距离等于f 。

③过C作CD⊥AB交AB于D,

则AD= m,BD =n(或AD=n,BD=m) (图3)。

证明 连AC、BC。

∵∠ACB是半圆周上的圆周角,

∴∠ACB= 90°,

∵CD⊥AB (作图),

∴CD²= AD.BD (直角三角形斜边上的高是斜边被垂足分成的两条线段的比例中项),

但CD= f (平行线间的距离处处相等),

∴AD.BD=f²,

又 AD BD= AB=l(作图),

AD= m,BD=n(或AD=n、BD= m)。

讨论 问题之有解无解取决于t与半圆周交点存在与否。如果,

,有两个交点,有二解,这时m≠n;如果
,有切点,这时
,一解;如果
,t与半圆周无交点,又不相切,无解 。

线段树相关推荐
  • 相关百科
  • 相关知识
  • 相关专栏