Pour un projet sur lequel je travaille, je dois générer des arbres s'étendant au hasard avec une hauteur limitée.
Fondamentalement, je fais ce qui suit: 1) Générer un arbre couvrant 2) Vérifier la faisabilité, si possible le garder.
1) À partir d'un arbre couvrant minimum (Prim ou Kruskal) j'ajoute un bord non existant et cela crée un cycle, je détecte ce cycle et supprime l'un des bords de ce cycle qui me donne un nouvel arbre couvrant et je continue avec cet arbre couvrant en ajoutant un nouveau bord ...
2) Supposons qu'il existe un sommet spécial . Pour chaque sommet v , la longueur du chemin de v à V c e n t e r doit être inférieure à δ , où δ est un paramètre donné.
Existe-t-il une meilleure façon (intelligente) de procéder?
PS J'ai oublié de spécifier l'autre contrainte (mon erreur): le degré des sommets doit également être borné.
Réponses:
Il y a quelques années, je travaillais sur des arbres s'étendant sur une profondeur limitée, ils sont vraiment intéressants. Certains de mes collègues ont proposé des algorithmes de transmission de messages qui ont fait un excellent travail, mais je ne trouve aucun de leur code disponible. Nous l'avons écrit dans un style physique ici: http://iopscience.iop.org/1742-5468/2009/12/P12010/ . Ils m'ont dit que cela fonctionne également avec des limites de degré, bien que cela ne soit pas inclus dans le document.
L'approche que vous proposez, que j'appellerais Markov Chain Monte Carlo, est souvent un concurrent de l'approche de transmission de messages. Si vous êtes intéressé à échantillonner de manière approximativement uniforme au hasard à partir de l'ensemble des arbres couvrant les degrés bornés et la profondeur bornée d'un graphique donné, je suggère de modifier votre approche pour utiliser des limites "douces". C'est-à-dire au lieu de rejeter un échange de bord qui fait que l'arbre viole la limite de profondeur, acceptez-le, mais avec une probabilité plus faible qu'un échange qui ne viole pas la limite. Si vous avez un paramètre qui contrôle à quel point cette probabilité est inférieure, vous pouvez rendre la contrainte violant les configurations de moins en moins probable jusqu'à ce que vous arriviez à une solution réalisable qui soit presque uniformément aléatoire.
La grande question est de combien de temps avez-vous besoin pour exécuter la chaîne. Puisqu'un arbre couvrant avec un degré au plus 2 est un chemin hamiltonien, vous devez vous attendre à ce que tout générique lié soit exponentiel dans la taille du graphique. Mais peut-être que les graphiques qui vous intéressent sont spéciaux d'une certaine manière.
la source
Cependant, je ne sais pas si l'algorithme que vous avez décrit va générer un arbre couvrant aléatoire. Je recommanderais plutôt de regarder des algorithmes standard. Il existe deux algorithmes: l'algorithme de Wilson et l'algorithme d'Aldous-Broder. Vous pouvez voir ici . Il existe un algorithme plus récent (approximation) mais il est assez compliqué.
En outre, il pourrait y avoir un moyen de générer directement cet arbre couvrant avec une hauteur limitée. Mais je n'ai jamais entendu parler de tels algorithmes.
la source
Utilisez la recherche en premier! Faites un BFS à partir de chaque sommet du graphique, choisissez l'arbre résultant de la plus petite hauteur. Un BFS trouve toujours le chemin de la racine à tous les autres sommets avec le moins de sauts.
la source