贪心算法java

贪心算法简介

贪心算法是一种在每一步选择中都采取在当前状态下最优(局部最优)的选择,从而希望导致结果是全局最优的算法。贪心算法通常用于解决最优化问题,如最短路径、最小生成树、任务调度等。

贪心算法的基本步骤

  1. 问题分析:明确问题的目标,确定是否可以通过贪心策略解决。
  2. 选择贪心策略:设计一个局部最优的选择标准。
  3. 证明贪心选择性质:确保局部最优选择能导致全局最优解。
  4. 实现算法:根据贪心策略编写代码。

贪心算法的Java实现示例

示例1:找零问题

给定不同面额的硬币和一个总金额,计算最少需要多少枚硬币来凑成总金额。

import java.util.Arrays;public class CoinChange {public static int minCoins(int[] coins, int amount) {Arrays.sort(coins); // 排序以便从大到小使用int count = 0;for (int i = coins.length - 1; i >= 0; i--) {while (amount >= coins[i]) {amount -= coins[i];count++;}}return amount == 0 ? count : -1; // 如果无法凑整返回-1}public static void main(String[] args) {int[] coins = {1, 5, 10, 25};int amount = 63;System.out.println("最少硬币数: " + minCoins(coins, amount));}
}

示例2:活动选择问题

给定一组活动,每个活动有开始时间和结束时间,选择尽可能多的互不冲突的活动。

import java.util.ArrayList;
import java.util.Comparator;public class ActivitySelection {static class Activity {int start, end;Activity(int start, int end) {this.start = start;this.end = end;}}public static ArrayList<Activity> selectActivities(Activity[] activities) {ArrayList<Activity> result = new ArrayList<>();// 按结束时间排序Arrays.sort(activities, Comparator.comparingInt(a -> a.end));result.add(activities[0]);int lastEnd = activities[0].end;for (int i = 1; i < activities.length; i++) {if (activities[i].start >= lastEnd) {result.add(activities[i]);lastEnd = activities[i].end;}}return result;}public static void main(String[] args) {Activity[] activities = {new Activity(1, 4),new Activity(3, 5),new Activity(0, 6),new Activity(5, 7),new Activity(8, 9)};ArrayList<Activity> selected = selectActivities(activities);System.out.println("选择的活动数量: " + selected.size());}
}

贪心算法的适用条件

  1. 贪心选择性质:每一步的局部最优选择能导致全局最优解。
  2. 最优子结构:问题的最优解包含子问题的最优解。

贪心算法的局限性

贪心算法并不总是能得到最优解,例如在部分背包问题中,贪心策略可能无法得到全局最优解。因此,在使用贪心算法前,需要验证其正确性。

总结

贪心算法通过局部最优选择逐步构建全局最优解,适用于某些特定类型的问题。Java实现时,通常需要排序或优先队列来辅助选择。理解贪心算法的适用条件和局限性是正确使用它的关键。

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

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

相关文章

【华为OD】解锁犯罪时间

【华为OD】解锁犯罪时间 题目描述 警察在侦破一个案件时&#xff0c;得到了线人给出的可能犯罪时间&#xff0c;形如"HH:MM"表示的时刻。根据警察和线人的约定&#xff0c;为了隐蔽&#xff0c;该时间是修改过的&#xff0c;解密规则为&#xff1a;利用当前出现过的数…

基于linux操作系统的mysql安装

一、检查自己的操作系统是否已经有存在的mysql 1.存在 2.不存在 二、基于操作系统不存在mysql,找官方yum源 网址&#xff1a; Index of /232905https://repo.mysql.com/ 网站打开是这样 看看自己的操作系统是哪个版本&#xff0c;再下载哪个版本&#xff0c;如果和我一样装…

如何用 Git Hook 和 CI 流水线为 FastAPI 项目保驾护航?

url: /posts/fc4ef84559e04693a620d0714cb30787/ title: 如何用Git Hook和CI流水线为FastAPI项目保驾护航? date: 2025-09-14T00:12:42+08:00 lastmod: 2025-09-14T00:12:42+08:00 author: cmdragon summary: 持续集成(CI)在FastAPI项目中通过频繁合并代码和自动验证,确保…

【微服务】SpringBoot 整合Kafka 项目实战操作详解

目录 一、前言 二、Kafka 介绍 2.1 什么是 Apache Kafka 2.2 Kafka 核心概念与架构 2.3 Kafka 为什么如此强大 2.4 Kafka 在微服务领域的应用场景 三、Docker 部署Kakfa服务 3.1 环境准备 3.2 Docker部署Kafka操作过程 3.2.1 创建docker网络 3.2.2 启动zookeeper容器…

多楼层室内定位可视化 Demo(A*路径避障)

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>多楼层室内定位可视化 Demo&#xff08;A*避障&#xff09;</title> <style>body { margin: 0; overflow: hidden; }#layerControls { p…

vue2+jessibuca播放h265视频(能播h264)

文档地址&#xff1a;http://jessibuca.monibuca.com/api.html#background 1,文件放在public中 2,在html中引入 3&#xff0c;子组件 <template><div :id"container id"></div> </template><script> export default {props: [url,…

Docker命令大全:从基础到高级实战指南

Docker命令大全&#xff1a;从基础到高级实战指南 Docker作为现代容器化技术的核心工具&#xff0c;其命令体系是开发运维的必备技能。本文将系统整理常用命令&#xff0c;助您高效管理容器生态。一、基础命令篇 1. 镜像管理 # 拉取镜像 $ docker pull nginx:latest# 查看本地镜…

不邻排列:如何优雅地避开“数字CP“

排列组合奇妙冒险&#xff1a;如何优雅地避开"数字CP"&#xff1f; ——容斥原理教你破解连续数对排列难题 &#x1f4dc; 问题描述 题目&#xff1a;求1,2,3,4,5,6,7,81,2,3,4,5,6,7,81,2,3,4,5,6,7,8的排列个数&#xff0c;使得排列中不出现连续的12,23,34,45,56,6…

S7-200 SMART PLC 安全全指南:配置、漏洞解析与复现防护

在工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;作为核心控制单元&#xff0c;其安全性直接关系到生产系统的稳定运行与数据安全。西门子 S7-200 SMART 系列 PLC 凭借高性价比、易用性等优势&#xff0c;广泛应用于中小型自动化项目。但实际使用中&a…

【计算机网络 | 第14篇】应用层协议

文章目录 应用层协议的核心定义&#xff1a;“通信合同”的关键内容&#x1f95d;应用层协议的分类&#xff1a;公共标准 vs 专有协议&#x1f9fe;公共标准协议专有协议 应用层协议与网络应用的关系&#x1f914;案例1&#xff1a;Web应用案例2&#xff1a;Netflix视频服务 应…

小迪web自用笔记33

再次提到预编译&#xff0c;不会改变固定逻辑。id等于什么的只能更换页面。过滤器&#xff1a;代码一旦执行在页面中&#xff0c;就会执行&#xff0c;xss跨站。Js的特性是显示在页面中之后开始执行&#xff0c;那个代码是打印过后然后再渲染。是的&#xff0c;核心是**“打印&…

Zynq开发实践(FPGA之第一个vivado工程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】数字电路设计&#xff0c;如果仅仅是写写代码&#xff0c;做做verilog仿真&#xff0c;那么其实是不需要转移到fpga上面的。这就好比是算法工程师&a…

【Selenium】Selenium 测试失败排查:一次元素定位超时的完整解决之旅

Selenium 测试失败排查:一次元素定位超时的完整解决之旅 在自动化测试过程中,我们经常会遇到元素定位超时的问题。本文记录了一次完整的 Selenium TimeoutException 排查过程,从问题发现到最终解决,涵盖了各种常见陷阱和解决方案。 问题背景 测试用例在执行过程中失败,…

32.网络基础概念(二)

局域网网络传输流程图两台主机在同一个局域网&#xff0c;是否能够直接通信&#xff1f;以太网原理举例&#xff1a;上课&#xff0c;老师点名小王让他站起来回答问题。教室里的其他人是可以听见的&#xff0c;为什么其他人不响应&#xff1f;因为老师叫的是小王&#xff0c;和…

【高并发内存池】六、三种缓存的回收内存过程

文章目录前言Ⅰ. thread cache的内存回收Ⅱ. central cache的内存回收Ⅲ. page cache的内存回收前言 ​ 前面我们将内存的申请流程都走通了&#xff0c;现在就是内存回收的过程&#xff0c;主要是从 thread cache 开始&#xff0c;一层一层往下回收&#xff0c;因为我们调用的…

DeerFlow 实践:华为IPD流程的评审智能体设计

目录 一、项目背景与目标 二、IPD 流程关键评审点与 TR 点解析 &#xff08;一&#xff09;4 个关键评审点 &#xff08;二&#xff09;6 个 TR 点 三、评审智能体详细设计与协作机制 机制设计核心原则 &#xff08;一&#xff09;概念评审&#xff08;CDCP&#xff09;…

【ubuntu】ubuntu中找不到串口设备问题排查

ubuntu中找不到串口问题排查1. 检查设备识别情况2. 检查并安装驱动3. 检查内核消息4. 禁用brltty服务1. 停止并禁用 brltty 服务2. 完全移除 brltty 包3. 重启系统或重新插拔设备5.输出结果问题&#xff1a;虚拟机ubuntu中&#xff0c;已经显示串口设备连接成功&#xff0c;但是…

Unity 性能优化 之 静态资源优化 (音频 | 模型 | 纹理 | 动画)

Unity 之 性能优化 -- 静态资源优化参考性能指标静态资源资源工作流程资源分类原理小结Audio 实战优化建议模型导入工作流程DCC中模型导出.DCC中Mesh生产规范模型导出检查流程模型优化建议纹理优化纹理基础概念纹理类型纹理大小纹理颜色空间纹理压缩纹理图集纹理过滤纹理Mipmap…

GitHub 热榜项目 - 日榜(2025-09-13)

GitHub 热榜项目 - 日榜(2025-09-13) 生成于&#xff1a;2025-09-13 统计摘要 共发现热门项目&#xff1a;18 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜项目呈现三大技术热点&#xff1a;AI开发工具化&#xff08;如GenKit、ROMA多智能体框架&#xff…

Pytest 常见问题及其解决方案

常见问题及解决方案 1. 测试通过了,但覆盖率不达标 现象: 虽然所有测试都通过了,但覆盖率报告显示某些代码没有被覆盖。 解决方案: 检查覆盖率配置:确保 .coveragerc 或 pytest.ini 中正确设置了要分析的源代码路径。 使用标记(markers)排除测试文件本身:避免测试代…