使用图形和树木可以解决或更容易解决哪些问题?

时间:2008-08-06 00:56:06

标签: algorithm data-structures tree computer-science graph-theory

这两种数据结构可以解决哪些最常见的问题?

对我来说,对以下书籍提出建议会很好:

  • 实施结构
  • 实施并解释使用它们的算法的推理

10 个答案:

答案 0 :(得分:17)

当我读到这个问题时,我想到的第一件事是:什么类型的东西使用图形/树?然后我想回到如何使用它们。

例如,采用树的两种常见用法:

  • DOM
  • 文件系统

DOM和XML就此类似于树结构。
alt text

这也是有道理的。 因为需要如何安排这些数据才有意义。文件系统也是。在UNIX系统上有一个根节点,并在下面分支。当您安装新设备时,您将它附加到树上。

您还应该问自己:数据是否属于这种类型的结构?创建对问题有意义的数据结构,其余的将遵循。

至于容易,我认为那是相对的。你是否适合使用递归函数来遍历树/图?如果你需要平衡树怎么办?

考虑解决单词搜索难题的程序。您可以将单词搜索的所有字母映射到图形中,并检查周围的节点以查看该字符串是否与任何单词匹配。但是你不能用一个阵列做同样的事情吗?您真正需要做的就是移动索引以检查左侧和右侧的字母,并通过宽度来检查字母的上方和下方。用图表解决这个问题并不困难,但是如果你不习惯使用它们会产生很多额外的工作和困难 - 当然这不应该阻止你这样做,特别是如果你正在学习它们。

我希望这可以帮助你思考这些结构。至于图书推荐,我必须使用 Introduction to Algorithms

答案 1 :(得分:4)

电路图。

编译(有向无环图)

地图。非常紧凑的图表。

网络流量问题。

专家系统的决策(原文如此)

用于故障查找,过程改进,安全分析的鱼骨图。对于奖励积分,将您的错误恢复代码实现为 鱼骨图的对象。

答案 2 :(得分:3)

几乎每个问题都可以用图论重写。我不是在开玩笑,看看任何有关NP完全问题的书,有一些非常古怪的问题变成图论,因为我们有很好的工具来处理图形...

答案 3 :(得分:2)

The Algorithm Design Manual包含一些有趣的案例研究,可以创造性地使用图表。尽管它的名字,这本书很有可读性甚至有趣。

答案 4 :(得分:1)

我的大学有这样的课程:CSE 326。我不认为这本书太有用了,但这些项目很有趣,并且教你一些关于实现一些更简单结构的方法。

至于例子,用树解决的最常见问题之一(按人数使用)是手机文本输入的问题。您可以使用树(不一定是二进制)来表示可以从用户快速打入的任何给定数字列表中出现的可能单词的空间。

答案 5 :(得分:1)

Robert Sedgewick的

Algorithms for Java: Part 5是关于图算法和数据结构的。如果你想实现一些图形算法,这将是一本很好的第一本书。

答案 6 :(得分:1)

在游戏和多媒体应用程序中绘制图形的场景图大量使用树和图。节点表示要渲染的对象,转换,控件,组......

场景图通常具有多个图层和属性,这意味着您只能以指定的顺序(图层)绘制图形的某个节点(属性)。根据您拥有的场景图的类型,它可以有两个parralel结构:声明和实例化。个

答案 7 :(得分:1)

@DavidJoiner / all:

FWIW:Algorithm Design Manual的新版本现在可以在任何一天发布。

Skiena教授为本书开发的整个课程也可以在网上找到:

http://www.cs.sunysb.edu/~algorith/video-lectures/2007-1.html

答案 8 :(得分:1)

由于树的递归性,树在函数式编程语言中使用得更多。

此外,图形和树木是模拟大量AI问题的好方法。

答案 9 :(得分:1)

游戏通常使用图表来帮助在游戏世界中寻找路径。世界的图形表示可以包含广度优先搜索或A *等算法,以便在其中找到路径。

他们还经常使用树来代表世界上的实体。如果您有数千个实体并且需要在某个位置找到一个实体,则在列表中线性迭代可能效率低下,尤其是在您需要经常执行此操作时。因此,该区域可以细分为树,以便更快地搜索。正如可以使用二分搜索(并因此划分为二叉树)有效地搜索线性空间,可以将2D空间划分为quadtree和3D空间为octree