Per rispondere a quest'ultimo, 16 ^ 10, poiché ogni personaggio ha 16 possibili opzioni su una lunghezza totale di 10. Oppure 16 * 16 * 16 ....
che risulta in 1.099.511.627.776 combinazioni possibili. Ora se dovessimo contare su questo numero il più velocemente possibile (uno script C ottimizzato) e stampare i numeri sullo schermo, sarebbero necessari circa 10 secondi per 10000000 iterazioni o 1099511 secondi, 12 giorni. Questo è solo se contiamo da 0 e stampiamo ogni numero.
Un semplice programma per calcolare solo le permutazioni
#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;
}
Questo non copre l'intero spazio, ma fornisce una buona indicazione. Ricorda che questo ha permutazioni scambiabili solo, e non è affatto completo. Calcolare mediamente le possibili permutazioni superiori a 10 caratteri richiede circa 20 secondi . Ogni personaggio aggiunge circa 10 volte il tempo di esecuzione precedente poiché questa è una crescita esponenziale, 11 caratteri impiegano già circa 3 minuti e così via. Un'indicazione approssimativa potrebbe stimare tutte le permutazioni superiori a 16 caratteri fino a 230 giorni . In pratica questo sarà più, dal momento che non vuoi solo stampare le combinazioni sullo schermo.
Per accelerare il processo devi dividere il dominio ed eseguire le combinazioni in parallelo.