1、分支限界法解决单源最短路径,1.分支限界法基本思想,2.问题描述,3.算法思路,分支限界法的基本思想,分支限界法以广度优先或以最小耗费优先的方式搜索解空间树。,在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。,此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。,给定带权有向图G =(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到所有其
2、它各顶点的最短路长度。这里路的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。,单源最短路径,S,T,a2,b3,k3,f9,e2,d7,c4,l5,h2,g2,n5,i5,m1,j3,o5,p2,u3,从s点出发到t点,如何找到最短路径 ?,单源最短路径,q,r2,字母旁边的数字为路长,解题思路: 优先队列式分支限界法按照优先队列中规定的优先级选取优先级最高的结点成为当前扩展结点。在本例中,优先级即为各节点的当前路长,当前路长小的节点优先,单源最短路径,剪枝条件: 在算法扩展过程中,一旦发现一个结点的路径 不小于当前找到的最短路径,则减去以该结点 为根的子树,s,h,f,g,d,e
3、,u,c,b,a,2,5,4,6,12,5,9,4,3,单源路径问题的解空间树 节点旁数字为当前路长,算法从源节点S开始S被扩展,3个子节点被插入堆中计算当前最短路径为2将当前路径最短的节点扩展,即走au,ae,ad计算当前最短路径为3,将其扩展,走bg,bf计算当前最短路径为4,由先进先出原则,走ch.,单源最短路径,s,q,h,f,g,d,e,u,c,b,a,l,m,k,2,5,4,6,12,5,9,4,3,10,6,7,5,当前最短路程为4,将其扩展即走aeq,aek;计算最短路程为5,注意:当前结点不小于已找到的最短路程,剪枝:不再扩展继续,最短路程为5,将其扩展,即bgm,bgl;计算最短路径为5.满足剪枝条件,剪枝。,单源最短路径,s,q,h,f,g,d,e,u,c,b,a,l,m,k,r,p,2,5,4,6,12,5,9,4,3,10,6,7,5,8,8,计算当前最短路程6满足剪枝条件,剪枝计算当前最短路程为6走bgmr,bgmp路径。当前最短路径为7,扩展得aeko.当前最短路径为8.算法结束,单源最短路径,12,总结: 分支限界法,通过目标函数和约束条件减少无效操作,尽早发现剪枝点。适用于解决满足约束条件的解中找出是目标函数值达到最大或最小的解。所以单源最短路径很适合用分支限界法解决,单源最短路径,Thank you,