贪心算法Java实现

贪心算法Java实现

贪心算法介绍

贪心算法(贪婪算法)是一个遵循启发式解决问题的算法范式,核心思想是通过在每一步的选择中都选用当前步骤下最优的选择,期望结果是最优的算法。贪心算法得到的结果不一定是最优结果,但是都是相对接近最优解的结果。

步骤

  1. 建立问题的数学模型,并构建一个备选答案区;
  2. 把待求解的问题分成多个子问题;
  3. 使用一个选择函数对每个子问题求得最优解,并判断是否可以用于整个问题;
  4. 把所有子问题的最优解合成一个整个问题的解。

应用场景

贪心算法可以用来求最小生成树、哈夫曼编码、集合覆盖问题等。

使用实例

  1. 假设存在下标中的需要付费的广播台,以及广播台信号可以覆盖的地区,这样选择最少的广播台让所有地区都可以接收到信息。
广播台覆盖地区
K1北京,上海,天津
K2广州,北京,深圳
K3成都,上海,杭州
K4上海,天津
K5杭州,大连
  1. 解决方案
  • 使用穷举列出每个可能的广播台的集合,假设总有有n个广播台,则广播台组合总共有2n-1个。

  • 使用贪心算法获取近似解,选择策略上,需要选择覆盖所有地区的最小集合,步骤如下。

    • 遍历所有广播台,找到一个覆盖了最多还没有被覆盖地区的电台,这个电台可能包含已经覆盖了地区,可以忽略;
    • 把这个电台放入到一个集合中,在下次比较时去掉该电台覆盖的地区;
    • 重复前两个步骤直到覆盖了全部地区。
  1. 参考代码
import java.util.*;public class Greedy {//创建广播台Map<String, HashSet<String>> broadcasts = new HashMap<>();//添加各个电台HashSet<String> set1 = new HashSet<>(Arrays.asList("北京", "上海", "天津"));HashSet<String> set2 = new HashSet<>(Arrays.asList("广州", "北京", "深圳"));HashSet<String> set3 = new HashSet<>(Arrays.asList("成都", "上海", "杭州"));HashSet<String> set4 = new HashSet<>(Arrays.asList("上海", "天津"));HashSet<String> set5 = new HashSet<>(Arrays.asList("杭州", "大连"));broadcasts.put("K1", set1);broadcasts.put("K2", set2);broadcasts.put("K3", set3);broadcasts.put("K4", set4);broadcasts.put("K5", set5);//存放所有地区HashSet<String> allAreas = new HashSet<>(Arrays.asList("北京", "上海", "天津", "广州""深圳", "成都", "杭州", "大连"));//存放选择的电台List<String> selects = new ArrayList<>();//定义一个临时的集合存放遍历过程中的电台覆盖的地区和当前还没有覆盖的地区的交集HashSet<String> tempSet = new HashSet<>();//定义maxKey,保存在一次遍历过程中,能够覆盖最大未覆盖地区对应的电台的keyString maxKey = null;//如果allAreas不为0,就说明还有地区没有被覆盖while(allAreas.size() != 0) {//每次清理maxKey和tempSetmaxKey = null;for (String key:broadcasts.keySet()) {tempSet.clear();//当前Key能够覆盖的地区HashSet<String> areas = broadcasts.get(key);tempSet.addAll(areas);//求出tempSet和allAreas集合的交集,重新赋值给tempSettempSet.retainAll(allAreas);//如果当前集合包含的未覆盖地区的数量比maxKey指向的集合地区还多,需要重新修改maxKeyif (tempSet.size() > 0 && (maxKey == null || tempSet.size() > broadcasts.get(maxKey).size())) {maxKey = key;}}//如果maxKey不为空,就添加到selects,并将maxKey的电台从需要覆盖的电台中移除if (maxKey != null) {selects.add(maxKey);allAreas.removeAll(broadcasts.get(maxKey));}}System.out.println("得到的选择结果是" + selects);
}

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

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

相关文章

如何使用亮数据的数据IP代理及数据工具采集市场情报

