Comment puis-je générer de façon aléatoire des arbres couvrant une hauteur limitée?

9

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é.vcentervvVcenterδδ

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é.

Arman
la source
Je ne suis pas sûr d'avoir bien compris. Dans la première étape, enlevez-vous le bord juste au hasard ou pour que la hauteur de l'arbre soit (éventuellement) réduite?
Sacha
J'ajoute et supprime des bords au hasard.
Arman
Pourriez-vous échantillonner à la place le chemin le plus court aléatoire couvrant les arbres? Cela simplifie les choses
Yaroslav Bulatov
avez-vous un coût sur les bords? vous cherchez un arbre enjambant avec une hauteur et un coût minimum? Comme l'a écrit @pboothe, vous pouvez utiliser BFS et c'est tout. Le seul problème est que BFS utilise trop de mémoire. Si vous vous souciez des coûts, vous pouvez essayer l'algorithme dans wikipedia pour les arbres couvrant minimum euclidiens ( en.wikipedia.org/wiki/Euclidean_minimum_spanning_tree ). Il a un temps d'exécution de O ( n log n ) avec O ( n ) d'espace. δO(nlogn)O(n)
Marcos Villagra
Votre problème a donc trois quantités limitées: la hauteur de l'arbre, le degré de chaque sommet et la distance de v_center, est-ce vrai? La contrainte de degré borné en elle-même rend le problème NP difficile, mais je suppose que vous recherchez une méthode susceptible de produire une solution rapidement et non un algorithme exact.
Jagadish

Réponses:

7

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.

Abraham Flaxman
la source
2
Plus de détails, plus un film: Healthyalgorithms.wordpress.com/2010/12/23/…
Abraham Flaxman
3

SShhh

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.

Danu
la source
1

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.

Peter Boothe
la source
Vous avez certainement raison. Nous avons commencé à faire avec BFS mais cela n'a pas fonctionné à cause de la contrainte de degré sur les sommets. J'ai oublié de mentionner cette contrainte (mon erreur): le degré des sommets de l'arbre généré doit également être borné. Votre réponse est correcte avec la question actuelle mais je pense que je devrais modifier ma question.
Arman
Ensuite, votre problème est presque certainement un PNJ par réduction de Spanning Tree Degree Constrained - en.wikipedia.org/wiki/Degree-constrained_spanning_tree
Peter Boothe