Disons que j'ai une fonction qui calcule la permutation d'une chaîne. Appeler perm(in, seq)
où 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 out
où
out[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 № 1array<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;
}