假设我有一个源节点 S ,目标节点 D 和一组 A 的中间节点 P1,P2,P3 ,... 在边加权无向图中。我想找到顶点 Pi∈A 最小化dist(S,Pi)+ dist(D,Pi) ?此外,从 S到D 的整体路径应该只包含集合A 中的一个节点。什么是有效的算法?我不想采用蛮力方法。
答案 0 :(得分:6)
蛮力是什么意思?
如果删除关于&#34的假设,则只有A"中的一个节点。你可以按照以下步骤进行:
复杂性:就A加上Dijkstra实现的复杂性而言是线性的(取决于所使用的堆结构)
根据您的假设,我认为您必须独立地从每个Pi进行最短路径搜索
现在复杂性成为最短路径算法(Dijkstra或其他)的复杂性的一倍
上述两种方法的结合将是创造一个理论"图形,只有路径通过A的一个点,所以从实际的角度来看,你会:
复杂性:就A加上Dijkstra实现的复杂性而言是线性的(取决于所使用的堆结构),因此它与Dijkstra的复杂性相同(它必须至少"读取"所有顶点,所以A的线性复杂度是无关紧要的。)