贪心算法理论
系列博客目录
文章目录
- 系列博客目录
- 贪心算法 (Greedy Algorithm)
- 贪心算法的特点
- 贪心算法的适用条件
- 常见的贪心算法问题
- 贪心算法的步骤
- 贪心算法示例:活动选择问题
- 贪心算法的优缺点
贪心算法 (Greedy Algorithm)
贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望得到全局最优解的算法。贪心算法的基本思想是通过局部最优的选择来逐步接近全局最优解。它并不回溯,且每一步的选择只基于当前信息,不考虑后续可能的影响。
贪心算法的特点
- 局部最优选择:在每一步选择中,贪心算法都会选择当前看来最优的选项,不会考虑全局的影响。
- 无后悔:选择一旦做出,就不会再回头修改。
- 贪心选择性质:贪心算法的每一个局部最优选择并不保证全局最优,适用的情况需要问题具有贪心选择性质和最优子结构。
贪心算法的适用条件
- 贪心选择性质:通过局部最优的选择可以得到全局最优解。
- 最优子结构:问题的最优解包含其子问题的最优解。即,通过递归求解子问题来得到最终的最优解。
常见的贪心算法问题
-
活动选择问题(Activity Selection Problem):给定一组活动及其开始时间和结束时间,选择最多的活动,使得它们相互不冲突。
-
背包问题(0-1背包问题的贪心解法):虽然 0-1 背包问题不能用贪心算法获得最优解,但在某些变种(如分数背包问题)中,贪心算法能够得到最优解。
-
哈夫曼编码(Huffman Coding):一种用于数据压缩的算法,利用贪心选择构建最优的前缀码。
-
最小生成树问题(Kruskal算法、Prim算法):通过贪心选择构建图的最小生成树。
-
单源最短路径问题(Dijkstra算法):用贪心算法求解从一个顶点到所有其他顶点的最短路径。
贪心算法的步骤
- 选择:在当前问题的状态下,选择一个看起来最优的解。
- 可行性检查:检查所选择的解是否满足约束条件。
- 选择结果:将选择的解加入到当前解的集合中。
- 问题规模减少:更新问题状态,减少问题的规模,进入下一个选择阶段。
- 重复:继续执行选择,直到满足停止条件。
贪心算法示例:活动选择问题
假设有一组活动,每个活动有一个开始时间和结束时间,目标是选择不冲突的活动数量最多的子集。
输入:
活动的开始时间和结束时间,例如:
活动 1: (1, 4)
活动 2: (2, 5)
活动 3: (3, 6)
活动 4: (5, 7)
活动 5: (8, 9)
贪心选择步骤:
-
按结束时间排序:将活动按结束时间排序,以确保每次选择结束时间最早的活动。
排序后的活动:活动 1 (1, 4),活动 2 (2, 5),活动 3 (3, 6),活动 4 (5, 7),活动 5 (8, 9) -
选择活动:
- 选择活动 1,结束时间为 4。
- 下一步选择活动 4(活动 2 和活动 3与活动 1冲突),结束时间为 7。
- 最后选择活动 5,结束时间为 9。
输出:
最多的活动是活动 1、活动 4 和活动 5,数量为 3。
贪心算法的优缺点
优点:
- 实现简单:贪心算法通常实现简单,容易理解。
- 效率高:很多贪心算法的时间复杂度较低,通常是线性的或对数级别的,适用于大规模问题。
缺点:
- 不能保证最优解:贪心算法并不总是能找到问题的最优解,特别是对于复杂问题(如 0-1 背包问题)。
- 不适用于所有问题:只有满足贪心选择性质和最优子结构的情况,贪心算法才会有效。
总结
贪心算法是一种适用于特定类型问题的策略,通过选择局部最优解来构造全局最优解。它简单且高效,但并不是所有问题都能通过贪心算法获得最优解,因此在使用时需要确保问题满足贪心算法的适用条件。
相关文章:
贪心算法理论
系列博客目录 文章目录 系列博客目录贪心算法 (Greedy Algorithm)贪心算法的特点贪心算法的适用条件常见的贪心算法问题贪心算法的步骤贪心算法示例:活动选择问题贪心算法的优缺点 贪心算法 (Greedy Algorithm) 贪心算法是一种在每一步选择中都采取当前状态下最优的…...
JVM之Synthetic
Synthetic是人造,合成的意思,在虚拟机很多地方使用ACC_SYNTHETIC表示编译器自动生成的,区别于我们自己写的程序代码。这样说可能比较模糊,我们举个例子:我们创建一个内部类,如下 public class TestInnerCl…...
HCIE IGP双栈综合实验
实验拓扑 实验需求及解法 本实验模拟ISP网络结构,R1/2组成国家骨干网,R3/4组成省级网络,R5/6/7组成数据中 心网络。 配置所有ipv4地址,请自行测试直连。 R1 sysname R1 interface GigabitEthernet0/0/0ip address 12.1.1.1 255.…...
【k8s】监控metrics-server
metrics-server介绍 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标,通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 就像Linux 系统一样…...
第六届国际科技创新学术交流会暨管理科学信息化与经济创新发展(MSIEID 2024)
重要信息 大会官网:msieid2024.iaecst.org (点击了解大会,参会等内容) 大会时间:2024年12月6-8日 大会地点:中国-广州 大会简介 随着全球化和信息化的不断深入,管理科学、信息化和经济发展…...
将面具贴到人脸上的过程
使用OpenCV进行人脸面具贴合和变形以适应人脸的3D透视角度,通常需要以下步骤: 人脸检测:首先需要检测图像中的人脸位置。特征点检测:在检测到的人脸区域中,找到关键特征点,如眼睛、鼻子、嘴巴等。透视变换…...
【Maven】Nexus私服
6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。一些无法从外部仓库下载到的构件,如项目组其他人员开发的…...
AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。
大家好,我是微学AI,今天给大家介绍一下AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。本文利用专家模…...
探索温度计的数字化设计:一个可视化温度数据的Web图表案例
随着科技的发展,数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面,传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表,该图表通过动态数据可视化展示了温度值,并通过渐变色…...
windows电脑上安装树莓派操作系统
在Windows电脑上安装树莓派通常涉及以下几个步骤:准备安装工具、下载树莓派系统镜像、烧录系统到SD卡、配置树莓派以及远程连接(如果需要无显示器操作)。以下是详细的步骤说明: 一、准备安装工具 安装树莓派官方烧录工具: 下载并安装Raspberry Pi Imager。这是一个官方的…...
交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比
在网络管理中,端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像(Port Mirroring) 定义:端口镜像是将一个或多个源端口的流量复制到一个目标端口,以便于网络管理员能够监控和分析…...
我不是挂王-用python实现燕双鹰小游戏
一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…...
Java:反射、注解
文章目录 1. 反射1-1. 获取Class对象的三种方式1-2. 获取类的构造器、实例化对象1-3. 获取类的成员变量1-4. 获取类的成员方法 2. 注解2-1. 元注解2-2. 解析注解 1. 反射 反射:加载类,并允许以编程的方式解剖类中的各种成员变量、方法、构造器。 1-1. …...
Java 通过枚举类减少if else
目录 一. 案例1二. 案例2三. 案例3四. 案例4 枚举类聚合封装消息 一. 案例1 涉及到EnumMap的实际使用 ⏹定义一个枚举类,用来表示日本的各种支付方法对应的code import com.fasterxml.jackson.annotation.JsonFormat;// 让jackson将前台的数据封装数据到枚举类中 J…...
单链表---移除链表元素
对于无头单向不循环链表,给出头结点head与数值val,删除链表中数据值val的所有结点 #define ListNodeDataType val struct ListNode { struct ListNode* psll;ListNodeDataType val; } 方法一---遍历删除 移除所有数值为val的链表结点,…...
认识redis 及 Ubuntu安装redis
文章目录 一. redis概念二. redis应用场景二. redis的特性四. 使用Ubuntu安装redis 一. redis概念 redis 是在内存中存储数据的中间件, 用在分布式系统 redis是客户端服务器结构的程序, 客户端服务器之间通过网络来通信 二. redis应用场景 redis可用作数据库 类似MySQL, 但…...
Java开发网络安全常见问题
1、敏感信息明文传输 用户敏感信息如手机号、银行卡号、验证码等涉及个人隐私的敏感信息不通过任何加密直接明文传输。 如下图中小红书APP 的手机短信验证码登录接口,此处没有对用户手机号和验证码等信息进行加密传输,可以很简单的截取并开展一些合法的…...
C#基础之委托,事件
文章目录 1 委托1.1 简介1.2 操作使用1.2.1 声明委托(Delegate)1.2.2 实例化委托(Delegate)1.2.3 直接调用和invoke1.2.4 Invoke 和 BeginInvoke 1.3 委托的多播1.4 委托的匿名和lambda1.4.1 匿名方法1.4.2 lambda 表达式 1.5 内置…...
nginx配置静态资源的访问
比如静态资源图片位于/mnt/software/nginx/html/static/images目录下,那么nginx.conf中的配置则为: # 静态文件目录 location /static/images/ { root /mnt/software/nginx/html; try_files $uri $uri/ 404; #找不到时提示404 …...
JS的魔法三角:constructor、prototype与__proto__
在JavaScript中,constructor、prototype和__proto__是与对象创建和继承机制紧密相关的三个概念。理解它们之间的关系对于掌握JavaScript的面向对象编程至关重要。下面将详细介绍这个魔法三角: 1. constructor 定义:constructor是一个函数&am…...
ChatGLM3-6B Streamlit应用案例:代码辅助、长文档摘要、闲聊三合一
ChatGLM3-6B Streamlit应用案例:代码辅助、长文档摘要、闲聊三合一 1. 项目简介:你的本地全能AI助手 想象一下,你正在写一段复杂的代码,卡在某个逻辑上;或者面对一份几十页的技术文档,需要快速提炼核心&a…...
项目介绍 MATLAB实现基于PSO-Q-learning 粒子群优化算法(PSO)结合Q学习算法(Q-learning)进行无人机三维路径规划(含模型描述及部分示例代码) 还请多多点一下关注 加油
MATLAB实现基于PSO-Q-learning 粒子群优化算法(PSO)结合Q学习算法(Q-learning)进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序&…...
VideoAgentTrek-ScreenFilter效果展示:远程桌面RDP协议画面中窗口标题栏识别
VideoAgentTrek-ScreenFilter效果展示:远程桌面RDP协议画面中窗口标题栏识别 你有没有遇到过这样的场景?在观看远程桌面录屏或视频会议录像时,屏幕上密密麻麻的窗口标题栏、任务栏、系统托盘图标,让人眼花缭乱。特别是当需要分析…...
JwChat避坑指南:Vue聊天组件这些隐藏配置能让体验提升200%
JwChat深度优化实战:解锁Vue聊天组件200%体验升级的隐藏技巧 当你已经用JwChat实现了基础聊天功能,却发现消息列表卡顿、表情包显示错位、历史加载闪烁——这些细节问题正在蚕食用户体验。作为基于Vue的轻量级聊天组件,JwChat的官方文档并未揭…...
Phi-3-mini-4k-instruct-gguf惊艳生成效果:5类中文任务(问答/改写/总结/建议/介绍)实测
Phi-3-mini-4k-instruct-gguf惊艳生成效果:5类中文任务实测 1. 模型介绍与测试背景 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合处理中文的问答、文本改写、摘要整理和简短创作等任务。相比大型语言模型&#x…...
工业AI全流程定制开发:以服务适配需求,做实企业数智化改造
当前工业数智化改造已成为企业提升核心竞争力的关键,但行业内普遍存在一个核心痛点:服务与企业实际需求脱节。不少企业在推进数智化过程中,陷入“重产品、轻适配”的误区,盲目采用标准化AI产品,忽视自身生产流程、设备…...
企业级“衣依”服装销售平台管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
💡实话实说:有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着电子商务的快速发展,服装行业对高效、智能化的销售管理平台需求日益增长。传统的线下销售模式在库存管理、订单处理及客户服务等方…...
Vue2项目里用Cesium加载天地图标注,保姆级避坑指南(含Token申请)
Vue2项目集成Cesium与天地图标注的工程化实践指南 当WebGIS需求遇上Vue技术栈,如何在老项目中优雅地引入三维地图能力?本文将以工程化视角,系统讲解Vue2项目中集成Cesium加载天地图标注的完整技术路径。不同于基础教程,我们将重点…...
隐私优先方案:OpenClaw+Qwen3-14B镜像处理敏感数据的5层防护
隐私优先方案:OpenClawQwen3-14B镜像处理敏感数据的5层防护 1. 为什么需要本地化隐私方案 去年处理一批客户调研数据时,我犯过一个致命错误——把包含联系方式的原始表格上传到某公有云AI平台进行清洗。三天后,公司邮箱突然收到匿名勒索邮件…...
evive嵌入式平台:集成示波器与函数发生器的Arduino Mega开发系统
1. evive嵌入式平台技术解析:面向教育与工程调试的全功能Arduino Mega开发系统evive是一个以Arduino Mega 2560为核心控制器的开源嵌入式硬件平台,专为创客教育、实验教学、原型验证与嵌入式系统调试而设计。其核心价值不在于提供更高主频或更复杂外设&a…...
