自然密图的例子有哪些?

6

图表对于建模现实世界的现象和关系非常有用。

广义上,图数据结构和算法被分为两类:

然而,在我能想到的每种情况下,现实世界的图都是稀疏的。例如:

  1. Web网络形成稀疏图(每个站点链接到少数其他站点)
  2. 社交网络形成稀疏图(每个人认识少数其他人)
  3. 电气网络形成稀疏图(大多数电路元件只影响附近的少数元件)
  4. 道路网络形成稀疏图(每条道路链接到少数其他道路)

(请注意,“少数”是相对于总站点/人员/元素/道路等数量而言的。)

然而,我从未发现过需要使用算法和数据结构来处理密集图的用例。
我记得遇到的每个图都是稀疏的。

我需要使用密集图算法的什么样的真实世界图形?

请注意:是的,我知道一个小团体中每个人都互相认识会形成密集图,但这不是我所问的情况,因为:

  1. 社交网络软件永远不只是为了少数人编写而成。
  2. 任何算法在处理小数据时都能够很好地工作;没有必要使用密集图算法。

这意味着我也不需要像“稀疏图的补图”这样愚蠢的例子。
是的,它们是密集的,但除非你能举出一个实际感兴趣并且不能用原始稀疏图合理解决的问题的例子,否则那不会回答我的问题。


1
大脑由多个分离的区域组成。其中一些区域物理上相连,而另一些则没有。这个网络被称为连接组。它是一个密集的图(明显超过50%),但不是完全的。 - Szabolcs
3个回答

1
稀疏图的补图是密集图(想象一下一个网页没有链接到的所有站点)。这是一个开始。
脑海中...
- 小型社交网络(例如,俱乐部里的人可能与俱乐部中的大多数其他人是Facebook好友) - 图的传递闭包,或至少部分传递闭包(例如,朋友的朋友) - 编写非常糟糕/紧密耦合的代码(想象一个有向图,其中类A指向类B,如果A引用B;也许作为成员,方法的返回值等) - 更一般地说,如果要得到更密集的图,请尝试放宽某些旅行限制。

我认为你微妙地错过了问题的要点。我当然可以想出稠密图的例子,并描述它们在现实世界中的相似之处;这不是问题所在。问题在于,我在实践中永远不会真正使用稠密图算法来处理那些图形,因为它们不是现实世界中感兴趣的问题。(或者,这些问题本身已经足够小,任何方法都适用于它们,就像你第一个例子中的情况一样。) - user541686

0

当图变得越来越密集时,它就越接近于完全图。带有加权边的完全图通常更容易表示和思考,只需将其表示为一个方阵,可能会散布一些无限或负无穷大来表示缺失的“边”。或者它可能接近于完全二分图,这也可以表示为一个矩阵(只是使用两个轴上不同的标签集的矩阵)。例如,Assignment Problem通常被表示为一个关于矩阵的问题,而不是关于密集的边权重二分图的问题。

我认为使用密集图算法的一个原因是保证在密集图上具有良好的最坏情况行为。

此外,还有一些与图的补集相关的问题,即每对顶点之间都存在一条边,当且仅当它们在原始图中没有边相连。例如,如果您正在寻找包含超过30%所有可能边的图中的最大团(这里只是猜测),并且您认为这个团很大,那么最好创建补图,然后寻找其最小顶点覆盖,因为在补图中这样一个顶点覆盖的补集将是原始图中的一个团。虽然两个问题都是NP难问题,但是当存在一个小的覆盖时,最小顶点覆盖要快得多,对于大小为k的覆盖(对应于大小为n-k的团),其时间复杂度为O(1.2378^k*n^O(1)),而最大团的时间复杂度为O(1.1888^n)。

你的回答中包含了一些不错的信息,但我不确定它是否真正回答了我的问题。例如,为什么我要在一个稀疏图的补图上寻找团呢?这在物理上可能有什么有趣的表示呢?我可以很容易地举出一些例子,但它们只是一些随机的数学问题,并没有代表任何实际应用中的图形。 - user541686
就像我之前所说的,我认为密集图上的问题通常被表述为矩阵问题;它们是同构的。因此,我认为问为什么自然界中似乎没有密集图问题就像问为什么16岁以下没有成年人一样:那是因为我们称呼这些人为其他名称;) 另一种表达方式是:针对密集图的算法实际上是针对矩阵的算法。 - j_random_hacker
我不确定我能接受这个观点。你真的认为Floyd-Warshall算法是一个矩阵算法吗?我总是从图的角度来思考它... - user541686
我也是这样认为的,因为它被呈现出来了。至于为什么,我猜算法通常会被表述为密集图算法,而不是矩阵算法,当它们解决稠密版本的问题时,这个问题本身已经可以作为“自然”的稀疏问题。但实际上,密集加权图和矩阵之间并没有根本的数学区别。 - j_random_hacker
是的,从数学上讲并没有区别,但是...我觉得我“看到它就知道它”,这就是所谓的直觉。例如,PageRank被呈现为一个图问题,但是我本能地将算法(基本上是特征值分解)视为矩阵算法,而不是图算法... - user541686
让矩阵/图区分更加严谨的一种方法可能是确定在同一对顶点之间存在多个边是否有意义。矩阵基本上不允许出现这种情况,因此如果您有一个“矩阵算法”,它将无法处理此类图问题(例如,在道路网络中可能会发生这种情况,但在社交网络中不会)。但是,“图算法”可能不会关心这一点,并且将像往常一样工作。 - user541686

0

我能想到的一个例子是加密货币,其中每种货币都可以转换为其他任何一种货币。为了跟踪市场波动时的所有汇率,您需要使用密集图表示和算法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接