贪心算法的数学证明 (更新中)

2023-10-27

目录

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,要求在不超过负重上限的情况下,尽可能的多带物品。

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

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

        数学归纳法证明:显然

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 新书上市

    2020年12月30日晚上 曹则贤老师在中科院跨年科学晚会上带来了 广义相对论 主题演讲 并且在开头部分就甩出了一个相对论书单 都是在这个领域有过基础贡献的大师著作 其中的一本 广义相对论 格外清奇 它只有64页 曹老师对这本书也是赞不绝口
  • MarkDown创建表格

    凑微分方法 1 csc 2 xdx d cotx 2 secxtanxdx d secx 3 cscxcotxdx d cscx 4 dfrac 1 1 x 2 dx d arctanx d arccotx 5 dfrac 1 sqrt 1
  • el-table动态添加行,列。自定义输入表头,input hover 显示文字

    功能点 1 动态添加行 2 动态添加列 3 右键表头删除列 4 右键表体删除行 5 表格hover提示当前单元格文字 自动换行 6 表头文字自定义 7 表头 添加按钮固定 表体自适应滚动 效果图 代码 复制即可运行
  • web前端开发学习路径图

    第一阶段 WEB前端工程师课程 HTML语句 HTML页面结构 css语法 style属性 link和style标签 id属性 等HTML语句中的相关属性 通过Dreamweaver制作出跨越平台限制和跨越浏览器兼容性的页面 掌握Dream
  • 记录一次脱壳后修复apk

    前言 好不容易会脱壳 但是却仅仅只能得到dex文件 无法动态调试apk 这样还是不行 因此我们需要对源apk进行修复 准备 首先我这里是脱了一个爱加密的壳得到dump dex使用jadx gui可以正常打开 说明脱壳成功了 接下来就是将du
  • Python 日志 TimedRotatingFileHandler

    Python日志TimedRotatingFileHandler通常不是我们需求的 所以进行了一些重写 class MyTimedRotatingFileHandler TimedRotatingFileHandler 时间为切割点日志 d
  • TensorRT加速方法介绍(python pytorch模型)

    TensorRT的安装可见我的上一篇博客 Ubuntu配置TensorRT及验证 jiugeshao的专栏 CSDN博客博主的一些基本环境配置可见之前博客非虚拟机环境下Ubuntu配置 jiugeshao的专栏 CSDN博客第一步 准备安装
  • Java简易图书管理系统开发全过程 (2)

    今天我们继续来开发这个项目 Java简易图书管理系统开发全过程 2 代码层级规划 正式开干 代码层级规划 根据代码的功能 我们需要提前把代码的包等结构确定下来 由于这个项目是小型的 所以可以分为以下几部分 前端窗体 后端逻辑 全局变量存放类
  • 对雷达中相位补偿概念的一些理解

    以两个问题为例展开 分别是基于多普勒相位补偿的速度扩展方法 记为问题1 和DBF测角 记为问题2 两者本质上都是对相位进行补偿 为什么这么说呢 听我细细到来 如图 问题1的关键就是要去补偿掉TX2对应的接收天线RX5 RX8中的delta
  • window.showModalDialog以及window.open用法简介

    windows open 用法简介一 window open 支持环境 JavaScript1 0 JScript1 0 Nav2 IE3 Opera3 二 基本语法 window open pageURL name parameters
  • Mina基础(七):Mina整合Spring服务端、Spring boot 客户端

    Mina基础 一 基本结构分析 长短连接 IOService Mina基础 二 基础服务端 客户端搭建 Mina基础 三 IOFilter 自定义过滤器 日志过滤器 Mina基础 四 理解IoSession I O Processor Io
  • MATLAB中出现 索引超出矩阵维度,程序用matlab运行显示索引超出矩阵维度,请问怎么...

    公告 为响应国家净网行动 部分内容已经删除 感谢读者理解 话题 程序用matlab运行显示索引超出矩阵维度 请问怎么改 回答 用size函数可以求矩阵维数 用reshape可以改变数据维数 如 a 1 2 3 4 5 6 7 8 9 siz
  • 数据库模糊搜索时,关键字中有%号,怎么办?

    数据库模糊搜索时 关键字中有 号 怎么办 数据库模糊搜索时 都知道应该用通配符 号来模糊匹配 如 select from table where content like key 但当关键字key中也包含有 号时 应该怎么办 数据库中有关键
  • SpringBoot日志框架管理

    目录 一 SpringBoot日志框架的介绍 二 使用SpringBoot日志的好处 三 SpringBoot日志框架的使用 1 日志门面 日志的抽象层 2 日志实现 3 SpringBoot日志框架的引入 4 日志的格式 5 日志持久化
  • 生成项目结构图

    1 展示 D gitcode com spring pro test controller gt tree 文件夹 PATH 列表 卷序列号为 3289 54FC D settings src main java com cloud con
  • VScode在远程服务器进行python代码的调试【conda环境】

    conda环境 vscode连接远程环境 调试 vscode连接远程环境 其中vscode中需要安装扩展 remote ssh 装完扩展后本地多个图标 如下图所示 当然 初始状态不是这样 因为我已经配置好了哈 你需要点击 然后在框框中输入用
  • bootstrap-wizard插件

    bootstrap wizard的帮助文档 http vinceg github io twitter bootstrap wizard bootstrap wizard的GitHub地址 https github com gillumin
  • 一起学Redis(2)——链表、哈希表

    链表 废话不多说 今天继续学习Redis的基本数据结构 链表和哈希表 先看一个例子 以下展示的integers列表键包含了从1到1024共一千零二十四个整数 redis gt LLEN integers integer 1024 redis
  • 前端模糊匹配方式,前端正则模糊匹配

    前端的匹配方式有很多这里简单提供模糊匹配方式 使用 RegExp 函数 正则表达式来进行匹配 正则表达式 var list nai 43q 5xn var keyWord n var arr var reg new RegExp keyWo
  • 贪心算法的数学证明 (更新中)

    目录 1 贪心算法 2 贪心算法的证明方式 1 替换法 反证法 2 数学归纳法 递推法 1 贪心算法 定义 对于解决问题的每一个步骤 总选择当前步骤的局部最优解 希望以此达到总体最优 性质 贪心算法与搜索 动态规划一脉相承 但贪心算法并不遍