从今天开始, 小白我将带大家开启 java 数据结构 & 算法的新篇章.
贪心算法 (greedy algorithm) 指的是在每一步选择中都采取在当前状态下最好或最优的选择, 从而希望导致结果是最好或最优的算法. 贪心算法锁得到的结果不一定是最优的结果, 但是都是相对近似最优的结果.
贪心算法的优缺点:
优点: 贪心算法的代码十分简单缺点: 很难确定一个问题是否可以用贪心算法解决假设存在以下的广播台, 以及广播台可以覆盖的地区:
贪心算法的核心思想:
把所有需要覆盖的地区取集合从电台中取覆盖集合中地区最多的一个集合中去除已覆盖地区, 继续匹配import java.util.arraylist;import java.util.arrays;import java.util.hashmap;import java.util.hasht;public class 贪心算法 { // 集合, 存放广播台 static hashmap<string, hasht<string>> broadcasts = new hashmap<>(); // 集合, 存放地区 static hasht<string> areas = new hasht<string>(); // 贪心算法 public static arraylist<string> greedy() { // 创建数组存放结果 arraylist<string> lects = new arraylist<>(); // 循环直至地区都覆盖 while (areas.size() != 0) { 英国alevel // 存放交集最大的广播台 string maxkey = null; // 存放交集最大的值 in赵人患鼠文言文翻译t maxkeysize = 0; // 遍历每个剩余电台 for (string key : broadcasts.keyt()) { // 取出交集个数 int currsize = getretainsize(key); // 替换当前最大 if (currsize > 0 && currsize > maxkeysize) { maxkey = key; maxkeysize = currsize; } } // 添加广播台到结果 lects.add(maxkey); // 移除广播台 areas.removeall(broadcasts.get(maxkey)); } return lects; } // 剩余数量 public static int getretainsize(string key) { // 如果为空返回0 if (key == null) return 0; // 存放key对应的地区集合 hasht<string> tempt = new hasht<>(); // 取key对应的地区 tempt.addall(broadcasts.get(key)); // 取交集 tempt.retainall(areas); return tempt.size(); } public static void main(string[] args) {// | k1 | 北京, 上海, 天津 |// | k2 | 北京, 广州, 深圳 |// | k3 | 上海, 杭州, 成都 |// | k4 | 上海, 天津 |// | k5 | 杭州, 大连 | // 创建广播台 hasht<string> k1 = new hasht<>(arrays.aslist("北京", "上海", "天津")); hasht<string> k2 = new hasht<>(arrays.aslist("北京", "广州", "深圳")); hasht<string> k3 = new hasht<>(arrays.aslist("上海", "杭州", "成都")); hasht<string> k4 = new hasht<>(arrays.aslist("上海", "天津")); 生硬的意思hasht<string> k5 = new hasht<>(arrays.aslist("杭州", "大连")); // 加入map broadcasts.put("k1", k1); broadcasts.put("k2", k2); broadcasts.put("k3", k老公的春天 电视剧3); 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<string> result = greedy(); system.out.println(result); }}
到此这篇关于java 数据结构与算法系列精讲之贪心算法的文章就介绍到这了,更多相关java 贪心算法内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-05 01:35:15,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/6abde04cd8a84c6c1c37deeecd01126e.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java 数据结构与算法系列精讲之贪心算法.doc
本文 PDF 下载地址:Java 数据结构与算法系列精讲之贪心算法.pdf
留言与评论(共有 0 条评论) |