算法与数据结构
Chinamming
这个作者很懒,什么都没留下…
展开
-
关于二叉树、四叉树和八叉树
关于二叉树、四叉树和八叉树树(tree)是一种常用的数据结构。它是由一个或多个节点组成的有限集T,它有一个特定节点,成为根节点。其余节点分为m(m大于等于0)个互不相交的有限集T0,T1,...,Tm-1,其中每个集合又是一棵树,称T0~Tm-1为根节点的子树。树结构的类型有二叉树(Binary Space Partitioning Trees)、四叉树、八叉树(octree)、十六叉树等。为转载 2013-11-24 13:36:05 · 5114 阅读 · 0 评论 -
四叉树与八叉树
前序四叉树或四元树也被称为Q树(Q-Tree)。四叉树广泛应用于图像处理、空间数据索引、2D中的快速碰撞检测、存储稀疏数据等,而八叉树(Octree)主要应用于3D图形处理。对游戏编程,这会很有用。本文着重于对四叉树与八叉树的原理与结构的介绍,帮助您在脑海中建立四叉树与八叉树的基本思想。本文并不对这两种数据结构同时进行详解,而只对四叉树进行详解,因为八叉树的建立可由四叉树的建立推得。若有不足之转载 2013-11-24 13:14:33 · 1257 阅读 · 0 评论 -
一些在计算机图形学中经常使用的数据结构
BSP:试图将所有的板(在BSP中叫做平面)组织成一棵树,每个平面均将它所在的空间分割为前后两个部分,这两个部分又分别被另外的平面分割成更小的空间……直到最后,达到分割的要求。http://school.ogdev.net/ArticleShow.asp?id=5935&categoryid=5The process of constructing a BSP tree is fairly转载 2013-11-24 13:47:03 · 2572 阅读 · 0 评论 -
三维体数据分割算法及实现
三维体数据分割算法及实现本文基于分裂合并分割算法,提出了两种新的分割算法:基于八叉树的分裂合并算法和基于自适应包围盒的分裂合并算法。下面将对这两种算法进行描述。1 分裂合并法分析区域生长法的原理是根据种子像素点(体数据中为体素点)向其周围扩散,对区域周围的每一个像素/体素进行分析。区域生长法需要用额外的内存区域来保存待生长的像素/体素点,并且算法的时间复杂度较大。区域生长的过程中,转载 2013-11-24 13:45:22 · 10179 阅读 · 1 评论 -
八叉树和十六叉树结构
(1)三维和四维数据结构的提出。前面介绍的数据结构都是二维的,然而在有些信息系统中,需要有真三维的空间数据结构。例如矿山开采中的地下资源埋藏和采矿巷道的空间分布,如果用二维的坐标体系就根本无法很好表达。此外,矿山空间目标往往随时间不断变化着,这就提出了空间和时间信息系统的问题。 在时间信息系统中不考虑时间,是把时间看作不变的常数,即为当前的时间。而在时间和空间信息系统中,则把时间看作转载 2013-11-24 13:17:37 · 8579 阅读 · 2 评论 -
叉树Octree原理及简单实现(C++版)
1、对Octree的描述Octree的定义是:若不为空树的话,树中任一节点的子节点恰好只会有八个,或零个,也就是子节点不会有0与8以外的数目。那么,这要用来做什么?想象一个立方体,我们最少可以切成多少个相同等分的小立方体?答案就是8个。再想象我们有一个房间,房间里某个角落藏着一枚金币,我们想很快的把金币找出来,聪明的你会怎么做?我们可以把房间当成一个立方体,先切成八个小立方体,然后排除掉没转载 2013-11-24 13:22:37 · 4498 阅读 · 0 评论 -
八叉树及K-D树的应用和实现
1. 八叉树、k-d树的原理2. 八叉树、k-d树的应用、优缺点3. 八叉树、k-d树的实现八叉树和k-d树都经常用来处理三维空间数据,k-d树的使用范围更宽泛些,适用于k维空间的数据,在Sift算法中,k-d树被用于在k维的空间内搜索邻近特征点。1. 八叉树、k-d树的原理wiki或百科上面都有详细的介绍。http://en.wikipedia.org/wik转载 2013-11-24 13:30:27 · 2858 阅读 · 0 评论 -
八叉树三维数据结构
(一)基本原理 用八叉树来表示三维形体,并研究在这种表示下的各种操作及应用是在进入80年代后才比较全面地开展起来的。这种方法,既可以看成是四叉树方法在三维空间的推广,也可以认为是用三维体素阵列表示形体方法的一种改进。 八叉树的逻辑结构如下: 假设要表示的形体V可以放在一个充分大的正方体C内,C的边长为2n,形体VC,它的八叉树可以用以下的递归方法来定义:转载 2013-11-24 13:15:41 · 8493 阅读 · 0 评论 -
Ogre场景管理之Octree源代码分析
由于本人的引擎ProjectGaia服务于08年创新杯的游戏项目 – 3D太空游戏,所以理所应当加入Octree(八叉树 – 已经周宁学长发帖介绍过)场景管理器.参考了无数Octree的代码,发现还是我们可爱的Ogre写的最好,于是狂看n千行代码,把精髓提取出来给大家共享.鉴于我们游戏版教程又n久没有更新了,今天发一篇我对Ogre场景管理器之Octree源代码分析的笔记.所有代码采用伪代码转载 2013-11-24 13:44:01 · 1367 阅读 · 0 评论 -
八叉树 Octree
(一)基本原理 用八叉树来表示三维形体,并研究在这种表示下的各种操作及应用是在进入80年代后才比较全面地开展起来的。这种方法,既可以看成是四叉树方法在三维空间的推广,也可以认为是用三维体素阵列表示形体方法的一种改进。 八叉树的逻辑结构如下: 假设要表示的形体V可以放在一个充分大的正方体C内,C的边长为2 n,形体V C,它的八叉树可以用以下的递归方法来定义:转载 2013-11-24 13:19:54 · 1718 阅读 · 0 评论 -
【查找结构5】多路查找树/B~树/B+树
在前面专题中讲的BST、AVL、RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关。那么降低树高自然对查找效率是有所帮助的。另外还有一个比较实际的问题:就是大量数据存储中,实现查询这样一个实际背景下,平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。那么如何减少树的深度(当然不能减少查询数据量),一个基本的想法就是:1. 每个节点存储多个元素 (但元素数量不能无转载 2013-11-23 00:05:27 · 799 阅读 · 0 评论 -
【查找结构4】红黑树 [RBT]
大部分转载:http://yanglongylj.blog.163.com/blog/static/563834532009113021438417/ 红黑树的性质与定义红黑树(red-black tree) 是一棵满足下述性质的二叉查找树:1. 每一个结点要么是红色,要么是黑色。 2. 根结点是黑色的。 3. 所有叶子结点都是黑色的(实际上都是Null指针,转载 2013-11-23 00:04:49 · 867 阅读 · 0 评论 -
二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的比较
http://www.iteye.com/topic/614070此少侠总结的特棒,直接收藏了。我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)。这四种树都具备下面几个优势:(1) 都是动态结构。在删除,插入操作的时候,都不需要彻底重建原始的索引树。最多就是执行一定量的旋转,变色操作来有限的改变树的转载 2013-11-23 00:01:47 · 1195 阅读 · 0 评论 -
一步一步写平衡二叉树(AVL树)
一步一步写平衡二叉树(AVL树)作者:C小加 更新时间:2012-8-20 平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删转载 2013-11-23 00:15:57 · 803 阅读 · 0 评论 -
平衡树(AVL)详解
1. 为什么平衡树?在二叉搜索树(BST,Binary Search Tree)中提到,BST树可能会退化成一个链表(整棵树中只有左子树,或者只有右子树),这将大大影响二叉树的性能。前苏联科学家G.M. Adelson-Velskii 和 E.M. Landis给出了答案。他们在1962年发表的一篇名为《An algorithm for the organization of inform转载 2013-11-23 00:12:47 · 1891 阅读 · 0 评论 -
C#与数据结构--树论--平衡二叉树(AVL Tree)
介绍我们知道在二叉查找树中,如果插入元素的顺序接近有序,那么二叉查找树将退化为链表,从而导致二叉查找树的查找效率大为降低。如何使得二叉查找树无论在什么样情况下都能使它的形态最大限度地接近满二叉树以保证它的查找效率呢?前苏联科学家G.M. Adelson-Velskii 和 E.M. Landis给出了答案。他们在1962年发表的一篇名为《An algorithm for the organ转载 2013-11-23 00:13:50 · 1210 阅读 · 0 评论 -
【查找结构3】平衡二叉查找树 [AVL]
在上一个专题中,我们在谈论二叉查找树的效率的时候。不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找)。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法,平衡二叉树出现了。 平衡二叉树的定义(AVL—— 发明者为Adel'son-Vel'skii 和 Landis) 平衡二叉查找树,又称 AVL树。它除了具备二叉查转载 2013-11-23 00:03:45 · 830 阅读 · 0 评论 -
【查找结构 2】二叉查找树 [BST]
当所有的静态查找结构添加和删除一个数据的时候,整个结构都需要重建。这对于常常需要在查找过程中动态改变数据而言,是灾难性的。因此人们就必须去寻找高效的动态查找结构,我们在这讨论一个非常常用的动态查找树——二叉查找树。 二叉查找树的特点 下面的图就是两棵二叉查找树,我们可以总结一下他的特点:(1) 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值(2)转载 2013-11-23 00:03:01 · 866 阅读 · 0 评论 -
三维场景管理之四叉树和八叉树
四叉树和八叉树概述传统计算机图形应用--特别是的应用的需要一个实时,交互的方法来现实--通过处理一个发送到显卡的数据的最有效的图形数据子集的方法来决定图形数据的显示,而不是传送全部的数据,四叉树,八叉树,Bsp树,背面剔出,pvs集合很多其他方法都是针对这个目的而提出的。流行的计算机图形卡近些年在处理能力和处理方法上程指数增长,当前的状态揭示出很多时候应该更好的和快速的找到一个好的数据集把转载 2013-11-24 13:18:26 · 6657 阅读 · 0 评论