树一定满足一对多的关系吗?

2020-06-14 21:16:44 +08:00
 RingoTC

学数据结构经常会听到:线性结构就是一对一,半线性结构就是一对多,非线性结构就是多对多。

树一般被认为是典型的半线性结构。

那下面这个有向图是有向树吗?

2867 次点击
所在节点    程序员
13 条回复
kizunai
2020-06-14 21:30:05 +08:00
显然不是
这是一个 DAG 图
ipwx
2020-06-14 21:41:57 +08:00
1 、首先这句话,“线性结构就是一对一,半线性结构就是一对多,非线性结构就是多对多”,我从未在任何一本经典的数据结构和算法教材上看见过。我甚至从未见过线性结构、半线性、和非线性这种分类方法。如果你见过,请给我一个准确的数学定义。
2 、说到数学定义,树有很多数学定义方式。比如一个定义:有 N 个节点和 N-1 条边的有向连通图。你仔细揣摩一下这个定义,是不是会发现它没有歧义?它定义出来的图,一定是树;同时,树一定属于它定义出来的图。这就是正规教材会出现的定义。
3 、所以定义一个概念是不能有歧义的。你这种“线性结构”的概念,歧义太多,根本就是想怎么理解就怎么理解。你有这种困惑,恰恰是因为,它根本不是一个合格的概念。
ipwx
2020-06-14 21:44:35 +08:00
抱歉上面我说错了一点。

“有 N 个节点和 N-1 条边的有向连通图” => “有 N 个节点和 N-1 条边的连通图”

而且这个定义只能定义一棵无序树。你可以找任何一个结构能作为根的节点当做根节点,而不影响其拓扑结构。有序树不符合这个定义。
RingoTC
2020-06-14 21:57:02 +08:00
@ipwx
在邓俊辉的《数据结构》里,有这样的划分。
![Snipaste_2020-06-14_21-45-05.png]( https://wx1.sbimg.cn/2020/06/14/Snipaste_2020-06-14_21-45-05.png)

至于线性结构是一对一,半线性结构是一对多,非线性结构是多对多的说法。的确在专业的教科书上很少有这样写,不过我也找到一些资料里面是这样写的:

[![Snipaste_2020-06-14_21-54-17.png]( https://wx1.sbimg.cn/2020/06/14/Snipaste_2020-06-14_21-54-17.png)]( https://sbimg.cn/image/0gN1U)

这种知识也出现在面试题里。
我也赞同你说的需要一个明确的数学定义。没有定义谈划分,就会出现歧义。
agagega
2020-06-14 23:56:47 +08:00
数学上的严谨定义虽然晦涩不直观,但很准确。中学学物理的时候有些概念在一些书上就是用这类似是而非的概念表示的,其实可能适得其反。
xyjincan
2020-06-15 00:27:51 +08:00
树的每个节点最多只有一个入度
newtype0092
2020-06-15 00:37:50 +08:00
一片叶子只有一个梗连在枝上,你这个相当于一片叶子有两个梗分别连着两个树枝,不科学~
整棵树从根到叶子一定是不断发散分支的,这种结构叫树还是非常形象的。
lithbitren
2020-06-15 05:52:14 +08:00
说是一般认为也问题不大,就是做算法题的时候经常会碰见链树图互转的情况。
比如输出所有满二叉树这种题,其实可以通过共用子树大大减少建树的开销,实质结构就变成了多入多出的图结构。
也就是一般的结构体或对象定义出来的树,只要有两棵子树指向同一个节点,就不满足理论上所谓的树定义了,但算法题的操作里也不算罕见。
Cielsky
2020-06-15 06:59:51 +08:00
这是图,可以把树当成图的特殊形式
sivacohan
2020-06-15 10:25:38 +08:00
A polyforest (or directed forest or oriented forest) is a directed acyclic graph whose underlying undirected graph is a forest. In other words, if we replace its directed edges with undirected edges, we obtain an undirected graph that is acyclic.

所以这玩意是个森林吧。
RingoTC
2020-06-15 11:38:47 +08:00
@sivacohan 但我给的图是一个特殊的 polytree,连通的 polytree
RingoTC
2020-06-15 11:40:14 +08:00
@sivacohan 啊这,你这不是 polyforest 吗
sivacohan
2020-06-15 13:12:13 +08:00
@RingoTC 你是对的。
你给出的图按照定义来说是树。
我一直以为树必须有根,刚翻了定义才发现不是。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/681507

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX