当前位置: 首页 > article >正文

算法12-贪心算法

一、贪心算法概念

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法。贪心算法的核心思想是“局部最优,全局最优”,即通过一系列局部最优选择,最终达到全局最优解。


二、贪心算法的核心思想

  1. 局部最优选择

    • 在每一步选择中,都选择当前状态下最优的解。
  2. 无后效性

    • 当前的选择不会影响后续的选择,即每一步的选择都是独立的。
  3. 贪心选择性质

    • 通过局部最优选择,能够推导出全局最优解。

三、贪心算法的流程图

以下是贪心算法的流程图,使用 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]

五、代码详解

  1. 初始化

    • 将硬币按面值从大到小排序,以便优先使用面值较大的硬币。
  2. 选择当前最优解

    • 尽可能多地使用当前面值的硬币,直到无法继续使用。
  3. 更新状态

    • 更新剩余金额,继续选择下一个面值的硬币。
  4. 终止条件

    • 当剩余金额为 0 时,返回结果;否则返回空列表。
  5. 示例运行

    • 对金额 63 进行找零,使用硬币 [25, 10, 5, 1],输出结果为 [25, 25, 10, 1, 1, 1]

六、贪心算法的应用场景

  1. 找零问题

    • 使用最少数量的硬币找零。
  2. 活动选择问题

    • 选择最多的互不冲突的活动。
  3. 最小生成树问题

    • 使用 Kruskal 或 Prim 算法求解最小生成树。
  4. 霍夫曼编码

    • 构建最优前缀编码。
  5. 背包问题

    • 在部分背包问题中,选择单位价值最高的物品。

七、贪心算法的优势

  1. 时间复杂度低

    • 贪心算法通常具有较低的时间复杂度,适用于大规模问题。
  2. 实现简单

    • 贪心算法的实现通常逻辑清晰,易于理解和维护。
  3. 适用于特定问题

    • 对于满足贪心选择性质的问题,贪心算法能够快速求解。

八、贪心算法的注意事项

  1. 贪心选择性质

    • 贪心算法并不适用于所有问题,只有满足贪心选择性质的问题才能使用贪心算法。
  2. 局部最优与全局最优

    • 贪心算法的局部最优选择不一定能导致全局最优解,需谨慎验证。
  3. 问题分析

    • 在使用贪心算法前,需仔细分析问题,确保贪心选择能够导致全局最优解。

九、总结

贪心算法通过每一步选择当前最优解,能够高效地解决许多问题。掌握贪心算法的核心思想和实现方法,能够帮助你更好地解决实际问题。然而,贪心算法并不适用于所有问题,需根据具体问题进行分析和验证。

© 著作权归作者所有

相关文章:

算法12-贪心算法

一、贪心算法概念 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法。贪心算法的核心思想是“局部最优,全局最优”,即通过一系列局部最优选择,最…...

小白win10安装并配置yt-dlp

需要yt-dlp和ffmpeg 注意存放路径最好都是全英文 win10安装并配置yt-dlp 一、下载1.下载yt-dlp2. fffmpeg下载 二、配置环境三、cmd操作四、yt-dlp下视频操作 一、下载 1.下载yt-dlp yt-dlp地址 找到win的压缩包点下载,并解压 2. fffmpeg下载 ffmpeg官方下载 …...

I²C简介

前言 IC(Inter-Integrated Circuit, 内置集成电路)总线是由Philips公司(现属于恩智浦)在上世纪80年代开发的两线式串行通信总线,用于连接微控制器及其外围设备,控制设备之间的通信。 IC总线的物理拓扑示意…...

Spring容器扩展点

Spring容器扩展点 BeanDefinitionRegistryPostProcessorBeanFactoryPostProcessorImportSelectorImportBeanDefinitionRegistorBeanPostProcessorInstantiationAwareBeanPostProcessor--postProcessBeforeInstantiationSmartInstantiationAwareBeanPostProcessor--determineCan…...

spring boot知识点3

1.spring boot能否使用xml配置 可以,但是很繁琐,现在都建议走JavaConfig 2.spring boot的核心配置文件 application.properties application.yml 3.bootstrap.properties和application.properties的区别 b:用于远程配置 a:…...

Linux后台启动命令nohup并且MobaXterm后台启动断网也不关闭软件

nohup主要作用就是可以在后台运行,并可以选择将日志输出到指定文件。如启动一个程序,若使用./demo的方式启动程序当窗口关闭的时候程序也停止了,而且日志会直接输出到控制台非常不直观,nohup启动就可以解决这两个问题。 nohup与&…...

C++(23):unreachable

C++23在头文件 "><utility>定义了std::unreachable(),用于指示编译器,该段代码不应该被允许,因此编译器可以对该位置进行优化,如果一旦允许了该位置的代码,行为未定义: #include <utility> #include <iostream>using namespace std;int func(…...

【Vue+python】Vue调用python-fastApi接口实现数据(数值、列表类型数据)渲染

前言&#xff1a;之前做的一直都是SpringBootVue的应用&#xff0c;但现在需要实现一个能将python实现的算法应用展示在前端的界面。想法是直接Vue调用python-fastApi接口实现数据渲染~ 文章目录 1. 变量定义2. axios调用python3. 跨域问题解决4. 数据渲染4.1 数值数据渲染4.2 …...

构建高效智能对话前端:基于Ant Design X 的deepseek对话应用

文章目录 实现的效果前言Ant Design X添加欢迎组件创建对话气泡存储对话历史渲染对话气泡 输入组件WebSocket 连接总结 实现的效果 待机页面&#xff1a; 等待页面&#xff1a; 完成页面&#xff1a; 前言 随着人工智能技术的飞速发展&#xff0c;大模型对话系统已成为…...

四元数如何用于 3D 旋转(代替欧拉角和旋转矩阵)【ESP32指向鼠标】

四元数如何用于 3D 旋转&#xff08;代替欧拉角和旋转矩阵&#xff09; 在三维空间中&#xff0c;物体的旋转可以用 欧拉角、旋转矩阵 或 四元数 来表示。 四元数相比于欧拉角和旋转矩阵有 计算更高效、避免万向锁、存储占用少 等优点&#xff0c;因此广泛用于 游戏开发、机器…...

Cloud: aws:network: limit 含有pps这种限制

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshooting-ena.html#statistics-ena 这个是调查网络问题的一个网页; 在里面,竟然含有pps这种限制:ethtool -S;其实是比较苛刻的安全相关的策略? [ec2-user ~]$ ethtool -S ethN NIC statistics:tx_timeout: …...

Python MoviePy 视频处理全攻略:从入门到实战案例

第1章 环境安装与配置 # 案例1&#xff1a;安装MoviePy及FFmpeg !pip install moviepy # Windows安装FFmpeg&#xff1a;https://ffmpeg.org/download.html # Linux: sudo apt-get install ffmpeg# 验证安装 from moviepy.editor import * print("MoviePy版本:", __…...

数据结构之BST、AVL、红黑树、哈夫曼树与B族树

数据结构之BST、AVL、红黑树、哈夫曼树与B族树 数据结构之BST、AVL、红黑树、哈夫曼树与B族树一、二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;1. 什么是二叉搜索树&#xff1f;重要性质 2. 二叉搜索树实现1. 节点结构定义2. 核心操作接口3. 插入算法实现4. 删除…...

开源多商户商城源码最新版_适配微信小程序+H5+APP+PC多端

在数字化时代&#xff0c;电子商务已经成为各行业不可或缺的一部分&#xff0c;开源多商户商城源码为中小企业和个人开发者提供了快速搭建和定制电商平台的利器。分享一款最新版的开源多商户商城源码&#xff0c;它能够适配微信小程序、H5、APP和PC等多个端口&#xff0c;满足商…...

第3章 .NETCore核心基础组件:3.1 .NET Core依赖注入

3.1.1 什么是控制反转、依赖注入 杨老师在书中进行了一系列的文字阐述&#xff0c;总结一下就是&#xff1a;软件设计模式中有一种叫做【控制反转】的设计模式&#xff0c;而依赖注入是实现这种设计模式的一个很重要的方式。也就是说学习依赖注入&#xff0c;是学习怎样实现控…...

cesium基础设置

cesium官网下载&#xff1a;https://cesium.com/downloads/ 1.安装cesium 选择下载到本地使用&#xff0c;或者通过npm下载到项目中 2.代码书写 &#xff08;1&#xff09;创建容器 <div id"cesiumContainer" style"width: 100%; height: 100%"><…...

Spring-GPT智谱清言AI项目(附源码)

一、项目介绍 本项目是Spring AI第三方调用整合智谱请言&#xff08;官网是&#xff1a;https://open.bigmodel.cn&#xff09;的案例&#xff0c;回答响应流式输出显示&#xff0c;这里使用的是免费模型&#xff0c;需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…...

文件夹上传到github分支最后github上面还是没有文件和文件夹

环境&#xff1a; github 问题描述&#xff1a; 文件夹上传到github分支最后github上面还是没有文件和文件夹, 和这样一样 解决方案&#xff1a; 从 git ls-tree -r HEAD 的输出中可以看到&#xff0c;metahuman-stream 文件夹显示为如下内容&#xff1a; 160000 commi…...

面试题之箭头函数和普通函数有什么区别?

箭头函数&#xff08;Arrow Function&#xff09;和普通函数&#xff08;Regular Function&#xff09;是 JavaScript 中两种不同的函数定义方式&#xff0c;它们在语法、上下文&#xff08;this&#xff09;、原型链等方面存在显著区别。以下是它们的主要区别&#xff1a; 1. …...

【文献精读】AAAI24:FacetCRS:打破对话推荐系统中的“信息茧房”

标题FacetCRS: Multi-Faceted Preference Learning for Pricking Filter Bubbles in Conversational Recommender System期刊The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24)年份2024关键词Conversational Recommender System (CRS), Filter Bubbles,…...

[vs2017][qt]MSB4019 未找到导入的项目QtMsBuild\Qt.prop

问题场景&#xff1a; vs2017qt5.9.9新建vs项目报错MSB4019 未找到导入的项目QtMsBuild\Qt.prop 报错解决方案&#xff1a; 由QtMsBuild导致的问题不需要像其他博客里说的那样各种环境变量配置&#xff0c;以及大费周章去查看一些系统的东西。 第一步&#xff1a; 只需要将…...

网络安全推荐的视频教程 网络安全系列

第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或恶意的原因而遭到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 1.2.3 网络安全的种类P5 &#xff08;1…...

什么是Embedding、RAG、Function calling、Prompt engineering、Langchain、向量数据库? 怎么使用

什么是Embedding、RAG、Function calling、Prompt engineering、Langchain、向量数据库? 怎么使用 目录 什么是Embedding、RAG、Function calling、Prompt engineering、Langchain、向量数据库? 怎么使用Embedding(嵌入)RAG(检索增强生成)Function calling(函数调用)Pr…...

基于Python的深度学习音乐推荐系统(有配套论文)

音乐推荐系统 提供实时音乐推荐功能&#xff0c;根据用户行为和偏好动态调整推荐内容 Python、Django、深度学习、卷积神经网络 、算法 数据库&#xff1a;MySQL 系统包含角色&#xff1a;管理员、用户 管理员功能&#xff1a;用户管理、系统设置、音乐管理、音乐推荐管理、系…...

长文档处理痛点:GPT-4 Turbo引文提取优化策略与替代方案讨论

引言 随着GPT-4 Turbo的发布&#xff0c;其支持的128K上下文窗口&#xff08;约300页文本&#xff09;被视为处理长文本的突破性升级。然而&#xff0c;实际应用中&#xff0c;用户发现模型在提取长文档中的引文时存在显著缺陷&#xff1a;文档前三分之一的引文数量远多于中间…...

javacv将mp4视频切分为m3u8视频并播放

学习链接 ffmpeg-demo 当前对应的 gitee代码 Spring boot视频播放(解决MP4大文件无法播放)&#xff0c;整合ffmpeg,用m3u8切片播放。 springboot 通过javaCV 实现mp4转m3u8 上传oss 如何保护会员或付费视频&#xff1f;优酷是怎么做的&#xff1f; - HLS 流媒体加密 ffmpe…...

Swagger 转 Word 技术方案

项目概述 本项目旨在提供一种便捷的工具,将 Swagger API 文档转换为 Word 文档,方便开发人员和团队进行文档管理和分享。通过简单的配置和操作,用户可以快速生成包含 API 接口信息、请求参数、返回参数等内容的 Word 文档。 技术架构 本项目基于 Java 开发,采用 Spring …...

MVTEC数据集笔记

前言 网上的博客只有从论文里摘出的介绍&#xff0c;没有数据集文件详细的样子&#xff0c;下载数据集之后&#xff0c;对数据集具体的构成做一个补充的笔记。 下载链接&#xff1a;https://ai-studio-online.bj.bcebos.com/v1/7d4a3cf558254bbaaf4778ea336cb14ed8bbb96a7f2a…...

[数据结构]红黑树,详细图解插入

目录 一、红黑树的概念 二、红黑树的性质 三、红黑树节点的定义 四、红黑树的插入&#xff08;步骤&#xff09; 1.为什么新插入的节点必须给红色&#xff1f; 2、插入红色节点后&#xff0c;判定红黑树性质是否被破坏 五、插入出现连续红节点情况分析图解&#xff08;看…...

国家地理信息公共服务平台的天地图

文章目录 一、国家地理信息公共服务平台的天地图二、地图转换1.GIS数据格式坐标转换&#xff08;地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000&#xff09;2.读入数据 总结 一、国家地理信息公共服务平台的天地图 三大地图付费后&#xff0c;仍可…...