-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPriorityQueueTest.java
More file actions
96 lines (72 loc) · 2.49 KB
/
PriorityQueueTest.java
File metadata and controls
96 lines (72 loc) · 2.49 KB
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
/* ************************************************
* Classe per testare le PriorityQueue.
*
* Esempio di esecuzione:
*
* java PriorityQueueTest fileIn fileOut
*
* dove "fileIn" è il nome di un file contenente parole
* e "fileOut" è il nome di un file dove verranno scritte
* le parole in fileIn in ordine non decrescente di lunghezza
*
* Il test popola una coda con priorità con le parole
* in fileIn usando la loro lunghezza come chiave.
* Successivamente ad una parola ogni cento si raddoppia
* la chiave, e poi per le stesse parole la chiave viene
* dimezzata (riportando le chiavi al valore iniziale).
* Infine si estraggono le parole dalla coda e si inseriscono
* nel file fileOut.
*
* *************************************************/
import java.io.*;
import java.util.ArrayList;
import datastructure.priorityqueue.*;
public class PriorityQueueTest {
/*
* Main per leggere un file di parole e riordinarle in modo
* crescente in base alla lunghezza
*/
public static void main( String[] args ) {
try {
// Legge parole dal fileIn
File file = new File(args[0]);
BufferedReader br = new BufferedReader(new FileReader(file));
ArrayList<String> words = new ArrayList<String>();
String st;
while ((st = br.readLine()) != null) {
words.add(st);
}
// Inserisce le parole in una priority queue usando la length come chiave
// I nodi della priorityqueue vengono salvati in nodes
PriorityQueue<Integer,String> pq =
new DHeap<Integer,String>();
PriorityQueueNode<Integer,String> node;
ArrayList<PriorityQueueNode<Integer,String>> nodes =
new ArrayList<PriorityQueueNode<Integer,String>>();
for (int i = 0; i < words.size(); i++) {
node = pq.insert(words.get(i).length(), words.get(i));
nodes.add(node);
}
System.out.println(pq);
// Raddoppia la chiave ogni 100 parole
for (int i = 0; i < words.size(); i = i + 100) {
node = nodes.get(i);
pq.increaseKey(node.getKey() * 2, node);
}
// Dimezza la chiave ogni 100 parole
for (int i = 0; i < words.size(); i = i + 100) {
node = nodes.get(i);
pq.decreaseKey(node.getKey() / 2, node);
}
// Estrae le parole dalla priority queue e le inserisce in fileOut
PrintWriter writer = new PrintWriter(args[1]);
for (int i = 0; i < words.size(); i++) {
writer.println(pq.findMin());
pq.deleteMin();
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}