DAY34:贪心算法(一)贪心算法理论基础

2023-10-31

课程链接:贪心算法理论基础!_哔哩哔哩_bilibili

什么是贪心算法

贪心算法的本质就是找到每个阶段的局部最优,从而去推导全局最优

例如一堆不同面额的钞票,取10张,如何取能得到最多的钱?就是每次都取面额最大的钞票。此时面额最大的钞票就是局部最优。全局最优,就是取十次之后拿到了最多的钱。

再举一个例子,比如有一个背包,背包容量是n,最多只能放重量为n的物品。我们有非常多物品,每个物品都有其重量和价值,且每个物品重量与价值不同。

问,装满这个背包,能装的最大价值是多少?(也就是里面物品的最大价值是多少)

这个时候就要考虑如何在装满的同时,还能保证价值最大背包问题的策略就需要用动态规划来解决

贪心算法的本质,实际上就是通过局部最优全局最优

贪心算法的两个极端

一个是可以直接基于常识性的知识直接判断出来怎么做,思路比较简单;

另一个是完全想不出来,很难想到用贪心去做。

例如取钞票的例子,想要得到最多钞票,每次都取最大值就是常识问题。但是在常识性的问题里也需要方法论,这样遇到难一些的题目才能去思考局部最优这个问题。

如何验证可不可以用贪心算法呢?

刷题或者面试的时候验证是否可以用贪心算法,最好用的策略就是举反例!手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心

面试中基本不会让面试者现场证明贪心的合理性,贪心也不需要做数学推导,代码写出来跑过测试用例即可,或者自己能自圆其说理由就行了

真正需要数学推导的情况:类似环形链表

那么刷题的时候什么时候真的需要数学推导呢?

例如这道题目:链表:环找到了,那入口呢? (opens new window),这道题不用数学推导一下,就找不出环的起始位置,想试一下就不知道怎么试,这种题目确实需要数学简单推导一下。

贪心的套路

实际上贪心是没有套路的,可以放弃想套路和框架这件事情。

很多比较难的贪心算法题目,属于做过了才能会,没做过没接触不可能做出来的类型。

贪心的一个重要的点,实际上就是要想清楚每个阶段的局部最优解是什么!然后局部最优能不能推出全局最优。

做题/面试的时候,只要想清楚 局部最优 是什么,解释清楚:1.这种局部最优能够推导出全局最优,2.举不出来明显的反例。其实就够了

数学证明是没有必要的,没有必要证明这道题用反证法or数学归纳法为什么一定要用贪心。因为每道题目的反证法都是不一样的,用反证法无法总结套路。

贪心算法概括一下就是常识性推导,局部最优是什么→能否推出全局最优→举反例的思考过程。

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

DAY34:贪心算法(一)贪心算法理论基础 的相关文章

