1
1
import sys
2
+ import time
2
3
from node import Node
3
4
from edge import Edge
4
5
from graph import Graph
10
11
11
12
G = Graph ()
12
13
seedCount = 0
14
+ runningTimes = {}
13
15
14
16
def main ():
15
17
16
18
global G
17
19
18
20
validatePath ()
19
- generalGreedy ()
20
- #degreeDiscountRough()
21
- printResults ()
21
+ printPropagationPath ('w' )
22
+ generalGreedy ('generalGreedy' )
23
+ printResults ('a' , 'generalGreedy' )
24
+ degreeDiscountRough ('degreeDiscountRough' )
25
+ printResults ('a' , 'degreeDiscountRough' )
22
26
23
27
def initialize (k ,inputName ,outputName ):
24
28
global G
@@ -42,17 +46,9 @@ def initialize(k,inputName,outputName):
42
46
G .addEdge (e , elements [2 ], elements [3 ])
43
47
inputFile .close ()
44
48
45
- def printResults ():
46
- global G
49
+ def printPropagationPath (mode ):
47
50
global outputFileName
48
-
49
- G .draw ()
50
- outputFile = open (outputFileName ,'w' )
51
- outputFile .write ("Seed :\n " )
52
- for s in G .getSeeds ():
53
- outputFile .write (s .getId () + " " + s .getName () + "\n " )
54
-
55
- outputFile .write ("========\n " )
51
+ outputFile = open (outputFileName , mode )
56
52
outputFile .write ("propagated :\n " )
57
53
58
54
validNodeSet = G .getValidNodeSet ()
@@ -63,48 +59,73 @@ def printResults():
63
59
outputFile .write ("\n " )
64
60
65
61
outputFile .write ("========\n " )
62
+ outputFile .close ()
63
+
64
+ def printResults (mode , method ):
65
+ global G
66
+ global outputFileName
67
+ global runningTimes
68
+
69
+ G .draw ()
70
+ outputFile = open (outputFileName , mode )
71
+ outputFile .write (method + " : " + str (runningTimes [method ]) + "s\n " )
72
+ outputFile .write ("Seed :\n " )
73
+ for s in G .getSeeds ():
74
+ outputFile .write (s .getId () + " " + s .getName () + "\n " )
66
75
76
+ outputFile .write ("========\n " )
67
77
outputFile .close ()
68
78
69
- def degreeDiscountRough ():
79
+ def degreeDiscountRough (method ):
70
80
global G
71
81
global seedCount
82
+ global runningTimes
72
83
73
84
G .clearSeed ()
74
85
86
+ startTime = time .time ()
75
87
for v in G .getNodes ():
76
88
v .setSeedNeighborCount (0 )
77
89
v .setExtraInfluence (v .getValidOutDegree ())
78
90
91
+ candidates = list (set (G .getNodes ())- set (G .getSeeds ()))
79
92
for i in range (0 ,seedCount ):
80
- candidates = list (set (G .getNodes ())- set (G .getSeeds ()))
81
93
u = getMaximumNode (candidates )
82
94
G .addSeed (u )
95
+ candidates .remove (u )
83
96
for e in u .getInEdges ():
84
97
neighbor = e .getSrc ()
85
98
neighbor .setSeedNeighborCount (neighbor .getSeedNeighborCount ()+ 1 )
86
- neighbor .setExtraInfluence (max ( 0 , neighbor .getValidOutDegree ()- neighbor .getSeedNeighborCount ()) )
99
+ neighbor .setExtraInfluence (neighbor .getValidOutDegree ()- neighbor .getSeedNeighborCount () if neighbor . getExtraInfluence () > 0 else - 1 )
87
100
for e in u .getOutEdges ():
88
101
dest = e .getDest ()
89
- dest .setExtraInfluence (0 )
102
+ dest .setExtraInfluence (- 1 )
90
103
104
+ runningTimes [method ] = round (time .time () - startTime ,2 )
91
105
92
- def generalGreedy ():
106
+
107
+ def generalGreedy (method ):
93
108
global G
94
109
global seedCount
110
+ global runningTimes
95
111
96
112
G .clearSeed ()
97
113
114
+ startTime = time .time ()
115
+ candidates = list (set (G .getNodes ())- set (G .getSeeds ()))
98
116
for i in range (0 ,seedCount ):
99
- candidates = list (set (G .getNodes ())- set (G .getSeeds ()))
100
117
for v in candidates :
101
118
v .setExtraInfluence (0 )
102
119
results = []
103
120
for s in G .getSeeds ():
104
121
cascade (s , results )
105
122
cascade (v , results )
106
123
v .setExtraInfluence (len (results ))
107
- G .addSeed (getMaximumNode (candidates ))
124
+ selected = getMaximumNode (candidates )
125
+ G .addSeed (selected )
126
+ candidates .remove (selected )
127
+
128
+ runningTimes [method ] = round (time .time () - startTime ,2 )
108
129
109
130
def cascade (seed , results ): ##DFS
110
131
if seed not in results :
0 commit comments