J'ai essayé de trouver un algorithme pour trouver une couverture de cycle de sommet maximale d'un graphe orienté - c'est-à-dire un ensemble de cycles disjoints qui contiennent tous les sommets de , avec autant de cycles que possible (nous ne considérons pas cycles de sommets individuels ici). Je sais que le problème de trouver une couverture de cycle de sommet minimum , ainsi que de trouver une couverture de cycle de sommet avec exactement cycles est NP-complet. Mais qu'en est-il du cas maximum?k
Bien que je trouve une réponse à cette question intéressante en général, les graphiques pour lesquels je veux l'utiliser sont en fait assez limités par leur construction, donc peut-être même si le problème est NP-complet, il pourrait y avoir une solution polynomiale pour ces cas spécifiques.
Nous avons une liste d'entiers , éléments et nous utiliserons , éléments pour faire référence à après l'avoir triée. Par exemple:l i S s i L
Les sommets du graphe seront identifiés par des paires telles que et . Le graphique a un bord dirigé si et seulement si . (Un cycle dans ce graphique correspond à un ensemble de valeurs qui peuvent être permutées cycliquement de sorte qu'elles se retrouvent dans leur position triée.)
L'exemple ci-dessus donnerait le graphique suivant (en utilisant des indices basés sur 1):
Une chose qui ne fonctionne pas est l'approche gourmande de supprimer à plusieurs reprises le plus petit cycle (comme le montre cet exemple).
Notez que ce problème équivaut (si je n'ai commis aucune erreur) à demander combien de swaps vous avez besoin pour trier une liste donnée . (C'est ce qui a inspiré la recherche de ce problème en premier lieu.)
Après quelques indications de la réponse de Juho et un peu plus de filtrage dans la littérature, je suis tombé sur le problème d'affectation qui semble très lié. Cependant, le problème d'affectation est formulé en termes de graphe biparti pondéré et jusqu'à présent, je n'ai pas pu trouver un moyen de choisir les arêtes et les poids pour y réduire ce problème. Si nous voulions formuler le problème ici en termes de minimisation d'une fonction de poids, alors une approche intuitive serait de dire que le poids de chaque cycle est oùest le nombre d'arêtes (ou de sommets) dans le cycle. (Bien sûr, cela équivaut à simplement définir le poids à.) Autrement dit, le poids dépend de la taille du cycle, pas des bords particuliers qu'il comprend. Mais peut-être que cela donne à quelqu'un une autre idée de la façon de réduire le problème.
Il apparaît également que la limitation de la taille des cycles rend le problème APX difficile pour les graphiques généraux. Cela n'implique pas nécessairement qu'il en va de même pour la tâche de maximiser le nombre de cycles, ni pour les graphiques spécifiques considérés ici, mais cela semble être suffisamment lié pour être important.
En résumé: peut-on trouver une couverture maximale de cycle disjoint pour les graphiques construits à partir du processus ci-dessus?
En tant que deux côtés, je serais également intéressé de savoir si la couverture de cycle disjoint de sommet maximum a également une solution efficace pour les graphiques arbitraires qui admettent au moins une couverture de cycle (qui tombera probablement comme une réponse à la question principale), ou si la simple détermination du nombre de cycles dans la couverture maximale (par opposition aux bords réels contenus dans chacun) rend le problème plus simple. Je suis heureux de publier ces questions séparément si les gens pensent qu'ils méritent eux-mêmes des réponses complètes.