El método de orden del diccionario es generar todos los arreglos uno por uno de acuerdo con la idea de la clasificación del diccionario.
En Matemáticas, el orden de diccionario o diccionario (también conocido como orden de vocabulario, orden de diccionario, orden alfabética o orden de diccionario) es un método de orden alfabético en el que las palabras organizaron alfabética basada en el orden alfabético. Esta generalización radica principalmente en definir el orden total de secuencias (a menudo llamadas palabras en la informática) de elementos que definen un conjunto de elementos ordenados por completo (a menudo llamados alfabeto).
Para la disposición de los números 1, 2, 3 ... n, la secuencia de diferentes arreglos se determina comparando la secuencia de números correspondientes uno por uno de izquierda a derecha. Por ejemplo, para los arreglos 12354 y 12345 de los 5 números, la disposición 12345 está al frente y la disposición 12354 está en la parte posterior. Según esta regulación, el primero entre todos los arreglos de los 5 números es 12345 y el último es 54321.
Por ejemplo, todos los arreglos compuestos por 1, 2, 3, de pequeños a grandes son:
123,132,213,231,312,321
Todos los arreglos que consisten en 1, 2, 3, 4:
1234, 1243, 1324, 1342, 1423, 1432,
2134, 2143, 2314, 2341, 2413, 2431,
3124, 3142, 3214, 3241, 3412, 3421,
4123, 4132, 4213, 4231, 4312, 4321.
Primero, se debe especificar una secuencia de caracteres en el conjunto de caracteres dado, y sobre esta base, cada disposición se genera en secuencia.
[Ejemplo] Conjunto de caracteres {1,2,3}, los números más pequeños son los primeros, por lo que la disposición completa generada en el orden del diccionario es: 123, 132, 213, 231, 312, 321.
Genere la siguiente permutación dada una permutación completa, y la llamada siguiente es la cadena adyacente a la siguiente sin orden de diccionario. Esto requiere que este tenga el mismo prefijo que el siguiente el tiempo posible, es decir, la variación se limita al sufijo más corto posible.
Existe una cierta relación entre el último acuerdo y el acuerdo anterior. El proceso de solución de la última disposición es el siguiente:
Con disposición (P) = 2763541, ordenado por el diccionario, ¿cuál es su próxima disposición?
2763541 (encuentre el último orden positivo 35)
2763541 (Encuentre el último número 4 después de 3 y es mayor que 3)
2764531 (interruptor 3, 4 posiciones)
2764135 (invertir 5, 3, 1 después de 4)
La siguiente es una descripción de la siguiente disposición de P [1 ... N]:
Encontrar i = max {j | P [J 1] <P [J]} (Encuentre el último orden positivo)
Encontrar j = max {k | P [i 1] <p [k]} (encuentre el último mayor que p [i 1])
Exchange P [I 1] y P [J] para obtener P [1] ... P [I-2] P [J] P [I] P [I+1] ... P [J-1] P [I-1] P [J+1] ... P [N]
Invierta el número después de P [J] para obtener P [1] ... P [I-2] P [J] P [N] ... P [J+1] P [I-1] P [J-1] ... P [I]
La implementación del código es la siguiente:
private static int [] getPerMutation (int [] in) {int [] ns = in; int base = -1; for (int i = ns.length-1; i> = 1; i--) {if (ns [i-1] <ns [i]) {base = i-1; break;}} // se ha organizado para el último orden y está en el orden reverso si (base == -1) de regreso; (int i=ns.length-1; i>=base; i--) {if (ns[i] > ns[base]) {bigger = i;break;}}// System.out.println(bigger);swap(ns, base, bigger);reverse(ns,base+1,ns.length-1);return ns;}private static void reverse(int[] ns, int i, int j) {int left = i, derecho = j; while (izquierda <derecha) {swap (ns, izquierda, derecha); izquierda ++; derecha-;}} private static void swap (int [] ns, int base, int más grande) {int temp = ns [base]; ns [base] = ns [más grande]; ns [más grande] = temp;}Resumir
Lo anterior se trata del análisis del algoritmo de clasificación de diccionario de lenguaje Java y ejemplos de código. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!