/**
* Tests de eficiencia sobre diferentes algoritmos de creación de números
* aleatorios sin repetición.
*/
package aleatoriosinrepeticion1;
import java.util.Random;
import java.util.Stack;
public class AleatorioSinRepeticion1 {
public static void main(String[] args) {
long precision = 1000000;
int nNodos = 13;
test1(nNodos, precision);// Eficiencia base
test2(nNodos, precision);// Eficiencia +620%
test3(nNodos, precision);// Eficiencia +1156%
}
private static void test1(int nNodos, long precision) {
int perm[] = new int[nNodos];
int pos;
long tiempo1 = System.nanoTime();
for (int k = 0; k < precision; k++) {
Stack<Integer> pRuta = new Stack<Integer>();
for (int i = 0; i < nNodos; i++) {
pos = (int) Math.floor(Math.random() * nNodos);
while (pRuta.contains(pos)) {
pos = (int) Math.floor(Math.random() * nNodos);
}
pRuta.push(pos);
perm[i] = pos;
}
}
long tiempo2 = System.nanoTime();
System.out.println("Tiempo1: " + (tiempo2 - tiempo1) / 1e6 + " ms");
}
private static void test2(int nNodos, long precision) {
Stack<Integer> pRef = new Stack<Integer>();
int perm[] = new int[nNodos];
Random rnd = new Random();
int pos;
long tiempo1 = System.nanoTime();
for (int k = 0; k < precision; k++) {
for (int i = 0; i < nNodos; i++) {
pRef.add(i);
}
for (int i = 0; i < nNodos; i++) {
pos = rnd.nextInt(pRef.size());
perm[i] = pRef.remove(pos);
}
}
long tiempo2 = System.nanoTime();
System.out.println("Tiempo2: " + (tiempo2 - tiempo1) / 1e6 + " ms");
}
private static void test3(int nNodos, long precision) {
int[] aux_perm = new int[nNodos];
Random rnd = new Random();
int[] perm = new int[nNodos];
int aux_nNodos = nNodos;
int pos;
long tiempo1 = System.nanoTime();
for (int index = 0; index < precision; index++) {
aux_nNodos = nNodos;
for (int i = 0; i < nNodos; i++) {
aux_perm[i] = i + 1;
}
for (int i = 0; i < nNodos; i++) {
pos = rnd.nextInt(aux_nNodos);
perm[i] = aux_perm[pos] - 1;
aux_perm[pos] = aux_perm[aux_nNodos - 1];
aux_nNodos--;
}
}
long tiempo2 = System.nanoTime();
System.out.println("Tiempo3: " + (tiempo2 - tiempo1) / 1e6 + " ms");
}
}
Resultado:
run:
Tiempo1: 9470.44684 ms
Tiempo2: 1515.179325 ms
Tiempo3: 823.204608 ms
BUILD SUCCESSFUL (total time: 11 seconds)