Supposons que nous ayons une classe d'objets (par exemple des graphiques, des chaînes) et une relation d'équivalence sur ces objets. Pour les graphiques, cela pourrait être un isomorphisme de graphique. Pour les chaînes, nous pourrions déclarer deux chaînes équivalentes si elles sont des anagrammes l'une de l'autre.
Je souhaite calculer un représentant pour une classe d'équivalence. Autrement dit, je veux une fonction f () telle que pour deux objets quelconques x, y, f (x) = f (y) ssi x et y sont équivalents. (*)
Pour l'exemple d'anagrammes, f (s) pourrait trier les lettres dans la chaîne, c'est-à-dire. f ('cabac') = 'aabcc'. Pour l'isomorphisme de graphe, nous pourrions prendre f (G) pour être un graphe G 'qui est isomorphe à G et est le premier graphe lexicoraphiquement à avoir cette propriété.
Maintenant, la question est: y a-t-il un exemple où le problème de déterminer si deux éléments sont équivalents est "facile" (poly temps résoluble), alors que trouver un représentant est difficile (c'est-à-dire qu'il n'y a pas d'algorithme poly temps pour calculer f () qui satisfait ( *)).