std::siguiente_permutación
Se utiliza para reorganizar los elementos del rango [primero, último] en la siguiente permutación lexicográficamente mayor. Una permutación es cada una de las N! arreglos posibles que pueden tomar los elementos (donde N es el número de elementos en el rango). Se pueden ordenar diferentes permutaciones según cómo se comparan lexicográficamente entre sí. La complejidad del código es O(n*n!) que también incluye la impresión de todas las permutaciones.
Sintaxis:
template bool next_permutation (BidirectionalIterator first, BidirectionalIterator last); Parameters: first, last : Bidirectional iterators to the initial and final positions of the sequence. The range used is [first, last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last. return value: true : if the function could rearrange the object as a lexicographically greater permutation. Otherwise, the function returns false to indicate that the arrangement is not greater than the previous, but the lowest possible (sorted in ascending order).
Aplicación: next_permutation es encontrar el siguiente valor lexicográficamente mayor para una array de valores dada.
Ejemplos:
Input : next permutation of 1 2 3 is Output : 1 3 2 Input : next permutation of 4 6 8 is Output : 4 8 6
C++
// C++ program to illustrate // next_permutation example // this header file contains next_permutation function #include <algorithm> #include <iostream> using namespace std; int main() { int arr[] = { 1, 2, 3 }; sort(arr, arr + 3); cout << "The 3! possible permutations with 3 elements:\n"; do { cout << arr[0] << " " << arr[1] << " " << arr[2] << "\n"; } while (next_permutation(arr, arr + 3)); cout << "After loop: " << arr[0] << ' ' << arr[1] << ' ' << arr[2] << '\n'; return 0; }
Producción:
The 3! possible permutations with 3 elements: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 After loop: 1 2 3
std::prev_permutación
Se utiliza para reorganizar los elementos del rango [primero, último] en la permutación ordenada lexicográficamente anterior. Una permutación es cada una de las N! arreglos posibles que pueden tomar los elementos (donde N es el número de elementos en el rango). Se pueden ordenar diferentes permutaciones según cómo se comparan lexicográficamente entre sí. La complejidad temporal del código es O(n*n!) ya que cada permutación requiere un tiempo lineal.
Sintaxis:
template bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last ); parameters: first, last : Bidirectional iterators to the initial and final positions of the sequence. The range used is [first, last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last. return value: true : if the function could rearrange the object as a lexicographically smaller permutation. Otherwise, the function returns false to indicate that the arrangement is not less than the previous, but the largest possible (sorted in descending order).
Aplicación: prev_permutation es encontrar el valor anterior lexicográficamente más pequeño para una array de valores dada.
Ejemplos:
Input : prev permutation of 3 2 1 is Output : 3 1 2 Input : prev permutation of 8 6 4 is Output :8 4 6
C++
// C++ program to illustrate // prev_permutation example // this header file contains prev_permutation function #include <algorithm> #include <iostream> using namespace std; int main() { int arr[] = { 1, 2, 3 }; sort(arr, arr + 3); reverse(arr, arr + 3); cout << "The 3! possible permutations with 3 elements:\n"; do { cout << arr[0] << " " << arr[1] << " " << arr[2] << "\n"; } while (prev_permutation(arr, arr + 3)); cout << "After loop: " << arr[0] << ' ' << arr[1] << ' ' << arr[2] << '\n'; return 0; }
Producción:
The 3! possible permutations with 3 elements: 3 2 1 3 1 2 2 3 1 2 1 3 1 3 2 1 2 3 After loop: 3 2 1
Publicación traducida automáticamente
Artículo escrito por pawan_asipu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA