Dilbert moment  
Parcurgerea grafurilor neorientate ing. Alexandru IOVANOVICI februarie 2010 Colegiul Na ţional  “C. D. Loga”, Timi şoara
Ce vom face ? <ul><li>Scurta recapitulare: grafuri; </li></ul><ul><li>Cateva domenii de aplicare a grafurilor </li></ul><u...
Ce veti stii ? <ul><li>Sa parcurgeti toate nodurile unui graf; </li></ul><ul><li>Sa aplicati prelucrari asupra nodurilor; ...
Grafuri <ul><li>G =(X,U); </li></ul><ul><li>X={1,2,3,4,5,6} </li></ul><ul><li>U={(1,2),(1,5),(2,5),   (4,5),(2,3),(3,4),(4...
Cateva arii de utilizare … clasice <ul><li>Routarea traficului auto </li></ul><ul><li>Grafuri orientate </li></ul><ul><li>...
Cateva arii de utilizare … esoterice   <ul><li>AST (AAS) </li></ul><ul><li>Analiza statica a codului; </li></ul><ul><li>C...
Cateva arii de utilizare … esoterice   <ul><li>Analize de fiabilitate </li></ul><ul><ul><li>Hardware & software </li></ul...
Concluzii  ... pana acum <ul><li>Toate aplica ţiile de mai sus necesită accesul la noduri  ->  traversarea grafurilor </li...
Traversarea grafurilor <ul><li>se referă la problema  vizitării tuturor nodurilor  dintr-un graf, într-o manieră organizat...
Parcurgerea  în lăţime <ul><li>Se incepe cu un nod ales drept radacina ( start ) şi  se  viz itează toate nodurile vecine ...
Parcurgerea  în lăţime  (2)
Parcurgerea  în lăţime  (3) Implementare http://www.iovanalex.ro/loga/src/bfs.cpp  <ul><li>Pseudocod </li></ul><ul><li>Ada...
Parcurgerea  în lăţime  (4) Observatii <ul><li>Complexitatea: </li></ul><ul><li>Complexitatea  spatiala  este proportional...
Parcurgerea  în lăţime  (5) <ul><li>Aplica ţii : </li></ul><ul><li>Gasirea tuturor nodurilor conectate la un nod; </li></u...
Aplicatie <ul><li>Se considera graful din figura  </li></ul><ul><ul><li>Sa se precizeze ordinea nodurilor rezultata in urm...
Parcurgerea  în  ad âncime <ul><li>Se incepe cu un nod ales drept radacina ( start ) şi  se  viz itează toate nodurile vec...
Parcurgerea  în  ad âncime  (2) <ul><li>Plecare din A; </li></ul><ul><li>Se aleg initial nodurile STANGA; </li></ul><ul><l...
Parcurgerea  în  ad âncime  (2) <ul><li>Parcurgere cu scopul ordonarii: </li></ul><ul><li>Obtinem o reprezentare liniara, ...
Parcurgerea  în înălţime  (3) Implementare http://www.iovanalex.ro/loga/src/dfs.cpp  <ul><li>Pseudocod </li></ul><ul><li>S...
Parcurgerea  în înălţime  (4) Observatii <ul><li>Complexitatea: </li></ul><ul><li>La fel ca si DFS:  O(|X|+|U|) </li></ul>...
Tema  (1) <ul><li>Fie graful cu nodurile notate cu literele de la A   la M si cu arcele AB, AC, AF, AG, DE, DF, EG, HI, HJ...
Bibliografie <ul><li>Robert SEDGEWICK –  Algorithms , Addison-Wesley 1983; </li></ul><ul><li>Thomas H Cormen, Charles E Le...
Intrebari … <ul><li>? </li></ul>
Upcoming SlideShare
Loading in...5
×

Parcurgerea Grafurilor Neorientate

6,133

Published on

Curs de algoritmi la Colegiul National C.D.Loga
Algoritmi pentru parcurgerea grafurilor neorientate

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
6,133
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Parcurgerea Grafurilor Neorientate

  1. 1. Dilbert moment 
  2. 2. Parcurgerea grafurilor neorientate ing. Alexandru IOVANOVICI februarie 2010 Colegiul Na ţional “C. D. Loga”, Timi şoara
  3. 3. Ce vom face ? <ul><li>Scurta recapitulare: grafuri; </li></ul><ul><li>Cateva domenii de aplicare a grafurilor </li></ul><ul><ul><li>Mai simple </li></ul></ul><ul><ul><li>… si mai esoterice. </li></ul></ul><ul><li>Traversarea grafurilor: </li></ul><ul><ul><li>Algoritmi; </li></ul></ul><ul><ul><ul><li>+ Implementare </li></ul></ul></ul><ul><ul><li>Particularitati; </li></ul></ul><ul><ul><li>Aplicatii </li></ul></ul>
  4. 4. Ce veti stii ? <ul><li>Sa parcurgeti toate nodurile unui graf; </li></ul><ul><li>Sa aplicati prelucrari asupra nodurilor; </li></ul><ul><li>Sa alegeti intre diferiti algoritmi in functie de necesitati. </li></ul>
  5. 5. Grafuri <ul><li>G =(X,U); </li></ul><ul><li>X={1,2,3,4,5,6} </li></ul><ul><li>U={(1,2),(1,5),(2,5), (4,5),(2,3),(3,4),(4,6)} </li></ul>
  6. 6. Cateva arii de utilizare … clasice <ul><li>Routarea traficului auto </li></ul><ul><li>Grafuri orientate </li></ul><ul><li>Probleme de cost </li></ul><ul><li>Analiza circuitelor electrice </li></ul><ul><li>Reprezentare matriceala (KKF) </li></ul><ul><li>Probleme de cost </li></ul>
  7. 7. Cateva arii de utilizare … esoterice  <ul><li>AST (AAS) </li></ul><ul><li>Analiza statica a codului; </li></ul><ul><li>Compilatoare </li></ul><ul><ul><li>Tabela de simboluri </li></ul></ul><ul><li>WEB: DOM, XML </li></ul><ul><li>Automate cu stari finite ( FSM ) </li></ul><ul><li>Analiza/simularea de automate implementate hardware; </li></ul><ul><li>Implementarea de automate software </li></ul>
  8. 8. Cateva arii de utilizare … esoterice  <ul><li>Analize de fiabilitate </li></ul><ul><ul><li>Hardware & software </li></ul></ul>
  9. 9. Concluzii ... pana acum <ul><li>Toate aplica ţiile de mai sus necesită accesul la noduri -> traversarea grafurilor </li></ul>
  10. 10. Traversarea grafurilor <ul><li>se referă la problema vizitării tuturor nodurilor dintr-un graf, într-o manieră organizată ; </li></ul><ul><li>Traversarea poate implica vizitarea fiec ărui nod de mai multe ori ; </li></ul><ul><li>Nu este necesar ă existenţa unui nod de tip radăcina -unica (root-node) </li></ul><ul><li>Multe metode de traversare ... d intre care două sunt clasice : </li></ul><ul><ul><li>Parcurgerea in latime (Breath first traversal – BFT ); </li></ul></ul><ul><ul><li>Parcurgerea in adancime/inaltime (Depth First Traversal – DFT ) </li></ul></ul>
  11. 11. Parcurgerea în lăţime <ul><li>Se incepe cu un nod ales drept radacina ( start ) şi se viz itează toate nodurile vecine ; </li></ul><ul><li>Pentru fiecare vecin se vizitea ză vecinii neeploraţi ai acestuia ; </li></ul><ul><li>Procedura se repetă până ce nu mai rămâne nicinun nod neeplorat. </li></ul><ul><li>Observaţii : </li></ul><ul><li>Este un algoritm exhaustiv : parcurge tot graful indiferent de cuno ştiinţele adunate pe parcurs (spre deosebire de unul euristic ). </li></ul><ul><li>Ordinul de complexitate este O( |X|+|U|) - at ât în timp cât si în spaţiu ; </li></ul>A B C D E F G H
  12. 12. Parcurgerea în lăţime (2)
  13. 13. Parcurgerea în lăţime (3) Implementare http://www.iovanalex.ro/loga/src/bfs.cpp <ul><li>Pseudocod </li></ul><ul><li>Adauga nodul de start in coada ; </li></ul><ul><li>Scoate nodul din coada si aplica procesarea; </li></ul><ul><ul><li>Daca acest nod este ultimul ce se doreste a fi procesat TERMINA; </li></ul></ul><ul><ul><li>Altfel adauga in coada succesorii acestui nod, care nu au fost procesati; </li></ul></ul><ul><li>Daca coada este goala inseamna ca toate nodurile au fost procesate -> TERMINA; </li></ul><ul><li>Repeta pasul (2) </li></ul><ul><li>Observatii: </li></ul><ul><li>Procesul NU este inerent recursiv; </li></ul><ul><ul><li>Se poate implementa si recursiv; </li></ul></ul><ul><li>Mecanism de tip coada: FIFO (LILO) </li></ul>
  14. 14. Parcurgerea în lăţime (4) Observatii <ul><li>Complexitatea: </li></ul><ul><li>Complexitatea spatiala este proportionala cu numarul de noduri ≈ O(b d ) – exponential cu adancimea ; </li></ul><ul><li>Temporal: in cel mai rau caz se exploreaza TOATE nodurile (!!!) - ≈ O(bd) </li></ul><ul><li>Algoritmul BFS este complet : daca exista o solutie, algoritmul o va gasi intotdeauna. </li></ul><ul><ul><li>Daca graful este infinit (ca si nr. de noduri) problema se complica  </li></ul></ul>
  15. 15. Parcurgerea în lăţime (5) <ul><li>Aplica ţii : </li></ul><ul><li>Gasirea tuturor nodurilor conectate la un nod; </li></ul><ul><li>Prelucrari exhaustive ale nodurilor; </li></ul><ul><li>Diversi algoritmi cu nume de persoane  </li></ul>
  16. 16. Aplicatie <ul><li>Se considera graful din figura </li></ul><ul><ul><li>Sa se precizeze ordinea nodurilor rezultata in urma traversarii BFS ; </li></ul></ul><ul><ul><li>Se va presupune ca nodurile sunt ordonate alfabetic (daca exista mai multe alternative, nodurile se vor selecta in ordine alfabetica). </li></ul></ul>
  17. 17. Parcurgerea în ad âncime <ul><li>Se incepe cu un nod ales drept radacina ( start ) şi se viz itează toate nodurile vecine în adâncimea garfului ; </li></ul><ul><li>Ajungand la adancimea maxima algoritmul se intoarce pentru a explora o alta cale. </li></ul><ul><ul><li>Comportament de tip backtracking </li></ul></ul><ul><li>Observaţii : </li></ul><ul><li>Este un algoritm exhaustiv : parcurge tot graful indiferent de cuno ştiinţele adunate pe parcurs (spre deosebire de unul euristic ). </li></ul><ul><li>Ordinul de complexitate este O( |X|+|U|) - at ât în timp cât si în spaţiu ; </li></ul><ul><ul><li>(!!!) - La fel ca si BFS -> alegerea nu depinde de complexitate; </li></ul></ul>A B C D E F G H
  18. 18. Parcurgerea în ad âncime (2) <ul><li>Plecare din A; </li></ul><ul><li>Se aleg initial nodurile STANGA; </li></ul><ul><li>DFS= {A,B,D,F,E,C,G} </li></ul><ul><li>Fara marcarea vizitarii: </li></ul><ul><ul><li>{A, B, D, F, E, A, B, D, F, E, ………} </li></ul></ul>algorithm  dft(x) { visit(x); //prelucrez informatia din nod FOR (isEdge(x,y)) //exista muchie intre (x,y) DO IF notVisited(y) THEN  dft(y);//vizitam nodul DONE ROF }
  19. 19. Parcurgerea în ad âncime (2) <ul><li>Parcurgere cu scopul ordonarii: </li></ul><ul><li>Obtinem o reprezentare liniara, ordonata a grafului original; </li></ul><ul><li>In preordine : ordinea in care au fost vizitate nodurile de algoritmul DFS. Este o reprezentare compacta de prezentare a evolutiei algoritmului. Daca este vb. de o expresie arith., obtinem Notatia Poloneza </li></ul><ul><li>In postordine : invers decat ordinea de vizitare. Obtinem: RPN (notatia poloneza inversa); </li></ul><ul><li>Inordine : se aplica pentru arbori (vom reveni). </li></ul><ul><li>Postordine inversa : utila in analiza fluxurilor de control: </li></ul><ul><ul><li>IF-THEN-ELSE </li></ul></ul>
  20. 20. Parcurgerea în înălţime (3) Implementare http://www.iovanalex.ro/loga/src/dfs.cpp <ul><li>Pseudocod </li></ul><ul><li>Se adauga nodul de start in stiva ; </li></ul><ul><li>Repeta </li></ul><ul><ul><li>Se scoate nodul din stiva (varful); </li></ul></ul><ul><ul><li>Se prelucreaza acel nod; </li></ul></ul><ul><ul><li>Se pun in stiva nodurile adiacente nodului curent; </li></ul></ul><ul><li>Pana cand stiva e vida. </li></ul><ul><li>Observatii: </li></ul><ul><li>Procesul ESTE inerent recursiv; </li></ul><ul><ul><li>Se poate implementa si iterativ; </li></ul></ul><ul><li>Mecanism de tip stiva: LILO </li></ul><ul><li>Folosirea cozii in loc de stiva transforma algoritmul in BFS; </li></ul><ul><li>De cele mai multe ori se apeleaza la recursivitate pentru a exploata stiva interna a sistemului ( stack ) </li></ul>
  21. 21. Parcurgerea în înălţime (4) Observatii <ul><li>Complexitatea: </li></ul><ul><li>La fel ca si DFS: O(|X|+|U|) </li></ul><ul><li>Algoritmi de inteligenta artificiala: arborele solutiilor este fooooarte mare si adanc; </li></ul><ul><li>Se folosesc algoritmi DFS cu limitarea adancimii; </li></ul><ul><li>Sau alti algoritmi de cautare: αβ -pruning . </li></ul><ul><li>Aplica ţii : </li></ul><ul><li>Ca si la BFS – cautare + prelucrare; </li></ul><ul><li>Serializare (!!!) </li></ul>
  22. 22. Tema (1) <ul><li>Fie graful cu nodurile notate cu literele de la A la M si cu arcele AB, AC, AF, AG, DE, DF, EG, HI, HJ, HK, JK, LM. </li></ul><ul><li>Sa se reprezinte grafic graful; </li></ul><ul><li>Sa se determine si sa se scrie matricea de adiacenta; </li></ul><ul><li>Sa se determine gradul maxim si nodurile corespunzatoare (rezolvare C/C++); </li></ul><ul><li>Sa se determine s ă se scrie lista nodurilor pentru parcuregerea in latime, cu plecare din A si din C. </li></ul>
  23. 23. Bibliografie <ul><li>Robert SEDGEWICK – Algorithms , Addison-Wesley 1983; </li></ul><ul><li>Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, Clifford Stein (CLR) - Introduction to Algorithms, McGraw-Hill 2 nd . edition, 2001; </li></ul><ul><li>Robert Sedgewick - Algorithms in Java, Part 5: Graph Algorithms (3rd Edition) , Addison-Wesley Professional; 3 rd . Edition, 2003 </li></ul><ul><li>Orice manual autorizat; </li></ul><ul><li>Google  </li></ul>
  24. 24. Intrebari … <ul><li>? </li></ul>

×