1 / 22

求两点之间的第 k 短路径

求两点之间的第 k 短路径. 陈皓. 应用. 长度之外额外 的 限制 模型估价 敏感性分析 ……. 传统方法. 启发式搜索( A *) 空间消耗太大!!! 速度太慢!!!. 新的算法. 路径如何表示? K 小生成树的表示方法 上一棵生成树 + 修改信息(插一条边,删一条边) 旧的路径 + 一条不在最短路树中的新边,以及一些关于最短路树边相关的调整信息. 最短路树. 最短路树 T 是图 G 的子集,是一棵根在单终点 t 的树,树上点到根的路径是原图中的一条最短路 例如,上右图是上左图的最短路树. 新的算法.

chipo
Download Presentation

求两点之间的第 k 短路径

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 求两点之间的第k短路径 陈皓

  2. 应用 • 长度之外额外的限制 • 模型估价 • 敏感性分析 • ……

  3. 传统方法 • 启发式搜索(A*) • 空间消耗太大!!! • 速度太慢!!!

  4. 新的算法 • 路径如何表示? • K小生成树的表示方法 • 上一棵生成树 + 修改信息(插一条边,删一条边) • 旧的路径 + 一条不在最短路树中的新边,以及一些关于最短路树边相关的调整信息

  5. 最短路树 • 最短路树T是图G的子集,是一棵根在单终点t的树,树上点到根的路径是原图中的一条最短路 • 例如,上右图是上左图的最短路树

  6. 新的算法 • 对于每一条边e,定义选择e的代价 • 其中l表示边权,d(head(e), t)是边的头到终点t的距离,d(tail(e), t)是边尾到终点t的距离 • 不难看出,这就是选择这一条边会增加的距离,路径p的长度就是最短路长度加上所有边代价的和

  7. 新的算法 • 例子

  8. 新的算法 • 定义集合sidetracks(p)表示路径p上所有不在最短路树上的边集 • 这样,路径p与sidetracks(p)是等价的 • 用lastsidestrack(p)表示最后一次加入的边,下一条边只在边尾在T上这条边的头与t之间的路径上的边里面选

  9. 堆? • 因为,这种表示方法有堆的性质 • 可惜的是,堆的叉数并没有限制,所以还需改进

  10. 新的算法 • 目标:对于每一个顶点v,构建堆,将所有的尾在v到t的路径上的边按排列 • ,尾在v点的边按排列,最小边记为outroot(v),限制根只有一个孩子 • ,将v到t的路径上的点w的outroot按排列

  11. 新的算法 • 堆的构建方法:将中的每个outroot(w)加上一个新的儿子,就是中剩余的部分,于是是一个三叉堆 • 与同时构造

  12. 一棵最短路树的一部分与

  13. 新的算法 • 构建一个新的图D(G),以及从v∈G到h(v)∈D(G)映射,满足以下性质: • D(G)有O(m + n log n)个顶点 • D(G)中的顶点对应图G-T中一条边 • D(G)每点出度至多为3 • D(G)中,由h(v)出发可达的点构成

  14. D(G)

  15. 新的算法 • 在D(G)的基础上,定义图P(G),构造方法如下: • 增加一个新点,根结点r,连一条初始边到h(s),边权为 • 对于原有的D(G)中的边(u,v),把边权设为,称作堆边 (注意u,v对应原图G-T的一条边) • 对P(G)中结点v,v对应原图中的边(u,w),则在P(G)中连边(v,h(w)),权值,称为叉边

  16. 新的算法 • 初始边:开始选择一条边 • 堆边:换成下一条可选择的边 • 叉边:选择一条新的边

  17. 新的算法 • 至此,我们只需对P(G)做广搜,从r开始第k短路径就是原图的第k短路 • P(G)的出度为4,是常数,每次只需用堆维护当前最小的路径,扩展新的路径,所以找到k短路的复杂度为O(k log k),算上求最短路以及构图的时间,总复杂度为O(m + n log n + k log k) • 若要求多终点的k短路,只需把原图反转,终点为s,构图方法与上述类似,复杂度O(m + n log n + k n log k)

  18. 改进时空性能 • 上述的算法的性能相比传统方法已经相当优秀 • 如果已经求出最短路,原图很稀疏,或者k很大,那么n log n和k log k的项就成为了瓶颈 • O(m + n + k)!!!

  19. 推荐习题 • SGU 314, Shortest Paths http://acm.sgu.ru/problem.php?contest=0&problem=314

  20. 参考资料 • [1] David Eppstein, Finding the kShortest Paths, 1997 • [2] 刘汝佳,黄亮,算法艺术与信息学竞赛,2003

  21. The End Thanks for listening

More Related