La question est :
Comment peut on faire cela
Est ce qu'il y'a un algorithme connu qui facilité tout ça ?
Je trouve ça un peu compliqué de générer aléatoirement un graphe
La question est :
Comment peut on faire cela
Est ce qu'il y'a un algorithme connu qui facilité tout ça ?
Je trouve ça un peu compliqué de générer aléatoirement un graphe
En fait ce que je veux c'est seulement un graphe par simulation.
Je veux juste connaitre l'algorithme qui peut me générer le graphe.
Je ne vais pas générer tous les graphes connexes possibles
Le graphe complet tel que tout noeud soit relié à tout noeud me semble être un candidat plosible :-) Tu peux prendre aussi le graphe tel que chaque noeud soit relié au précédent et au suivant, ou tel que chaque noeud est relié au premier.
Après, si l'exos demande un tirage alléatoire tel que chaque graphe connexe soit équiprobablement tiré, c'est un peu plus difficile...
Ca a du arriver une ou deux fois :-)
Je rappelle que la matrice d'adjacence M est telle que pour un vecteur S de sommets, MS soit le vecteur des sommets accessibles en un coup à partir de ceux de S. Donc par exemple, (I + M + M^2)S avec I la matrice identité est l'ensemble des sommets accessibles depuis S en au plus deux coups. Je te laisse en déduire un algo qui te permettent de déterminer si un graphe non orienté est connexe, mais même si un graphe orienté l'est bien.
Dernière modification par PRomu@ld ; 14/10/2007 à 19h49. Motif: Fusion
Je veux un algorithme qui:
- en entrée prend le nombre de noeuds
- en sortie me donne la matrice d'adjacence d'un graphe non orienté connexe.
Ce graphe sera généré d'une manière aléatoire.
J'ai pensé à ça:
On part d'un point A de coordonnés(0,0,0)
On ajoute un autre point distance aléatoire
puis on choisit aléatoirement un point parmi ces 2 points et on le lie à un troisième point
Et ainsi de suite jusqu'à atteindre le nombre de noeuds souhaité
Après la fin du programme qui génère le graphe on peut ajouter des lignes qui ont pour but de tirer aléatoirement des noeuds non connectés (dans la matrice d'adjacence) et les connecter (ajouter des 1 dans les cases apropriées).
Si. En gros, ce qu'il fait, c'est construire pour commencer un arbre couvrant, puis éventuellement rajouter d'autres arrêtes pour ne pas construire uniquement des arbres mais aussi des graphes avec cycles. La construction de l'arbre l'assure de la connexité.
En revanche, il est peu probable que tous les graphes soient équiprobables avec une tel méthode. Après il faut voir qu'elle est le besoin.
http://xkcd.com/221/
Je veux faire cet algorithme !!!!!!!!!!!!
Effectivement c'est ce que je vais faire.
Je posterai mon code dès que j'avance un peu
Equiprobable signifie que toutes les solutions ont une probabilité égale de sortir.
Pour un entier N, le nombre de graphe connexe ayant N arête est fini. Si ton programme est effectivement equiprobale, cela signifie que chaque graphe doit avoir une probabilité de 1/N d'être généré.
Partager