目录

1、贪心算法

2、贪心算法的证明方式

(1)替换法(反证法)

(2)数学归纳法(递推法)


1、贪心算法

  • 定义:对于解决问题的每一个步骤,总选择当前步骤的局部最优解,希望以此达到总体最优。
  • 性质:贪心算法与搜索、动态规划一脉相承,但贪心算法并不遍历所有状态空间,也不允许回溯,要求每个步骤必须具有无后效性。
  • 故:不是所有问题都能使用贪心算法求解,贪心算法也不一定可以找到整体最优解。贪心算法难点不在于问题求解,而在于对贪心策略正确性的证明。

2、贪心算法的证明方式

(1)替换法(反证法)

  • 先依靠贪心算法得出最优解,再证明:将任意步骤的决策替换为任意的其他选择,最后结果都不可能达到更优。

eg:背包负重问题

题目:给定数组 arr 表示 n 个物品各自的重量,背包负重上限为 N,要求在不超过负重上限的情况下,尽可能的多带物品。

解法:贪心算法,每次总拿取最轻物品放入背包

替换法证明:设 利用贪心算法得出的最优解为 [n1, n2, n3, ... , nx] ,现用 m 替换 n1(n1 已是“当前最轻”,故 m > n1),证明能否得到更优解 [m, n2, n3, ... , nx, ny] (比原最优解多放入一个物品 ny)

观察可知: “优解前 x 项之和“ 必定大于 “最优解 x 项之和” ,且优解还多了一项 ny 都没有超限,说明最优解加上 ny 也必定不会超限,最优解应为 [n1, n2, n3, ... , nx, ny] 与题设相悖,故反证错误,不存在这样的替换方法。即:替换最优解任意项后,都无法达到更优,得证。

  • 替换法实质上是在 尝试证明 “局部最优” 与 “整体最优” 的关联性,若一旦失去局部最优,也必将失去整体最优,则说明贪心策略正确可行。

(2)数学归纳法(递推法)

  • 原理:一旦我们证明了在某个起点值时命题成立,且证明出从一个值到下一个值的过程有效(即 n = m 到 n = m + 1),那么任意值都可以通过反复使用这个方法推导出来
  • 数学证明步骤:

step1:证明 当 n = 1 时,命题成立

step2:证明 如果在 n = m(m 为任意自然数)时命题成立,那么可以推导出 n = m + 1 时命题也成立

  • 在利用数学归纳法证明时,最重要的是选好命题,递推的过程就是步骤执行的过程

eg:背包负重问题

题目:给定数组 arr 表示 n 个物品各自的重量,背包负重上限为 N,要求在不超过负重上限的情况下,尽可能的多带物品。

解法:贪心算法,每次总拿取最轻物品放入背包

选择命题: “每次选择当前最轻的物品,能使背包余留空间更大”

        数学归纳法证明:显然

贪心算法的数学证明 (更新中)相关推荐

  1. 数据结构与算法-java笔记一 更新中

    数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...

  2. 有关树的常见算法汇总【持续更新中】

    关于数据结构中--树的算法汇总[持续更新中] 0.树的顺序和链式存储结构 [完成] 1.树的前序遍历(递归和非递归java实现) [完成] 2.树的中序遍历(递归和非递归java实现) [完成] 3. ...

  3. 数据结构与算法复习(持续更新中)

    目录 数组 为什么很多编程语言中数组都从0开始编号? 如何实现随机访问 数组和链表的区别 链表 栈 函数调用栈来保存临时变量,为什么函数调用要用"栈"来保存临时变量呢?用其他数据结 ...

  4. Dijkstra贪心算法的准确性证明

    简述一下Dijkstra算法 先举个例子来简述一下Dijkstra算法吧.如下图,从节点1出发,求到每个节点的最短路径 首先获取节点1到各个节点的距离,需要注意的是,我们给算法的输入数据是一个邻接矩阵 ...

  5. 专利进阶(二):专利撰写常用技术及算法汇总(持续更新中)

    文章目录 一.前言 二.常用技术及算法 2.1 区跨链技术 2.2 聚类算法 2.3 边缘算法 2.4 蚁群算法 2.4.1 路径构建 2.4.2 信息素更新 2.5 哈希算法 2.5.1 常见算法 ...

  6. 算法模板ACW(更新中)

    总目录: 基础算法 数据结构 搜索与图论 数学知识 动态规划 贪心 时空复杂度分析 基础算法 点我: link. 数据结构 点我: link. 搜索与图论 点我: link. 数学知识 点我: lin ...

  7. 408考研数据结构与算法之数组、链表、队列、栈知识点和算法详细教程(更新中)

    第一章:数据结构与算法概述 因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它. 数据结构是计算机软考.计算机等级考试等相关考试的必考内 ...

  8. 【算法系列之万字总结常用的查找算法,持续补充更新中】

  9. 分治算法,动态规划算法和贪心算法的区别和联系

    分治算法,动态规划算法和贪心算法的区别和联系 (一)分治算法 分治算法为什么叫分治算法? 分治这个名字可以分成两部: 第一部分是分,表示把一个原问题分解成很多个小问题,逐个解决; 第二部分是治, 表示 ...

  10. HDU6438 Buy and Resell 解题报告(一个有趣的贪心问题的严格证明)

    写在前面 此题是一个很容易想到的贪心题目,但是正确性的证明是非常复杂的.然而,目前网上所有题解并未给出本题贪心算法的任何正确性证明,全部仅停留在描述出一个贪心算法.本着对算法与计算机科学的热爱(逃), ...

最新文章

  1. centos查看历史指令记录_CentOS 系统通过 curlftpfs 挂载 FTP 服务器为本地磁盘
  2. 开发环境wamp3.06 + Zend studio 12 调试配置
  3. centos7 下通过nginx+uwsgi部署django应用
  4. 外观模式和代理模式的联系和区别_java23种设计模式-结构型模式之外观模式
  5. 计算机加入域 不能访问网络位置 解决办法
  6. [导入]FreeTextBox 1.6.3 中文版使用说明
  7. 由表单中onsubmit=return false;想到的
  8. web desktop在线演示
  9. Kotlin 1.2 新特性
  10. Java中httpClient中的设置超时时间
  11. Bootstrap3 行内文本样式
  12. 写入word_E016 如何把Word文字信息批量写入文本文件
  13. STC15单片机-数码管显示PCB板温度(TM1620驱动芯片使用介绍)
  14. 维纳滤波法matlab代码,完整的维纳滤波器Matlab源程序
  15. 安川ga700变频器故障码集_安川变频器故障代码
  16. 现货白银的最小交易单位
  17. mysql 日历表_如何创建mysql日历表
  18. Dubbo的Api+Provider+Customer示例(IDEA+Maven+Springboot+dubbo)
  19. 什么是催眠?人机融合智能可以催眠吗?
  20. 项目十大管理(四)成本管理

热门文章

  1. 切比雪夫不等式与马尔可夫不等式
  2. 阶段性总结 个人总结 (上)
  3. Hive中变量的使用
  4. 人物简介——奥古斯塔·德摩根
  5. Functions In Go
  6. 鼠标悬浮显示小手可抓取(CSS伪类)
  7. Profinet 协议
  8. (unsigned char) ~0 1
  9. 在企业中采用知识管理工具的好处
  10. 图片导入ppt后模糊_PPT另存为图片不清晰|为什么PPT导出图片不清晰