树结构的真实世界的例子

时间:2009-02-23 13:37:46

标签: tree binary-tree binary-search-tree

我正在寻找一些用于商业/自由软件项目(现代或旧版)的树结构示例。我可以在维基百科上看到示例,但我正在寻找更具体的示例以及如何使用它们。例如,数据库中的主键是(从我读过的)存储在BST结构中或BST的变体(随意纠正我)

我的问题不仅限于二进制搜索树(BST),它可以包括任何变体,如红黑,AVL等。

17 个答案:

答案 0 :(得分:31)

如果这些例子有点通用,即与图形相关而不一定与树有关,那可以吗?如果是,请继续阅读。

  • 毋庸置疑,大多数XML /标记解析器都使用树。例如,请参阅Apache Xerces。或者,Xalan XSLT解析器。感谢mathewsdave26提醒我!

  • PDF是基于树的格式。它有一个root节点后跟一个catalog节点(这些节点通常是相同的)后跟一个pages节点,该节点有几个子节点page。生产者/消费者经常使用平衡树实现将文档存储在内存中。

  • 计算机国际象棋游戏构建了一个巨大的树(训练),他们在运行时使用启发式方法进行修剪以达到最佳移动。

  • Flare是一个用AS编写的可视化库。您可能想要查看数据对象的映射方式。特别是flare.analytics包大量使用图形结构,跨越树等。

  • 社交网络是CS研究的当前流行语。不言而喻,连接/关系使用图表非常自然地建模。通常,树木用于表示/识别更有趣的现象。你如何回答“Harry和Sally有没有共同朋友?”这样的问题?

  • 一些非常成功的物理/游戏引擎构建树木以准确模拟人类运动。在这种情况下,树通常对应于一组动作;上下文将确定呈现特定响应的路径。

  • 基于决策树的学习实际上构成了数据挖掘研究的一个强大领域。存在许多着名的方法,例如在树上起作用的装袋,增强和修改。此类工作通常用于生成预测模型。

  • 生物信息学中的一个常见问题是搜索大型数据库以查找给定查询字符串的匹配项。尝试在那里很常见。

  • 相当多的成功(股票)交易者在日常交易中使用决策树 - 选择交易,退出交易。通常情况下,这些都没有在计算机程序中编纂,而是写在笔记本背面的某处。

DUPE。请参阅thisthis

答案 1 :(得分:11)

数据库索引B *树中的B代表Balanced,而不是Binary。树保持均匀的深度,以确保访问时间均匀。

答案 2 :(得分:7)

  • 您的文件系统是树结构。因此,请查看任何免费文件系统的源代码。

  • 您的编译器会从源代码生成AST作为中间阶段。因此,请查看任何免费编译器的源代码。

答案 3 :(得分:6)

数据库索引通常存储为B *树的变量,尽管它们的名称不是二叉树。

答案 4 :(得分:5)

Binary Trees已被用于旧3D游戏中的空间分区和隐藏表面移除,我相信在游戏Doom中使用了一个。

答案 5 :(得分:4)

  • 编写一个简单的递归下降解析器,让它生成一个解析树。

  • 制造过程中使用的物料清单结构(如汽车由子组件组成,递归地,直到螺母和螺栓)。

  • 符号表(在编译器中使用)。

  • 项目管理中使用的会计科目表。整个项目有子项目,可以收取费用。

  • 公司组织结构:部门,部门等

  • 文件目录。

  • 一个人的后代,一个人的祖先。

  • 任何Lisp s表达式,包括任何Lisp程序。

答案 6 :(得分:3)

软件中的自动完成功能(例如搜索引擎“建议”,IDE类型/符号完成,电子邮件和地址簿名称等)通常实现为Tries,即树结构。

答案 7 :(得分:1)

DNS查询..使用地图的任何内容都使用AVL

答案 8 :(得分:1)

System.Collections.Generic.SortedList<T>使用二叉搜索树作为底层实现。 System.Collections.GenericSortedDictionary<T>也是如此。使用SortedList&lt; T&gt;的任何代码或SortedDictionary&lt; T&gt;正在使用二叉搜索树。

答案 9 :(得分:1)

在我以前工作的路由器/交换机位置,我们使用了一堆树结构,对于软件路由表,我们使用了radix tree(对于IP路由表来说是非常常见的选择)。

我们的OSPF实现使用了red-black trees,我们的BGP实现使用了skiplists

从技术上讲,跳过列表不是树形结构,但实际上它们非常相似,而且非常酷。

我们肯定使用了heaps并且考虑过它,自从我在那里工作已经有一段时间了。

答案 10 :(得分:1)

C ++包含许多集合(set,multi_set,map,multi_map),它们通常被实现为红黑树,一种平衡树。

(C ++标准并未明确要求此实现,但这是满足复杂性要求的最简单设计。)

答案 11 :(得分:1)

查看任何Datawarehousing产品,您将看到存储和钻入树形尺寸的巧妙方法。您将获得位置(国家,地区,州,m县,镇等)和时间(年,月,日,小时)的树结构。这两个维度在许多领域都很常见,但许多其他现实世界的数据也适用于树。

例如在食品零售中,在树的根部你可以买到杂货,可以钻到乳制品,水果和蔬菜中。 veg等。遵循单线程你可以拥有。豆子罐头,在卡车装载的最顶层,然后你会到托盘,盒子,锡尺寸。所有不同的SKU(库存单位)对商店或公司内的某些人都很重要。然后是不同类型的豆类,不同的供应商,制造商 - 所有相同维度的树木例子。

所有不同的产品形成一棵巨大的树,具有不同的切片和分类方式。

答案 12 :(得分:0)

在我的项目中,一个用于调查/人口普查数据的编辑和估算系统,我们使用二元决策树来决定记录的哪些变量来估算或不归因。二元决策树允许我们有效地决定树应该和不应该采用的路径。

我认为这种方法(尽管可能不仅仅是二叉树)也用于人工智能应用程序

答案 13 :(得分:0)

我们使用树形结构来建模零件分类系统。部件分为具有父类等的“类”。顶级类驱动目录UI中的选项卡文本。类还用于应用定价规则,识别车辆上的“热点”,其中零件显示在“配置器”中等。我们使用Joe Celko的嵌套集在SQL中对树进行建模,并将其按需加载到内存中以获得更好的效果性能。我们最常见的查询是“谁是我的后代”,“这个类是我的祖先吗?”

非常方便

答案 14 :(得分:0)

ActionScript中实现了一个treap。来源:

treap是AS3Commons Collections framework的一部分。修改后的treap用于支持包含的SortedSet和SortedMap集合。

答案 15 :(得分:0)

一般对象的分类通常使用树来完成。通常情况下,图形比树更合适,但是树比图形提供了两大优势:

  • 它可以表示为(嵌套)列表。例如,在纸上显示一棵大树(包括标题,副标题,段落和嵌套列表)或在计算机屏幕上显示而不是图表要容易得多。
  • 您可以使用简单的路径字符串(或堆栈)指向树中的项目,例如“http / StackOverflow.com / Users / Dimitri C”,这在图形中更难实现。< / LI>

答案 16 :(得分:0)

把自己当作树的根,现在让你的父母成为树的孩子,父母的父母作为他们的树的孩子,这可以成为树的完整用例。

因此,实现家庭的完整层次结构要求你可以使用树来实现它。