贪心算法思想

贪心算法总是做出在当前看来做好的选择。也就是说贪心算法并不从整体最后考虑,他做出的选择只是局部最优选择。他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

1.算法思路

贪心算法是一种不追求最优解,只希望得到较为满意解的方法。贪心算法一般可以快速得到满意的解,因为它省去了为找最优姐要穷尽所有肯呢个而必须耗费大量时间。贪婪(心)算法是一种改进了的分级处理方法。其核心是根据题意选取一种量度标准。然后将这多个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量。如果这个输入和当前已构成在这种量度意义下的部分最佳解加在一起不能产生一个可行解,则不把此输入加到这部分解中。这种能够得到某种量度意义下最优解的分级处理方法称为贪婪算法。

对于一个给定的问题,往往可能有好几种量度标准。初看起来,这些量度标准似乎都是可取的,但实际上,用其中的大多数量度标准作贪婪处理所得到该量度意义下的最优解并不是问题的最优解,而是次优解。因此,选择能产生问题最优解的最优量度标准是使用贪婪算法的核心。

一般情况下,要选出最优量度标准并不是一件容易的事,但对某问题能选择出最优量度标准后,用贪婪算法求解则特别有效。最优解可以通过一系列局部最优的选择即贪婪选择来达到,根据当前状态做出在当前看来是最好的选择,即局部最优解选择,然后再去解做出这个选择后产生的相应的子问题。每做一次贪婪选择就将所求问题简化为一个规模更小的子问题,最终可得到问题的一个整体最优解。

2.基本特性

从问题的某一个初始解除发逐步逼近给定的目标,以尽可能快的求得更好的解。当达到算法中的某一步不能再继续前进时就停止算法,给出近似解。

3.实例:换零钱

该程序实现超市收银的找零方案,输入需要找补给顾客的金额,由程序计算出该金额可有哪些面值人民币组成。人民币假设有100 50 20 10 5 2 1 0.5 0.2 0.1

