算法12-贪心算法
一、贪心算法概念
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法。贪心算法的核心思想是“局部最优,全局最优”,即通过一系列局部最优选择,最终达到全局最优解。
二、贪心算法的核心思想
-
局部最优选择:
- 在每一步选择中,都选择当前状态下最优的解。
-
无后效性:
- 当前的选择不会影响后续的选择,即每一步的选择都是独立的。
-
贪心选择性质:
- 通过局部最优选择,能够推导出全局最优解。
三、贪心算法的流程图
以下是贪心算法的流程图,使用 Mermaid 语法绘制:
四、贪心算法的示例代码
以下是贪心算法的经典示例:找零问题的 Python 实现代码。
def coin_change(coins, amount):coins.sort(reverse=True) # 将硬币按面值从大到小排序result = []for coin in coins:while amount >= coin: # 尽可能多地使用当前硬币result.append(coin)amount -= coinreturn result if amount == 0 else [] # 如果剩余金额为 0,返回结果;否则返回空列表# 示例
coins = [1, 5, 10, 25]
amount = 63
change = coin_change(coins, amount)
print("找零结果:", change) # 输出: [25, 25, 10, 1, 1, 1]
五、代码详解
-
初始化:
- 将硬币按面值从大到小排序,以便优先使用面值较大的硬币。
-
选择当前最优解:
- 尽可能多地使用当前面值的硬币,直到无法继续使用。
-
更新状态:
- 更新剩余金额,继续选择下一个面值的硬币。
-
终止条件:
- 当剩余金额为 0 时,返回结果;否则返回空列表。
-
示例运行:
- 对金额
63进行找零,使用硬币[25, 10, 5, 1],输出结果为[25, 25, 10, 1, 1, 1]。
- 对金额
六、贪心算法的应用场景
-
找零问题:
- 使用最少数量的硬币找零。
-
活动选择问题:
- 选择最多的互不冲突的活动。
-
最小生成树问题:
- 使用 Kruskal 或 Prim 算法求解最小生成树。
-
霍夫曼编码:
- 构建最优前缀编码。
-
背包问题:
- 在部分背包问题中,选择单位价值最高的物品。
七、贪心算法的优势
-
时间复杂度低:
- 贪心算法通常具有较低的时间复杂度,适用于大规模问题。
-
实现简单:
- 贪心算法的实现通常逻辑清晰,易于理解和维护。
-
适用于特定问题:
- 对于满足贪心选择性质的问题,贪心算法能够快速求解。
八、贪心算法的注意事项
-
贪心选择性质:
- 贪心算法并不适用于所有问题,只有满足贪心选择性质的问题才能使用贪心算法。
-
局部最优与全局最优:
- 贪心算法的局部最优选择不一定能导致全局最优解,需谨慎验证。
-
问题分析:
- 在使用贪心算法前,需仔细分析问题,确保贪心选择能够导致全局最优解。
九、总结
贪心算法通过每一步选择当前最优解,能够高效地解决许多问题。掌握贪心算法的核心思想和实现方法,能够帮助你更好地解决实际问题。然而,贪心算法并不适用于所有问题,需根据具体问题进行分析和验证。
© 著作权归作者所有
相关文章:
算法12-贪心算法
一、贪心算法概念 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法。贪心算法的核心思想是“局部最优,全局最优”,即通过一系列局部最优选择,最…...
js实现点击音频实现播放功能
目录 1. HTML 部分:音频播放控件 2. CSS 部分:样式设置 3. JavaScript 部分:音频控制 播放和暂停音频: 倒计时更新: 播放结束后自动暂停: 4. 总结: 完整代码: 今天通过 HTML…...
matlab平面波展开法计算的二维声子晶体带隙
平面波展开法计算的二维声子晶体带隙,分别是正方与圆形散射体形成正方格子声子晶体,最后输出了能带图的数据,需要自己用画图软件画出来。 列表 平面波展开法计算二维声子晶体带隙/a2.m , 15823 平面波展开法计算二维声子晶体带隙/a4.m , 942…...
Spring Boot (maven)分页3.0版本 通用版
前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…...
解决DeepSeek服务器繁忙问题
目录 解决DeepSeek服务器繁忙问题 一、用户端即时优化方案 二、高级技术方案 三、替代方案与平替工具(最推荐简单好用) 四、系统层建议与官方动态 用加速器本地部署DeepSeek 使用加速器本地部署DeepSeek的完整指南 一、核心原理与工具选择 二、…...
小项目第一天
总体实现流程图 智能称重模块流程图 定位追踪模块流程图 防盗报警模块流程图 密码解锁模块流程图 跨平台通信流程图...
家里WiFi信号穿墙后信号太差怎么处理?
一、首先在调制解调器(俗称:猫)测试网速,网速达不到联系运营商; 二、网线影响不大,5类网线跑500M完全没问题; 三、可以在卧室增加辅助路由器(例如小米AX系列)90~200元区…...
教育小程序+AI出题:如何通过自然语言处理技术提升题目质量
随着教育科技的飞速发展,教育小程序已经成为学生与教师之间互动的重要平台之一。与此同时,人工智能(AI)和自然语言处理(NLP)技术的应用正在不断推动教育内容的智能化。特别是在AI出题系统中,如何…...
SpringMVC新版本踩坑[已解决]
问题: 在使用最新版本springMVC做项目部署时,浏览器反复500,如下图: 异常描述: 类型异常报告 消息Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [int] not specifie…...
一款利器提升 StarRocks 表结构设计效率
CloudDM 个人版是一款数据库数据管理客户端工具,支持 StarRocks 可视化建表,创建表时可选择分桶、配置数据模型。目前版本持续更新,在修改 StarRocks 表结构方面进一步优化,大幅提升 StarRocks 表结构设计效率。当前 CloudDM 个人…...
老牌软件,如今依旧坚挺
今天给大家介绍一个非常好用的老牌电脑清理软件,这个软件好多年之前就有人使用了。 今天找出来之后,发现还是那么的好用,功能非常强大。 Red Button 电脑清理软件 软件是绿色版,无需安装,打开这个图标就能直接使用了…...
Plaid | 数据库切换历程:从 AWS Aurora MySQL 到 TiDB 的迁移之旅
原文来源: https://tidb.net/blog/231f2752 原文链接: https://plaid.com/blog/switching-to-tidb/ 翻译能力来自:Deepseek (ai.com ) 作者:Zander Hill Zander Hill 是 Plaid 的软件工程师和前工…...
MongoDB 扩缩容实战:涵盖节点配置、服务启动与移除操作
#作者:任少近 文章目录 一、扩容在245节点上配置配置config server:配置mongos启动config server安装工具mongosh添加245新节点到副本集配置分片副本集启动路由并分片 二、缩容Conf server上去掉server4shard上去掉server4mongos上去掉server4 一、扩容…...
Python学习心得字符串拼接的几种方法
一、字符串拼接的接种方法: 二、字符串拼接方法的运用: s1hello s2world #使用进行连接 print(s1s2)#使用字符串join()方法 print(.join([s1,s2]))#使用空字符串进行拼接print(*.join([hello,world,python]))#使用*进行拼接#直接拼接 print(helloworld)…...
USB2.03.0摄像头区分UVC相机在linux中的常用命令
这里是引用 一. USB2.0 & 3.0接口支持区分 1.1. 颜色判断 USB接口的颜色并不是判断版本的可靠标准,但根据行业常见规范分析如下: USB接口颜色与版本对照表: 接口颜色常见版本内部触点数量传输速度黑色USB2.04触点480 Mbps (60 MB/s)白…...
electron 学习
文章目录 1.注意项1.1 安装前最好设置一下代理 官网 tutorial https://www.electronjs.org/docs/latest/tutorial/tutorial-prerequisites 1.注意项 1.1 安装前最好设置一下代理 npm config set registry https://registry.npmmirror.com/...
美术教程2025
动画 必看 动画d【Unity初学者教程】如何制作 2D 游戏动画_哔哩哔哩_bilibili 如何在Unity中制作2D游戏动画 - 新手教程 - Blackthornprod_新手教程 可不看序列帧 【简明UNITY教程】2D游戏 动画制作实例详解_哔哩哔哩_bilibili unityspine 【Unity2D游戏开发教程】2D自定…...
CPT205 计算机图形学 OpenGL 3D实践(CW2)
文章目录 1. 介绍2. 设计3. 准备阶段4. 角色构建5. 场景构建6. 交互部分6.1 键盘交互6.2 鼠标交互6.3 鼠标点击出多级菜单进行交互 7. 缺点与问题7.1 程序bug7.2 游戏乐趣不足7.3 画面不够好看 8. 完整代码 1. 介绍 前面已经分享过了关于CPT205的CW1的2D作业,这次C…...
基于单片机的开关电源设计(论文+源码)
本次基于单片机的开关电源节能控制系统的设计中,在功能上设计如下: (1)系统输入220V; (2)系统.输出0-12V可调,步进0.1V; (3)LCD液晶显示实时电压ÿ…...
autogen_core中的DataclassJsonMessageSerializer类
源代码 import json from dataclasses import asdict, dataclass, fields from typing import Any, ClassVar, Dict, List, Protocol, Sequence, TypeVar, cast, get_args, get_origin, runtime_checkable, Union from pydantic import BaseModelfrom types import NoneType, …...
从科幻到芯片:用FPGA与MCU构建《红矮星号》数字逻辑系统
1. 项目概述:一次怀旧之旅与可编程逻辑的意外共鸣最近,我经历了一次纯粹由个人兴趣驱动的“考古”发现,它让我这个在电子设计自动化(EDA)和可编程逻辑领域浸淫了二十多年的老工程师,感到了一种久违的、孩子…...
基于OpenAI API兼容接口的轻量级AI对话服务部署与配置指南
1. 项目概述:一个轻量级、可自托管的AI对话服务最近在折腾个人AI助手,想找一个能自己部署、功能纯粹、不依赖复杂云服务的方案。市面上很多大模型要么太重,要么API调用成本高,要么隐私上总让人有点不放心。直到我发现了nazdridoy/…...
别只盯着YOLO!用百元级OpenMV+STM32,5分钟搭建一个低成本运动追踪原型系统
百元级视觉方案实战:OpenMVSTM32运动追踪系统开发指南 当计算机视觉成为热门技术,许多初学者却被动辄数千元的GPU设备和复杂的深度学习框架劝退。其实,在嵌入式视觉领域,有一款仅需百元级的硬件——OpenMV,配合常见的S…...
圣禾堂在线正式成为AIT创瑞科技授权代理商,全品类元器件现货供应保障升级
圣禾堂(深圳)电子科技有限公司(简称:圣禾堂在线)宣布与AIT创瑞科技达成战略合作,正式获得其授权代理证书。此次合作标志着圣禾堂在线在电源管理、存储芯片、分立器件及被动元件等领域的产品矩阵进一步丰富&…...
基于开源LLM框架构建领域对话机器人:从ChatPiXiu到实战应用
1. 项目缘起与定位去年ChatGPT横空出世,相信很多同行和我一样,一边惊叹于其强大的对话能力,一边也在琢磨:这东西的“魔法”我们能不能复现?或者说,有没有可能用开源的方式,打造一个我们自己的、…...
81页精品PPT | 企业数字化底座与数字化转型方案
很多企业在数字化转型过程中会遇到数据孤岛、业务流程繁琐和响应市场变化慢等问题。这些问题导致企业效率低下,难以快速适应市场变化。这个方案旨在帮助企业构建数字化底座,实现数据整合、流程优化和敏捷响应市场变化。通过统一的数据平台,打…...
STM32F407驱动SK9822全彩灯珠:从GPIO配置到完整呼吸灯效果(附避坑指南)
STM32F407驱动SK9822全彩灯珠:从硬件连接到动态效果实战 第一次拿到SK9822灯珠时,我被它细腻的亮度调节能力惊艳到了——相比常见的WS2812B,它能在低亮度下依然保持色彩准确。但真正动手用STM32F407驱动时,才发现这颗小小的灯珠藏…...
Godot开发者必备:Awesome Godot资源合集使用指南
1. 项目概述:一份为Godot开发者量身定制的“藏宝图”如果你正在使用Godot引擎开发游戏,或者对这个开源、免费且功能强大的游戏引擎感兴趣,那么你很可能已经体会过在茫茫互联网中寻找高质量资源、插件和参考项目的痛苦。官方文档固然详尽&…...
基于MCP协议的Google AI工具集:简化AI智能体多模态能力集成
1. 项目概述:一个为AI智能体赋能的Google AI工具集 最近在折腾AI智能体(Agent)的开发,发现一个痛点:想让智能体具备“看”和“听”的能力,比如翻译一段外文、识别图片里的文字、或者分析一段话的情绪&…...
企业边缘计算设备INA1607:硬件架构与应用解析
1. INA1607设备概述与核心定位IBASE INA1607是一款面向企业边缘计算场景设计的无风扇网络设备,采用Intel Atom x7405C Amston Lake低功耗处理器,专为uCPE(通用客户终端设备)和SD-WAN(软件定义广域网)应用场…...
