算法划分——二叉树的多种变体

Posted UVN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法划分——二叉树的多种变体相关的知识,希望对你有一定的参考价值。


前言


本期分享的是我近期一系列关于二叉树算法的简短研究(二叉树是一种经典的数据结构,常用于空间划分,数据搜索与图像处理。出于本科毕设的需求,我需要用可控的二叉空间划分法,来生成一套具有密度与层级变化的空间网格,进而展开设计。此次研究包含了多种控制方法的研究,也包括了经典K-D Tree这一模型。



目录/Catalog

1. 简单二叉树/  Simple Binary Tree

2. 比率控制/  Ratio Based

3. 灰度控制/  Gray-Value Based

4. 点控制/  Point Based(K-D Tree)

5. 结语/Summary




1.简单二叉树/Simple Binary Tree



第一阶段的研究主要围绕简单二叉划分展开

控制划分点与比率的参数没有被引入

划分的方向与密度均由区域的长宽比决定


【算法】划分——二叉树的多种变体

过程

1. 给定划分范围

2. 计算区域的长宽比

3. 在区域的长轴上沿短轴方向划分

4. 将划分完的空间分别归入子层级的两个节点中(左0右1)

5. 回到第一步






2. 比率控制/  Ratio Based



第二阶段的研究纳入了比率的控制

即划分点在长轴区间的百分比

控制这一比率即控制划分的左右

整体的形式会根据左右的比值呈现不同的密度与形态

从标准正方形网格到K-D Tree

都是二叉树的一种分支

【算法】划分——二叉树的多种变体

二叉划分点的偏移会产生复杂的网格系统

父级的偏移直接影响到子级






【算法】划分——二叉树的多种变体

比率:左→右


【算法】划分——二叉树的多种变体

白色:左叶片 / 黑色:右叶片





随着迭代的增加,微观层级上的差异逐渐在宏观层面上表现出丰富的变化

划分点的细微差异导致巨大的分化

【算法】划分——二叉树的多种变体

偏移0.01

Life Game?


【算法】划分——二叉树的多种变体

偏移0.1


【算法】划分——二叉树的多种变体偏移0.25


【算法】划分——二叉树的多种变体

偏移0.5

结晶?


【算法】划分——二叉树的多种变体

偏移0.75

路易斯康?


【算法】划分——二叉树的多种变体

偏移0.95


【算法】划分——二叉树的多种变体

偏移0.99

巨型回廊?


其中父级与子级之间恒定不变的数学关系使得各个层级之间具有高度相似性,偏移点向左或向右使得颜色的分布比例以离散的方式偏向一边,但在整个过程当中,二叉树的拓扑结构是不变的


ps:以上划分均在区域范围内按比值划分,假如长轴上的划分按照绝对数值进行,超出长轴范围的点将不会划分,二叉树将不是满二叉树。整个结构是不均匀的 —— 这样一来并非每一个父节点都将对应两个子节点,或是并非每一个父节点都有相同深度的子层级。






3. 灰度控制/  Gray-Value Based



第五阶段的研究基于图像的灰度

每一次的划分都会根据区域内图像灰度采样

并计算出中值点

再沿短轴方向划分

【算法】划分——二叉树的多种变体

在这一阶段的研究中,为了缩减每次循环搜查像素灰度值的计算量,采样密度随着区域的面积减少而降低,不过这也导致每次划分的位置并非完全精确。





【算法】划分——二叉树的多种变体

灰度边缘 —— 并非所有区域都是完美划分






4. 点控制/  Point Based(K-D Tree)



第六阶段的研究采用了经典K-D Tree的逻辑

将点的集合作为空间划分的依据

并从2D的划分提升到3D空间

在此基础上,根据3D的模型形态进行空间划分具有了可行性

【算法】划分——二叉树的多种变体

采样

圆/多段线/字符






【算法】划分——二叉树的多种变体

【算法】划分——二叉树的多种变体

【算法】划分——二叉树的多种变体

3D划分

方/曲面/螺旋线





【算法】划分——二叉树的多种变体

网格顶点 - 二叉树


从复杂模型的顶点也可以生成一套网格系统,整个系统基本保留了原有的形态特征


至此,关于二叉树的研究告一段落







5. 结语/  Summary



由于时间有限,以上的研究只进行了两三天

这一研究的简化版随即被用到我的毕业创作 ”夹缝+“ 当中

借此对二分网格系统进行一系列操作

以生成丰富的空间

关于详情,敬请期待稍后的毕业创作推送!






感谢阅读



欢迎关注UVN

不定期更新

立足于建筑学,关注算法研究、生成设计、数字艺术、电子音乐

以及多种无法被定义的创造
微博:U_V_N
作者个人微博/Ins:Cubicrab (主要发布个人研究以及生成艺术)


以上是关于算法划分——二叉树的多种变体的主要内容,如果未能解决你的问题,请参考以下文章

C Language 二叉树 - 二叉树的遍历(十四)

c++如何用非递归的算法去创建二叉树,有没有分层建立二叉树的方法

小白学算法8.二叉树的遍历,前序中序和后序

急急~判断一棵二叉树是满二叉树的算法!

二叉树算法

二叉树算法—广度搜索算法使用以及变形