Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1433 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Graphe non orienté et circuits

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Graphe non orienté et circuits

n°891366
chrisbk
-
Posté le 05-11-2004 à 16:17:20  profilanswer
 

Vala, j'ai un graphe (non-orienté) genre :
 
http://img118.exs.cx/img118/3232/graphe.png
 
et je voudrais trouver les boucles la dedans. L'arc pointé est l'arc qui fait chier et qu'il faudrait supprimer, mais je ne vois pas trop comment faire [:god]
 
une idée ? [:god]
help [:petrus75]


---------------
NP: HTTP Error 764 Stupid coder found
mood
Publicité
Posté le 05-11-2004 à 16:17:20  profilanswer
 

n°891367
Profil sup​primé
Posté le 05-11-2004 à 16:18:11  answer
 

google, rtfm, ta gueule, recherche [:dawa] [:god]

n°891368
skeye
Posté le 05-11-2004 à 16:18:54  profilanswer
 

Je comprends même pas comment tu détermines que c'est celui-là que tu veux gicler...[:dawa]


---------------
Can't buy what I want because it's free -
n°891372
dsls
Posté le 05-11-2004 à 16:22:17  profilanswer
 

Méthode assez simple :
pour chaque arc de ton graphe, tu regarde s'il existe un chemin (autre que ce même arc) qui relie les 2 sommets (avec un quelconque algo de parcours, avec marquage des arcs pour ne pas boucler). Si ce n'est pas le cas, tu le vires. Ce n'est certainement pas la méthode la plus efficace, mais elle devrait fonctionner ...

n°891446
Evadream -​jbd-
Posté le 05-11-2004 à 18:23:17  profilanswer
 

Oui, tu prends un arc, tu l'enleves, et si le graphe n'est plus connexe, alors tu peux le virer.
 
Un arc qui augmente le nombre de connexité d'un graphe si on l'enlève s'appelle un isthme il me semble. Un petit google sur la détection d'isthme devrait te donner des résultats intéressants !
 
Y'a une méthode qui donne l'ensemble des composantes connexes d'un graphes, et est linéaire en fonction du nombre d'arcs. Ca sent une complexité en O(n²) ton histoire là [:ddr555]. Y'a peut-être une méthode plus efficace, je sais pas trop !
 
@+


Message édité par Evadream -jbd- le 05-11-2004 à 18:37:40
n°891459
chrisbk
-
Posté le 05-11-2004 à 19:06:42  profilanswer
 

dsls a écrit :

Méthode assez simple :
pour chaque arc de ton graphe, tu regarde s'il existe un chemin (autre que ce même arc) qui relie les 2 sommets (avec un quelconque algo de parcours, avec marquage des arcs pour ne pas boucler). Si ce n'est pas le cas, tu le vires. Ce n'est certainement pas la méthode la plus efficace, mais elle devrait fonctionner ...


 
ca risque d'etre bien lent si y'a bcp de neoud ou d'arcs non ?

n°891462
fafounet
Posté le 05-11-2004 à 19:12:18  profilanswer
 

Tu peux regarder les arcs arrières après application de l'algo de parcours en profondeur (histoire de compliquer l'affaire)


Message édité par fafounet le 05-11-2004 à 19:12:43
n°891465
HelloWorld
Salut tout le monde!
Posté le 05-11-2004 à 19:18:45  profilanswer
 

chacal_one333 a écrit :

google, rtfm, ta gueule, recherche [:dawa] [:god]


pareil. Si tu le vires, il reste... 2 boucles.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°891616
Lam's
Profil: bas.
Posté le 06-11-2004 à 00:50:48  profilanswer
 

C'est cool comme truc, c'est comme ça qu'Internet fonctionne mine de rien (éviter que les messages n'arrivent en double ou ne se perdent à cause des liens redondants).
 
C'est un problème de recherche de minimum spanning tree. L'algo de Kruskal a l'air de faire l'affaire.

n°891712
Evadream -​jbd-
Posté le 06-11-2004 à 10:18:51  profilanswer
 

Lam's a écrit :

C'est cool comme truc, c'est comme ça qu'Internet fonctionne mine de rien (éviter que les messages n'arrivent en double ou ne se perdent à cause des liens redondants).


 
C'est pas justement le contraire ? Les isthmes représente plutôt les points faibles d'un réseau, non ? Si ce lien disparaît, alors deux parties du réseau ne pourront plus communiquer.
 
Je pense que je n'ai pas compris ce que tu as voulu dire :)
 
@+

mood
Publicité
Posté le 06-11-2004 à 10:18:51  profilanswer
 

n°891714
Lam's
Profil: bas.
Posté le 06-11-2004 à 10:24:40  profilanswer
 

