python实现r树存储地理位置_树结构解析及python实现

定义:

树(数据结构)

不要与特定类型的树数据结构trie混淆。

不要与树(图论)混淆,这是一种特定类型的数学对象。

一棵简单的无序树; 在此图中,标记为7的节点有两个子节点,标记为2和6,一个父节点标记为2.根节点位于顶部,没有父节点。

在计算机科学中,树是一种广泛使用的抽象数据类型(ADT) - 或实现此ADT的数据结构 - 模拟分层树结构,具有父节点的子值的子值和子树,表示为一组链接节点。

树数据结构可以递归地定义为节点集合(从根节点开始),其中每个节点是由值组成的数据结构,以及对节点(“子”)的引用列表,其中没有引用重复的约束,并且没有指向根。

或者,树可以作为整体(全局)抽象地定义为有序树,其中值分配给每个节点。这两种观点都是有用的:虽然树可以作为一个整体进行数学分析,但实际上表示为数据结构时,它通常由节点表示和处理(而不是作为一组节点和节点之间的边缘的邻接列表),例如,可以代表一个有向图。例如,查看整个树,可以讨论给定节点的“父节点”,但通常作为数据结构,给定节点仅包含其子节点的列表,但不包含对其的引用它的父母(如果有的话)。

内容

初步定义

数学定义

无序的树

兄弟姐妹套装

使用集包含

有根据的树木

使用递归对

有序树

使用水平顺序定义

确定性表

XPath Axes

遍历地图

生成结构

使用二叉树的定义

按序列编码

每级订购

树木中使用的术语

数据类型与数据结构

递归

类型理论

数学的

术语

绘图树

交涉

推广

有向图

遍历方法

常见的操作

常见用途

也可以看看

其他树木

笔记

参考

进一步阅读

外部链接

初步定义

不是树:两个非连接部分,A→B和C→D→E。有一个以上的根。

不是树:无向循环1-2-4-3。4有多个父(入站边)。

不是树:循环B→C→E→D→B。B有多个父(入站边)。

不是树:循环A→A。A是根,但它也有父。

每个线性列表通常都是一棵树

与作为线性数据结构的数组,链表,堆栈和队列相比,树是非线性数据结构。树可以是空的,没有节点,或者树是由称为根的一个节点和零或一个或多个子树组成的结构。

数学定义

无序的树

在数学上,一个无序树[1] (或“代数树” [2] )可被定义为一个代数结构 ,其中X是的非空载波集合的节点和父上的函数X,其分配的每个节点X它的“ parent“node,parent(x)。该结构受制于每个非空子代数必须具有相同的固定点的条件。也就是说,必须存在唯一的“根”节点r,使得父(r)= r对于每个节点x,一些迭代应用程序父(父(... parent(x)...))等于r。

有几个等价的定义。作为最接近的替代方案,可以将无序树定义为部分代数 (X,  父代) ,其通过让父(r)未定义而从上述总代数中获得。也就是说,根r是唯一没有定义父函数的节点,对于每个节点 x,根在有向图(X,  parent)中可以从x到达。这个定义实际上与一个定义是一致的 反arborescence。该TAOCP本书使用术语面向树。[3]

另一个等价的定义是单根理论树的定义,它的高度最多为ω(有限树[4])。也就是说,代数结构(X,父)等效于具有顶部元素r的部分阶数 , 并且其每个主要扰乱(也称为主滤波器)是有限链。确切地说,我们应该谈论逆集理论树,因为集合论定义通常采用相反的排序。之间的对应关系 (X,  父)和(X,≤)通过自反传递闭包 / 缩减建立,减少导致没有根循环的“部分”版本。

描述集理论(DST)中树的定义利用部分阶(X,≥)的表示作为有限序列之间的前缀顺序。事实证明,直到同构,DST树的(逆)和到目前为止定义的树结构之间存在一对一的对应关系。

我们可以将树的四个等价表征称为 代数, 树作为部分代数, 树作为部分顺序, 树作为前缀顺序。还有第五个等价定义 - 图论的有根树,它只是一个连通的非循环有 根 图。

树的表达式(部分)代数 (X,  parent)直接遵循使用父指针的树结构的实现。通常,使用部分版本,其中根节点没有父节点定义。然而,在一些实现或模型中,甚至建立父(r)= r循环度。值得注意的例子:

Linux VFS 中“root dentry有一个指向自身的d_parent” [5]。

来自面向对象编程 的实例化树 [6] [7] [8]的概念。在这种情况下,根节点是顶级元类 - 唯一的类是它自身的直接实例。

请注意,上面的定义允许无限树。这允许通过惰性评估来描述由一些实现支持的无限结构。一个值得注意的例子是无限倒退的eigenclasses从Ruby的对象模型。[9] 在这个模型中,通过superclass非终端对象之间的链接建立的树是无限的,并且具有无限分支(“螺旋”对象的单个无限分支 - 参见图)。

兄弟姐妹套装

在每个无序树(X,父)中,存在节点集X到兄弟集的区别分区。如果parent(x)=  parent(y),则两个非根节点x,y属于同一兄弟集 。根节点r形成单子兄弟集{ r }。[a] 如果一棵树的每个兄弟集是有限的,那么它就被称为局部有限或有限分支。

每对独特的兄弟姐妹是无可比拟在≤。这就是定义中使用无序字的原因。当所有兄弟集合都是单例时,即当所有节点的集合X完全有序(并因此有序排列)≤时,这样的术语可能会产生误导。在这种情况下,我们可能会谈论一个单分支树。

使用集包含

与每个部分有序集合一样,树结构(X,≤)可以用包含顺序表示- 通过 集合系统,其中≤与⊆重合,即诱导包含顺序。考虑一个结构(U,ℱ),使得U是非空集,并且ℱ是U的一组子集,使得满足以下条件:

∅ &NotElementℱ。(也就是说,(U,ℱ)是一个超图。)

ü ∈ℱ。

对于每一个X,ÿ从ℱ,   X ∩ ÿ ∈{∅,X,Y ^ }。(也就是说,ℱ是一个层流家庭。[10])

对于每一个X从ℱ,只有有限个 Ÿ从ℱ使得 X ⊆ ÿ。

则结构(ℱ,⊆)是一个无序树,其根等于ü。相反,如果(U,≤)是无序树,则ℱ是集合{↓ x | X ∈ ü } 所有的主理想的(Ú,≤) 然后一组系统(Û,ℱ)满足上述性质。

树作为层的系统集(从嵌套集模型复制)

树结构的集合系统视图提供默认语义模型 - 在大多数最常见的情况下,树数据结构表示包含层次结构。这也为订单方向提供了理由,其根位于顶部:根节点是比任何其他节点更大的容器。值得注意的例子:

文件系统的目录结构。目录包含其子目录。

DOM树。与DOM节点相对应的文档部分根据树顺序处于子部分关系。

面向对象编程中的单继承。类的实例也是超类的实例。

分层分类法,如杜威十进制分类,具有越来越具体的部分。

BSP树木,四叉树,八叉树,R

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值