-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScript.java
110 lines (104 loc) · 3.59 KB
/
Script.java
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
public class Script
{
public static ArrayList<Integer> generateIntegers(int numIntegers, boolean sortedList)
{
ArrayList<Integer> integers = new ArrayList<>();
if (sortedList) {
for (int i = 0; i < numIntegers; i++)
{
integers.add(i);
}
}
else
{
Random random = new Random();
for (int i = 0; i < numIntegers; i++)
{
integers.add(random.nextInt(numIntegers * 2));
}
}
return integers;
}
public static double timeMethod(String methodName, DoublySkipList list, int value)
{
long startTime = System.nanoTime();
switch (methodName)
{
case "insertHead":
list.insertHead(value);
break;
case "insertTail":
list.insertTail(value);
break;
case "deleteHead":
list.deleteHead(value);
break;
case "deleteTail":
list.deleteTail(value);
break;
case "searchHead":
list.searchHead(value);
break;
case "searchTail":
list.searchTail(value);
break;
default:
throw new IllegalArgumentException("Invalid method name: " + methodName);
}
long endTime = System.nanoTime();
return (endTime - startTime) / 1e9;
}
public static void runTimingTests(DoublySkipList list, ArrayList<Integer> integers)
{
Map<String, Map<Integer, ArrayList<Double>>> timingResults = new HashMap<>();
for (int integer : integers) {
for (String methodName : new String[]{"insertHead", "insertTail", "deleteHead", "deleteTail", "searchHead", "searchTail"})
{
double timeElapsed = timeMethod(methodName, list, integer);
if (!timingResults.containsKey(methodName))
{
timingResults.put(methodName, new HashMap<>());
}
if (!timingResults.get(methodName).containsKey(integer))
{
timingResults.get(methodName).put(integer, new ArrayList<>());
}
timingResults.get(methodName).get(integer).add(timeElapsed);
}
}
// Export results to file
try
{
FileWriter writer = new FileWriter("timing_results.txt");
for (String methodName : timingResults.keySet())
{
for (int integer : timingResults.get(methodName).keySet())
{
ArrayList<Double> times = timingResults.get(methodName).get(integer);
double averageTime = times.stream().mapToDouble(Double::doubleValue).average().orElse(0);
writer.write(methodName + " " + integer + " " + averageTime + "\n");
}
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
int numIntegers = 10000;
boolean sortedList = false;
ArrayList<Integer> integers = generateIntegers(numIntegers, sortedList);
DoublySkipList list = new DoublySkipList();
runTimingTests(list, integers);
}
}