Nan nan, c'est moi. Je m'ai trompé.
 
Je pensais qu'il recherchait un algo de recherche de boucles, pas de recherche d'isthme. En l'occurence, le MST enlèverait non pas l'isthme, mais le segment en haut à gauche et celui en bas à droite.

n°891719
chrisbk
-
Posté le 06-11-2004 à 10:36:29  profilanswer
 

je cherche effectivement un algo de recherche de boucle :o

n°891724
el muchach​o
Comfortably Numb
Posté le 06-11-2004 à 11:06:30  profilanswer
 

Tu réécris ton truc en C++ et tu utilises Boost::Graph :o (bonne chance pour comprendre la doc)


Message édité par el muchacho le 06-11-2004 à 11:14:25
n°891744
chrisbk
-
Posté le 06-11-2004 à 11:58:48  profilanswer
 

nan [:mmmfff]

n°892959
chrisbk
-
Posté le 08-11-2004 à 08:44:22  profilanswer
 

heuh bin, up quoi [:zaib3k]


---------------
NP: HTTP Error 764 Stupid coder found
n°892967
Evadream -​jbd-
Posté le 08-11-2004 à 08:55:42  profilanswer
 

J'ai pas du comprendre qqchose :D
 
Tu appelles boucle l'arc que tu as désigné sur ton dessin ? Si c'est le cas, ca s'appelle un isthme, et tu peux utiliser ce que dsls et moi avons conseillé, mais ca ne risque pas d'être très efficace (enfin ca reste à voir si c'est acceptable pour la taille de ton graphe).
 
Dans la terminologie des graphes, on appelle boucle un arc qui part et qui arrive à un même sommet. Sinon, un cycle est un chemin fermé qui part et qui arrive à un même sommet. J'enfonce surement des portes ouvertes, le prend pas mal, c'est juste pour être certain qu'on parle bien des mêmes choses :)
 
Edit :
J'imagine que tu appelles "boucle" les deux objets résultant de la suppression de cet arc. Il s'agit finalement de deux composantes connexes (deux composantes d'un seul tenant - une "boucle" -). Le nombre de composantes connexe d'un graphe est désigné par le nombre de connexité. Si on enlève un isthme d'un graphe, on augment ce nombre. Par exemple sur ton dessin, si on enlève l'arc pointé, ce nombre passe de 1 à 2. L'algo proposé par dsls te permet de déterminer justement la connexité d'un graphe (est-il d'un seul bloc ou non)
 
 
@+


Message édité par Evadream -jbd- le 08-11-2004 à 09:10:05
n°892969
chrisbk
-
Posté le 08-11-2004 à 09:03:58  profilanswer
 

non bin alors, pour etre plus clair. Dans le graphe plus haut, mon cerveau me dit que j'ai deux boucles (une sur la droite, et une sur la gauche) et finalement le seul arc qui ne fait pas partie d'une boucle, c'est celui pointé par la fleche.
 
Ce que je veux c'est retrouver les arcs faisant partie d'une boucle. La je viens de finir la methode par recherche exhaustive, mais j'ai un peu perde de la vitesse au cas ou le nb de sommets et d'arcs augmente trop (genre 50sommets, 70arcs, ca fait deja une bonne brouette de possibilité)


---------------
NP: HTTP Error 764 Stupid coder found
n°892975
Evadream -​jbd-
Posté le 08-11-2004 à 09:20:34  profilanswer
 

J'ai mangé des graphes durant tout l'été, mais c'est resté assez basique, je peux pas plus t'aider.
 
Il faut peut-être bidouiller un peu (une heuristique quoi :D).  
 
Tu prends un échantillon de points de part et d'autre d'un supposé isthme, tu regardes si il y a un chemin qui passent par ce fameux arc pour tous les couples de points que tu as considéré :) Si oui, y'a une bonne chance que ca soit un isthme (au pire tu confirmes çà avec l'algo de dsls). Un dijkstra avec tas, ca doit couter du O( nombre d'arcs log (nombre de sommets) ), enfin c'est pas super propre tout çà, on n'est pas certain du résultat :/
 
Bref, j'espère que quelqu'un va passer te donner un coup de main !
 
@+


Message édité par Evadream -jbd- le 08-11-2004 à 09:22:26
n°893016
chrisbk
-
Posté le 08-11-2004 à 10:15:30  profilanswer
 

ouais nan mais nan c'est moi qui suit un gros con, en fait [:icon9]
j'avais skippé ton interessante reponse [:icon9]
jvais me plonger dans un bain de sangsue


---------------
NP: HTTP Error 764 Stupid coder found
n°893024
Evadream -​jbd-
Posté le 08-11-2004 à 10:25:32  profilanswer
 

C'est pas grave :)
 
Moi je viens de me rendre compte que dsls et moi on parlait pas tout à fait de la même chose, uhu !
 
La recherche d'un chemin pour chaque arc sera plus lourd (d'un facteur log(nombre d'arc) à gros coup de louche) qu'un algorithme de recherche de composantes connexes dans un graphe. Il faut voir ce que ca donne en pratique.
 
Tiens nous au courant ! @+

n°893025
Evadream -​jbd-
Posté le 08-11-2004 à 10:27:51  profilanswer
 

Evadream -jbd- a écrit :


Un petit google sur la détection d'isthme devrait te donner des résultats intéressants !


 
Hum... Pas trop en fait :D Dans la terminologie anglaise ca se dit "bridge", ce qui est bien plus parlant. Là, y'a tout de suite plus de résultat !

n°893029
Evadream -​jbd-
Posté le 08-11-2004 à 10:34:03  profilanswer
 

http://www2.toki.or.id/book/AlgDes [...] ODE166.HTM


The simplest algorithms for identifying articulation vertices (or bridges) would try deleting vertices (or edges) one by one, and then using DFS or BFS to test whether the resulting graph is still connected.


C'est ce que je proposais.


More complicated but linear-time algorithms exist for both problems, based on depth-first search. Implementations are described below and in Section http://www2.toki.or.id/book/AlgDesignManual/BOOK/BOOK4/NODE159.HTM#dfsbfs


Ca sent bon le sable chaud çà !


Message édité par Evadream -jbd- le 08-11-2004 à 10:38:02
n°893033
chrisbk
-
Posté le 08-11-2004 à 10:37:57  profilanswer
 

merci, t'es un chef !


---------------
NP: HTTP Error 764 Stupid coder found
n°893043
Evadream -​jbd-
Posté le 08-11-2004 à 10:44:49  profilanswer
 

C'est cool !
 
Je reste sur le cul qu'on puisse faire çà en temps linéaire. Va falloir que j'appelle mon maître de stage [:ddr555] !

n°893165
Giz
Posté le 08-11-2004 à 13:02:13  profilanswer
 

chrisbk a écrit :

non bin alors, pour etre plus clair. Dans le graphe plus haut, mon cerveau me dit que j'ai deux boucles (une sur la droite, et une sur la gauche) et finalement le seul arc qui ne fait pas partie d'une boucle, c'est celui pointé par la fleche.
 
Ce que je veux c'est retrouver les arcs faisant partie d'une boucle. La je viens de finir la methode par recherche exhaustive, mais j'ai un peu perde de la vitesse au cas ou le nb de sommets et d'arcs augmente trop (genre 50sommets, 70arcs, ca fait deja une bonne brouette de possibilité)


 
Cela est possible en utilisant le tri topologique (TT) sur ton graphe :
Je connais un algo du TT qui permet de detecter les cycles dans un graphe. Les noeuds renvoyés par le TT dans le cas d'un graphe avec cycle sont ceux n'appartenant pas à un cycle !
Pour ce qui est de l'efficacité, plus ton graphe a de cycles et plus il sera rapide (car les noeuds n' appartenant pas a un cycle sont peu nombreux). Sinon, il restera plus rapide que la recherche exhaustive (= prendre les arcs un a un et regarder tous ses successeurs, puis les successeurs des successeurs, etc...jusqu'a voir si on ne retombe pas sur cet arc).
Par exemple sur le graphe de ton 1er post, je trouve l'arc oriente (le seul n'appartenant pas aux cycles) en 0(n) avec n nb de noeuds du graphe.


Message édité par Giz le 08-11-2004 à 13:05:37
n°895137
chrisbk
-
Posté le 10-11-2004 à 13:15:23  profilanswer
 

oué juste pour dire que la méthode par recherche de connexité (?) marche au poil, et niveau perfo ca me suffit amblement
(juste mon graphe de base qui est pourri a debugguer, mais sinon ca roule [:itm])
 
thks

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Graphe non orienté et circuits

 

Sujets relatifs
creer un graphe en builder c++Utilitaires pour l'arbre des sources/graphe UML ?
QUEL EST LE MEILLEUR CHOIX d'AGL ORIENTE JAVA ?Algo du plus court chemin avec des boucles dans le graphe
crystal report 8.5 et graphe[DirectShow] problème lorsque je détruit mon graphe
[PERL] Structure d'arbre orienté objetrepresentation graphique d'un graphe
Nb Chemins sans Circuits[Algo]Recherche de circuits dans un graphe
Plus de sujets relatifs à : Graphe non orienté et circuits


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR