在加权图中是否允许零作为边的权重?


60

我正在尝试编写一个生成随机图的脚本,我需要知道加权图中的边是否可以具有0值。

实际上,可以将0用作边的权重是有意义的,但是最近几天我一直在处理图形,但从未见过该示例。

在此处输入图片说明


28
如果“允许”为负值,那么为什么不为零?:)
Derek朕会功夫2016年

5
举一个简单的例子,如果正权重代表从一个节点到另一个节点的净燃料消耗,那么负权重可以代表净加油。零加权边缘是通过加油准确补偿消耗的燃料的地方。
JW 2016年

1
@DavidRicherby我相信这里的真正问题是,例如“算法X是否在权重为零的边缘的情况下正确”。否则,背景是什么?答案可以是“是”或“否”,具体取决于细节。诸如“数组是否可以包含零”之类的问题同样有意义。
Juho

1
@Juho:哦,很清楚。这就像询问数字是否可以为负数。在您看来,这显然取决于上下文,但是对于人们来说,除非出现负数,否则肯定并不明显。甚至零也不是显而易见的。
Mehrdad

1
根据您要执行的操作,您的权重甚至可能不是实数。例如,如果您的图形表示一个交流电路,则您的权重可能是相量,而这些则是复数。
user2357112 '16

Answers:


165

允许?没有中央图管理来决定您可以做什么和不能做什么。只要您清楚定义的含义,就可以以任何方便的方式定义对象。如果零加权边缘对您有用,请使用它们;否则,请使用它们。只要确保您的读者知道那就是您在做什么。

您通常看不到零权重边缘的原因是,在大多数情况下,权重为零的边缘与没有边缘的情况完全相同。例如,如果您的图表表示国家和国家之间的贸易额,那么权重为零的边缘将意味着无贸易,这与根本没有边缘相同。如果您的图形表示距离,则零权重的边将对应于彼此距离为零的两个位置,这意味着它们实际上是同一位置,因此都应由相同的顶点表示。但是,在其他情况下,零权重边缘可能很有意义。例如,如果您的图形表示道路网络,而边权重表示交通量,则没有人使用的道路(零权重边)和根本没有道路(无边)之间会有很大的差异。


1
值得注意的是,许多图形算法都明确指定它们是否适用于负负数的图形。我认为这澄清了根据情况,甚至允许负权重。
Mooing Duck

6
@MooingDuck我认为问题的关键在于,尽管算法确实确实会说出它们是否适用于负权重,但很少提及零权重。负权数通常比零少得多,因此,在这种特定情况下,我不确定是否需要提及它们。
David Richerby '16

13

这取决于上下文。通常,可以允许零甚至负权重的边。在某些特定情况下,可能要求边缘权重为非负值或严格为正(例如,Dijkstra算法要求权重为非负值)。


有特定类型的图禁止零吗?并允许使用负值或正值?
Taxellool '16

9
“非零边缘加权图”。
Tom van der Zanden

10
@Taxellool数学对象不是一成不变的。没有允许使用的具有固定名称的数学对象的固定列表。
David Richerby '16

取决于您使用哪种算法。贝尔曼·福特(Bellman-Ford)接受零,而在迪克斯特拉(Dijkstra),它们被消除了
Manuel Azar

5

正如其他答案所指出的那样,您完全可以自由考虑(或从考虑中排除)具有零权重边缘的加权图。

就是说,以我的经验来看,大多数加权图应用中的惯常惯例是在零权重边缘与不存在边缘之间不做任何区分。原因之一是,加权图通常显示为多图的概括,而后者又是简单图的概括。

具体来说,多图是一个图(不同于简单图),它允许同一对节点之间有多个边。而在简单图中,任何一对节点始终通过0或1条边连接,而在多图中,一对节点可以通过0、1、2、3或更多(但始终为非负整数)连接。 )边缘。

对多图进行泛化以允许一对节点之间的边缘数量不多,然后自然会导致人们考虑加权图,并且也可以使处理任意多图的许多算法都可以在这种加权图上工作。但是对于这种算法,边缘的“权重”实际上表示其多样性。因此,在给出这种解释的情况下,一对节点之间的“无边缘”和“ 0边缘”之间就没有有意义的区别:两者的含义完全相同。

当然,根据定义,“加权图”实际上只是一个与每个边相关联的数字的图,并且完全有可能将权重解释为多重性以外的其他情况,在这种情况下,无边和零权重之间的区别优势确实是有意义的。但是,尝试将标准的多图算法应用于此类“奇异加权图”,不太可能产生对于边缘权重的替代(非多重性)解释有意义的结果。


6
加权图如何“典型地”显示在很大程度上取决于您的字段。当我将道路网络建模为图形以查找最短路径时,权重代表距离,我不是从交叉口之间的多条道路开始,而是引入分数道路。
adrianN

3
@adrianN尽管在像这样的图中,没有边对应于一个无限的关联值,而不是零。
CodesInChaos

0

想象一下英国剑桥的道路系统图,这些注释在骑自行车的人和汽车驾驶员之间共享,大多数情况也是如此。这样做大大降低了维护数据的成本。

现在,如果我们将边缘权重定义为以秒为单位的行驶时间,那么干净的每个边缘将具有两个权重,一个用于汽车,另一个用于自行车。一些重量将是无限的,因为不允许单车通行。

现在考虑两个彼此非常靠近的路口,它们如此靠近,仅被一些阻止汽车驾驶员的路口锯齿。(例如,在十字路口,汽车只能向左转,但骑自行车的人可以向任何方向行驶。)然后,我们得到了汽车驾驶员无限重的一些边缘,而骑自行车者的重量为0。

(很明显,在制定最佳路线之前,可以对图表进行预处理,以创建一个更简单的图表来规划骑自行车的人。)


我看不出这是如何解决这个问题的。该问题询问权重为零的边。在您的示例中(顺便说一句,对于不熟悉Cambridge的人来说可能没有多大意义),每个边缘已经具有两个权重。现在,就可以根据需要定义加权图了,这很好,但是似乎并没有解决所问的问题。而且,您描述的所有边缘对于骑自行车的人来说似乎至少具有很小的重量:即使移动很短的距离也需要不零的时间。
David Richerby '16

@DavidRicherby,仅假设不记录少于1秒的时间。
伊恩·林格罗斯

0

听起来您好像正在使用权重来尝试并代表图表的两个截然不同的方面。第一个是图形是否实际上具有可表示(绘制)的边缘,第二个是图形的实际权重。

如您所知,如果您使用“非零”作为边缘存在的指示符(需要绘制或列出),而现在却发现了一种情况,则会陷入混乱的局面零权重归类为有效。

本质上,您将需要另一种表示边缘存在的方法(假设您确实需要该边缘,并且不能简单地创建N ^ 2的权重数组,但是随后您陷入了需要决定对循环进行处理的陷阱后边缘...)


我不确定这是否能真正回答问题。问题在于图形是否可能具有零权重的边。您的答案主要是关于如何为权重为零的边的图实现数据结构。
David Richerby '16

@DavidRicherby,关闭;(我的回答)更多地是关于这个问题为何以及如何(或可能已经)形成的-XYProplem问题。通常,首先能够合理地解释为什么它是一个问题,这可以极大地帮助您看到解决方案是正确的答案,而不仅仅是一些“忽悠”的原因
Philip Oakley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.