Skip to content

Commit c15d40e

Browse files
committed
Modify the main code and estimate the time complexity
1 parent 4f54e97 commit c15d40e

File tree

3 files changed

+89
-55
lines changed

3 files changed

+89
-55
lines changed

src/MSC_distance.java

+33-11
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
public class MSC_distance {
77
MSC_distance(ArrayList<User> input){
88
Set<User> set = new HashSet<User>(input);
9-
see(set);
9+
//see(set);
1010
Set<User> OutputUser = main(set);
11-
see(OutputUser);
11+
//see(OutputUser);
1212

1313
}
1414

@@ -34,6 +34,7 @@ public void see(User a) {
3434
for(Integer aa: a.interest) {
3535
System.out.print(aa+":");
3636
}
37+
System.out.println("#"+a.x+"::"+a.y+"#");
3738
System.out.println("");
3839
}
3940
public void isee( Set<Integer> set ) {
@@ -47,16 +48,19 @@ public Set<User> main(Set<User> set) {
4748
if(set.size()==0) {
4849
return new HashSet<User>();
4950
}
50-
51+
5152
set = DelSubUser(set);
52-
53+
5354
Set<User> unique = UniqueElement(set);
5455
if( unique.size() > 0 ) {
5556
set = delete( set, unique );
5657
unique.addAll(main(set));
5758
return unique;
5859
}
59-
60+
61+
if(set.size()==0) {
62+
return new HashSet<User>();
63+
}
6064
User label = ChooseMaxSizeUser(set);
6165

6266
if( label.interest.size()==2) {
@@ -73,7 +77,7 @@ public Set<User> main(Set<User> set) {
7377
else
7478
return CountDistance( a ) < CountDistance( b )? a : b;
7579
}
76-
80+
7781
public double CountDistance(Set<User> InputUser) {
7882
double max=0;
7983
for(User a: InputUser) {
@@ -90,7 +94,17 @@ public double CountDistance(Set<User> InputUser) {
9094

9195
public Set<User> DelSubUser(Set<User> InputUser) {
9296
Set<User> ForDelete = new HashSet<>();
93-
for(User a: InputUser) {
97+
User[] InList = InputUser.toArray(new User[InputUser.size()]);
98+
99+
for( int i = 0; i < InList.length; ++i )
100+
for( int j = i + 1; j < InList.length; ++j )
101+
{
102+
if( isSubSet( InList[ i ].interest, InList[ j ].interest ) )
103+
ForDelete.add( InList[ j ] );
104+
else if( isSubSet( InList[ j ].interest, InList[ i ].interest ) )
105+
ForDelete.add( InList[ i ] );
106+
}
107+
/*for(User a: InputUser) {
94108
for(User b: InputUser) {
95109
if(isSubSet(a.interest,b.interest)&& !a.equals(b)) {
96110
if(!ForDelete.contains(b)) {
@@ -99,7 +113,7 @@ public Set<User> DelSubUser(Set<User> InputUser) {
99113
}
100114
}
101115
}
102-
}
116+
}*/
103117
for(User del: ForDelete) {
104118
InputUser.remove(del);
105119
}
@@ -150,6 +164,9 @@ public Set<User> delete( Set<User> user, Set<User> uniq ) {
150164
element.add( i );
151165
for( User u: user ) {
152166
User n = new User();
167+
n.x = u.x;
168+
n.y = u.y;
169+
n.id = u.id;
153170
for( Integer i: u.interest )
154171
if( !element.contains( i ) )
155172
n.interest.add( i );
@@ -161,10 +178,11 @@ public Set<User> delete( Set<User> user, Set<User> uniq ) {
161178
}
162179

163180
public User ChooseMaxSizeUser(Set<User> InputUser) {
181+
164182
User max = null;
165183
int size=0;
166184
for(User user: InputUser) {
167-
if(user.interest.size()>size) {
185+
if(user.interest.size()>=size) {
168186
size = user.interest.size();
169187
max = user;
170188
}
@@ -181,8 +199,11 @@ public Set<User> Condition2msc(Set<User> InputUser) {
181199
Integer[] arr = new Integer[a.interest.size()];
182200
System.arraycopy(a.interest.toArray(), 0, arr, 0, a.interest.size());
183201
g.addVertex(arr[0]);
184-
g.addVertex(arr[1]);
185-
g.addEdge(arr[0], arr[1]);
202+
if(true||arr.length!=1) {
203+
g.addVertex(arr[1]);
204+
g.addEdge(arr[0], arr[1]);
205+
}
206+
186207
}
187208

188209
MatchingImpl m = new MatchingImpl(g,g.edgeSet(),0);
@@ -223,4 +244,5 @@ public Set<User> Condition2msc(Set<User> InputUser) {
223244
}
224245
return OutputUser;
225246
}
247+
226248
}

src/Main.java

+55-43
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,65 @@
1+
import java.io.FileWriter;
2+
import java.io.IOException;
13
import java.util.ArrayList;
24
import java.util.HashSet;
35
import java.util.Set;
46

57
public class Main {
6-
public static void main(String[] args) {
7-
double experiment = 0;
8-
for(int e=0;e<1;e++) {
9-
10-
int totalusers = 100;
11-
int totalinterest = 50;
12-
double xrange = 10;
13-
double yrange = 10;
14-
ArrayList<User> presentUser = new ArrayList<>();
15-
for(int i=0;i<totalusers;i++) {
16-
User instance = new User();
17-
instance.x = (Math.random()*xrange);
18-
instance.y = (Math.random()*yrange);
19-
instance.id = i;
20-
for(int ii=0;ii< (int)(Math.random()*totalinterest+1);ii++) {
21-
22-
instance.interest.add((int)(Math.random()*totalinterest+1));
23-
}
24-
presentUser.add(instance);
25-
instance = null;
268

27-
}
28-
//show the result of random and the presentUser
29-
for(int i=0;i<presentUser.size();i++) {
30-
//System.out.println(i+" "+presentUser.get(i).x+" "+presentUser.get(i).y+" "+presentUser.get(i).interest.size());
9+
public static void main(String[] args) throws IOException {
10+
FileWriter fw = new FileWriter("output.txt");
11+
int totalusers = 0;
12+
for(int j=100;j<=1000;j=j+100) {
13+
totalusers=j;
14+
double experiment = 0;
15+
for(int e=0;e<100;e++) {
16+
double partial = 0.5;
17+
int totalinterest = (int) (totalusers *partial);
18+
double xrange = totalusers;
19+
double yrange = totalusers;
20+
ArrayList<User> presentUser = new ArrayList<>();
21+
for(int i=0;i<totalusers;i++) {
22+
User instance = new User();
23+
instance.x = (Math.random()*xrange);
24+
instance.y = (Math.random()*yrange);
25+
instance.id = i;
26+
for(int ii=0;ii< (int)(Math.random()*totalinterest+1);ii++) {
27+
28+
instance.interest.add((int)(Math.random()*totalinterest+1));
29+
}
30+
presentUser.add(instance);
31+
instance = null;
32+
33+
}
34+
//show the result of random and the presentUser
35+
/*for(int i=0;i<presentUser.size();i++) {
36+
System.out.println(i+" "+presentUser.get(i).x+" "+presentUser.get(i).y+" "+presentUser.get(i).interest.size());
3137
3238
33-
}
34-
/*Greedy gr = new Greedy(new ArrayList<>(presentUser));
39+
}*/
40+
/*Greedy gr = new Greedy(new ArrayList<>(presentUser));
3541
gr.countFar();
3642
gr.findSetCover();*/
3743

38-
/*heuristicGreedy hgr = new heuristicGreedy(new ArrayList<>(presentUser));
44+
/*heuristicGreedy hgr = new heuristicGreedy(new ArrayList<>(presentUser));
3945
hgr.countFar();
4046
hgr.findSetCover();*/
41-
42-
/*GAR gar = new GAR(new ArrayList<>(presentUser));
47+
48+
/*GAR gar = new GAR(new ArrayList<>(presentUser));
4349
gar.RandomChoose();
4450
gar.countFar();
4551
gar.findSetCover();*/
4652

47-
/*RAG rag = new RAG(new ArrayList<>(presentUser));
53+
/*RAG rag = new RAG(new ArrayList<>(presentUser));
4854
rag.countFar();
4955
rag.findSetCover();
5056
rag.RandomChoose();*/
5157

52-
/*Set<User> set = gr.getGoal();
58+
/*Set<User> set = gr.getGoal();
5359
set.retainAll(rag.getGoal());
5460
System.out.println((double)set.size()/gr.getGoal().size());
5561
experiment = experiment+(double)set.size()/gr.getGoal().size();*/
56-
/*ArrayList<User> presentUser2 = new ArrayList<>();
62+
/*ArrayList<User> presentUser2 = new ArrayList<>();
5763
User t1 = new User();
5864
t1.interest.add(1);
5965
t1.interest.add(2);
@@ -72,13 +78,14 @@ public static void main(String[] args) {
7278
presentUser2.add(t3);
7379
presentUser2.add(t4);
7480
75-
MSC msc = new MSC(new ArrayList<>(presentUser2));*/
76-
81+
MSC msc = new MSC(new ArrayList<>(presentUser2));
82+
7783
ArrayList<User> presentUser3 = new ArrayList<>();
7884
User u1 = new User();
7985
u1.interest.add(1);
80-
u1.x = 0;
81-
u1.y = 0;
86+
//u1.interest.add(2);
87+
u1.x = 5;
88+
u1.y = 6;
8289
User u2 = new User();
8390
u2.interest.add(2);
8491
u2.x = 0;
@@ -88,18 +95,23 @@ public static void main(String[] args) {
8895
u3.x = 5;
8996
u3.y = 6;
9097
presentUser3.add(u1);
91-
presentUser3.add(u2);
92-
MSC_distance msc_distance = new MSC_distance(new ArrayList<>(presentUser3));
93-
94-
95-
98+
presentUser3.add(u2);*/
9699

97-
}
100+
long time1 = System.currentTimeMillis();
101+
MSC_distance msc_distance = new MSC_distance(new ArrayList<>(presentUser));
102+
long time2 = System.currentTimeMillis();
103+
experiment = experiment +(time2-time1);
104+
//System.out.println((time2-time1) + "毫秒");
98105

99106

100-
//System.out.println(" final "+experiment/100);
107+
}
101108

102109

110+
//System.out.println(" final "+experiment/100);
111+
System.out.println((experiment)/100 + "毫秒");
112+
fw.write(totalusers+"\t"+(experiment)/100+"\r\n");
113+
fw.flush();
114+
}
103115

104116
}
105117

src/User.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ public int hashCode() {
1313
return n;
1414
}
1515
public boolean equals( User u ) {
16-
return u.interest.equals( this.interest );
16+
return u.interest.equals( this.interest ) && u.id==this.id;
1717
}
1818
}

0 commit comments

Comments
 (0)