贪心算法与Dijkstra算法python实现

本文介绍了贪心算法的基本原理,包括最优子结构和贪心选择性质,并通过Dijkstra算法实例阐述了贪心策略在求解单源最短路径问题中的应用。算法的每个阶段都选择当前最优决策,虽然可能无法保证全局最优解,但能获得接近最优的解决方案。
摘要由CSDN通过智能技术生成

二、贪心算法

2.1 概述

  • 本质:从眼前某一初始解出发,在每一个阶段都做出当前最优的决策,即贪心策略,逐步逼近给定的目标,尽可能快地求出更好地解。也即以逐步的局部最优达到全局最优。
  • 推论:
    • 贪心算法在每阶段面临选择时,都做出对眼前来说最有利的选择,并不考虑该选择对将来是否有不良影响。
    • 算法不允许回溯,决策一旦做出不可改变。
    • 贪心策略决定了算法的性能与表现。
    • 算法具有不稳定性,不一定得到全局最优解,但也能得到最优解很好的近似解。因此,在贪心策略确定后应当提供严谨的数学证明,以证明其一定能得到问题的最优解。
    • 算法具有高效性,可以很快获得一个问题的解。

2.2 基本要素

2.2.1 最优子结构性质

指一个问题的最优解一定包含其子问题的最优解。换句话来说,也即一个问题能够分解成各个子问题来解决,通过各个子问题的最优解能够得到原问题的最优解,那么原问题的最优解一定包含各个子问题的最优解。

证明问题是否具有最优子结构性质的步骤如下:

  1. 设出问题的最优解;
  2. 给出“子问题的解一定是最优的”结论;
  3. 采用反证法证明Step-2中的结论。

2.2.2 贪心选择性质

指所求问题的整体最优解可以通过一系列局部最优的选择获得,即可通过逐步局部最优选择使最终的选择方案是全局最优的。其中每次所作的选择,可以依赖于之前的选择,但不依赖于将来的选择。

对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择能够最终导致问题的一个整体最优解。首先考查问题的一个整体最优解,并证明可修改这个最优解,使其以贪心选择开始。而且作了贪心选择后,原问题简化为一个规模更小的子问题,然后证明最优子结构性质即可。

2.3 实例

  • 单源最短路径问题(Dijkstra——迪杰斯特拉)。相关概念界定如下:
  1. 源点:出发点;
  2. S S S集合:已经确定到源点最短路径的点构成的集合。
  3. V − S V-S VS集合:尚未确定到源点最短路径的点构成的集合。
  4. 特殊路径:从源点出发,只经过 S S S中的点,到达 V − S V-S V
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值