【问题标题】:What is the distinction between sparse and dense graphs?稀疏图和密集图有什么区别?
【发布时间】:2012-09-17 22:13:57
【问题描述】:

我读到用邻接表表示稀疏图和用邻接矩阵表示密集图是理想的。但我想了解稀疏图和密集图之间的主要区别。

【问题讨论】:

标签: data-structures graph graph-theory


【解决方案1】:

密集图是边数接近最大边数的图。 稀疏图是边数接近最小边数的图。 稀疏图可以是disconnected graph

【讨论】:

  • 我认为具有 n 个顶点的图如果具有 O(n) 或更少的边则被认为是稀疏的。
  • 相反,如果边数为 O(n^2),则具有 n 个顶点的图是稠密的
【解决方案2】:

来自Data Structures and Algorithms with Object-Oriented Design Patterns in C++ , p. 534, by Bruno P. Reiss

通俗地说,边相对较少的图是稀疏的,边多的图是密集的。

定义(稀疏图):稀疏图是一个图 G = (V, E),其中 |E| = O(|V|)。

定义(密集图) 密集图是一个图 G = (V, E),其中 |E| = Θ(|V|2).

【讨论】:

    【解决方案3】:

    图的主要积分特征是顶点数 V 和边数 E。这两者的关系决定了图是稀疏的还是密集的(wiki page here)。

    选择内存中图形表示背后的整个理论是关于确定最佳访问时间与内存占用的权衡,同时考虑主题领域和使用细节。

    通常你希望有 O(1) 的访问时间(从而将图形存储为密集邻接矩阵),除非你不能容忍内存占用,在这种情况下你选择最合适的稀疏矩阵表示(wiki page @ 987654322@).

    【讨论】:

      【解决方案4】:

      顾名思义,稀疏图是稀疏连接的(例如:树)。通常边的数量在 O(n) 中,其中 n 是顶点的数量。因此邻接表是首选,因为它们需要为每条边提供恒定的空间。

      密集图是密集连接的。这里的边数通常是 O(n^2)。因此邻接矩阵是首选。

      为了进行比较,我们假设图有 1000 个顶点。

      无论图是稠密还是稀疏,邻接矩阵都需要存储 1000^2 = 1,000,000 个值。

      如果图是最小连接的(即它是一棵树),则邻接表需要存储 2,997 个值。如果图是全连接的,则需要存储 3,000,000 个值。

      【讨论】:

      • 1000 个顶点的邻接表如何需要 2997 个值?你能详细说明一下吗?
      • @SuryaTejaVemparala 稀疏图在这里被认为是一棵树。将树视为 1-2-3-4- .... - 1000,对于从 2 到 999 的每个顶点,将有 2 个条目,一个用于前一个顶点,另一个用于下一个。第一个和最后一个将各有一个条目,如果通过 Hashmap 构造,则邻接列表中的所有键都有额外的空间。如果使用列表列表,我相信这可以减少到 1998 年。
      【解决方案5】:

      在数学中,稠密图是边数接近最大边数的图。相反,只有几条边的图是稀疏图。稀疏图和密集图之间的区别相当模糊,取决于上下文。

      【讨论】:

      • 稀疏图的几个例子是:交通和道路网络,其中交叉点是顶点,道路是边。对于这样的网络,道路的数量不会明显大于交叉口的数量(换句话说,E~=c * V,其中 c 在 2-3 的范围内)。虽然在许多情况下,现实世界的图是稀疏的,但可以创建高度密集的加权图,其边权重表示某种关系 - 例如,如果两个人同时访问同一家商店,则边权重很大,或者在同一家咖啡店喝咖啡。
      • 另一个例子可能是获取一个稀疏图的“子图”,它代表一个高度连接的人群。
      【解决方案6】:

      稀疏图 - 边缘相对较少的图(通常如果它的边缘

      【讨论】:

        猜你喜欢
        • 2012-06-17
        • 2016-08-16
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        相关资源
        最近更新 更多