划分树,线段树的一些文章

划分树(kth数)

http://www.cnblogs.com/AndreMouche/archive/2011/03/04/1971291.html

http://www.notonlysuccess.com/?p=142#more-142


划分树类似于经典的select算法。选择一个元素,如果小于该数的元素个数>=k,则在左边找,否则在右边找。

1. 对原数组排序

2. 建树。用排序好的中位数将原数组划分成两部分,左子树小于中位数,右子树大于中位数。至到区间只有一个元素为至。

3. 在每一层建立中需要保存每一个元素左边元素中位于下一层左子树的个数。这样给定一个区间就知道了该区间中有多少元素位于左子树中,即有多少元素是小于该层的中位数的。

4. 如果位于左子树元素个数>=k,则向左子树遍历,否则右子树。


线段树

http://w3.jouy.inra.fr/unites/miaj/public/vigneron/cs4235/l5cs4235.pdf

http://dongxicheng.org/structure/segment-tree/

http://hi.baidu.com/alpc62/blog/item/469edeca0043e382c8176875.html


线段树和区间树相仿,只是线段树的空间为O(nlogn),时间为O(logn),而区间树为空间O(n),时间为(KLogn)。

1. 线段树是先建立一个满二叉线段树,每一个节点保存一个线段区间[0-N],左子树为[0-n/2], [N/2+1,N],直到区间只有一个元素。

2. 在该基础上插入给定区间,如[1-3][2-4],[3-7]。插入区间即遍历1中建立的二叉树,如果某一个区间被插入区间包含而该区间次数+1(用于统计该区间被包含多少次,便于查询)

3. 建立完成。

相比区间树,线段树好处在于只要查询一次就可以知道与查询点相交的所有区间,而区间树则需要查询k次,而且需要其他操作辅助。


这里只是简单的介绍概念,知道而已,还需要很多学习



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值