Ch10 Greed算法

7/28/2019 Algorithm

# Greed算法

image-20230421004407651

image-20230421004442175

package greedy;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

public class GreedyBroadcast {

	public static void main(String[] args) {
		//用来存放最后的结果
		ArrayList<String> result = new ArrayList<String>();
		//用来存放所有的电台,第一个为电台号,第二个为覆盖地区集合
		HashMap<String, HashSet<String>> broadcast = new HashMap<String, HashSet<String>>();
		//用来存放还需要覆盖的地区
		HashSet<String> allareas = new HashSet<String>();
		allareas.add("A");
		allareas.add("B");
		allareas.add("C");
		allareas.add("D");
		allareas.add("E");
		allareas.add("F");
		//第一个电台,覆盖ACD
		HashSet<String> first = new HashSet<String>();
		first.add("A");
		first.add("C");
		first.add("D");
		broadcast.put("first", first);
		//第二个电台,覆盖EF
		HashSet<String> second = new HashSet<String>();
		second.add("E");
		second.add("F");
		broadcast.put("second", second);
		//第三个电台,覆盖A
		HashSet<String> third = new HashSet<String>();
		third.add("A");
		broadcast.put("third", third);
		//第四个电台,覆盖BCD
		HashSet<String> fourth = new HashSet<String>();
		fourth.add("B");
		fourth.add("C");
		fourth.add("D");
		broadcast.put("fourth", fourth);
		
		//贪心算法
		//存放maxkey的值
		HashSet<String> select = new HashSet<String>();
		String maxkey = null;
		HashSet<String> temp = new HashSet<String>();
		while(allareas.isEmpty() != true) {
			System.out.println("1111");
			maxkey = null;
			for(String key: broadcast.keySet()) {
				System.out.println("for:   " + key);
				temp.clear();
				//存放当前电台多覆盖的地区
				temp.addAll(broadcast.get(key));
				temp.retainAll(allareas);
				if(maxkey == null || select.size() < temp.size()) {
					maxkey = key;
				}
				select.clear();
				select.addAll(broadcast.get(maxkey));
				select.retainAll(allareas);
			}
			result.add(maxkey);
			select.addAll(broadcast.get(maxkey));
			allareas.removeAll(broadcast.get(maxkey));
		}
		
		for(String re:result) {
			System.out.println(re);
		}

	}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Last Updated: 11/19/2024, 1:54:38 PM