八叉树学习

article/2025/10/28 23:31:36

八叉树学习

    • 八叉树结构
    • 八叉树的存储结构
      • 1. 规则八叉树:
      • 2.线性八叉树:
      • 3.一对八式八叉树
    • 参考网站

八叉树结构

八叉树结构是由 Hunter 博士于1978年首次提出的一种数据模型。八叉树结构通过对三维空间的几何实体进行体元剖分,每个体元具有相同的时间和空间复杂度,通过循环递归的划分方法对三维空间的几何对象进行剖分,从而构成一个具有根节点的方向图。在八叉树结构中如果被划分的体元具有相同的属性,则该体元构成一个叶节点;否则继续对该体元剖分成8个子立方体,依次递剖分,如下示意图所示。
在这里插入图片描述
八叉树是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个叶子节点,这八个叶子节点所表示的体积元素加在一起就等于父节点的体积。一般中心点作为节点的分中心。八叉树若不为空树的话,树中的任意节点的子节点恰好只会有八个或零个,子节点不会有0和8以外的数目。
八叉树的叶子节点代表了分辨率最高的情况。例如分辨率设置为0.01m,那么每个叶子就是一个1cm的小方块。
简单来说,八叉树的存储结构可用于对应元素的查找,依次对立方体进行划分,寻找查找元素对应的小立方体再次进行划分查找。
生成的八叉树的节点可分为三类:
   灰节点: 它对应的立方体部分的为查找元素所占据;
   白节点: 它对应的立方体没有查找元素的内容;
   黑节点: 它对应的立方体全部为查找元素所占据。

八叉树的存储结构

八叉树有三种不同的存贮结构,分别是规则方式、线性方式以及一对八方式。相应的八叉树也分别称为规则八叉树、线性八叉树以及一对八式八叉树。不同的存贮结构的空间利用率及运算操作的方便性是不同的。分析表明,一对八式八叉树优点更多一些。

1. 规则八叉树:

规则八叉树的存储结构用一个有九个字段的记录来表示树中的每个节点。其中一个字段来描述该节点的特性(再目前假定下,只要描述他是灰,白,黑三类节点中的哪一类就行。)其余八个字段分别用来存放指向其八个子节点的指针。 这是最普遍使用的表示树形结构的存储结构的方式。
  规则八叉树缺陷较多,最大的问题是指针占用了大量的空间。假定每个指针要用两个字节表示,而结点的描述用一个字节,那么存放指针要占总的存贮量的94%。因此,这种方法虽然十分自然,容易掌握,但在存贮空间的使用率方面不很理想。

2.线性八叉树:

线性八叉树注重考虑如何提高空间利用率。用某一预先确定的次序遍历八叉树(例如以深度第一的方式),将八叉树转换为一个线性表,表的每个元素与一个节点相对应。对于节点的描述可以相对丰富一点,一如可以用适当的方式来说明他是否是叶节点,如果不是叶节点的话,还可用其八个子节点值的平均值作为非叶节点的值。这样,可以再内存中以紧凑的方式来表示线性表,可以不用指针或者仅用一个指针即可。
  线性八叉树不仅节省存储空间,对某些运算也较为方便。但为此的代价是丧失了一定的灵活性。

3.一对八式八叉树

一个非叶结点有八个子结点,为了确定起见,将它们分别标记为0,1,2,3,4,5,6,7。从上面的介绍可以看到,如果一个记录与一个结点相对应,那么在这个记录中描述的是这个结点的八个子结点的特性值。而指针给出的则是该八个子结点所对应记录的存放处,而且还隐含地假定了这些子结点记录存放的次序。也就是说,即使某个记录是不必要的(例如,该结点已是叶结点),那么相应的存贮位置也必须空闲在那里,以保证不会错误地存取到其它同辈结点的记录。这样当然会有一定的浪费,除非它是完全的八叉树,即所有的叶结点均在同一层次出现,而在该层次之上的所有层中的结点均为非叶结点。

参考网站

1、https://www.cnblogs.com/Glucklichste/p/11505743.html
2、https://blog.csdn.net/qq_37855507/article/details/90957798


http://chatgpt.dhexx.cn/article/xIrOBylL.shtml

相关文章

PCL中的八叉树

目录 (1)什么是八叉树 (2)PCL中八叉树的体素形成和PCL中基于八叉树的点云压缩 (3)基于八叉树的k邻域搜索、半径搜索和体素近邻搜索 (4)基于八叉树和基于 kd-tree 的k邻域搜索、半…

八叉树 java_java简单实现八叉树图像处理代码示例

一晃工作有段时间了,第一次写博客,有点不知道怎么写,大家将就着看吧,说的有什么不正确的也请大家指正。 最近工作中用到了一个图像压缩的功能。找了一些工具,没有太好的选择。最后选了一个叫jdeli的,奈何效…

八叉树

http://hi.baidu.com/onlywater/blog/item/905c5e162ed18f4021a4e9c1.html 一、八叉树基本原理: 用八叉树来表示三维形体,并研究这种表示下的各种操作以及应用,是进入80年代后开展起来的。这种方法,既可以看成是四叉树方法在三维…

Octree(八叉树)

1. 算法原理 八叉树(Octree)是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,将八个子节点所表示的体积元素加在一起就等于父节点的体积。八叉树是四叉树在三维空间上的扩…

【PCL自学:ocTree】八叉树(octree)的原理及应用案例(点云压缩,搜索,空间变化)

