1 / 37

Lý thuyết đồ thị

Lý thuyết đồ thị. Những người thực hiện : Nguyễn Lương Hiền-CNTT&TT01 Đinh Hà Ly-CNTT&TT03 Bạch Văn Hải-CNTT&TT01. Lý thuyết đồ thị. Đại cương về đồ thị Đồ thị EULER và đồ thị HAMILTON Giải thuật tìm đường đi. Đại cương về đồ thị. Định nghĩa đồ thị . Các thuật ngữ cơ bản .

oleg
Download Presentation

Lý thuyết đồ thị

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lýthuyếtđồthị Nhữngngườithựchiện: NguyễnLương Hiền-CNTT&TT01 ĐinhHà Ly-CNTT&TT03 BạchVăn Hải-CNTT&TT01

  2. Lýthuyếtđồthị • Đạicươngvềđồthị • Đồthị EULER vàđồthị HAMILTON • Giảithuậttìmđườngđi

  3. Đạicươngvềđồthị • Địnhnghĩađồthị. • Cácthuậtngữcơbản. • Đườngđi,chutrình,đồthịliênthông • Biễudiễnđồthịtrênmáytính

  4. Địnhnghĩađồthị • Đơnđồthịvôhướng • Đơnđồthịcóhướng • Đađồthịvôhướng • Đađồthịcóhướng

  5. Đơnđồthị & Đađồthịvôhướng • Mộtđađồthịvôhướng la mộtbộ G=<V,E> trongđó: • V#⌀ làtậphợphữuhạngồmcácđỉnhcủađồthị • E làmộthọcáccặpkhôngcóthứtựcủa V goilàcáccạnh • Một đơn đồthị vô hướnglàmộtbộ G=<V,E> trong đó: • V#⌀ làtậphữuhạngồmcácđỉnhcủađồthị • E làtậphợpcáccặpkhôngcóthứtựgồm 2 phầntửkhácnhaucua V gọilàcáccạnh.

  6. Vídụ minh họa Đơnđồthịvôhướng Đađồthịvôhướng a.Đa đồthịvôhướng.vàlàcáccạnh song song Đơnđồthịvôhướng

  7. Đơnđồthị&đađồthịcóhướng • Đađồthịcóhướnglàmộtbộ G=<V,E> trongđó: • V#⌀ làtậphợphữuhạngồmcácđỉnhcủađồthị. • E làmộthọcáccặpcóthứtựcủa V gọilàcáccung. • Đơnđồthịcóhướnglàmộtbộ G=<V,E> trongđó: • V#⌀ làtậphợphữuhạngồmcácđỉnhcủađồthị. • E làtậphợpcáccặpcóthứtựgồm 2 phầntửkhácnhaucủa V gọilàcáccung.

  8. Đơnđồthịcóhướng Đađồthịcóhướng

  9. Cácthuậtngữcơbản Cho đồthịvôhướng G=<V,E> • 2 đỉnhu,vcủađồthịgọilàkềnhaunếu (u,v) là1 cạnhcủađồthị. • Nếu e=(u,v) la 1 cạnhcủađồthịthì ta nóicạnhnàyliênthuộcvới 2 cạnh u vàv.Vàu,vgọilàđỉnhđầucủacạnh e. • Bậccủađỉnh v trongđồthị,kýhiệulàdeg(v) làsốcạnhliênthuộcvớinó.Đỉnhcóbậc 0 đượcgọilàđỉnhcôlập,đỉnhcóbậc 1 dượccoilàđỉnhtreo.

  10. Cácthuậtngữcơbản(tiếp) Cho đồthịvôhướng G=<V,E>: • Tổngsốbậccủacácđỉnhtrongđồthịbằng 2 lầnsốcạnhcủanó: ∑deg(v) =2|E| • Bánbậcracủađỉnh v củađồthị,kýhiệulà(v) làsốcạnhđirakhỏi v. • Bánbậcvàocủađỉnh v củađồthị,kýhiệulàlàsốcạnhđivào v. • Tổngsốbánbậcracủacácđỉnhbằngtổngsốbánbậcvàocủacácđỉnhvàbằngsốcạnhcủađồthị: ∑(v)=∑(v)=|E|

  11. Đườngđi,chutrìnhvàđồthịliênthông • Cho đồthị G=<V,E> đườngđiđộdài n từđỉnh u đếmđỉnh v(n nguyêndương) làdãy :, • Trongđó u=v=với()€E; i=1,2,3….,n-1. • Hoặc (,)(,)……(,). • Nếu u trùng v thìgọi la 1 chutrình. • Đường đi hay chu trìnhtrên G đượcgọilàđơnnếunhư không cócạnhnàobịlặplại trên đường đi. • Đường đi hay chu trình trên G đượcgọilà sơ cấpnếu như không cóđỉnhnàobịlặplại trên đường đi.

  12. Đồthịliênthông • Đồthị vô hướng G =<V,E> đượcgọilà liên thông nếu luôn tìmđượcđường đi giữa hai đỉnhbấtkỳcủanó. • Cho đồthị G =(V,E). ĐồthịH=<W,F> đượcgọilàđồthịconcủaG nếuvàchỉnếu W ≤V và F ≤ E.Đồthị con H đượcgọilà 1 thànhphầnliênthôngcủa G

  13. Đồthịliênthông Cho đồthịcóhướng G=<V,E> • G đượcgọilàliênthôngmạnhnếuluôntìmđượcđườngđinếuluôntìmđượcđườngđigiữa 2 cạnhbấtkìcủanó • G đượcgọilàliênthôngyếunếuđồthịvôhướngtươngứngvớinólàđồthịvôhướngliênthông.

  14. Biểudiễnđồthịtrên MT • Biểu diễnđồthịbằng ma trậnkề. Cho đt G=<V,E> ,V={},mtkề A. = Ma trậnkềcủađồthịcóhướngluônđốixứng • Biểudiễnbằng ma trậnliênthuộcđỉnh-cạnh G=<V,E> đồthịvôhướng , trongđó V={},E={}

  15. Biểudiễnđồthịtrênmáytính • G=<V,E> làđơnđồthịcóhướng , V={},E={ Ma trậnliênthuộcđỉnhcạnh: =

  16. Ma trậnkề • Ma trận A 1 2 3 4 5 6 1 0 1 0 1 1 0 2 1 0 1 1 1 1 3 0 1 0 0 0 0 4 1 1 0 0 1 0 5 1 1 0 1 0 0 6 0 0 0 0 0 0 2 1 3 5 4 6

  17. Ma trậnliênthuộcđỉnh-cạnh

  18. Đồthịeulervàhamilton • Đồthịeuler Cho G=<V,E>,chutrìnhđơntrong G đi qua tấtcảcáccạnhcủa no đượcgọilàchutrìnheuler.Đườngđiđơnđi qua tấtcảcáccạnhcủaG đượcgọilàđườngđieuler. Địnhlý:đồthịvôhướngliênthông G làđồthịeulerkhivàchỉkhimọiđỉnhcủa G đềucóbậcchẵn.

  19. Đồthịeulervàhamilton • Đồthịhamilton Cho đồthị G=<V,E>,chutrìnhsơcấptrong G đi qua tấtcảcácđỉnhcủanóđượcgọilàchutrìnhhamilton,đườngđisơcấpđi qua tấtcảcácđỉnhcủa G đượcgọilàđườngđihamilton. Địnhlý (dirak,1952) Nếuđồthịvôhướng G với n đỉnh(n>2),mỗibậckhôngnhỏhơn n/2 thì G làđồthịhamilton Địnhlý :Nếu G làđồthịcóhướngliênthôngmạnhvới n đỉnh.Cácđỉnhcó BBR và BBV khôngnhỏhơn n/2 thì G làđồthịhamilton

  20. Đâylàmộtđồthịeulervìcóchứachutrìnheuler : 1 2 3 5 4 3 1 Vàcũnglàđồthịnửaeulervìcũngchứa 1 đườngđieuler

  21. Đồthịhamilton • Đâylà 1 đồthịhamiltonvàcũnglà 1 nửađồthịhamilton.

  22. Bàitoánđườngđingắnnhất • Đồ thịcótrọngsốlàđồthịmàmỗicạnhcủađồthịđượcgánthêmbởi 1 sốthựcthểhiện chi phíphảitốn (…)khiđi qua cungđó • Ma trậnkềtrọngsố A có=trọngsố() nếuchúngthuộc E vangượclạibằng∞ • Cho G làmộtđồthịcótrọngsốvà P là 1 đườngđitrênG.Tađịnhnghĩađộdàicủađườngđi P làtổngtrọngsốcáccạnhtrên P

  23. Bàitoántìmđườngđingắnnhấttrênđồthị :tìmđườngđicóđộdàinhỏnhấttừđỉnh s thuộc V đếnđỉnh t thuộc V. • Đườngđingắnnhấtxuấtpháttừ 1 đỉnh • Nhậnxét: nếu v làđỉnhtrunggiantrêndườngđingắnnhấttừ s đến v thìđườngđitừ s đến v phảilàngắnnhấtvàtừ v đến t cũngphảingắnnhất.

  24. Ý tưởng: • Dòtìmbằngcáchthử qua cácđỉnhtrunggian • Nếupháthiệnđườngđimớingắnhơnthìcậpnhậtđườngđimớivàchỉnhsửacácthông tin. • Sửdụng 2 mảnglưutrữ: Mảng d[v]:độdàiđườngđingắnnhấttừ s tới v Mảng t[v]:lưutrữđỉnhnằmtrước v trênđườngđingắnnhấthiệntại. t[v] s ….. d[v] v …… d[u] u a[u,v]

  25. Thuậttoán Ford-Bellman • (*Khởitạo*) • for v do • Begin d[v]:=c[s,v]; • Truoc[v] := s; • End • (*Bắtđầu*) • d[s]:=0; • for k:=1 to n-2 do • for v do • for udo • if d[v]>d[u]+c[u,v]; • Truoc [v]:=u; • End;

  26. Vídụ

  27. Nhậnxét:thuậttoán ford-bellman ápdụngđượcchomọitrườnghợpnhưngtínhtoánlớn do sửdụng 3 vònglặpthườnglãngphímộtsốbướcsaucùngkhimàkếtquảđãổnđịnh thuậttoánDijkstrasẽgiảiquyếtđiềunày • Ý tưởng: thuậttoánchỉsửdụngchođồthịkhôngcócạnhâmnêntạimỗibướcsẽcó 1 đỉnhmàthông tin vềnókhôngthayđổi

  28. Tạimỗibước ta thựchiện: • Chọn 1 đỉnh u cógiátrị d[u] nhỏnhất. • Chọn u làmbướctrunggianđểthựchiệncácbướctiếptheo

  29. begin • for vdo • begin • d[v]:=c[s,v]; Truoc[v] := s; • end; • d[s]=0; T:=V\{s}; • while (T<>Ø)do • begin • Tìmđỉnh uthỏamãn d[u]=min{d[z]:z}; • T:=T\{u}; • if d[v]>d[u]+c[u,v]; • begin • d[v]:=d[u]+a[u,v]; • Truoc[v]:=u; • end; • end; • end;

  30. Vídụ minh họa:

  31. Thuậttoán Floyd-WarShall • Đầuvào: Đồthịchobởi ma trậntrọngsố a[i,j] • Đầura: Ma trậnđườngđingắnnhấtgiữacácđỉnh: d[i,j],i,j=1,2,3,…,n, trongđó d[i,j] chođộdàingắnnhấttừiđến j Ma trậnghinhậnđườngđi p[i,j],I,j=1,2,3,….,n, trongđó p[i,j] ghinhậnđỉnhđitrướcđỉnh j trongđoạnđườngngắnnhấttừiđến j

  32. Thuậttoán Floyd-WarShall • begin • for i:=1 to n do • for j:=1 to n do • begin • d[i,j]:=a[i,j]; p[i,j]:=i; • end; • for k:=1 to n do • for i:=1 to n do • for j:=1 to n do • if d[i,j] > d[i,k] + d[k,j] then • begin • d[i,j] = d[i,k] + d[k,j]; • p[i,j] := p[k,j]; • end; • end;

  33. Thuậttoán Johnson • Thuật toán Johnson sử dụng thuật toán Bellman-Ford và thuật toán Dijkstra như những chương trình con. • Nó bao gồm các đỉnh tích luỹ trong danh sách kề. Thuật toán thường dùng |V|*|V| ma trận D = d[i,j], tại d[i,j] = C(i,j) hoặc nó báo về đồ thị nhập vào có chứa chu trình âm. • Như các thuật toán tìm DDNN giữa tất cả các cặp đỉnh khác, ta có các đỉnh được đánh số từ 1 đến |V|.

  34. Code thuậttoán • CONSTfi =’graph.in’; • fo=’graph.out’; • max=100; • VARH : array[1..max+1] of integer; • W : array[1..max+1,1..max+1] of integer; • Nega_weight : integer; • f,g : text; • PROCEDUREINPUT; • BEGIN • { mo file ‘graph.in’,’graph.out’, nhapvao ma trantrong so W,sodinh N, biennega_weighttinh tong caccanh co trong so < 0 } • END; • PROCEDURE NEW_W; • BEGIN • {taodinhmoi N+1, W[N+1,i]=0 va W[i,N+1]=+ voii=1..N} • END;

  35. Code thuậttoán(tiếp) • FUNCTION BELLMAN_FORD;{Tim DDNN tudinh N+1 den cacdinhkhac, luuvaomang H } • BEGIN • {Neu do thi co chutrinh am thi ham Bellman_Ford co gia tri false • neu do thikhongchuachutrinh am thitravemang H} • END; • PROCEDURE DIJKSTRA(U:integer); • BEGIN • { tim DDNN tudinh U den cacdinh con laitheothuattoanDijkstra, gia tri travemang D[u,v] } • END; • PROCEDURE SOLVE; • VAR • BEGIN • NEW_W; • IfBELLMAN_FORD = false • then begin • write(g,’Dothichuachutrinh am’); • exit; • end;

  36. Code thuậttoán(tiếp) • { Tinhlaitrong so caccanh de luon >= 0} • For u:=1 to N+1 do • Forv:=1 to N+1 do W[u,v]:=W[u,v]+H[u]-H[v]; • For u:=1 to N do • Begin • DIJKSTRA(u); • For v:=1 to N do • D[u,v]:=D(u,v)+H[v]-H[u]; • End; • END; • PROCEDURE INPUT_G; • BEGIN • { Ghira file ma tran D, dong file } • END; • BEGIN • OPEN; • SOLVE; • INPUT_G; • END.

More Related