【算法】贪婪算法介绍及实现方法

贪婪算法简介

贪婪算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪婪算法通常用于解决优化问题,如最小化成本、最大化收益等。它并不保证得到最优解,但在很多问题中,它能产生很好的近似解或最优解。

贪婪算法的关键在于贪心选择性质:每一步所做的选择都是当前状态下的最优选择,并且这种选择不会依赖于子问题的解。

示例问题:找零钱问题

假设一个商店只销售价格为整数元的商品,并且只接受整数元的货币。给定一个商品的价格n元和一个无限数量的货币单位[1,2,5,10,20,50,100](分别代表1元、2元、5元、10元、20元、50元和100元),编写一个程序计算找零给顾客的最少货币数量。

C# 实现

using System;  
using System.Collections.Generic;  class GreedyChangeMaker  
{  static List<int> denominations = new List<int> { 100, 50, 20, 10, 5, 2, 1 };  static int MakeChange(int amount)  {  int count = 0;  for (int i = 0; i < denominations.Count; i++)  {  while (amount >= denominations[i])  {  amount -= denominations[i];  count++;  }  }  return count;  }  static void Main()  {  int amount = 63;  Console.WriteLine($"Minimum number of coins required: {MakeChange(amount)}");  }  
}

C++ 实现

#include <iostream>  
#include <vector>  
using namespace std;  int makeChange(int amount) {  vector<int> denominations = {100, 50, 20, 10, 5, 2, 1};  int count = 0;  for (int coin : denominations) {  while (amount >= coin) {  amount -= coin;  count++;  }  }  return count;  
}  int main() {  int amount = 63;  cout << "Minimum number of coins required: " << makeChange(amount) << endl;  return 0;  
}

Python 实现

def make_change(amount):  denominations = [100, 50, 20, 10, 5, 2, 1]  count = 0  for coin in denominations:  count += amount // coin  amount %= coin  return count  amount = 63  
print(f"Minimum number of coins required: {make_change(amount)}")

Java 实现

