Greedy Algorithm(贪心算法)

本文介绍了贪心算法的基本概念,强调在每步选择中都采取局部最优解,以期望达到全局最优。贪心算法在解决集合覆盖问题上表现出色,通过逐个选择能覆盖最多未覆盖地区的广播台,可以得到接近最优解的解决方案。文章还提供了问题的思路分析、代码实现及运行结果。
摘要由CSDN通过智能技术生成

贪心算法介绍

  1. 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优**(即最有利的选择),从而**希望能够导致结果是最好或者最优的算法
  2. 贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果

贪心算法最佳应用-集合覆盖

假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号?

广播台 覆盖地区
K1 “北京”, “上海”, “天津”
K2 “广州”, “北京”, “深圳”
K3 “成都”, “上海”, “杭州”
K4 “上海”, “天津”
K5 “杭州”, “大连”

思路分析

  1. 目前并没有算法可以快速计算得到准备的值,使用贪婪算法,则可以得到非常接近的解,并且效率高。
  2. 遍历所有的广播电台, 找到一个覆盖最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系)
  3. 将这个电台加入到一个集合中(比如 ArrayList), 想办法把该电台覆盖的地区在下次比较时去掉。
  4. 重复1~3 步直到覆盖全部的地区

代码实现

public class GreedyAlgorithm {
   
    public static void main(String[] args) {
   
        // 创建广播电台,放入到Map中
        HashMap<String, HashSet<String>> broadcasts = new HashMap<>();

        HashSet<String> set1 = new HashSet<>();
        set1.add("北京");
        set1.add("上海");
        set1.add("天津");

        HashSet<String> set2 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值