【发布时间】:2014-01-27 22:57:09
【问题描述】:
我正在寻找使用邻接矩阵实现 BFS 遍历,并且有一个与查找矩阵中的相邻元素有关的问题。
无论如何,我是否能够获得给定节点的所有边,而不必遍历邻接矩阵中的整行?或者这是在备用矩阵上使用这种结构的固有缺点?
【问题讨论】:
-
请更具体。您是否为邻接矩阵提供了特定的表示形式,或者您是从头开始设计的?您是在寻找算法、数据结构还是两者兼而有之?
我正在寻找使用邻接矩阵实现 BFS 遍历,并且有一个与查找矩阵中的相邻元素有关的问题。
无论如何,我是否能够获得给定节点的所有边,而不必遍历邻接矩阵中的整行?或者这是在备用矩阵上使用这种结构的固有缺点?
【问题讨论】:
您的解释是正确的 - 使用邻接矩阵的主要缺点是,对于大多数应用程序,您必须遍历整个行,即使在处理稀疏图时,才能访问所有相邻节点。
如果您没有使用邻接矩阵的特殊原因,那么考虑使用邻接列表可能是一个不错的选择。
应该注意的是,没有什么能阻止您同时维护这两种数据结构;即使我没有看到很多有用的情况,您当然可以维护O(1)查询边是否存在的邻接矩阵,以及对离开给定节点的所有边进行线性查询的邻接列表(与这些边的数量成线性关系)。
根据您确切需要的信息,仅维护每个节点的度数(节点的边数)也可能会有所帮助 - 如果您实施邻接列表,这些数据“免费提供”,但您可能会发现毕竟你只需要学位。
【讨论】: