1
1
import time
2
2
import matplotlib .pyplot as plt
3
+ from multiprocessing import Process
3
4
4
5
5
6
import algorithms .merge_algorithm as merge_sorts
6
7
import algorithms .tree_algorithm as tree_sort
7
- import get_data .generate_data as generate
8
+ from get_data .generate_data import GenerateData
8
9
9
10
10
11
class ExperimentMerge :
11
- def __init__ (self , array : list ):
12
- self .array = array
12
+ def __init__ (self , start_count : int , end_count : int , step : int ):
13
+ self .array = []
14
+ self .start_count = start_count
15
+ self .end_count = end_count
16
+ self .step = step
13
17
14
18
15
19
def experiment2 (self ):
20
+ wfile = open ("output/time/merge2.txt" , "w" )
21
+ wfile .write ("" )
16
22
merge2_sorter = merge_sorts .KMergeSort (2 )
17
- merge2_start = time .time ()
18
- merge2_sorter .k_merge_sort (self .array )
19
- merge2_end = time .time ()
20
- return merge2_end - merge2_start
23
+ wfile = open ("output/time/merge2.txt" , "a" )
24
+
25
+ for i in range (self .start_count , self .end_count , self .step ):
26
+ self .array = GenerateData (i ).generate ()
27
+ merge2_start = time .time ()
28
+ merge2_sorter .k_merge_sort (self .array )
29
+ merge2_end = time .time ()
30
+ wfile .write (f"{ merge2_end - merge2_start } \n " )
31
+ print (f"Merge 2: { i } " )
32
+ wfile .close ()
33
+
34
+ with open ("output/time/merge2.txt" , "r" ) as wfile :
35
+ data = wfile .readlines ()
36
+ data = [float (n ) for n in data ]
37
+ plt .plot (data )
38
+ plt .title ("Merge sort 2" )
39
+ plt .xlabel (f"Start count: { self .start_count } End count: { self .end_count } Step: { self .step } " )
40
+ plt .ylabel ("Time" )
41
+ plt .savefig ("output/graphics/merge2.png" )
42
+ plt .clf ()
43
+ data .clear ()
21
44
22
45
23
46
def experiment4 (self ):
47
+ wfile = open ("output/time/merge4.txt" , "w" )
48
+ wfile .write ("" )
24
49
merge4_sorter = merge_sorts .KMergeSort (4 )
25
- merge4_start = time .time ()
26
- merge4_sorter .k_merge_sort (self .array )
27
- merge4_end = time .time ()
28
- return merge4_end - merge4_start
50
+ wfile = open ("output/time/merge4.txt" , "a" )
51
+
52
+ for i in range (self .start_count , self .end_count , self .step ):
53
+ self .array = GenerateData (i ).generate ()
54
+ merge4_start = time .time ()
55
+ merge4_sorter .k_merge_sort (self .array )
56
+ merge4_end = time .time ()
57
+ wfile .write (f"{ merge4_end - merge4_start } \n " )
58
+ print (f"Merge 4: { i } " )
59
+ wfile .close ()
60
+
61
+ with open ("output/time/merge4.txt" , "r" ) as wfile :
62
+ data = wfile .readlines ()
63
+ data = [float (n ) for n in data ]
64
+ plt .plot (data )
65
+ plt .title ("Merge sort 4" )
66
+ plt .xlabel (f"Start count: { self .start_count } End count: { self .end_count } Step: { self .step } " )
67
+ plt .ylabel ("Time" )
68
+ plt .savefig ("output/graphics/merge4.png" )
69
+ plt .clf ()
70
+ data .clear ()
29
71
30
72
31
73
def experiment8 (self ):
74
+ wfile = open ("output/time/merge8.txt" , "w" )
75
+ wfile .write ("" )
32
76
merge8_sorter = merge_sorts .KMergeSort (8 )
33
- merge8_start = time .time ()
34
- merge8_sorter .k_merge_sort (self .array )
35
- merge8_end = time .time ()
36
- return merge8_end - merge8_start
77
+ wfile = open ("output/time/merge8.txt" , "a" )
78
+
79
+ for i in range (self .start_count , self .end_count , self .step ):
80
+ self .array = GenerateData (i ).generate ()
81
+ merge8_start = time .time ()
82
+ merge8_sorter .k_merge_sort (self .array )
83
+ merge8_end = time .time ()
84
+ wfile .write (f"{ merge8_end - merge8_start } \n " )
85
+ print (f"Merge 8: { i } " )
86
+ wfile .close ()
87
+
88
+ with open ("output/time/merge8.txt" , "r" ) as wfile :
89
+ data = wfile .readlines ()
90
+ data = [float (n ) for n in data ]
91
+ plt .plot (data )
92
+ plt .title ("Merge sort 8" )
93
+ plt .xlabel (f"Start count: { self .start_count } End count: { self .end_count } Step: { self .step } " )
94
+ plt .ylabel ("Time" )
95
+ plt .savefig ("output/graphics/merge8.png" )
96
+ plt .clf ()
97
+ data .clear ()
37
98
38
99
39
100
class ExperimentTree :
40
- def __init__ (self , array : list ):
41
- self .array = array
101
+ def __init__ (self , start_count : int , end_count : int , step : int ):
102
+ self .array = []
103
+ self .start_count = start_count
104
+ self .end_count = end_count
105
+ self .step = step
42
106
43
107
44
108
def experiment (self ):
45
- sarray = [n for n in self .array ]
46
- avl_start = time .time ()
47
- tree_sort .tree_sort (sarray )
48
- avl_end = time .time ()
49
- return avl_end - avl_start
109
+ wfile = open ("output/time/tree.txt" , "w" )
110
+ wfile .write ("" )
111
+ wfile = open ("output/time/tree.txt" , "a" )
112
+
113
+ for i in range (self .start_count , self .end_count , self .step ):
114
+ self .array = GenerateData (i ).generate ()
115
+ tree_start = time .time ()
116
+ tree_sort .tree_sort (self .array )
117
+ tree_end = time .time ()
118
+ wfile .write (f"{ tree_end - tree_start } \n " )
119
+ print (f"Tree: { i } " )
120
+ wfile .close ()
121
+
122
+ with open ("output/time/tree.txt" , "r" ) as wfile :
123
+ data = wfile .readlines ()
124
+ data = [float (n ) for n in data ]
125
+ plt .plot (data )
126
+ plt .title ("Tree sort" )
127
+ plt .xlabel (f"Start count: { self .start_count } End count: { self .end_count } Step: { self .step } " )
128
+ plt .ylabel ("Time" )
129
+ plt .savefig ("output/graphics/tree.png" )
130
+ plt .clf ()
131
+ data .clear ()
50
132
51
133
52
134
if __name__ == "__main__" :
53
- try :
54
- with open ("output/time/merge2.txt" , "r" ) as merge2_file :
55
- merge2_file .close ()
56
- with open ("output/time/merge2.txt" , "w" ) as merge2_file :
57
- merge2_file .write ("" )
58
- except FileNotFoundError :
59
- with open ("output/time/merge2.txt" , "w" ) as merge2_file :
60
- merge2_file .write ("" )
61
-
62
- try :
63
- with open ("output/time/merge4.txt" , "r" ) as merge4_file :
64
- merge4_file .close ()
65
- with open ("output/time/merge4.txt" , "w" ) as merge4_file :
66
- merge4_file .write ("" )
67
- except FileNotFoundError :
68
- with open ("output/time/merge4.txt" , "w" ) as merge4_file :
69
- merge4_file .write ("" )
70
- try :
71
- with open ("output/time/merge8.txt" , "r" ) as merge8_file :
72
- merge8_file .close ()
73
- with open ("output/time/merge8.txt" , "w" ) as merge8_file :
74
- merge8_file .write ("" )
75
- except FileNotFoundError :
76
- with open ("output/time/merge8.txt" , "w" ) as merge8_file :
77
- merge8_file .write ("" )
78
- try :
79
- with open ("output/time/tree.txt" , "r" ) as tree_file :
80
- tree_file .close ()
81
- with open ("output/time/tree.txt" , "w" ) as tree_file :
82
- tree_file .write ("" )
83
- except FileNotFoundError :
84
- with open ("output/time/tree.txt" , "w" ) as tree_file :
85
- tree_file .write ("" )
86
-
87
- merge2 = open ("output/time/merge2.txt" , "a" )
88
- merge4 = open ("output/time/merge4.txt" , "a" )
89
- merge8 = open ("output/time/merge8.txt" , "a" )
90
- tree = open ("output/time/tree.txt" , "a" )
91
-
92
135
start_count = 0
93
- end_count = 100_000
136
+ end_count = 1_000_000
94
137
step = 1_000
95
138
96
- for i in range (start_count , end_count , step ):
97
- array = generate .GenerateData (i ).generate ()
98
- e_merge = ExperimentMerge (array )
99
- e_tree = ExperimentTree (array )
100
-
101
- merge2 .write (f"{ e_merge .experiment2 ()} \n " )
102
- merge4 .write (f"{ e_merge .experiment4 ()} \n " )
103
- merge8 .write (f"{ e_merge .experiment8 ()} \n " )
104
- tree .write (f"{ e_tree .experiment ()} \n " )
105
-
106
- print (f"Experiment { i } finished" )
107
-
108
- merge2 .close ()
109
- merge4 .close ()
110
- merge8 .close ()
111
- tree .close ()
112
-
113
- # merge2
114
- with open ("output/time/merge2.txt" , "r" ) as merge2_file :
115
- merge2_data = merge2_file .readlines ()
116
- merge2_data = [float (n ) for n in merge2_data ]
117
- plt .plot (merge2_data )
118
- plt .title ("Merge sort 2" )
119
- plt .xlabel (f"Start count: { start_count } End count: { end_count } Step: { step } " )
120
- plt .ylabel ("Time" )
121
- plt .savefig ("output/graphics/merge2.png" )
122
- plt .clf ()
123
- merge2_data .clear ()
139
+ e_merge = ExperimentMerge (start_count , end_count , step )
140
+ e_tree = ExperimentTree (start_count , end_count , step )
141
+
142
+ p1 = Process (target = e_merge .experiment2 , daemon = True )
143
+ p2 = Process (target = e_merge .experiment4 , daemon = True )
144
+ p3 = Process (target = e_merge .experiment8 , daemon = True )
145
+ p4 = Process (target = e_tree .experiment , daemon = True )
146
+
147
+ p1 .start ()
148
+ p2 .start ()
149
+ p3 .start ()
150
+ p4 .start ()
124
151
125
- # merge4
126
- with open ("output/time/merge4.txt" , "r" ) as merge4_file :
127
- merge4_data = merge4_file .readlines ()
128
- merge4_data = [float (n ) for n in merge4_data ]
129
- plt .plot (merge4_data )
130
- plt .title ("Merge sort 4" )
131
- plt .xlabel (f"Start count: { start_count } End count: { end_count } Step: { step } " )
132
- plt .ylabel ("Time" )
133
- plt .savefig ("output/graphics/merge4.png" )
134
- plt .clf ()
135
- merge4_data .clear ()
136
-
137
- # merge8
138
- with open ("output/time/merge8.txt" , "r" ) as merge8_file :
139
- merge8_data = merge8_file .readlines ()
140
- merge8_data = [float (n ) for n in merge8_data ]
141
- plt .plot (merge8_data )
142
- plt .title ("Merge sort 8" )
143
- plt .xlabel (f"Start count: { start_count } End count: { end_count } Step: { step } " )
144
- plt .ylabel ("Time" )
145
- plt .savefig ("output/graphics/merge8.png" )
146
- plt .clf ()
147
- merge8_data .clear ()
148
-
149
- # tree
150
- with open ("output/time/tree.txt" , "r" ) as tree_file :
151
- tree_data = tree_file .readlines ()
152
- tree_data = [float (n ) for n in tree_data ]
153
- plt .plot (tree_data )
154
- plt .title ("Tree sort" )
155
- plt .xlabel (f"Start count: { start_count } End count: { end_count } Step: { step } " )
156
- plt .ylabel ("Time" )
157
- plt .savefig ("output/graphics/tree.png" )
158
- plt .clf ()
159
- tree_data .clear ()
152
+ p1 .join ()
153
+ p2 .join ()
154
+ p3 .join ()
155
+ p4 .join ()
0 commit comments