Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Permutation {
- public:
- Permutation id(int m);
- void apres(Permutation s);
- void montrer ();
- Permutation array2perm(int arr[], int m);
- void inverse(Permutation & perm);
- Permutation tau (int arr[], int m);
- int signature();
- void mappedFrom(int arr[]);
- // oui je sais c'est écrit en anglais bla bla bla c'est pas grave on l'utilise quasi pas
- private:
- int de[50];
- int n;
- };
- Permutation Permutation::id(int m) {
- n = m;
- de[0] = 0;
- for (int i = 1; i <= n; i++)
- de[i] = i;
- }
- void Permutation::montrer() {
- printf("(%i",de[1]);
- for (int i = 2; i <= n; i++)
- printf(" %i",de[i]);
- printf(")");
- }
- void Permutation::apres(Permutation s) {
- n = s.n;
- int deRet[n];
- for (int i = 1; i <= n; i++)
- deRet[i] = de[s.de[i]];
- for (int i = 1; i <= n; i++)
- de[i] = deRet[i];
- }
- Permutation operator * (Permutation a, Permutation b) {
- a.apres(b);
- return a;
- }
- Permutation Permutation::array2perm(int arr[], int m) {
- n = m;
- for (int i = 1; i <= n; i++)
- de[i] = arr[i-1];
- }
- void Permutation::mappedFrom(int arr[]) {
- for (int i = 1; i <= n; i++) {
- arr[de[i]] = i;
- }
- }
- Permutation Permutation::tau (int arr[], int m) {
- Permutation ret;
- ret.id(m);
- for (int i = 1; i <= m; i++) {
- if (arr[0] == i) ret.de[i] = arr[1];
- else if (arr[1] == i) ret.de[i] = arr[0];
- else ret.de[i] = i;
- }
- return ret;
- }
- void Permutation::inverse(Permutation & perm) {
- perm.n = n;
- for (int i = 1; i <= n; i++)
- perm.de[i] = de[i];
- int taus[n+1][2];
- Permutation identity;
- int array[n+1];
- Permutation inverse;
- identity.id(n);
- inverse.id(n);
- Permutation tau;
- perm.mappedFrom(array);
- for (int i = 1; i <= n; i++) {
- taus[i][0] = i;
- taus[i][1] = identity.de[array[i]];
- tau = tau.tau(taus[i],n);
- identity = tau * identity;
- inverse = inverse * tau;
- }
- perm = inverse;
- }
- int Permutation::signature() {
- int epsilon = 1;
- Permutation perm;
- perm.n = n;
- for (int i = 1; i <= n; i++)
- perm.de[i] = de[i];
- int taus[n+1][2];
- Permutation identity;
- int array[n+1];
- Permutation inverse;
- identity.id(n);
- inverse.id(n);
- Permutation tau;
- perm.mappedFrom(array);
- for (int i = 1; i <= n; i++) {
- taus[i][0] = i;
- taus[i][1] = identity.de[array[i]];
- tau = tau.tau(taus[i],n);
- if (i != identity.de[array[i]])
- epsilon *= -1;
- identity = tau * identity;
- }
- return epsilon;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement