Supposons que soit un arbre à degrés constants dont nous ne connaissons pas la structure. Le problème est de sortir l'arbre en posant des requêtes de la forme: "Le nœud se trouve-t-il sur le chemin du nœud au nœud ?". Supposons que chaque requête puisse recevoir une réponse en temps constant par un oracle. Nous connaissons la valeur de , le nombre de nœuds dans l'arbre. L'objectif est de minimiser le temps nécessaire à la sortie de l'arbre en termes de .
Existe-t-il un algorithme pour le problème ci-dessus?
Supposons que le degré de n'importe quel nœud dans soit au plus 3.
Ce que je sais
Le boîtier de diamètre borné est facile . Si le diamètre de l'arbre est , alors nous pouvons obtenir un algorithme de division et de conquête:
Tout arbre binaire a un bon séparateur qui divise l'arbre en composants de taille non inférieure à 1 / 3n.
- Choisissez un sommet x. Si c'est un bon séparateur, étiquetez-le et recursez.
- Trouvez les 3 voisins de x.
- Déplacez-vous en direction du voisin qui a le plus grand nombre de nœuds. Répétez l'étape 2 avec le voisin.
Puisque la recherche du séparateur prend au plus étapes, nous obtenons un algorithme .O ( n D log n )
Un algorithme randomisé . (déplacé des commentaires ci-dessous)
Choisissez deux sommets x et y au hasard. Avec une probabilité de 1/9, ils se trouveront sur les côtés opposés d'un séparateur. Sélectionnez le nœud central du chemin de à . Voyez s'il s'agit d'un séparateur, sinon faites une recherche binaire.y
Il faut temps prévu pour trouver le séparateur. Nous obtenons donc un algorithme randomisé .O ( n
Contexte. J'ai appris ce problème grâce à un ami qui travaille sur des modèles graphiques probabilistes. Le problème ci-dessus correspond à peu près à l'apprentissage de la structure d'un arbre de jonction à l' aide d'un oracle qui, étant donné trois variables aléatoires X, Y et Z, peut indiquer la valeur des informations mutuelles entre X et Y étant donné la valeur de Z. Si la valeur est proche à zéro, nous pouvons supposer que Z se trouve sur le chemin de X à Y.