Soit une matrice . Nous disons que deux entrées sont voisines si elles sont adjacentes horizontalement ou verticalement, et les deux entrées sont à . On veut trouver un nombre minimum de à ajouter, donc chaque peut atteindre un autre à travers une séquence de voisins.
Exemple:
100
000
001
Ici, nous avons besoin de 3 :
100
100
111
Comment trouver efficacement le nombre minimum de à ajouter, et où?
algorithms
graph-theory
matrices
Chao Xu
la source
la source
Réponses:
Si vous modélisez votre problème avec des graphiques, votre problème est comme le problème de Steiner Tree :
Voir ici pour la définition la plus simple possible.
Comme vous pouvez le voir, c'est un PNJ en général, mais dans votre cas, votre graphique est un graphique en grille, peut-être que vous pouvez trouver une bonne solution pour cela, mais pour votre exemple actuel (lorsque les terminaux sont à la limite), vous pouvez voir l' arbre de Steiner dans du papier de graphiques en grille .
Quoi qu'il en soit, il existe d'excellentes heuristiques pour le problème de Steiner Tree, vous pouvez appliquer une approche similaire à votre problème.
PS: Vous pouvez supposer que les voisins 1 sont des nœuds connectés, après quoi vous pouvez contracter leurs bords pour créer un nouveau graphique, votre nouveau graphique créé est planaire et si vous pouviez résoudre l'arbre Steiner pour cela, vous pouvez résoudre votre problème, mais peut être il existe une bonne solution à votre problème, indépendante de Steiner Tree.
la source