浅析Java贪心算法
浅析Java贪心算法
在计算机科学中,贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法并不总是能够得到全局最优解,但在很多问题上,它能够产生很好的近似解,且贪心算法实现简单,性能高效,因此在实际应用中非常广泛。
一、贪心算法的基本思路
贪心算法的基本思路是:从问题的某一个初始解出发,逐步逼近给定的目标,以尽可能快的地求得更好的解。当某个算法在每一步选择中都采取最好或最优(即最有利)的选择,从而能够导致结果是最好或最优的算法,我们称之为贪心算法。
贪心算法有两个重要的性质:
-
贪心选择性质:指的是所求问题的整体最优解可以通过一系列局部最优的选择来达到。这是贪心算法可行的第一个基本要素。贪心选择性质是贪心算法能否获得全局最优解的关键。
-
无后效性:即某个状态以后的过程不会影响以前的状态,只与当前状态有关。也就是说,“未来与过去无关”,当贪心策略做出某种选择后,它只影响对尚未做出选择的部分,而对已做出的选择不产生影响。
二、贪心算法的性质
2.1 最优子结构性质
如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构性质。问题的最优子结构性质是该问题可用贪心算法求解的关键特征。
2.2 贪心选择性质
当一个问题的整体最优解可通过一系列局部最优的选择来达到时,称该问题具有贪心选择性质。对于许多问题,在选择贪心策略时,往往具有多种可供选择的贪心策略。对于同一个问题,选择不同的贪心策略,可能导致结果的好坏不同。
三、贪心算法的实现示例
3.1 活动选择问题
活动选择问题是一个经典的贪心算法问题。假设有n个活动,每个活动都有一个开始时间和一个结束时间,活动i的开始时间为si,结束时间为fi。问题是在给定时间区间内,如何选择最多的活动,使得这些活动互不重叠。
贪心策略
- 尽早结束(选择结束时间最早的活动)
Java实现
import java.util.Arrays;
import java.util.Comparator;public class ActivitySelector {static class Activity implements Comparable<Activity> {int start, finish;Activity(int s, int f) {start = s;finish = f;}@Overridepublic int compareTo(Activity other) {return this.finish - other.finish; // 按结束时间升序排序}}static int greedySelector(Activity[] arr, int n) {Arrays.sort(arr, Comparator.comparingInt(a -> a.finish)); // 使用Java 8的排序方式int count = 1; // 至少有一个活动被选中int last = 0; // 最后一个被选中的活动的索引for (int i = 1; i < n; i++) {if (arr[i].start >= arr[last].finish) { // 如果当前活动不与前一个活动重叠last = i; // 更新最后一个被选中的活动的索引count++; // 活动计数器加1}}return count;}public static void main(String[] args) {Activity[] arr = {new Activity(1, 2), new Activity(3, 4), new Activity(0, 6), new Activity(5, 7), new Activity(8, 9)};int n = arr.length;System.out.println("Maximum number of activities that can be selected = " + greedySelector(arr, n));}
}
在这个示例中,我们首先定义了一个Activity类来表示活动,并实现了Comparable接口以便对活动进行排序。greedySelector方法接受一个活动数组和数组的长度作为输入,并返回可以选择的最大活动数。在main方法中,我们创建了一个活动数组并调用了greedySelector方法来找到可以选择的最大活动数。
四、总结
贪心算法是一种在每一步选择中都采取最好或最优的选择,从而希望导致全局最好或最优解的算法。虽然贪心算法并不总是能够得到全局最优解,但在很多问题上,它能够产生很好的近似解,且实现简单,性能高效。贪心算法的关键在于贪心策略的选择,这需要根据具体问题的性质来确定。
相关文章:
浅析Java贪心算法
浅析Java贪心算法 在计算机科学中,贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法并不总是能够得到全…...
vue3.0(五) reactive全家桶
文章目录 1 reactive1.1 reactive的应用1.2 reactive的特点1.3 reactive的注意1.4 reactive的局限性 2 toRefs3 isReactive4 shallowReactive5 readonly5.1 readonly 详细信息5.2 readonly函数创建一个只读的响应式对象5.3 如何修改嵌套在只读响应式对象中的对象? 6 isReadonl…...
Selenium 自动化 —— 四种等待(wait)机制
更多关于Selenium的知识请访问CSND论坛“兰亭序咖啡”的专栏:专栏《Selenium 从入门到精通》 目录 目录 需要等待的场景 自己实现等待逻辑 Selenium 提供的三种等待机制 隐式等待(Implicit Waits) 隐式等待的优点 隐式等待的缺点 …...
每日两题 / 437. 路径总和 III 105. 从前序与中序遍历序列构造二叉树(LeetCode热题100)
437. 路径总和 III - 力扣(LeetCode) 前序遍历时,维护当前路径(根节点开始)的路径和,同时记录路径上每个节点的路径和 假设当前路径和为cur,那么ans 路径和(cur - target)的出现次数 /*** D…...
matlab使用2-基础绘图
matlab使用2-基础绘图 文章目录 matlab使用2-基础绘图1. 二维平面绘图2. 三维立体绘图3. 图形窗口的分割 1. 二维平面绘图 % 创建一些二维数据 x 0:0.01:10; % x轴的数据点,从0到10,间隔为0.01 y sin(x); % y轴的数据点,是x的正弦…...
嵌入式开发四大平台介绍
MCU(Micro Control Unit)四大平台介绍) 单片机优点:缺点:总结: DSP digital signal processingARM优点:缺点:总结 FPGA什么事FPGA(集成元件库)FPGA开发方法—…...
《Python编程从入门到实践》day28
# 昨日知识点回顾 安装Matplotlib 绘制简单的折线图 # 今日知识点学习 15.2.1 修改标签文字和线条粗细 # module backend_interagg has no attribute FigureCanvas. Did you mean: FigureCanvasAgg? # 解决办法:matplotlib切换图形界面显示终端TkAgg。 #…...
STC8增强型单片机开发【定时器Timer⭐】
目录 一、引言 二、定时器基础知识 三、STC8定时器配置 四、代码示例 五、总结 一、引言 在单片机开发中,定时器(Timer)是一个极其重要的组件,它允许开发者基于时间触发各种事件或任务。STC8增强型单片机作为一款功能丰富的…...
C语言实训项目源码-02餐厅饭卡管理系统-C语言实训C语言大作业小项目
C语言餐厅饭卡管理系统 一、主要功能 主要功能模块 页面名称 实现功能 负责人 进入页面 进入程序 主函数 系统主要功能 修改密码函数 修改密码 充值,显示函数 饭卡充值与信息显示 购买饭菜…...
Linux第四节--常见的指令介绍集合(持续更新中)
点赞关注不迷路!本节涉及初识Linux第四节,主要为常见的几条指令介绍。 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 ✨ 加关注👀 期待与你共同进步! 1. more指令 语法:more [选项][文件]…...
Apache Sqoop:高效数据传输工具搭建与使用教程
目录 引言一、环境准备二、安装sqoop下载sqoop包解压文件 三、配置Sqoop下载mysql驱动拷贝hive的归档文件配置环境变量修改sqoop-env.sh配置文件替换版本的commons-lang的jar包 验证Sqoop安装查看Sqoop版本测试Sqoop连接MySQL数据库是否成功查看数据库查看数据表去除警告信息 四…...
【C++初阶】第十一站:list的介绍及使用
目录 list的介绍及使用 1.list的含义 2.list的介绍 3.list的使用 1.list的构造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾删 和 头插头删 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…...
【devops】Linux 日常磁盘清理 ubuntu 清理大文件 docker 镜像清理
日常磁盘清理 1、查找大文件 find / -type f -size 1G2、清理docker无用镜像(drone产生的残余镜像文件) docker system prune -a一、清理服务器磁盘 1、查找大文件 在Ubuntu系统中,你可以使用find命令来查找大文件。find命令是一个强大的…...
2024年资阳市企业技术中心申报条件、流程要求及支持政策须知
第一章 总则 第一条 为深入贯彻中央、省、市大力实施创新驱动发展战略的部署要求,进一步强化企业技术创新主体地位,引导和支持企业增强技术创新能力,健全技术创新市场导向机制,规范我市企业技术中心(下称“市企业技术…...
社交媒体数据恢复:如流
如流,原名百度Hi,是百度公司开发的一款即时通讯软体。百度Hi具备文字消息、视讯、通话、文件传输等功能。 查找备份:如果您之前有备份如流中的数据,您可以尝试从备份中恢复。如流支持备份至云端,如百度网盘等。 联系客…...
【微信小程序开发(从零到一)【婚礼邀请函】制作】——任务分析和效果实现的前期准备(1)
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...
独孤思维:模仿别人赚钱太难,很痛苦
01 独孤早年混群的时候,想着成为群红,引流。 结果不得其法,别人要什么项目,我就把满是钩子的副业资料发群里。 被群主踢了出去。 我当时还不理解。 后来自己做了社群以后,才明白,这种行为,…...
图片转base64【Vue + 纯Html】
1.template <el-form-item label"图片"><div class"image-upload-container"><input type"file" id"imageUpload" class"image-upload" change"convertToBase64" /><label for"imageU…...
【从零开始学习Redis | 第十一篇】快速介绍Redis持久化策略
前言: Redis 作为一种快速、高效的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景。然而,由于其特性是基于内存的,一旦服务器进程退出,内存中的数据就会丢失。为了解决这一问题,Redis 提供了持久…...
在Ubuntu中如何解压zip压缩包??
2024年5月15日,周三上午 使用 unzip 命令 unzip 文件名.zip这会将压缩包中的内容解压到当前目录。如果想解压到特定目录,可以使用 -d 选项,例如: unzip 文件名.zip -d 目标目录使用 7-zip 还可以安装 7-zip 工具来解压 ZIP 文件。…...
幻兽帕鲁服务器从1.4.1升级到1.5.0踩坑实录:Docker镜像更新、客户端兼容性与回滚指南
幻兽帕鲁服务器1.5.0升级全流程实战:从风险评估到完美回滚 当游戏社区还沉浸在1.4.1版本的稳定体验时,1.5.0版本的更新公告已经在玩家群中激起千层浪。作为服务器管理员,每次版本迭代都像走在钢索上——新特性带来的诱惑与未知风险永远并存。…...
量子变分算法优化:ADAPT-VQE与ASC协同技术解析
1. 量子变分算法优化背景与挑战 量子变分特征求解器(VQE)作为当前量子计算化学模拟的核心算法,其核心思想是通过参数化量子电路(PQC)制备试探波函数,并利用经典优化器调整参数以逼近目标哈密顿量的基态能量…...
git讲解,git vscode 对应,git pycharm 对应
文章目录安装git配置git什么是git 仓库创建版本库git addvscodegit statusgit addgit statuspycharm变更列表视图如果创建文件的时候选择了添加到git版本控制暂存区域视图时光穿梭机版本回退修改文件vscodepycharm变更列表暂存区域git logvscodepycharmgit reset 版本回退git r…...
设计饮用水水质饮用习惯监测程序,统计每日饮水量,提醒科学补水养成健康习惯。
饮用水水质与饮水习惯监测程序——基于日志与规则的健康行为实验系统一、实际应用场景描述在现代城市生活中,很多人存在以下问题:- 不清楚自己每天喝了多少水- 饮水时间集中在晚上或运动后- 长期饮水不足或过量- 对水质来源缺乏基本记录意识本项目的目标…...
3分钟搞定OFD转PDF:免费开源工具Ofd2Pdf完整使用指南
3分钟搞定OFD转PDF:免费开源工具Ofd2Pdf完整使用指南 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 还在为打不开OFD文件而烦恼吗?今天我要向你推荐一个完全免费、简单高效的…...
Unity UI布局避坑指南:搞懂LayoutGroup里Control Child Size和Child Force Expand到底怎么选
Unity UI布局深度解析:Control Child Size与Child Force Expand实战决策指南 在Unity的UI系统开发中,LayoutGroup组件就像一位严格的舞台导演,而UI元素则是需要精准定位的演员。当导演的指令(属性配置)不够明确时&…...
像素空间解算赋能,跳出UWB硬件受限技术天花板——四无架构+孪生定位重构行业格局
像素空间解算赋能,跳出UWB硬件受限技术天花板——四无架构孪生定位重构行业格局镜像视界浙江科技有限公司,以像素空间解算技术为核心突破点,彻底跳出传统UWB有源定位的硬件受限技术天花板,独创“四无架构”轻量化落地体系…...
Windows远程桌面终极解锁指南:如何免费开启多用户并发连接
Windows远程桌面终极解锁指南:如何免费开启多用户并发连接 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows家庭版无法使用远程桌面而烦恼吗?RDP Wrapper Library这款开源工具能…...
告别ActiveX!用WebSocket+JavaScript在Chrome/Firefox里直接调用扫描仪(附完整代码)
现代浏览器无插件扫描方案:WebSocket与JavaScript的完美结合 曾几何时,企业办公系统中扫描文档需要依赖特定的浏览器和插件。如今,随着技术演进,我们终于可以摆脱ActiveX和NPAPI的束缚,在Chrome、Firefox等现代浏览器中…...
VolumetricLighting雾管理器系统:LightManagerFogLights与FogEllipsoid本地密度控制
VolumetricLighting雾管理器系统:LightManagerFogLights与FogEllipsoid本地密度控制 【免费下载链接】VolumetricLighting Lighting effects implemented for the Adam demo: volumetric fog, area lights and tube lights 项目地址: https://gitcode.com/gh_mirr…...
