【问题标题】:What sort of data structure can I use to deal in such a way我可以使用什么样的数据结构来处理这种方式
【发布时间】:2020-02-04 03:14:00
【问题描述】:

该示例被简化为一个玩具示例,但我将处理 1000 个节点。

我们有 5 个节点

t1
t2
a0
a1

t1 connects to a0 and a3
t2 connects to a0, a1, a2 and a3
a0 connects to a1
a1 connects to a0, t2

我的最终目标是制作一个程序,该程序将绘制节点之间的连接以及使用图形库的节点。

我可以使用什么样的数据结构。我的第一个想法是使用链表,但我认为这不适用于这种情况,因为该数据结构仅在每个节点之间使用一个连接。

【问题讨论】:

  • 听起来std::map<std::string, std:vector> 是一个不错的起点。您也可以将其实现为指针链接节点,其中每个节点都有一个 std::vector<Node*> 类型的东西。

标签: c++ arrays arraylist data-structures


【解决方案1】:

您的数据结构是图。根据连接数与节点数的比率,您应该选择一种能够为您提供足够的运行时效率并节省内存的表示:

  • 如果比率较低(大量节点的连接相对较少),则图是稀疏。表示稀疏图的一个很好的数据结构是adjacency list
  • 如果比率很高(很多节点,每个节点都连接到其他节点的四分之一),那么图是密集的。密集图的一个很好的表示是adjacency matrix

【讨论】:

  • 如果我将它实现为超图呢?这还能用同样的方法吗?
  • @user3371137 超图共享相同的边,因此它们的有效表示通常是二分图,其中顶点表示节点,顶点表示超边。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2012-12-19
相关资源
最近更新 更多