Voici une idée, mais je ne sais pas si elle est une amélioration dans la pratique:
De https://en.wikipedia.org/wiki/Biconnected_component « Tout graphe connexe se décompose en un arbre de composants biconnexes appelé l'arbre bloc coupe du graphique. » De plus, vous pouvez calculer une telle décomposition en temps linéaire.
Je suggère que lorsque vous vous mariez et supprimez deux sommets, vous ne le faites que pour deux sommets dans le même composant biconnecté. Lorsque vous n'avez plus de sommets à fusionner, vous avez un ensemble d'arbres qui ne sont pas connectés les uns aux autres. Le problème de la couverture des sommets sur les arbres est traitable via la programmation dynamique: pour chaque nœud, calculer le coût de la meilleure réponse si ce nœud est ajouté à la couverture et si ce nœud n'est pas ajouté à la couverture. Vous pouvez calculer les réponses pour un nœud donné les meilleures réponses pour ses enfants. Une autre façon - pour autant que je sache mieux - serait de calculer l'arbre recouvrant minimum du graphe et d'utiliser la programmation dynamique pour calculer la meilleure couverture de sommet pour cet arbre, en négligeant les liens en dehors de l'arbre, enlever les liens couverts à partir du graphique, puis continuez en épousant les sommets comme avant.
Je pense que je préfère le spanning tree minimal. En produisant le spanning tree minimum, vous supprimez un petit nombre de liens. Un arbre avec N nœuds avait des liens N-1, donc même si vous ne récupérez pas l'arbre d'origine, vous en récupérez un avec autant de liens que lui. Une couverture de vertex pour le graphe complet est aussi une couverture de vertex pour l'arbre couvrant minimal donc si la réponse correcte pour le graphe complet a V sommets, il y a une réponse pour l'arbre recouvrant minimum avec au plus V sommets. S'il y avait k arêtes aléatoires ajoutées à l'arbre, il y a k arêtes (pas nécessairement les mêmes) qui doivent être ajoutées pour transformer le spanning-tree minimal en graphe complet. Vous pouvez certainement vous assurer que ces nouvelles arêtes sont recouvertes de k sommets au maximum. Donc, si la réponse optimale a V sommets, vous obtiendrez une réponse avec au plus V + k sommets.
Tout dépend de: Combien d'arêtes aléatoires? Nous savons qu'il y a exactement 49999 arêtes d'arbre, mais un algorithme pratique pour 20 arêtes aléatoires ne sera pas pour 1000000. –
Je n'ai pas le nombre exact, mais environ 1/3 des arêtes sont en extra. – Ccyan