Cálculo de permutaciones de un conjunto de caracteres hexadecimales [cerrado]

-1

¿Cuánto tiempo tomaría ejecutar todas las permutaciones / combinaciones de un conjunto de diez caracteres? ¿Asumiendo que el conjunto de caracteres está limitado a un alfabeto hexadecimal? (es decir, 16 caracteres {0..9} {A..F}; por ejemplo, A1B2C3D4E5 o A7454F4F74).

No estoy seguro de una velocidad / velocidad / frecuencia real (es decir, x.words / second; y.words / minute) pero tal vez alguien aquí lo haga.

O tal vez debería comenzar con; ¿Cuántas combinaciones / permutaciones posibles existen? Y en el futuro; ¿Cómo podría resolverlo por mí mismo? (es decir, ¿es simplemente algo así como 10 ^ 16?)

    
pregunta tjt263 30.08.2016 - 10:18
fuente

2 respuestas

1

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.

    
respondido por el Yorick de Wid 30.08.2016 - 11:26
fuente
1

Suponiendo que la secuencia es importante, el número de posibles permutaciones de una cadena de 10 caracteres de caracteres hexadecimales (16 caracteres únicos) sería = 16 x 16 x ... (10 veces) = 16 ^ 10 = 1,099,511,627,776 Esto es un poco más que un billón.

    
respondido por el Sandeep S. Sandhu 30.08.2016 - 11:01
fuente