public class GreedyChangeMaker {  private static final int[] denominations = {100, 50, 20, 10, 5, 2, 1};  public static int makeChange(int amount) {  int count = 0;  for (int denomination : denominations) {  while (amount >= denomination) {  amount -= denomination;  count++;  }  }  return count;  }  public static void main(String[] args) {  int amount = 63;  System.out.println("Minimum number of coins required: " + makeChange(amount));  }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/43416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat打破双亲委派模型的方式

文章目录 1、前言2、标准的双亲委派模型3、Tomcat的类加载器架构4、Tomcat打破双亲委派模型的方式5、总结 1、前言 双亲委派模型是一种类加载机制&#xff0c;它确保了类加载器层次结构中的父加载器先于子加载器尝试加载类。这种机制有助于防止类的重复加载和类之间的不兼容。…

MySQL数据库基本操作-DDL和DML

1. DDL解释 DDL(Data Definition Language)&#xff0c;数据定义语言&#xff0c;该语言部分包括以下内容&#xff1a; 对数据库的常用操作对表结构的常用操作修改表结构 2. 对数据库的常用操作 功能SQL查看所有的数据库show databases&#xff1b;查看有印象的数据库show d…

16 - Python语言进阶

Python语言进阶 数据结构和算法 算法&#xff1a;解决问题的方法和步骤 评价算法的好坏&#xff1a;渐近时间复杂度和渐近空间复杂度。 渐近时间复杂度的大O标记&#xff1a; - 常量时间复杂度 - 布隆过滤器 / 哈希存储 - 对数时间复杂度 - 折半查找&#xff08;二分查找&am…

关于TCP的三次握手流程

三次握手流程 第一次握手&#xff1a;客户端向服务端发起建立连接请求&#xff0c;客户端会随机生成一个起始序列号x&#xff0c;客户端向服务端发送的字段包含标志位SYN1&#xff0c;序列号segx。第一次握手后客户端的状态为SYN-SENT。此时服务端的状态为LISTEN 第二次握手&…

使用耳机壳UV树脂制作私模定制耳塞的价格如何呢?

使用耳机壳UV树脂制作私模定制耳塞的价格如何呢&#xff1f; 耳机壳UV树脂制作私模定制耳塞的价格因多个因素而异&#xff0c;如材料、工艺、设计、定制复杂度等。 根据我目前所了解到的信息&#xff0c;使用UV树脂制作私模定制耳塞的价格可能在数百元至数千元不等。具体价格…

LVS+Nginx高可用集群---Nginx进阶与实战

1.Nginx中解决跨域问题 两个站点的域名不一样&#xff0c;就会有一个跨域问题。 跨域问题&#xff1a;了解同源策略&#xff1a;协议&#xff0c;域名&#xff0c;端口号都相同&#xff0c;只要有一个不相同那么就是非同源。 CORS全称Cross-Origin Resource Sharing&#xff…

大模型知识大全1-基础知识【大模型】

文章目录 大模型简介以后的介绍流程基础知识训练流程介绍pre-train对齐和指令微调规模拓展涌现能力 系统学习大模型的记录https://github.com/LLMBook-zh/LLMBook-zh.github.io 大模型简介 历史我就不写了&#xff0c;简单说说大模型的应用和特点。人类使用大模型其实分为两个…

linux高级编程(OSI/UDP(用户数据报))

OSI七层模型&#xff1a; OSI 模型 --> 开放系统互联模型 --> 分为7层&#xff1a; 理想模型 --> 尚未实现 1.应用层 QQ 应用程序的接口 2.表示层 加密解密 gzip 将接收的数据进行解释&#xff…

【shell】—双引号引用变量

文章目录 一、举例—单、双引号引用变量的结果差异二、使用双引号引用变量的场景1、使用双引号—可以防止字符串被分割2、使用双引号—特殊字符变为普通字符3、使用双引号—保存原始命令的输出格式4、使用双引号—具有强约束的单引号变为普通单引号字符5、注意 一、举例—单、双…

挑战杯 opencv python 深度学习垃圾图像分类系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; opencv python 深度学习垃圾分类系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 这是一个较为新颖的竞…

昇思25天学习打卡营第13天|应用实践之ResNet50迁移学习

基本介绍 今日的应用实践的模型是计算机实践领域中十分出名的模型----ResNet模型。ResNet是一种残差网络结构&#xff0c;它通过引入“残差学习”的概念来解决随着网络深度增加时训练困难的问题&#xff0c;从而能够训练更深的网络结构。现很多网络极深的模型或多或少都受此影响…

数据链路层(超详细)

引言 数据链路层是计算机网络协议栈中的第二层&#xff0c;位于物理层之上&#xff0c;负责在相邻节点之间的可靠数据传输。数据链路层使用的信道主要有两种类型&#xff1a;点对点信道和广播信道。点对点信道是指一对一的通信方式&#xff0c;而广播信道则是一对多的通信方式…

算法工程师第五天(● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和 )

参考文献 代码随想录 一、有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", …

风险评估:Tomcat的安全配置,Tomcat安全基线检查加固

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

grafana数据展示

目录 一、安装步骤 二、如何添加喜欢的界面 三、自动添加注册客户端主机 一、安装步骤 启动成功后 可以查看端口3000是否启动 如果启动了就在浏览器输入IP地址&#xff1a;3000 账号密码默认是admin 然后点击 log in 第一次会让你修改密码 根据自定义密码然后就能登录到界面…

高职物联网实训室

一、高职物联网实训室建设背景 随着《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》的发布&#xff0c;中国正式步入加速数字化转型的新时代。在数字化浪潮中&#xff0c;物联网技术作为连接物理世界与数字世界的桥梁&#xff0c;其重要性日益凸显…

Golang | Leetcode Golang题解之第224题基本计算器

题目&#xff1a; 题解&#xff1a; func calculate(s string) (ans int) {ops : []int{1}sign : 1n : len(s)for i : 0; i < n; {switch s[i] {case :icase :sign ops[len(ops)-1]icase -:sign -ops[len(ops)-1]icase (:ops append(ops, sign)icase ):ops ops[:len(o…

Knife4j的原理及应用详解(三)

本系列文章简介&#xff1a; 在当今快速发展的软件开发领域&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;作为不同软件应用之间通信的桥梁&#xff0c;其重要性日益凸显。随着微服务架构的兴起&#xff0c;API的数量…

价值投资者什么时候卖出股票?

经常有人说&#xff0c;会买的只是徒弟&#xff0c;会卖的才是师傅。 在阅读《战胜华尔街》的过程中&#xff0c;也多次感受到林奇先生的卖出逻辑&#xff0c;当股票的价格充分体现了公司的价值的时候&#xff0c;就是该卖出股票的时候。但这只是理论上的&#xff0c;从林奇先…