實際上還是稱為區間樹更好理解一些。
樹:是一棵樹,而且是一棵二叉樹。
線段:樹上的每個節點對應于一個線段(還是叫“區間”更容易理解,區間的起點和終點通常為整數)
同一層的節點所代表的區間,相互不會重疊。
葉子節點的區間是單位長度,不能再分了。

線段樹是一棵二叉樹,樹中的每一個結點表示了一個區間[a,b]。a,b通常是整數。每一個葉子節點表示了一個單位區間。對于每一個非葉結點所表示的結點[a,b],其左兒子表示的區間為[a,(a+b)/2],右兒子表示的區間為[(a+b)/2,b](除法去尾取整)。
線段樹的基本用途:
線段樹適用于和區間統計有關的問題。比如某些數據可以按區間進行劃分,按區間動態進行修改,而且還需要按區間多次進行查詢,那么使用線段樹可以達到較快查詢速度。
線段樹的構建
createSeg //以節點v為根建樹、v對應區間為[l,r]
?{
? 對節點v初始化
if (l!=r)
? {
? 以v的左孩子為根建樹、區間為[l,(l+r)/2]
? 以v的右孩子為根建樹、區間為[(l+r)/2+1,r]
? }
?}
(瀏覽器似乎不太好用了,上面的代碼點“插入代碼”不管用,就直接貼出來了)
個人感覺線段樹比較靈活,要多做一些題目才能對線段樹有一個大概的掌握。
網上看見了一些線段樹的資料,這里也貼出來。
線段樹的一種簡化實現
http://www.cnitblog.com/cockerel/archive/2006/09/13/16806.html
線段樹(區間樹)Segment Tree
http://www.wutianqi.com/?p=1140
http://www.wutianqi.com/?p=1369
線段樹基礎知識
http://hi.baidu.com/lemon_cn/blog/item/2093b64bd63797f682025c9f.html
線段樹的構造過程
http://kmplayer.javaeye.com/blog/576486
RMQ問題以及ST算法
http://hi.baidu.com/wjn123335/blog/item/4d485a08414c5ed362d9868a.html
數據結構 – 線段樹
http://www.cnblogs.com/superbin/archive/2010/07/17/1779842.html
http://www.cnblogs.com/superbin/category/253674.html
http://www.cnblogs.com/superbin/archive/2010/08/02/1790467.html
線段樹模版
http://www.shnenglu.com/NicYun/archive/2008/08/05/58037.html
線段樹
http://blog.chinaunix.net/u3/102500/showart_2257428.html
下一篇我會貼出樹狀數組的講解。
posted on 2010-09-25 14:08
Tanky Woo 閱讀(4456)
評論(0) 編輯 收藏 引用