package 练习;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class 贪心算法找零钱 {

public static int MAX=10;

public static double Value[]={10000,5000,2000,1000,500,200,100,50,20,10};

//public static double Value[]={100,50,20,10,5,2,1,0.5,0.2,0.1};如果改成这行,结果就会出错

public static int num[]=new int[MAX];

public static void main(String[] args) {

List ag=new ArrayList();

for(int i=0;i

ag.add(Value[i]);

}

System.out.println("请输入要换的数值");

Scanner scanner=new Scanner(System.in);

double a=scanner.nextDouble();

conver(a*100);

System.out.println("找零");

for(int i=0;i

if(num[i]>0){

System.out.println("面值"+Value[i]/100+"一共需要 "+num[i]+"张");

}

}

}

private static void conver(double a) {

// TODO Auto-generated method stub

int i,j;

for( i=0;i

if (a>Value[i])

break;

while (a>0&&i

if(a>=Value[i]){

a-=Value[i];

num[i]++;

}else if(a<10&&a>=5){

num[MAX-1]++;

break;

}else

i++;

}

}

}

结果:

请输入要换的数值

212.1

找零

面值100.0一共需要 2张

面值10.0一共需要 1张

面值2.0一共需要 1张

面值0.1一共需要 1张

java零钱换整程序_贪心算法换零钱(java)相关推荐

  1. java调度问题的贪心算法_贪心算法——换酒问题

    知识回顾 贪心算法 (greedy algorithm),又称贪婪算法. 是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法. 贪心算法在 有最优子 ...

  2. java零钱换整程序_透析递归应用-换零钱

    题目源于<SICP>,这里做一下调整,如下: 给了面值为50元.20元.10元.5元.1元的五种零钱若干,思考把面值100元人民币换成零钱一共有多少种方式? SICP给出的递归算法思想如下 ...

  3. java零钱换整程序_零钱兑换 Java

    题目链接 凑成面值为 11 的最小硬币数可以由以下 3者的最小值得到: 1.凑成面值为 10 的最小硬币数 + 面值为 1 的这一枚硬币: 2.凑成面值为 9 的最小硬币数 + 面值为 2 的这一枚硬 ...

  4. Java制作一个盒子程序_编写一个简单的Java程序,模拟计算器的功能。

    提问:编写一个简单的Java程序,模拟计算器的功能. 网友回答: 程序参考: import java.awt.*; import java.awt.event.ActionEvent; import ...

  5. java 德生读卡器对接程序_第三章:java流程语句

    一,java语句结构: 1.顺序结构 2.选择结构 3.循环结构 二,选择语句: if,if else ,if else if,switch 1.if语句(单分支): if(boolean类型条件表达 ...

  6. java排队算法_贪心算法-排队问题-JAVA

    自己最近在学一些算法,试着把网上的贪心算法的例题编出来,JAVA版. [题目描述] 在一个医院B 超室,有n个人要做不同身体部位的B超,已知每个人需要处理的时间为ti,(0 输入数据:第1行一个正整数 ...

  7. java贪心算法 区间调度_贪心算法-区间调度问题解之证明(示例代码)

    一.贪心算法 定义:一个算法是贪心算法,如果它是通过一些小的步骤来一个求解,并且在每一步根据局部情况选择一个决定,使得某些主要的指标得到优化. 二.区间调度问题 1. 问题:我们有一组需求{1,2,3 ...

  8. java 汽车加油问题_贪心算法 汽车加油问题 | 学步园

    / //一辆汽车加满油后可行驶n公里.旅途中有若干个加油站.设计一个有效      // // // n和k个加油站位置,编程计算最少加油次数.并证明算法能产生一个最优解.    // //要求:   ...

  9. java区间合并_贪心算法:合并区间

    ❝ 最近文章阅读量少了很多啊打卡也少了, 是不是年底了很多录友在忙期末考试啊,哈哈. 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: intervals = [[1,3],[2,6], ...

最新文章

  1. 开启php,php开启openssl的方法
  2. 重新使用Eclipse建立安卓工程遇到的问题
  3. samba权限跟linux权限,linux之samba与linux权限
  4. 程序员修炼之道--从小工到专家(一)
  5. JavaScript中的小陷阱(不定期更新。。)
  6. property java用法_Java Properties getProperty(key)用法及代码示例
  7. ~~双链表(数据结构)
  8. 分享 | 绝对值得一看的深度学习三巨头之一的Yoshua Bengio清华大学讲座视频
  9. 多进程|多线程的不同应用场景:Python还是C
  10. Action 和Func
  11. 刷题笔记(一)《王道计算机考研机试指南2》
  12. 各地的磁倾角_中国各地磁偏角
  13. 购物直播APP系统+短视频系统开发方案
  14. dll,sys文件被认定为病毒后如何删除
  15. APT 攻击溯源方法
  16. 下列不是SQL的服务器组件,北语网院15秋《数据库应用(SQL server)》作业3答案...
  17. Excel如何快速划分等级或成绩评级
  18. 微信小程序 富文本 换行问题 文本溢出使用省略号
  19. GD32 CANFD仲裁区500K,数据区2M 测试
  20. 秒懂小罗肥归:logit与mlogit详解

热门文章

  1. java监听com口_简单了解Java接口+事件监听机制
  2. nginx 二进制包安装mysql_二进制安装mysql5.7
  3. 哪个linux桌面有电池显示,(求助!!!)进ubuntu后桌面只显示左上角!(已解决)...
  4. CSS3 FlexBox布局入门简析
  5. Java 基础——类和对象
  6. 介绍Linux中cp直接覆盖不提示的方法
  7. C++笔记(1)explicit构造函数
  8. ASP.NET常用代码
  9. [react] react的函数式组件有没有生命周期?
  10. [css] 判断如下边框的颜色,并解释为什么[代码]?