JAVA算法 贪心算法

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

集合覆盖
在这里插入图片描述

在这里插入图片描述

public class Setover {
    public static void main(String[] args) {
        HashMap<String, HashSet<String>> map = new HashMap<>();
        HashSet<String> area1 = new HashSet<>();
        HashSet<String> area2 = new HashSet<>();
        HashSet<String> area3 = new HashSet<>();
        HashSet<String> area4 = new HashSet<>();
        HashSet<String> area5 = new HashSet<>();
        area1.add("北京");
        area1.add("上海");
        area1.add("天津");
        map.put("K1",area1);
        area2.add("广州");
        area2.add("北京");
        area2.add("深圳");
        map.put("K2", area2);
        area3.add("成都");
        area3.add("上海");
        area3.add("杭州");
        map.put("K3", area3);
        area4.add("上海");
        area4.add("天津");
        map.put("K4", area4);
        area5.add("杭州");
        area5.add("大连");
        map.put("K5", area5);
        //全部区域
        HashSet<String> allAreas = new HashSet<>();
        for (String s : map.keySet()) {
            allAreas.addAll(map.get(s));
        }
        //选择区域
        ArrayList<String> selects=new ArrayList<>();
        //临时变量,存储对应K与剩余区域的交集
        HashSet<Object> temp = new HashSet<>();
        while (allAreas.size()!=0){
            int maxsize=0;//存储交集最大长度
            String maxKey=null;
            for (String s : map.keySet()) {
                temp.clear();
                temp.addAll(map.get(s));
                temp.retainAll(allAreas);
                if(temp.size()>maxsize){
                    maxKey=s;
                    maxsize=temp.size();
                }
                System.out.print("   "+temp.size());
            }
            System.out.println();
            //广播站添加 ,剩余区域去除
            if (maxKey!=null){
                selects.add(maxKey);
                allAreas.removeAll(map.get(maxKey));
            }
        }
        System.out.println(selects.toString());
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值