Cantor amplía las notas de estudio

Introducir:

  Para una disposición de 1 ~ n, si queremos guardarlo como un estado, generalmente abriremos una matriz n-dimensional de tamaño n ^ n, pero en este caso, la complejidad del espacio a menudo explotará, pero el 1 ~ n El acuerdo es solo hasta n! Es mucho más pequeño que n ^ n, así que considere usar un número para representar una disposición y comprimir el espacio. La expansión de Cantor corresponde a una permutación a su número ordinal en toda la permutación, es decir, la permutación de esta permutación de pequeña a grande en todas las permutaciones. (Por supuesto, se puede organizar de mayor a menor)

¿Cómo encontrar una variedad de Cantor?

  Hay una fórmula: R ^ A n- K = A . 1 ( n- - . 1 ) ! + A 2 ( n- - 2 ) ! + + A n- 0 , donde el rango de corriente está dispuesto x1, x2, ..., xn de! El valor de expansión de Cantor, ai, está detrás de xi, es decir , el número de números menores que xi en x i + 1 ~ x n .

(Explicar cavar)

1  int cantor ( int x [], int n)
 2 { // expansión de cantor, n significa disposición completa de n bits, x [] significa número totalmente organizado (representado por la matriz) 
3      int ans = 0 , sum = 0 ;
 4      para ( int i = 1 ; i <n; i ++ ) {
 5          para ( int j = i + 1 ; j <= n; j ++ )
 6              if (x [j] < x [i])
 7                  sum ++; // Registre cuántos 
8          ans + = suma * factorial [ni]; // el factorial acumulativo es el valor factorial preprocesado que es menor que xi
9          sum = 0 ; // El contador se restablece a 
10      }
 11      return ans + 1 ; // +1 se debe a que el número ordinal se cuenta solo. Si desea saber cuántas permutaciones hay delante, no necesita agregar 
12 }

  Preguntas de ejemplo:

  Luogu P1379 Ocho Rompecabezas digital

  Uso típico del estado de compresión de expansión de Cantor

Expansión: expansión inversa de Cantor (excavación)

Supongo que te gusta

Origin www.cnblogs.com/InductiveSorting-QYF/p/12679235.html
Recomendado
Clasificación