PermutationLex
Progressively generates all the permutations of the given size, in lexicographic order.
Interface
#include <codecogs/maths/combinatorics/permutations/permutationlex.h>
using namespace Maths::Combinatorics::Permutations;
Overview
Consider the permutations of size n
and
Now consider the next two numbers in the numerical base , corresponding to each permutation
Then is said to be the lexicographic succesor of
if and only if
.
This class progressively generates all the permutations of the given size, in lexicographic order, starting with the identical permutation.
Example:
#include <codecogs/maths/combinatorics/permutations/permutationlex.h>
#include <iostream>
int main()
{
Maths::Combinatorics::Permutations::PermutationLex P(7);
std::cout << "The first 5 lexicographic permutations of 7 elements:";
std::cout << std::endl;
for (int i = 0; i < 5; i++)
{
std::vector<int> alpha = P.getNext();
for (int j = 0; j < alpha.size(); j++)
std::cout << alpha[j] << " ";
std::cout << "\t rank = " << P.getRank();
std::cout << std::endl;
}
return 0;
}
Output:
The first 5 lexicographic permutations of 7 elements:
1 2 3 4 5 6 7 rank = 1
1 2 3 4 5 7 6 rank = 2
1 2 3 4 6 5 7 rank = 3
1 2 3 4 6 7 5 rank = 4
1 2 3 4 7 5 6 rank = 5
References
SUBSET, a C++ library of combinatorial routines, http://www.csit.fsu.edu/~burkardt/cpp_src/subset/subset.html
Members of PermutationLex
CLASS METHOD
PermutationLex
CLASS METHOD
getNext
generates the next permutation in lexicographic order; if all have been considered, it starts again from the first
CLASS METHOD
getRank
returns the rank of the current permutation