贪心算法(Greedy algorithm),又称贪婪算法。是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而使得问题得到全局最优解。

贪心的算法的设计就是要遵循某种规则,不断地选取当前最优解的算法设计方法。这节实验将会通过多个问题的来讲解贪心算法。

贪心算法基本概念

贪心算法与枚举法的不同之处在于每个子问题都选择最优的情况,然后向下继续进行,且不能回溯,枚举法是将所有情况都考虑然后选出最优的情况。

贪心算法,在对问题求解时,不从整体考虑,而是采用一叶障目的选择方式,只选择某种意义上的局部最优解。并且,贪心算法是没有固定的模板可以遵循的,每个题目都有不同的贪心策略,所以算法设计的关键就是贪心策略的选择。

贪心算法有一个必须要注意的事情。贪心算法对于问题的要求是,所有的选择必须是无后效性的,即当前的选择,不能影响后续选择对于结果的影响

适用范围

符合贪心策略:

所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。

所谓的贪心选择性质就是,该问题的每一步选择都在选择最优的情况下能够导致最终问题的答案也是最优。

或者说是无后效性,如果该问题的每一步选择都对后续的选择没有影响,就可以是应用贪心算法。

贪心算法的设计步骤

按照定义设计:

  1. 证明原问题的最优解之一可以由贪心选择得到。

  2. 将最优化问题转化为这样一个问题,即先做出选择,再解决剩下的一个子问题。

  3. 对每一子问题一一求解,得到子问题的局部最优解;

  4. 把子问题的解局部最优解合成原来解问题的一个解

实战演练

找零钱问题

题目描述

蓝桥商店的老板需要找零 n元钱。

钱币的面额有:100 元、50 元、20 元、5 元、1元,问如何找零使得所需钱币的数量最少?

注意:n可能为 0,也能为几百元

输入描述

在第一行给出测试例个数 NN,代表需要找零的钱数。

输出描述

输出共有 5 行,每一行输出数据输出找零的金额与数量,详情看样例。

示例

输入

365

输出

100:3

50:1

20:0

5:3

1:0

代码实现:

package easy;import java.util.Scanner;public class 找零问题贪心 {static int[] arr = {100,50,20,5,1}; //用来存纸币面额static int[] num = new int[5]; //每种纸币的数量public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();f(n);for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]+":"+num[i]);}}static void f(int n) {//遍历arr数组for (int i = 0; i < arr.length; i++) {//  求出每类纸币需要多少张num[i] = n / arr[i];n = n % arr[i];}}
}

贪心算法(java实现)相关推荐

  1. 贪心算法(Java版本)

    一.贪心算法 1.算法描述 贪心算法(Greedy algorithm),又叫做贪婪算法. 在对问题求解时,不从整体考虑,而是从问题的某一个初始解出发,每一步选择中都采取在当前状态下最好或最优的选择( ...

  2. 最少圆覆盖通信覆盖问题-算法分析设计-贪心算法-java实现

    问题描述 假设海岸线是一条无限延伸的直线,陆地在海岸线的一侧,海洋在另外一侧.每个小岛相当于海洋侧的一个点.坐落在海岸线上的基站只能覆盖半径为d的范围.应用直角坐标系,将海岸线作为x轴,设海洋侧在x轴 ...

  3. Java基于优先队列的贪心算法,java

    关于这篇博客 这篇博客是在我读<你不知道的JavaScript-上卷>的时候,遇到的我觉得需要记录下来的知识. 刚好又能够配合之前我写的这篇执行上下文与执行上下文栈博客中关于变量提升与函数 ...

  4. 贪心算法(Java)

    贪心算法 文章目录 贪心算法 0.写在前面 1.贪心算法的基本要素 1.1 贪心选择性质 1.2 最优子结构性质 1.3 贪心算法与动态规划算法的差异 2.贪心算法的特点 3.贪心法的正确性证明 4. ...

  5. 汽车加油问题 贪心算法 Java(详细注释)

    目录 一.问题描述 二.分析过程 三.参考代码及运行结果 一.问题描述 二.分析过程 i :第i个加油站 i = 0:出发地 i = k:目的地(共 k+1 个站,由问题知,k = 5) x[i] : ...

  6. java贪心,java实现贪心算法

    并证明了贪心算法解决此问题的有效性,且进行了实例验证,并进 行了复杂度分析,此算法是解决资源组合规划问题较好的方法. 关键词:贪心算法;java 程序;复杂度分析;...... 数据结构与算法 实验名 ...

  7. Java蓝桥杯——贪心算法

    贪心算法 贪心算法:只顾眼前的苟且. 即在对问题求解时,总是做出在当前看来是最好的选择 如买苹果,专挑最大的买. 最优装载问题--加勒比海盗 货物重量:Wi={4,10,7,11,3,5,14,2} ...

  8. 用java单源最短路径问题_单源最短路径-贪心算法

    单源最短路径,关于这个问题的贪心算有点不好理解,分析后续补充,代码也需要后续优化,便于理解 package test; import java.util.ArrayList; import java. ...

  9. java零钱换整程序_贪心算法换零钱(java)

    贪心算法思想 贪心算法总是做出在当前看来做好的选择.也就是说贪心算法并不从整体最后考虑,他做出的选择只是局部最优选择.他所做出的仅是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解, ...

  10. [Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

    [问题描述][Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2.从下标为 0 跳到下标为 1 的位置 ...

最新文章

  1. 机器学习之单变量线性回归
  2. GraphicsMagick扩展配置安装
  3. java 手势识别_java – 如何在Android中实现手势识别
  4. pthread 的坑
  5. CDOJ--1850
  6. oracle 500,500 OOPS: cannot change directory问题
  7. CuteEditor 6.0一个很奇怪的Bug
  8. python编程狮app题库_‎Python编程狮-零基础学Python App Storessa
  9. 凸优化有关的数值线性代数知识一:矩阵结构与算法复杂性
  10. 我在用的多功能电子书阅读器
  11. ASCII表,二进制、十进制对照表
  12. chrome内核 用h5调用高拍仪(摄像图)实现拍证件照
  13. JAVA 调用摄像头
  14. 文本识别之MASTER
  15. 2019年春晚表情包
  16. ailoop2里面的1个待考察的,在ailoop3里面的操作。(先使用海巨人,不使用英雄技能召唤图腾的问题)...
  17. python判断正数和负数教案_正数和负数优秀教案
  18. mysql官网下载最新版升级版本多版本安装教程
  19. java is a_is_a()
  20. 360元(含硬盘)!小白二手旧电脑组建超低价NAS记录

热门文章

  1. Windows XP 开机优化
  2. 网络空间搜索引擎ZoomEye
  3. 线性代数及其应用(第三版)1.4节习题解答
  4. Java游戏开发 —— 扫雷
  5. java二手书交易系统_基于Java的二手图书交易系统后台设计与实现.doc
  6. unitywebplayer 32/64 5.3版本
  7. 如何看Spring源码
  8. 疫情期间怎么上班?用电脑或手机远程办公很简单
  9. 【MySQL】ODBC数据源配置
  10. MFC学习--文本框