随机推荐

  • 财务风险管理的内容

    财务风险管理的内容 一 筹资风险管理 筹资风险来源于两个方面 一是偿债风险 由于借入资金严格规定了借款方式 还款期限和还款金额 如果企业负债较多 而经营管理和现金管理不善 可能导致企业不能按期还本付息 就会产生偿债风险 偿债风险如不能通过财
  • nginx:accept() failed (24: Too many open files)解决方法

    有一台服务器访问量非常高 使用的是nginx 错误日志不停报以下错误 2010 05 26 08 53 49 alert 13576 0 accept failed 24 Too many open files 2010 05 26 08
  • 【R语言】期末大作业

    头部 title LZW HR dashboard report output flexdashboard flex dashboard orientation columns vertical layout fill source cod
  • Ant Design Cascader 交互场景

    何时使用 需要从一组相关联的数据集合进行选择 例如省市区 公司层级 事物分类等 从一个较大的数据集合中进行选择时 用多级分类进行分隔 方便选择 比起 Select 组件 可以在同一个浮层中完成选择 有较好的体验 业务场景 提交选择器子选项
  • C++面试题(四)——智能指针的原理和实现

    C 面试题 四 智能指针的原理和实现 tanglu2004 http blog csdn net worldwindjp C 面试题 一 二 和 三 都搞定的话 恭喜你来到这里 这基本就是c 面试题的最后一波了 1 你知道智能指针吗 智能指
  • Commit Lint 代码提交规范

    Commit Lint 代码提交规范 前端后端都可以这样配置的 install commitlint npm install save dev commitlint config conventional commitlint cli In
  • 【待完成】从StrongPity一联网组件到APT的溯源与追踪-中-从单一样本到历史样本和初始载荷

    从单一样本追踪溯源APT历史样本和初始载荷 基于PE结构寻找同源样本 Icon图标Hash ImpHash和version info 基于组件找初始载荷 通过初始载荷扩线 基于PE结构寻找同源样本 Icon图标Hash 通过VT搜索该PE文
  • Python爬虫案例解析:五个实用案例及代码示例(学习爬虫看这一篇文章就够了)

    导言 Python爬虫是一种强大的工具 可以帮助我们从网页中抓取数据 并进行各种处理和分析 在本篇博客中 我们将介绍五个实用的Python爬虫案例 并提供相应的代码示例和解析 通过这些案例 读者可以了解如何应用Python爬虫来解决不同的数
  • L-shape 方法

    L shape 方法是求解两阶段随机规划的一种常用方法 基本思想是利用切平面将第二阶段的反馈函数线性化 在构造切平面条件时有点类似 bender s 方法 注 这个图形中黑实线 Q x mathcal Q x Q x 就是下面模型中的
  • 【已解决】ModuleNotFoundError: No module named ‘distutils.util‘

    系统从Ubuntu18 04升级到20 04 内核也变动了很多次 之前运行在python3 6正常的代码突然报错 ModuleNotFoundError No module named distutils util 网上的解决方法 sudo
  • 字节跳动技术团队年度 TOP10 技术干货,陪你度过不平凡的 2020

    2020 注定是不平凡的一年 在这特殊的一年里 字节跳动技术团队依旧在技术人身边 分享字节跳动的技术实践 本年度字节跳动技术团队共发布了50篇技术干货 其中许多都受到读者的喜爱 值此元旦佳节 我们精选出了其中最受大家欢迎的10 篇文章 供大
  • r语言向量代码如何创建函数c,如何使用R中的rep函数生成的向量创建矩阵?

    仅当我们传递偶数个元素时 才能生成矩阵 如果要使用由rep函数生成的向量创建矩阵 则该向量的长度必须可除以2 例如 如果我们有一个由rep函数创建的向量x 其长度为20 则矩阵说M可以使用matrix x ncol 2 构造使用该向量的10
  • 实验9 I/O流(P293)

    实验目的和要求 1 掌握格式化的输入输出方法 2 熟悉系统提供的输入操作函数 3 掌握磁盘文件的输入输出方法 实验内容 1 程序sy9 1 cpp用以打印表中的数据 但程序中存在逻辑错误 上机调试后写出正确的代码 原程序如下 sy9 1 c
  • 使用javascript写一个CRC16(CCITT)校验

    CRC16 CCITT 校验是一种用于数据传输的常用校验方法 在 JavaScript 中 我们可以使用以下代码实现这种校验 function crc16 data var crc 0xFFFF var polynomial 0x1021
  • 如何分析AWR报告

    AWR 存储位置 SYSAUX表空间 详细信息视图dba hist snapshot 存储策略 60分钟一个 存七天 用途 AWR并不像其他V 视图或者表一样诊断实时问题 只是用来诊断历史性能问题 比如数据库响应慢 大量等待事件 慢SQL
  • 永洪BI助力华海药业数字化转型,挖掘药企发展新优势

    医药制造业是我国国民经济的重要组成部分 在整个消费市场中有着举足轻重的地位 对于生物医药企业来讲 只有合规运营 降本增效 才能保持长期可持续发展 这种情况下 数字化转型将成为生物医药企业的必然选择 也是我国药企向创新型技术型转型升级 提升自
  • Unity3d

    环境配置及Vuforia的使用 vuforia官网 https developer vuforia com 环境配置 vuforia内的SDK支持的Unity版本现为2018 4 所以需要下载Unity2018 4版本 笔者下载的是2018
  • Matlab如何从dat或者txt文件读入数据

    Matlab中可以使用命令 load data dat 或者 load data txt 或者 data in textread data txt data in textread data dat 以上两个命令 只适用于纯数据 且只有一列
  • layui的自定义page

    一 前端页面使用laypage div align center style margin top 20px div let totalCount 0 getPageData 1 6 function getPageData page li
  • DAY34:贪心算法(一)贪心算法理论基础

    文章目录 什么是贪心算法 贪心算法的两个极端 真正需要数学推导的情况 类似环形链表 贪心的套路 课程链接 贪心算法理论基础 哔哩哔哩 bilibili 什么是贪心算法 贪心算法的本质就是找到每个阶段的局部最优 从而去推导全局最优 例如一堆不