Para responder a esto último, 16 ^ 10, ya que cada personaje tiene 16 opciones posibles sobre una longitud total de 10. O 16 * 16 * 16 ....
, lo que da como resultado 1,099,511,627,776 combinaciones posibles. Ahora, si contáramos este número lo más rápido posible (algunos scripts C optimizados) e imprimiéramos los números en pantalla, tardaría aproximadamente 10 segundos por cada 10000000 iteraciones, o 1099511 segundos, 12 días. Esto es solo si contamos desde 0 e imprimimos cada número.
Un programa c simple para calcular permutaciones solamente
#include <stdio.h>
#include <string.h>
void swap(char *x, char *y) {
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permute(char *a, int l, int r) {
int i;
if (l == r) {
printf("%s\n", a);
} else {
for (i = l; i <= r; ++i) {
swap((a + l), (a + i));
permute(a, l + 1, r);
swap((a + l), (a + i));
}
}
}
int main(int argc, char *argv[]) {
char str[] = "ABCDEF0123456789";
permute(str, 0, strlen(str) - 1);
return 0;
}
Esto no cubre todo el espacio, pero da una buena indicación. Recuerde que esto hace permutaciones intercambiables solamente, y de ninguna manera está completo. Calcular las posibles permutaciones de más de 10 caracteres toma alrededor de 20 segundos en promedio. Cada carácter agrega aproximadamente 10 veces el tiempo de ejecución anterior, ya que este es un crecimiento exponencial, 11 caracteres ya tomarán aproximadamente 3 minutos , y así sucesivamente. Una indicación aproximada estimaría que todas las permutaciones de más de 16 caracteres tomarán hasta 230 días . En la práctica, esto será más, ya que no solo desea imprimir las combinaciones en la pantalla.
Para acelerar el proceso, debe dividir el dominio y ejecutar combinaciones en paralelo.