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());
}
}