Java贪心算法实例分析
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇"Java贪心算法实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Java
千家信息网最后更新 2024年11月24日Java贪心算法实例分析
这篇"Java贪心算法实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Java贪心算法实例分析"文章吧。
贪心算法
贪心算法 (Greedy Algorithm) 指的是在每一步选择中都采取在当前状态下最好或最优的选择, 从而希望导致结果是最好或最优的算法. 贪心算法锁得到的结果不一定是最优的结果, 但是都是相对近似最优的结果.
贪心算法的优缺点:
优点: 贪心算法的代码十分简单
缺点: 很难确定一个问题是否可以用贪心算法解决
电台覆盖问题
假设存在以下的广播台, 以及广播台可以覆盖的地区:
广播台 | 覆盖地区 |
---|---|
K1 | 北京, 上海, 天津 |
K2 | 北京, 广州, 深圳 |
K3 | 上海, 杭州, 成都 |
K4 | 上海, 天津 |
K5 | 杭州, 大连 |
贪心算法的核心思想:
把所有需要覆盖的地区取集合
从电台中取覆盖集合中地区最多的一个
集合中去除已覆盖地区, 继续匹配
代码实现
import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.HashSet;public class 贪心算法 { // 集合, 存放广播台 static HashMap> broadcasts = new HashMap<>(); // 集合, 存放地区 static HashSet areas = new HashSet (); // 贪心算法 public static ArrayList Greedy() { // 创建数组存放结果 ArrayList selects = new ArrayList<>(); // 循环直至地区都覆盖 while (areas.size() != 0) { // 存放交集最大的广播台 String maxKey = null; // 存放交集最大的值 int maxKeySize = 0; // 遍历每个剩余电台 for (String key : broadcasts.keySet()) { // 取出交集个数 int currSize = getRetainSize(key); // 替换当前最大 if (currSize > 0 && currSize > maxKeySize) { maxKey = key; maxKeySize = currSize; } } // 添加广播台到结果 selects.add(maxKey); // 移除广播台 areas.removeAll(broadcasts.get(maxKey)); } return selects; } // 剩余数量 public static int getRetainSize(String key) { // 如果为空返回0 if (key == null) return 0; // 存放key对应的地区集合 HashSet tempSet = new HashSet<>(); // 取key对应的地区 tempSet.addAll(broadcasts.get(key)); // 取交集 tempSet.retainAll(areas); return tempSet.size(); } public static void main(String[] args) {// | K1 | 北京, 上海, 天津 |// | K2 | 北京, 广州, 深圳 |// | K3 | 上海, 杭州, 成都 |// | K4 | 上海, 天津 |// | K5 | 杭州, 大连 | // 创建广播台 HashSet K1 = new HashSet<>(Arrays.asList("北京", "上海", "天津")); HashSet K2 = new HashSet<>(Arrays.asList("北京", "广州", "深圳")); HashSet K3 = new HashSet<>(Arrays.asList("上海", "杭州", "成都")); HashSet K4 = new HashSet<>(Arrays.asList("上海", "天津")); HashSet K5 = new HashSet<>(Arrays.asList("杭州", "大连")); // 加入map broadcasts.put("K1", K1); broadcasts.put("K2", K2); broadcasts.put("K3", K3); broadcasts.put("K4", K4); broadcasts.put("K5", K5); areas.addAll(K1); areas.addAll(K2); areas.addAll(K3); areas.addAll(K4); areas.addAll(K5); // 调试输出 System.out.println(broadcasts); System.out.println(areas); ArrayList result = Greedy(); System.out.println(result); }}
以上就是关于"Java贪心算法实例分析"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
算法
地区
上海
广播台
广播
结果
北京
天津
杭州
内容
交集
实例
实例分析
分析
最大
电台
大连
广州
成都
深圳
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
安全合规软件开发管理制度
服务器时间到了显示未开机
无锡电话软件开发网上价格
华为服务器更换硬盘
给我找一个网络安全知识的手抄报
linux打开服务器端口
网络安全专项自查方案
小程序内容保存到后端数据库
网络安全员平均工资
河北办公系统软件开发正规平台
刘嘉译网络安全竞赛
服务器光纤网卡两个口都插吗
东营商城软件开发公司有哪些
转账截图软件开发
杭州临平软件开发培训班
数据库安全性控制的题
数据库市场份额
9价疫苗预约服务器挤爆
企事业单位定向化软件开发
数据库发展史介绍及基础操作
纳克萨玛斯服务器推荐
网络安全剧本3分钟微电影
第三届第五空间网络安全大赛
服务器主机重启之后只能本地登录
什么是域名服务器程序
如何检索数值型数据库
网络安全哪些需要实名
服务器管理口ip怎么改
阿里云服务器如何发布网站
甘肃app软件开发收费