贪心算法是指对于解决问题的每一步都作出最优解,从而希望得到最后的结果也是最优解,但是最后结果不一定都是最优解,大部分都是最接近最优解的结果
具体在百度百科的基本思路里有很好的解释,这里就不详写了
用贪心算法解决覆盖问题:
import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; public class GreedyAlgorithm { public static void main(String[] args) { HashMap<String, HashSet<String>> broadcasts = new HashMap<>(); HashSet<String> hashSet = new HashSet<>(); hashSet.add("北京"); hashSet.add("上海"); hashSet.add("天津"); HashSet<String> hashSet2 = new HashSet<>(); hashSet2.add("广州"); hashSet2.add("北京"); hashSet2.add("深圳"); HashSet<String> hashSet3 = new HashSet<>(); hashSet3.add("成都"); hashSet3.add("上海"); hashSet3.add("杭州"); HashSet<String> hashSet4 = new HashSet<>(); hashSet4.add("上海"); hashSet4.add("天津"); HashSet<String> hashSet5 = new HashSet<>(); hashSet5.add("杭州"); hashSet5.add("大连"); broadcasts.put("K1", hashSet); broadcasts.put("K2", hashSet2); broadcasts.put("K3", hashSet3); broadcasts.put("K4", hashSet4); broadcasts.put("K5", hashSet5); HashSet<String> allAreas = new HashSet<>(); allAreas.add("北京"); allAreas.add("上海"); allAreas.add("天津"); allAreas.add("广州"); allAreas.add("深圳"); allAreas.add("成都"); allAreas.add("杭州"); allAreas.add("大连"); ArrayList<String> selects = new ArrayList<>(); HashSet<String> tempSet = new HashSet<>(); String maxKey = null; while (allAreas.size() != 0) { maxKey = null; for (String key : broadcasts.keySet()) { tempSet.clear(); HashSet<String> areas = broadcasts.get(key); tempSet.addAll(areas); tempSet.retainAll(allAreas); if (tempSet.size() > 0 && (maxKey == null || tempSet.size() > broadcasts.get(maxKey).size())) { maxKey = key; } } if (maxKey != null) { selects.add(maxKey); allAreas.removeAll(broadcasts.get(maxKey)); } } System.out.println(selects); } }
来源:https://www.cnblogs.com/bingbug/p/12366041.html