【算法】贪心算法简介

简介: 【算法】贪心算法简介

贪心算法概述

1.贪心算法概念

贪心算法是一种 “思想” ,即解决问题时从 “局部最优” 从而达到 “全局最优” 的效果。

  • ①把解决问题的过程分为若干步
  • ②解决每一步时候,都选择当前最优解(不关注全局)
  • ③可能会得到全局最优解

示例:

  • 例1:找零问题
    例题:有[20,10,5,1]四种面值的纸币,请用最小的张数来凑出46元。(用√标识)

  • 例2:最小路径和
    例题:有下面九宫格,求从[0,0]到[2,2]最小路径和。(下面绿色的线为贪心算法线)

  • 例3:背包问题
    例题:现有容量为8的背包,请按下面的v(体积)-w(价值)表用背包装下最大价值的货物。(三种贪心策略,按体积来贪心(绿色)、按价值来贪心(红色)、按性价比来贪心(紫色))

2.贪心算法特点

  • 贪心策略因题而异,变化多端。
  • 贪心策略需要证明其正确性
  • 贪心策略错误,举一反例,比如上面例二错误
  • 贪心策略正确,用数学方法进行证明
    上面三个例子中,只有例一是正确的,下面我们来证明其正确性:
    现假设最优解用到每种面额的张数分别是**[A,B,C,D]**
    如果B>=2,可用一张A(20元)进行替换,故最优解的B<=1,同理可知C<=1,D<=1
    结论:对于最优解而言,B <=1; C <= 1; D <= 4;
    我们继续假设我们贪心算法所得的结果分别用到每种面额的张树分别是**[a,b,c,d]**
    由贪心策略尽可能的取20张面额的纸币可知,a >= A
    同时,我们知道如果 a > A,那么对于最优解而言,这个少的20元纸币必须用后面的B、C、D来进行弥补(因为总钱数是一样的),但是(B + C + D)max = 10 + 5 + 4 = 19元。因而不能弥补少的20元,也就是说a 不可能大于 A,所以 a = A;
    同理,我们可以推得b = B;c = C;d = D, 即 a = A,b = B;c = C;d = D
    所以我们所用的贪心算法就是最优解

3.贪心算法学习

前期多借鉴别人的思路,为什么这么想可以不用太关注。

证明因人而异,可以根据需要来是否对证明过程进行掌握。


EOF

相关文章
|
8天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
25 2
|
1月前
|
算法 Java C++
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
|
5月前
|
算法 C++ Python
数据结构与算法===贪心算法
数据结构与算法===贪心算法
|
2月前
|
算法 Java 数据安全/隐私保护
国密加密算法简介
国密指国家密码局认定的国产密码算法,主要包括SM1、SM2、SM3、SM4等,并持续完善。SM1是对称加密算法,加密强度与AES相当,需加密芯片支持;SM2是非对称加密,基于ECC算法,签名和密钥生成速度优于RSA;SM3为杂凑算法,安全性高于MD5;SM4为对称加密算法,用于无线局域网标准。本文提供使用Java和SpringBoot实现SM2和SM4加密的示例代码及依赖配置。更多国密算法标准可参考国家密码局官网。
174 1
|
1月前
|
存储 算法 安全
ArrayList简介及使用全方位手把手教学(带源码),用ArrayList实现洗牌算法,3个人轮流拿牌(带全部源码)
文章全面介绍了Java中ArrayList的使用方法,包括其构造方法、常见操作、遍历方式、扩容机制,并展示了如何使用ArrayList实现洗牌算法的实例。
15 0
|
2月前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 秒懂 AI - 深度学习五大模型:RNN、CNN、Transformer、BERT、GPT 简介
**RNN**,1986年提出,用于序列数据,如语言模型和语音识别,但原始模型有梯度消失问题。**LSTM**和**GRU**通过门控解决了此问题。 **CNN**,1989年引入,擅长图像处理,卷积层和池化层提取特征,经典应用包括图像分类和物体检测,如LeNet-5。 **Transformer**,2017年由Google推出,自注意力机制实现并行计算,优化了NLP效率,如机器翻译。 **BERT**,2018年Google的双向预训练模型,通过掩码语言模型改进上下文理解,适用于问答和文本分类。
157 9
|
4月前
|
算法
Raid5数据恢复—Raid5算法简介&raid5磁盘阵列数据恢复案例
Raid5算法也被称为“异或运算”。异或是一个数学运算符,它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。异或的运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)。如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。 异或也叫半加运算,其运算法则相当于不带进位的二进制加法。二进制下用1表示真,0表示假。异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。 异或略称为XOR、EOR、EX-OR,程序中有三种演算子:XOR、xor、⊕。使用方法如下z = x ⊕ y z
Raid5数据恢复—Raid5算法简介&raid5磁盘阵列数据恢复案例
|
3月前
|
算法
【算法】贪心算法——柠檬水找零
【算法】贪心算法——柠檬水找零
|
3月前
|
算法
【算法】递归、搜索与回溯——简介
【算法】递归、搜索与回溯——简介