Priority Queues/Timing and Performance: Difference between revisions
From charlesreid1
(Admin moved page Priority Queues/Timing and Performance to Priority Queues/Timing and Performance/Old) |
No edit summary |
||
| Line 1: | Line 1: | ||
==Priority Queues== | |||
Priority queues are queues that keep items in the queue in a sorted order, so that the minimum (highest priority) item comes out first. | |||
This page contains results of timing and performance measurement of priority queues. | |||
Will start with the note that I spent (wasted) a lot of time trying to implement my own priority queue, only to finally finish and get results that showed it was 2-3 orders of magnitude slower than the built-in priority queue type and horribly slow for anything bigger than 1,000 elements. | |||
I'm looking to scale to a hundred million. | |||
==Timing== | |||
To time, used a simple timing object that wraps the system timer, called Tim the Timer. See [[Tim the Timer]]. | |||
==Builtin Timing== | |||
To time built-in priority queue objects I used the following script: | |||
<pre> | |||
import java.util.LinkedList; | |||
import java.util.Random; | |||
import java.util.PriorityQueue; | |||
/** Timing of Builtin Priority Queue in Java. | |||
*/ | |||
public class BuiltinTiming { | |||
// We will perform and time Nops add operations. | |||
static int Nops = 100; | |||
// We will do that Ntrials times. | |||
static int Ntrials = 10000; | |||
// We will add to a container of size N. | |||
static int[] Ns = { 1000,2000,3000,4000,5000, | |||
6000,7000,8000,9000, | |||
10000,20000,30000,40000,50000,60000,70000,80000,90000,100000}; | |||
/** Run tests */ | |||
public static void main(String[] args) { | |||
PriorityQueue<Integer> builtin = new PriorityQueue<Integer>(); | |||
System.out.println("---------------------------"); | |||
System.out.println("Add Test: Built-in PriorityQueue"); | |||
add(builtin); | |||
} | |||
/** Add test for built-in priority queue. */ | |||
public static void add(PriorityQueue<Integer> q) { | |||
Random r = new Random(); | |||
System.out.println("N\t\tWalltime Add Tot (ms)\t\tWalltime Add Per 1k (ms)"); | |||
// Gathering stats on each size | |||
for(int i = 0; i<Ns.length; i++) { | |||
// set N | |||
int N = Ns[i]; | |||
// set timer | |||
Tim tim = new Tim(); | |||
for(int k=0; k<Ntrials; k++) { | |||
// Start by initializing the container | |||
q.clear(); | |||
for(int j = 0; j < N; j++) { | |||
q.add(r.nextInt()); | |||
} | |||
// Now time adding | |||
tim.tic(); | |||
for(int m=0; m<Nops; m++) { | |||
q.add(r.nextInt()); | |||
} | |||
tim.toc(); | |||
} | |||
// Now printing out N, total walltime, time per 1k add ops | |||
double per_op = tim.elapsedms()/(1.0*Ntrials*Nops); | |||
double per_1kop = (tim.elapsedms()/(1.0*Ntrials*Nops))*1000; | |||
// done with timing trials, now print out | |||
// N, add total, ad per 1k operation | |||
System.out.printf("%d\t\t\t%.4f\t\t\t%.4f\n", N, tim.elapsedms(), per_1kop); | |||
} | |||
} | |||
} | |||
</pre> | |||
==Flags== | |||
{{StacksQueuesFlag}} | |||
[[Category:Queues]] | |||
[[Category:Priority Queues]] | |||
[[Category:Java]] | |||
[[Category:CS]] | |||
[[Category:Data Structures]] | |||
[[Category:Timing]] | |||
[[Category:Performance]] | |||
Revision as of 04:33, 25 June 2017
Priority Queues
Priority queues are queues that keep items in the queue in a sorted order, so that the minimum (highest priority) item comes out first.
This page contains results of timing and performance measurement of priority queues.
Will start with the note that I spent (wasted) a lot of time trying to implement my own priority queue, only to finally finish and get results that showed it was 2-3 orders of magnitude slower than the built-in priority queue type and horribly slow for anything bigger than 1,000 elements.
I'm looking to scale to a hundred million.
Timing
To time, used a simple timing object that wraps the system timer, called Tim the Timer. See Tim the Timer.
Builtin Timing
To time built-in priority queue objects I used the following script:
import java.util.LinkedList;
import java.util.Random;
import java.util.PriorityQueue;
/** Timing of Builtin Priority Queue in Java.
*/
public class BuiltinTiming {
// We will perform and time Nops add operations.
static int Nops = 100;
// We will do that Ntrials times.
static int Ntrials = 10000;
// We will add to a container of size N.
static int[] Ns = { 1000,2000,3000,4000,5000,
6000,7000,8000,9000,
10000,20000,30000,40000,50000,60000,70000,80000,90000,100000};
/** Run tests */
public static void main(String[] args) {
PriorityQueue<Integer> builtin = new PriorityQueue<Integer>();
System.out.println("---------------------------");
System.out.println("Add Test: Built-in PriorityQueue");
add(builtin);
}
/** Add test for built-in priority queue. */
public static void add(PriorityQueue<Integer> q) {
Random r = new Random();
System.out.println("N\t\tWalltime Add Tot (ms)\t\tWalltime Add Per 1k (ms)");
// Gathering stats on each size
for(int i = 0; i<Ns.length; i++) {
// set N
int N = Ns[i];
// set timer
Tim tim = new Tim();
for(int k=0; k<Ntrials; k++) {
// Start by initializing the container
q.clear();
for(int j = 0; j < N; j++) {
q.add(r.nextInt());
}
// Now time adding
tim.tic();
for(int m=0; m<Nops; m++) {
q.add(r.nextInt());
}
tim.toc();
}
// Now printing out N, total walltime, time per 1k add ops
double per_op = tim.elapsedms()/(1.0*Ntrials*Nops);
double per_1kop = (tim.elapsedms()/(1.0*Ntrials*Nops))*1000;
// done with timing trials, now print out
// N, add total, ad per 1k operation
System.out.printf("%d\t\t\t%.4f\t\t\t%.4f\n", N, tim.elapsedms(), per_1kop);
}
}
}
Flags
| Stacks and Queues Part of Computer Science Notes
Series on Data Structures
Stacks and Queues: Python StacksQueues/Python · StacksQueues/Python/ArrayStack · StacksQueues/Python/ArrayQueue · StacksQueues/Python/ArrayDeque StacksQueues/Python/LinkedStack
Stacks and Queues: Java StacksQueues/Java · StacksQueues/Java/ArrayStack · StacksQueues/Java/ArrayQueue · StacksQueues/Java/ArrayQueueFS · StacksQueues/Java/ArrayDeque StacksQueues/Java/LinkedStack · StacksQueues/Java/LinkedQueue · StacksQueues/Java/LinkedDeque
Applications Postfix_Expressions#Stacks · StacksQueues/Subsets · StacksQueues/Subsets/Java
|