如何使用亮数据的数据IP代理及数据工具采集市场情报 亮数据为粉丝提供了10美金的抵用券&#xff0c;成功注册账户&#xff0c;并登录后在用户界面里输入折扣代码即可享受抵扣&#xff01; 折扣代码&#xff1a;zhouzhou 访问页面&#xff1a;https://www.bright.cn/proxy-types…

对抗样本攻击

对抗样本是指经过特殊设计或调整的输入数据&#xff0c;旨在欺骗人工智能模型&#xff0c;使其产生错误的预测或输出。对抗样本通常是通过对原始输入进行微小但精心计算的改变&#xff0c;使得模型产生意外的结果。这种模糊化的输入可能难以从人类角度甄别&#xff0c;但对机器…

Laravel 开发Api规范

一&#xff0c;修改时区 配置 config/app.php 文件 // 时区修改&#xff0c;感觉两者皆可&#xff0c;自己根据实际情况定义 timezone > PRC, // 大陆时间二&#xff0c;设置 Accept 头中间件 accept头即为客户端请求头&#xff0c;做成中间件来使用。Accept 决定了响应返…

gma 教程:计算标准化降水指数(SPI)

安装 gma&#xff1a;pip install gma &#xff08;依赖的 gdal 需自行安装&#xff09; 本文基于&#xff1a;gma 2.0.8&#xff0c;Python 3.10 本文用到数据请从 gma 网站获取&#xff1a;https://gma.luosgeo.com/UserGuide/climet/Index/SPI.html 。 SPEI 函数简介 gma.c…

c#编程基础学习之方法

目录 C#方法方法参数默认参数值多个参数返回值命名参数 方法重载 C#方法 实例 在程序类内创建一个方法&#xff1a; class Program {static void MyMethod() //static 静态意味着方法属于程序类&#xff0c;而不是程序类的对象。void 表示此方法没有返回值。MyMethod() 是方法…

比较720组结构数列的收敛过程

在行&#xff0c;列可自由变换的平面上3点结构只有6个 这次计算由这6个结构排列组合&#xff0c;构成的所有720个不重复数列的递推收敛过程。 结果表明&#xff0c;所有的数列都可以在有限步内收敛。 有461个数列在3-4-3的递推过程中是天然稳定的&#xff0c;收敛结果就是本身…

上海计算机学会 2024年3月月赛 丙组T1 最近的数字(数学)

第一题&#xff1a;T1最近的数字 标签&#xff1a;数学题意&#xff1a;给定两个正整数 n n n与 d d d&#xff0c;请找到所有最接近 n n n且是 d d d的倍数的整数。如果有多个数字满足要求&#xff0c;从小到大输出。数据范围&#xff1a; 1 ≤ n , d ≤ 1 , 000 , 000 , 000…

STM32学习和实践笔记(4):分析和理解GPIO_InitTypeDef GPIO_InitStructure (c)

第二个成员变量是GPIOSpeed_TypeDef GPIO_Speed&#xff1b;也与int a一样同理。 GPIOSpeed_TypeDef是一个枚举类型&#xff0c;其定义如下&#xff1a; typedef enum { GPIO_Speed_10MHz 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef; #define IS_GPI…

.NET Standard、.NET Framework 、.NET Core三者的关系与区别?

.NET Standard、.NET Framework 和 .NET Core 是 .NET 平台生态中的三个关键概念&#xff0c;它们之间存在明确的关系和显著的区别。下面分别阐述它们各自的角色以及相互间的关系&#xff1a; .NET Standard 角色&#xff1a; .NET Standard 是一套正式的 API 规范&#xff0c…

项目经理常用的工具模型有哪些?

项目经理常用的工具模型包括但不限于以下几种&#xff1a; 甘特图&#xff1a;这是一种将大型项目划分为几个阶段&#xff0c;并展示项目进度的工具。在甘特图中&#xff0c;可以清晰地看到每个任务的开始和结束时间&#xff0c;以及任务之间的依赖关系。 工作分解结构&#…

Leetcode刷题-哈希表详细总结(Java)

