Java贪心算法实例分析
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇"Java贪心算法实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Java
千家信息网最后更新 2025年02月06日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安全错误
数据库的锁怎样保障安全
怎么样软件开发
护苗网络安全教育资料
视频服务器选什么硬件
服务器耗流量快吗
mylsqr数据库
货运公司软件开发实训总结
税务网络安全三同步具体内容
锐捷安全代理 dns服务器
互联网保险科技大会
临沂大型软件开发公司
网络安全面临四个威胁
深圳博科思网络技术有限公司
随着科技发展互联网
网络技术工程师p10
软件开发流程梳理
服务器安全链接错误
盼达软件开发中心
c 数据库操作 事务
上海东旦软件开发有限公司
数据库数据存储粒度小
电子表格带数据库
网络安全填报志愿
视频会议服务器哪家好
互联网时代软件开发特点
服务器dp 卡
6年级网络安全手抄报内容
温州软件视频系统服务器
网络安全法全文
公司服务器设备
网络安全意识防护