【发布时间】:2021-02-11 08:52:02
【问题描述】:
您有 N 个节点,标记为 1…N (N
还给你一个矩阵 M x M,以确定不同 ID 的节点之间是否存在有向边。如果 ID 为 i 的节点有一条到 ID 为 j 的节点的有向边,则 M_ij = 'Y',否则为'N'。请注意,M_ij 可能不等于 M_ji,而 M_ii 可能 = 0。
如果两个节点之间有一条边,那么它们之间的有向边的权重就是它们的标签之间的差异。
例子:
有 5 个节点。
节点 1:ID 1
节点 2:ID 4
节点 3:ID 2
节点 4:ID 3
节点 5:ID 4
矩阵:
YNYN
NNNY
NYYN
NYNN
所以在这个矩阵中,我们知道 ID 1 的节点有指向 ID 1 和 ID 3 的节点的边。ID 2 的节点有指向 ID 4 的节点的有向边。ID 3 的节点有指向 ID 3 的节点的有向边ID 2 和 ID 3。ID 4 的节点有指向 ID 2 的节点。
答案 = 6。
节点 1 和 5 之间的最短路径是通过从节点 1 到节点 4 的有向边,权重为 4 - 1 = 3。请注意,这条边是可能的,因为节点 1 的 ID 为 1,而节点 4 的 ID 为ID 3,并且 ID 1 的节点具有指向 ID 3 的所有节点的有向边。接下来,您将使用从节点 4 到节点 3 的有向边,权重为 4 - 3 = 1;那么从节点 3 到节点 5 的有向边,权重为 5 - 3 = 2. 3 + 1 + 2 = 6,因此总最短路径为 6。
我的解决方案:
当我第一次阅读这个问题时,我认为 Dijkstra 的算法可以轻松解决它。但是,它的时间复杂度为 N^2logN,边数最多为 50000^2,太高了。如何解决密集图中的最短路径问题?有没有办法通过某种方式利用矩阵来优化 Dijkstra?
【问题讨论】:
-
所以
ID——尽管它的名字——不一定是唯一的?该属性的另一个名称将是合适的...... -
“我们知道 ID 1 的节点有指向 ID 1 和 ID 3 节点的边”:这个陈述可以更明确吗?这是否意味着 ID 为 1 的所有节点都指向 ID 为 1 的所有节点和 ID 为 3 的所有节点?或者这是否意味着 ID 为 1 的一些节点有指向 ID 为 1 的一些节点和 ID 为 3 的一些节点的边?
-
如果我正确理解了这个问题,那么更好的术语是
position1 到 N,group1 到 M。距离是positions之间的绝对差。该矩阵表示groups之间的边。问题中的路径使用positions1,4,3,5。行进的净距离是 5-1=4,但由于从位置 4 到 3 的回溯,增加了 2 的额外距离,使总路径长度为 6。换句话说,目标是最小化回溯。 IMO,Dijkstra 根本不会提供帮助。
标签: algorithm optimization graph graph-algorithm dijkstra