PCL中八叉树(octree)的原理及应用案例 一、什么是八叉树ocTree?1.八叉树原理 二、八叉树应用案例1.点云压缩2.用八叉树进行空间划分和搜索操作3.无序点云数据的空间变化检测 一、什么是八叉树ocTree? 1.八叉树原理 上世纪80年代&…

十进制小数化为二进制小数的方法是什么_十进制转成二进制的两种方式

第一种:用2整除的方式。 用2整除十进制整数,得到一个商和余数;再用2去除商,又会得到一个商和余数,如此重复,直到商为小于1时为止,然后把先得到余数作为二进制数的低位有效位,后得到的…

Python 利用内置函数把二进制小数转换为十进制

如果需要把一个二进制整数转换为十进制整数,只需要简单的一行: int(1101,2) 但如果有一个二进制小数的话,就需要自己实现一个函数了。 不过,许多人是这样写的:(图片取自这里) 可是,由于python本身并不适…

[学习笔记] 二进制小数表示方法

文章目录 科学计数法二进制推广计算机中的小数EXCESS表示系统特殊情况举例(float)普通情况最大正实数普通情况最小负实数普通情况最小正实数特殊情况最大正实数 科学计数法 科学计数法想必大家都很熟悉了,往往通过如下形式表示一个实数&…

十进制小数化为二进制小数的方法是什么_二进制的转换

二进制是在计算机中常用的一种进制数,其数据用0和1两个数码来表示数据。我们人类常用的是十进制,那么二进制和十进制之间是有一个转换方法的。 二进制转换十进制 一个二进制数转换为十进制数,是比较简单的,其方法就是用每一个位置…

二进制小数的意义

回忆小学学的十进制小数的意义: 15.23这个小数,1是十位,5是个位,2是十分位,3是百分位。这个小数的意义为:,因为最低位为百分位,所以分母是100。 小数末尾加上0或去掉0,小…

浮点数(小数)在计算机中如何用二进制存储?

浮点数在计算机中如何用二进制存储? 前言 前面我有篇博文详解了二进制数,以及如何同二进制数表示整数。但是,计算机处理的不仅仅是整数,还有小数,同样小数在计算机也是用二进制进行存储的,但是&#xff0…

二进制小数的表示

二级制小数分为两大类:1、定点数;2、浮点数。 定点数 定点数: (1)小数点位置固定不变的数。 (2)定点数有定点整数和定点小数。 (定点整数:小数部分为0;定点…

腾讯TDSQL全时态数据库系统论文入选VLDB

当地时间2019年8月26至30日,VLDB 2019会议在美国加利福尼亚召开,腾讯分布式数据库TDSQL与中国人民大学最新联合研究成果被VLDB 2019接收并将通过长文形式发表。VLDB是国际数据管理与数据库领域顶尖的学术会议之一,这是继去年腾讯TDSQL相似度计…

顶会VLDB‘22论文解读:CAE-ENSEMBLE算法

摘要:针对时间序列离群点检测问题,提出了基于CNN-AutoEncoder和集成学习的CAE-ENSEMBLE深度神经网络算法,并通过大量的实验证明CAE-ENSEMBLE算法能有效提高时间序列离群点检测的准确度与效率。 本文分享自华为云社区《VLDB22 CAE-ENSEMBLE论文…

【轨迹压缩】Trajectory Simplification: On Minimizing the Direction-based Error [2015] [VLDB]

一、一个动机 保护方向信息的方向保持轨迹简化(DPTS)已被证明表现良好,而现有关于 DPTS 的研究 要求用户指定一个容错,在某些情况下用户可能不知道如何正确设置(例如,容错只能在未来某个时间知道&#xff…

VLDB 2021 EAB最佳论文:深度解析机器学习的基数估计为何无法实现?

©作者 | 曲昌博单位 | 西蒙菲莎大学近日,IEEE 数据工程新星奖王健楠团队论文《Are We Ready for Learned Cardinality Estimation?》夺得数据库顶会 VLDB 2021 年度的 EA&B 最佳论文奖。 数据库是企业管理和查询数据的复杂软件系统。 近年来随着机器学习以…

Transformers如何处理表格数据?【VLDB2022教程】Transformer表格数据表示:模型和应用...

来源:专知 本文为教程介绍,建议阅读5分钟最近的研究工作通过开发表格数据的神经表示扩展了语言模型。 在过去的几年中,自然语言处理界见证了基于transformer的语言模型(LM)在自由文本的神经表示方面的进展。鉴于关系表中可用知识的重要性&…

openGauss亮相VLDB2020,展示内存优化研究成果

VLDB(Very Large Data Base)作为数据库领域的三大顶级国际会议之一,是面向数据库研究人员,内核开发人员,开发商以及用户的年度国际会议论坛,代表数据库系统领域最杰出的研究和工程进展。在2020年&#xff0…

VLDB 2023 | 北大河图发布分布式训练神器Galvatron,一键实现大模型高效自动并行...

©作者 | 北京大学河图团队 单位 | 北京大学数据与智能实验室 北大河图团队提出了一套面向大模型的自动并行分布式训练系统 Galvatron,相比于现有工作在多样性、复杂性、实用性方面均具有显著优势,论文成果已经被 VLDB 2023 接收。 最近一段时间&…

利用 Map-Reduce 从文件中找到出现频率最高的 10 个 URL(2021 VLDB Summer School Lab0)

这篇博文主要是对 2021 VLDB Summer School Lab0 的一个总结 这个lab与MIT 6.824 的 lab1 相似,个人感觉比MIT 6.824 的 lab1 要稍微简单些,更容易上手。通过这个lab,可以学习到一些 Golang 的基础知识并对分布式系统有一个基础的了解&#…