算法设计与分析:贪心算法(2)- 最短路问题(DP到贪心的优化)

本文探讨了如何使用贪心算法优化最短路径问题,通过Bellman Ford算法的优化,避免冗余计算并仅考虑相邻最近点,展示了从动态规划到贪心算法的转变,强调了局部最优的思想。
摘要由CSDN通过智能技术生成

本文参考UCAS卜东波老师算法设计与分析课程撰写

前言

在前文:算法设计与分析:贪心算法 - 排课问题(DP与贪心的区别与应用)中,我们初步地了解了贪心算法与动态规划的区别,贪心解决了一个问题的简化版本,不必再大张旗鼓地使用动态规划。本文接着借由最短路径问题来讲述贪心算法的应用。

最短路径问题

问题描述与分析

  • 给定一个图 G = ⟨ V , E ⟩ G=\lang V,E\rang G=V,E,对于图中每条边 e = ⟨ i , j ⟩ e=\lang i,j\rang e=i,j都有一个距离 d i , j d_{i,j} di,j。一个起始点s与一个终点t,问从s到t的最短路径是多少?
    首先寻路问题显然是一个多步决策问题,先考虑用动态规划的方式解决,如果我们直接用 O P T ( i , j ) OPT(i,j) OPT(i,j)表示点i到点j的最短路径,这个要求太过严苛,因为转移方程无法与明确的 d ( u , v ) d(u,v) d(u,v)做关联。因此我们引入一个新的变量k,使得 O P T ( i , j ) OPT(i,j) OPT(i,j)变成 O P T ( i , j , k ) OPT(i,j,k) OPT(i,j,k)(从i到j经过最多k条边的最短路径),又由于起始点固定,我们只用考虑到达点即可,最终定义 O P T ( v , k ) OPT(v,k) OPT(v,k):从s到点v最多经过k条边的最短路径。由此我们可以得到状态转移方程如下:
    O P T ( v , k ) = min ⁡ { O P T ( v , k − 1 ) min ⁡ ⟨ u , v ⟩ ∈ E { O P T ( u , k − 1 ) + d u , v } OPT(v,k) = \min \begin {cases} OPT(v,k-1) \\ \min_{\lang u,v\rang \in E}\{OPT(u,k-1)+d_{u,v}\} \end{cases} OPT(v,k)=min{ OPT(v,k1)minu,vE{ OPT(u,k1)+du,v}</

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值