package org.greed;
import java.util.*;
/**
* 广播电视台覆盖区域-贪心算法 选择最少的电台覆盖所有的地区
* 1用一个结合存放 未被覆盖地区集合,
* 2遍历一遍电台,统计每个电台覆盖的地区与未被覆盖的交集,找到交集最大的电台
* 3把第二部获取到的电台存放到一个集合中,在未被覆盖的地区集合中remove掉2,中电台覆盖的地区
* 4,2,3,一直循环执行,直到 未被覆盖的集合的size=0结束
@author cjj_1
* @date 2020-09-08 10:28
*/
public class Greed4Broadcast {
public static void main(String[] args) {
Map<String, List<String>> map = new HashMap<String, List<String>>(){
{
put("k1",new ArrayList<String>(){
{
add("上海");
add("北京");
add("天津");
}});
put("k2",new ArrayList<String>(){
{
add("广州");
add("北京");
add("深圳");
}});
put("k3",new ArrayList<String>(){
{
add("程度");
add("上海");
add("杭州");
}});
put("k4",new ArrayList<String>(){
{
add("上海");
add("天津");
}});
put("k5",new ArrayList<String>(){
{
add("杭州");
add("大连");
}});
}
};
List<String> stations = new ArrayList<>();
Set<String> sets = getAllArea(map);
while (sets.size()!=0){
String k = getOptimalMatching(sets,map);
stations.add(k);
List<String> areas = map.get(k);
areas.forEach(a->{
sets.remove(a);
});
}
System.out.println(Arrays.toString(stations.toArray()));
}
public static void addStation(Map<String, List<String>> map,Set<String> set,String station,List<String> stations){
stations.add(station);
}
/**
* 获取到覆盖最多的广播站
* @param sets
* @param map
* @return
*/
public static String getOptimalMatching(Set<String> sets,Map<String, List<String>> map){
String station =null;
int match_max_num=0;
for (Map.Entry<String,List<String>> entry:map.entrySet()){
List<String> list = entry.getValue();
int match_num =0;
for(String area:list){
if(sets.contains(area))
match_num++;
}
if(match_max_num<match_num){
station = entry.getKey();
match_max_num = match_num;
}
}
return station;
}
/**
* 获取所有的地区列表
* @param map
* @return
*/
public static Set<String> getAllArea(Map<String, List<String>> map){
Set<String> set = new HashSet<String>();
for (Map.Entry<String,List<String>> entry:map.entrySet()){
List<String> list = entry.getValue();
list.forEach(l->{
set.add(l);
});
}
return set;
}
}
贪心算法-电台广播问题
猜你喜欢
转载自blog.csdn.net/weixin_40128696/article/details/108468243
今日推荐
周排行