std::next_permutation Explicación de la implementación
El algoritmo std::next_permutation calcula la siguiente permutación lexicográficamente más grande de una secuencia dada. Comprender su implementación es crucial para comprender su comportamiento.
Esquema del algoritmo
El algoritmo itera sobre la secuencia de derecha a izquierda, buscando el "ascendente" más a la izquierda (es decir, , un elemento que es más pequeño que su sucesor). Si no se encuentra ningún ascendente, significa que la secuencia está en orden decreciente, en cuyo caso se invierte la secuencia para obtener la permutación más pequeña.
De lo contrario, el algoritmo continúa encontrando el elemento más pequeño en la secuencia a la derecha del ascendente (llamado "k"). Luego, este elemento se intercambia con el ascendente. Finalmente, los elementos a la derecha del ascendente se invierten para mantener el orden decreciente.
Roles variables
Flujo de bucle
El bucle se repite hasta que llego al comienzo de la secuencia (comienzo). Dentro de cada iteración:
Ejemplo
Considere la secuencia {1, 2, 4, 3}.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3