J'écris un programme, résolvant le problème du facteur chinois (également connu sous le nom de problème d'inspection d'itinéraire) dans un graphique non orienté et actuellement confronté au problème pour trouver les meilleurs bords supplémentaires pour connecter les nœuds à un degré impair, afin que je puisse calculer un circuit eulérien.
Il peut y avoir (compte tenu de la taille du graphe à résoudre) une énorme combinaison d'arêtes qui doivent être calculées et évaluées.
A titre d'exemple , il existe des noeuds de degré impair . Les meilleures combinaisons pourraient être:
- , C D , E F , G H
- , B D , E H , F G
- , B C , E G , F H
- ....
où signifie "bord entre le nœud A et le nœud B ".
Par conséquent, ma question est: existe-t-il un algorithme connu pour résoudre ce problème dans une complexité meilleure que la force brute pure (les calculer et les évaluer tous)?
€: Après quelques efforts de recherche, j'ai trouvé cet article, parlant de "l'algorithme de correspondance de longueur minimale d'Edmonds", mais je ne trouve aucun pseudo-code ou description d'apprenants de cet algorithme (ou du moins je ne les reconnais pas, comme Google offre beaucoup de hits et des algorithmes de correspondance par J. Edmonds)
Réponses:
Comme indiqué dans les commentaires, Wikipedia propose une réduction de l'inspection des itinéraires aux correspondances de poids minimum . Vladimir Kolmogorov a publié une implémentation rapide de la version pondérée de l'algorithme Blossom d'Edmonds, en C ++ [1].
[1] V. Kolmogorov, Blossom V: Une nouvelle implémentation d'un algorithme d'appariement parfait à moindre coût . Calcul de programmation mathématique , 1 (1): 43–67, 2009.
la source