哈希表 当我们想使⽤哈希法来解决问题的时候&#xff0c;我们⼀般会选择如下三种数据结构。 数组set &#xff08;集合&#xff09;map&#xff08;映射&#xff09; 当我们遇到了要快速判断⼀个元素是否出现集合⾥的时候&#xff0c;就要考虑哈希法。如果在做⾯试题⽬的时候…

解决npm install报错npm ERR Unsupported URL Type “npm:“: npm:vue-loader@^16.1.0 问题

node版本以及npm版本太旧会造成这个问题 1.下载安装nvm 网址&#xff1a;Releases coreybutler/nvm-windows GitHub 2.安装 后使用nvm命令安装切换node版本 安装node版本&#xff1a; nvm install 12.22.12 等待安装完成&#xff0c;使用命令切换版本 nvm use 12.22.1…

Samba 总是需要输入网络凭证

输入网络凭证&#xff1a; 用户名是 cat /etc/samba/smb.conf&#xff0c;查看 valid users mxw 为用户名。而不是其他账号名或者用户名&#xff0c;更不是登录计算机时的计算机名&#xff1b; 密码是 需要记住安装samba服务器时&#xff0c;自己设置的password&#xff1…

LED发光模组的故障及解决方法

LED发光模组在应用过程中可能会出现各种故障&#xff0c;正确诊断并采取相应的解决方法至关重要&#xff0c;以下是一些常见故障现象及其解决方法的总结&#xff1a; 一、现象&#xff1a;所有的LED闪烁 问题&#xff1a;接触不良 解决方法&#xff1a;检查并重新固定松动处&am…

单片机为什么还在用C语言编程?

单片机产品的成本是非常敏感的。因此对于单片机开发来说&#xff0c;最重要的是在极其有限的ROM和RAM中实现最多产品的功能。或者反过来说&#xff0c;实现相同的产品功能&#xff0c;所需要的ROM和RAM越小越好&#xff0c;在开始前我有一些资料&#xff0c;是我根据网友给的问…

linux网络预备

网络预备 网络协议初识 协议分层 打电话例子 在这个例子中, 我们的协议只有两层; 但是实际的网络通信会更加复杂, 需要分更多的层次。 分层最大的好处在于 “封装” 。 OSI七层模型 OSI&#xff08;Open System Interconnection&#xff0c;开放系统互连&#xff09;七层网…

Datacom HCIP笔记-路由策略与路由控制 之二

路由策略和策略的区别&#xff1f; 路由策略&#xff1a; 操作的对象是路由表条目&#xff0c; 实现路由过滤&#xff0c;从而实现访问控制&#xff0c;引入时过滤&#xff0c;发送和接收路由时过滤。 通过配置cost&#xff0c;来实现路径的控制。 策略路由&#xff1a; 对…

【Vue3源码学习】— CH2.8 Vue 3 响应式系统小结

Vue 3 响应式系统小结 1.核心概念1.1 Proxy和Reflect1.2 响应式API1.3 依赖收集与更新触发1.4 触发更新&#xff08;Triggering Updates&#xff09;&#xff1a;1.5 副作用函数&#xff08;Effect&#xff09;1.6 计算属性和观察者1.7 EffectScope1.8 性能优化&#xff1a; 2.…

GPT-5将在6月发布前进行「红队进攻测试」

“GPT-5将在6月发布”的消息刷屏了AI朋友圈。这则消息之所以被无数人相信并转发&#xff0c;是因为已经有不少技术人员在社交平台上晒出了「红队进攻测试」邀请。 基于 GPT系列庞大的用户体量和影响力&#xff0c;OpenAI 将更加重视GPT-5 的安全性&#xff0c;作为GPT-5上市前的…

【编译原理】手工打造语法分析器

重点&#xff1a; 语法分析的原理递归下降算法&#xff08;Recursive Descent Parsing&#xff09;上下文无关文法&#xff08;Context-free Grammar&#xff0c;CFG&#xff09; 关键点&#xff1a; 左递归问题深度遍历求值 - 后续遍历 上一篇「词法分析器」将字符串拆分为…