您好、欢迎来到现金彩票网!
当前位置:PC蛋蛋 > 最优归并树 >

划分树 - Enstein_Jun

发布时间:2019-06-10 18:22 来源:未知 编辑:admin

  之外。现在要登场的数据结构将比归并树的效率更高,他就是划分树。我们学习归并树的时候了解到:归并树 = 线段树 + 归并排序。那么我们今天要介绍的划分树就是:线段树 + 快排。要说有什么不同的,那就是归并树是从有序到无序,而划分树是从无序到有序。

  给定一序列a[1...n],sorted[1...n]为序列从小到大的排列结果。对于划分树的每一个节点(叶子节点除外),其保存的区间[left, right]中小于等于sorted[(left+right)/2]的进入该结点的左子树,否则进入该节点的右子树。如图所示:

  从划分树的定义来看,我们不难发现我们使用层状的储存较为方便于是我们,定义划分树的储存结构如下:

  我们知道只要小于等于当前结点的区间中值的数字就进入左子树,否则进入右子树。为了方便我们的查询我们增加一个数组cnt[1...n]用来记录元素所在区间的当前位置之前进入左孩子的个数。根据这些信息我们可以写出建树的代码,如下:

  划分树的查询只要想明白了,他就很简单。我们在文章前面已经明白了,划分树的定义以及是如何建树的。划分树的查询就是基于我们建树时保存的信息,就是那个cnt数组。如果我们要查找区间[qlft, qrht]内的第k大数,这里就可以小小的是有下cnt数组了。如果tree[deep].cnt[qrht] - tree[deep].cnt[qlft-1] = K。区间[qlft, qrht]内有超过k个值进入左子树,我们不难发现我们的目标值,已经进入了左子树。反之如果tree[deep].cnt[qrht] - tree[deep].cnt[qlft-1]   K,那么我们的目标值则进入了右子树。于是我们顺藤摸瓜就能找到目标值了,如:

  那么,现在对于查询我们还有一个问题要解决,那就是更新查询的区间。什么意思呢,就是原先我们查找的是[4,7]这个区间内的第k大数,那么当我们进入右子树之后,已经不存在[4,7]这个区间了,既然区间都没有了,那么自然k也就变了。经过一番思考,我们可以得到查询代码如下:

  很容易得出时间复杂度为总的时间复杂度为O(n log n)。每一次查询的时间复杂度为O(logn)。空间复杂度为O(n*logn)。显然划分树的时间复杂度要优于归并树。

  用划分树来解决选定区间内的第K大值,其实也就两步!一步是建树,另一步则是查询。    先说我对建树的理解吧!   建树的过程很简单:两步就OK了!  第一步:找到序列的中位数,把大于中位数的扔到中位数...博文来自:wishcxz_acm

  (有任何问题欢迎留言或私聊这两天看了一下划分树的博客,推荐一个大神博客,一看就懂。下面讲一下这两题题划分树的应用。首先是HDU3473: 题目意思很裸,读完应该就知道xi应该就是中位数。 划分树建树复...博文来自:Cwolf9

  题目:点击打开链接题意:区间第k大。分析:主要学习了一下划分树,划分树是利用了快速排序的思想。划分树入门参考博文来自:常胜将军的博客

  欢迎访问~~宇宙第一小仙女\(^o^)/~~萌量爆表求带飞=≡Σ(((つ^o^)つ~dalao们点个关注呗~~  转自猩姐博客~https...博文来自:lxt_Lucia的博客

  Bsp分割算法简述PreviewBSP分割算法也是有不少文章可以借鉴的,就我目前能掌握的资料来看,泛泛而谈者大有人在,实际去作的时候却总是抓瞎。知道是什么永远不如知道怎么做,BSP分割是BSP分析的基...博文来自:houxq123的专栏

  算法介绍KD树的全称为k-DimensionTree的简称,是一种分割K维空间的数据结构,主要应用于关键信息的搜索。为什么说是K维的呢,因为这时候的空间不仅仅是2维度的,他可能是3维,4维度的或者是更...博文来自:走在前往架构师的路上

  BSP(BinarySpacePartition)表示二叉空间分割。使用这种方法可以使我们在运行时使用一个预先计算好的树来得到多边形从后向前的列表,它的复杂度为。它是由Fuch和Kedem在1980年...博文来自:houxq123的专栏

  今天来和大家研究一下BSP树的应用。首先简单介绍一下BSP树的相关内容。BSP (Binary Space Partition)表示二叉空间分割。使用这种方法可以使我们在运行时使用一个预先计算好的树来...博文来自:汪海的实验室

  划分树的基本概念:划分树是一种基于线段树的数据结构,其基本思想就是将待查找区间划分为两个子区间:不大于数列中间值的元素被分配到左儿子的子区间,简称左子区间;大于数列中间值的元素被分配到右儿子的子区间,...博文来自:ACM成长之路

  一、介绍概念1、划分树是一种基于线段树的数据结构。主要用于 快速求出(在log(n)的时间复杂度内)序列区间的区间内的第k大数。第k大数:在已经排序好的序列中,找第k的数字就是第k大数字例如:1234...博文来自:JKdd123456的博客

  划分树的讲解转自于师哥的博客:进入正题:有这样一类题目,求的是区间内的第k...博文来自:莉莉莉的博客

  转自 看了一些博客,感觉有些博客对建树写的挺好,但是对于查询区间却一笔带过...博文来自:ZCY的博客

  今晚又学了另外一种树----划分树。看了一晚上了,也是大概明白一些而已,对于一些细节还是不太理解。划分树是一种基于线段树的数据结构。主要用于快速求出(在log(n)的时间复杂度内)序列区间的第k大值 ...博文来自:Lin_disguiser的博客

  看了一些博客,感觉有些博客对建树写的挺好,但是对于查询区间却一笔带过。在看懂了之后决定自己写一篇,加深自己的理解,也希望对正在学习划分树的人能够有所帮助。如有错误,敬请大佬指出。进入正题:有这样一类题...博文来自:Akatsuki

  转自大神的详解:用划分树来解决选定区间内的第K大值,其实也就两步!一步是建树,另一步则是查询。    先说我对建树的理...博文来自:wzw-yali的博客

  网上看了实在太多讲这个的但是讲的都不怎样,博文来自:Lola&France

  学主席树的时候看到一篇博客说是因为一个大牛当时不会划分树而想出的另一种解决区间第k小的问题,所以在学了主席树之后我就学了下划分树。划分树解决静态区间第k小问题比主席树的时空消耗都要少,不过好像不能解决...博文来自:WilliamSun0122的博客

  POJ2104寻找区间第K数划分树,时间复杂度O(MlogN),归并树,时间复杂度O(Mlog^3N)。归并树好慢啊!先把划分树弄明白吧!。。。orz...博文来自:zuihoudebingwen的专栏

  预计今天一天搞完。到时候会好好写写自己心得体会吧。呵呵。昨天实在太累了,今天好好加油哦~~~~~~~...博文来自:小媛在努力~

  关于划分树,我没有百度,只是听说有这么个东西,可以在log(n)的时间内,查找出来区间[st,en]的第k大的值,再看了一下人家的代码,自己YY的,一下的内容全部是原创,绝对的原滋原味,要是和标准的定...博文来自:蛤蛤~

  主要参考kuangbin博客个人感觉划分树是基于快速排序的分治的思想,是把快速排序每个过程记录下来而已(借助快速排序也是可以快速求整个区间第k值的)对于每个区间,找中间值比较分成两个子区间,再递归处理...博文来自:冰

  首先借主席树发明人的一段话:..这个东西是当初我弱不会划分树的时候写出来替代的一个玩意..被一小撮别有用心的人取了很奇怪的名字...

  6月27日,一种名为“Petya”的新型勒索病毒席卷了欧洲,Petya勒索病毒从俄罗斯、乌克兰开始,侵袭了包括西班牙、印度、法国、英国等欧洲多个国家。受侵袭各国的政府、银行、电力系统、通讯系统、企业以...

  题目来自于HDU4417。划分树的代码及原理请看我写的这篇博客划分树详解。题目重述【问题描述】:超级马里奥是世界著名水管工,他长这个样子(活跃下气氛\(amp;amp;amp;amp;amp...

  最近学习了一下划分树,下面总结一下。我们在求区间最值的时候,一般可以用线段树解决,但是如果要求区间第k小或者第k大值的话线段树就有点力不从心了,这是我们可以用划分树来解决。划分树利用了快速排序的思想,...

  原文网址红色的点是此节点中被划分到左子树的点。我们一般用一个结构体数组来保存每个节点,和线段树不同的是,线段树每个节点值保存一段...

  Android 自定义本地图片加载库,仿微信相册04-27阅读数 9605

  jquery/js实现一个网页同时调用多个倒计时(最新的)11-25阅读数 54万+

http://cairowatch.com/zuiyouguibingshu/5.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有