/ / Inverse d'une permutation - algorithme, permutation

Inverse d'une permutation - algorithme, permutation

Disons que j'ai une fonction qui calcule la permutation d'une chaîne. Appeler perm(in, seq)in est une chaîne et seq est une chaîne de longueur strlen(str) des nombres 0,1,2,3...

perm sort une chaîne outout[i] == in[perm[i]]

Exemple:

perm("abc", "012") == "abc"
perm("abc", "210") == "cba"
perm("abc", "201") == "cab"

Maintenant, je veux trouver la séquence seq_c qui est "l'inverse" de seq tel que

perm(perm(str, seq), seq_c) == str

En d'autres termes, trouver la séquence de permutation sec_c qui transforme l'entrée permutée en entrée d'origine.

Réponses:

3 pour la réponse № 1
array<int, 10> perm{ 2,7,4,9,8,3,5,0,6,1 };
array<int, 10> perm_inverse;
for (int i = 0; i < 10; ++i) perm_inverse[perm[i]] = i;
for (int i = 0; i < 10; ++i) cout << perm_inverse[i] << ",";

7,9,0,5,2,6,8,1,4,3,


0 pour la réponse № 2

Vous pouvez simplement parcourir les séquences et vérifier toutes les séquences.

CODE PSEUDO:

While ( seq_c!= end )
{
if( perm(perm(str, seq), seq_c) == str)
return seq_c;
++seq_c;
}