栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Day 16 贪心算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day 16 贪心算法

贪心算法 指在对问题求解时 每一步都采用最优选择 从而希望导致结果是最优的(贪婪算法的结果不一定是最优的 但都是近似于最优的)

例子 电台覆盖问题

package 贪心;

import java.security.KeyStore;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;

public class Greed {
    //贪心算法
    public static void main(String[] args) {
        //电台覆盖问题
        HashMap> diantai = new HashMap>();//电脑 键是电台名 值是电台覆盖地区的集合
        HashSet fg1 = new HashSet();//电台k1覆盖的地区
        fg1.add("北京");
        fg1.add("上海");
        fg1.add("天津");
        diantai.put("k1",fg1);
        HashSet fg2 = new HashSet();//电台k2覆盖的地区
        fg2.add("广州");
        fg2.add("北京");
        fg2.add("深圳");
        diantai.put("k2",fg2);
        HashSet fg3 = new HashSet();//电台k3覆盖的地区
        fg3.add("成都");
        fg3.add("上海");
        fg3.add("杭州");
        diantai.put("k3",fg3);
        HashSet fg4 = new HashSet();//电台k4覆盖的地区
        fg4.add("上海");
        fg4.add("天津");
        diantai.put("k4",fg4);
        HashSet fg5 = new HashSet();//电台k5覆盖的地区
        fg5.add("杭州");
        fg5.add("大连");
        diantai.put("k5",fg5);
        //获取所有地区
        HashSet diqu = new HashSet();
        for (Map.Entry d:diantai.entrySet()){
//            HashSet temp = (HashSet) d.getValue();
//            System.out.println(temp);
//            Iterator t = temp.iterator();
//            while (t.hasNext()){
//                System.out.println(t.next());
//            }
            diqu.addAll((HashSet) d.getValue());
        }
        //这个集合用来记录挑选了那些电台
        HashSet jl = new HashSet();
        //这个集合用来暂存当前电台覆盖地区 以便比较
        HashSet zc = new HashSet();

        while (diqu.size()!=0){//当 未覆盖地区不为空时
            String max = null;
            zc.clear();
            int maxSize = 0;//用来记录当前max保存的集合的未覆盖地区的数量
            for (String dq : diantai.keySet()){//轮流取出所有电台覆盖地区
                System.out.println(dq);
                zc.addAll(diantai.get(dq));
                zc.retainAll(diqu);//使用zc集合 与 diqu集合比对筛重 比对过后会返回他们重复的部分
                System.out.println(zc);

                if (zc.size()>0 &&(max == null || zc.size()>maxSize)){

                    max = dq;
                    maxSize = zc.size();
                }
            }
            //如果记录的max不为null 证明里面判断到了
//            System.out.println(max);
            if (max!=null){
//                System.out.println(max);
                jl.add(max);
                diqu.removeAll(diantai.get(max));
            }
//            System.out.println(diqu);
        }
        System.out.println(jl);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/924896.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号