Trên V ta định nghĩaquan hệ tương đương như sau: u~v ⇔ u = v hay có một đường đi từ u đến v a Nếu u~v thì ta nói hai đỉnh u và v liên thông với nhau b Mỗi lớp tương đương được gọi là
Trang 1TOÁN RỜI RẠC
Chương III
Trang 2Đồ thị
Đồ thị
b
d a
k
e
h g c
Trang 3Những khái niệm và tính chất cơ bản
Trang 4d a
k
e
h g c
Trang 5• Ta nói cạnh uv nối u với v, cạnh uv kề với
Trang 7• Định nghĩa 2 Đồ thị vô hướng không có cạnh song song và không có khuyên gọi là đơn đồ thị vô hướng .
cạnh song song nhưng không có khuyên gọi
là đa đồ thị vô hướng.
cạnh song song và có khuyên gọi là giả đồ thị
Những khái niệm và tính chất cơ bản
Trang 8b d a
k
e h g c
a
b
c d
b
c a
d
Trang 9Những khái niệm và tính chất cơ bản
Trang 10Những khái niệm và tính chất cơ bản
Trang 11San Francisco
Denver Los Angeles
New York
Chicago
Washington Detroit
Những khái niệm và tính chất cơ bản
Trang 12Ta nói cung uv đi từ u đến v, cung uv kề với u,v
Những khái niệm và tính chất cơ bản
Trang 14• Nếu uv là một cung thì ta nói:
– Đỉnh u và v kề nhau
– Đỉnh u gọi là đỉnh đầu (gốc), đỉnh v là đỉnh cuối (ngọn)
của cung uv Đỉnh v là đỉnh sau của đỉnh u.
• Hai cung có cùng gốc và ngọn gọi là cung song song
• Cung có điểm gốc và ngọn trùng nhau gọi là
khuyên .
Chú ý
Những khái niệm và tính chất cơ bản
Trang 16Những khái niệm và tính chất cơ bản
cạnh song song gọi là đồ thị có hướng
Trang 17San Francisco
Denver
Los Angeles
New York Chicago
Washington Detroit
Trang 18San Francisco
Denver
Los Angeles
New York Chicago
Washington Detroit
Trang 19• Cho đồ thị vô hướng G = (V,E) Bậc của đỉnh
v, ký hiệu deg(v), là số cạnh kề với v, trong
đó một khuyên tại một đỉnh được đếm hai lần cho bậc của đỉnh ấy.
Những khái niệm và tính chất cơ bản
Bậc của đỉnh
Trang 21a b
d c
f
e
Bậc của các đỉnh?
Trang 221) deg-(v):= số cung có đỉnh cuối là v, gọi là bậc
vào của v.
2) deg +(v):= số cung có đỉnh đầu là v,gọi là bậc ra
của v
3) deg(v):= deg- (v) + deg+(v)
Đỉnh bậc 0 gọi là đỉnh cô lập Đỉnh bậc 1 gọi là
Trang 24a b
d c
Trang 25Cho đồ thị G = (V,E), m là số cạnh (cung)
Trang 26Ta sử dụng ma trận kề.
Cho G = (V,E) với V={1,2,…,n}.
Ma trận kề của G là ma trận A = (aij)n xác định như sau:
aij = số cạnh (số cung) đi từ đỉnh i đến đỉnh j
Biểu diễn ma trận của đồ thị.
Trang 27Tìm ma trận kề
Trang 28a b
d c
b c d e f
Tìm ma trận kề
Trang 29Định nghĩa
Cho hai đơn đồ thị G = (V,E) và G’= (V’,E’) Ta nói
rằng G đẳng cấu G’, ký hiệu G ≅ G’, nếu tồn tại song ánh f :V→ V’sao cho:
uv là cạnh của G ⇔ f(u)f(v) là cạnh của G’
Đẳng cấu
Trang 31Đẳng cấu
Trang 32a
b
c
d e
a
b
c
d e
deg(e) = 1
Không có đỉnh bậc 1
Không đẳng cấu
Ví dụ
Trang 33b
c d
e
f
1
2 3
6 5
4
Đẳng cấu
Trang 34b
4 d
e
1
2
3 c
5
Không đẳng cấu
Trang 36Định nghĩa Cho G = (V,E) Trên V ta định nghĩa
quan hệ tương đương như sau:
u~v ⇔ u = v hay có một đường đi từ u đến v
a) Nếu u~v thì ta nói hai đỉnh u và v liên thông
với nhau
b) Mỗi lớp tương đương được gọi là một thành
phần liên thông của G
c) Nếu G chỉ có một thành phần liên thông thì G
gọi là liên thông
Đường đi, chu trình, đồ thị liên
thông:
Trang 38Định nghĩa Cho G = (V,E) là đồ thị vô hướng
liên thông
a) Đỉnh v được gọi là đỉnh khớp nếu G – v
không liên thông (G – v là đồ thị con của G
có được bằng cách xoá v và các cạnh kề với v)
b) Cạnh e được gọi là cầu nếu G- e không liên
thông( G-e là đồ thị con của G có được bằng
38
Đường đi, chu trình, đồ thị liên
thông:
Trang 40Cho G = (V,E) là đồ thị vô hướng u,v∈V
a) Đường đi (dây chuyền) có chiều dài k nối hai đỉnh u,v
là dãy đỉnh và cạnh liên tiếp nhau
v0e1v1e2…vk-1ekvk sao cho:
v 0=u ,v k = v, e i=v i-1v i , i=1,2,…,k
Đường đi, chu trình, đồ thị liên
thông:
Trang 41a) Đường đi không có cạnh nào xuất hiện quá
một lần gọi là đường đi đơn
b) Đường đi không có đỉnh nào xuất hiện quá
một lần gọi là đường đi sơ cấp
c) Đường đi được gọi là chu trình nếu nó bắt đầu và kết thúc tại cùng một đỉnh
Đường đi, chu trình, đồ thị liên
thông:
Trang 42(a,e1,b,e2,c,e3,d,e4,b ) là đường đi từ đỉnh a tới đỉnh b có chiều dài là 4
Tuy nhiên, trong trường hợp này, đồ thị của chúng ta là đơn
đồ thị, do vậy có thể gọi đường đi này bằng 1 cách ngắn gọn như sau: (a,b,c,d,b)
Chu trình sơ cấp: (b,c,d,b) (b,f,e,b)
Chu trình sơ cấp nào
không?
Trang 43Bài toán đường đi ngắn nhất
• Đồ thị không có trọng số : đường đi từ đỉnh A đến đỉnh B được gọi là ngắn
nhất nếu như số cạnh nó đi qua là ít nhất.
• Đồ thị có trọng số : đường đi từ đỉnh A đến đỉnh B là ngắn nhất nếu như tổng các trọng số của các cạnh là bé nhất.
Trang 44Bài toán đường đi ngắn nhất
Nhiều bài toán có thể mô hình bằng đồ thị có trọng số
Đó là đồ thị mà mỗi cạnh của nó được gán một con số (nguyên hoặc thực) gọi là trọng số ứng với cạnh đó Ví
dụ cần mô hình một hệ thống đường hàng không của nước ta Trong mô hình cơ sở, mỗi sân bay được
biểu diễn bằng một đỉnh, mỗi chuyến bay là một cạnh nối hai đỉnh tương ứng Nếu trong bài toán đang xét ta cần tính đến khoảng cách giữa các chuyến bay thì cần gán cho mỗi cạnh của đồ thị trên khoảng cách giữa các chuyến bay tương ứng
Trang 45Bài toán đường đi ngắn nhất
Nếu quan tâm đến thời gian của mỗi chuyến bay thì ta sẽ gán các thời lượng này cho mỗi cạnh của đồ thị Nếu trong bài toán đang xét chúng ta lại tính đến chi phí của mỗi chuyến bay thì ta gán chi phí như trọng số ứng với cạnh nối hai thành phố tương ứng Trên hình biểu diễn các cách gán trọng số khác nhau cho các cạnh của đồ thị tùy theo mục đích của bài toán đặt ra
Trang 46Bài toán đường đi ngắn nhất
957 765
560
Đà Nẵng Phú Bài
Tân-S-Nhất
Khoảng cách
Trang 47Bài toán đường đi ngắn nhất
Trang 48Bài toán đường đi ngắn nhất
Trang 49Bài toán đường đi ngắn nhất
• Điều kiện tồn tại:
Điều kiện cần và đủ để tồn tại đường đi ngắn nhất
giữa 2 đỉnh bất kỳ trong một đồ thị có trọng số
là đồ thị phải liên thông.
1 Nếu hai đỉnh bất kì có đường đi ngắn nhất =>
đồ thị liên thông.
2 Nếu đồ thị liên thông
Xét hai đỉnh bất kì a và b, gọi W là tập tất cả các
đường đi từ a -> b => W khác rổng, W là tập hửu hạn => trong W chọn được đường đi có tổng trọng số bé nhất.
Trang 50Bài toán đường đi ngắn nhất
• Giải thuật Moore_Dijkstra:
Input: G = (V, E) liên thông, có trọng số w(i, j), V= {1,……,n}
Output: đường đi ngắn nhất từ đỉnh a đến đỉnh z.
Chọn đỉnh có nhãn bé nhất không thuộc S gọi đó là u:
S:=S U {u}
Nếu L(u)+w(u,v) < L(v)
Thì L(v):= L(u)+w(u,v)
Quay lại bước 2
Trang 515
15
20 60
Trang 52Bước Tập nút đã xét Nút
hiện tại
Khoảng cách ngắn nhất từ nút s(nút 0) đến các nút khác
0 1 2 3 4 5 B0
Trang 530->1->3->4->5
Trang 54Duyệt đồ thị
1 Định nghĩa:
Duyệt đồ thị là hành động thăm tất cả các đỉnh của đồ
thị, mỗi đỉnh đúng 1 lần, theo một trình tự nào đó.
Có hai phương pháp duyệt cơ bản:
Duyệt theo chiều rộng.
Duyệt theo chiều sâu.
Trang 553 Duyệt theo chiều rộng:
Quá trình duyệt theo chiều rộng bắt đầu từ một đỉnh
v nào đó của đồ thị Sau đó thăm các đỉnh kề của v, rồi tiếp tục đến các đỉnh kề của đỉnh vừa thăm
Giải thuật này ưu tiên duyệt tất cả các đỉnh nằm lân
cận với một đỉnh v đã duyệt nào đó rồi tiếp tục đến các mức tiếp theo nên gọi là duyệt theo chiều rộng Duyệt đồ thị – Duyệt theo chiều rộng (1)
Trang 56Thực hiện các bước sau:
G(V, E), V={v1, v2, …., vn)
− Đưa đỉnh v1 vào hàng đợi
− Trong khi hàng đợi khác rỗng:
− Nếu thỏa yêu cầu của bài toán thì dừng.
Duyệt đồ thị – Duyệt theo chiều rộng (2)
• Lấy một đỉnh từ hàng đợi v
• Duyệt đỉnh v
• Đưa các đỉnhkề với v nhưng chưa được duyệt
vào hàng đợi.
Trang 57Duyệt đồ thị – Duyệt theo chiều rộng (2)
Giải thuật:
Dùng một mảng B có n phần tử để đánh dấu các đỉnh đã duyệt.
Procedure Bfs(v);
Begin B[v]:=true;
Insert_queue(v,Q);
while not empty(Q) do Begin
lấy 1đỉnh v nào đó trong hàng đợi.
For (mỗi đỉnh w kề với v ) do
if (B[w]=false) then Begin
B[w]:=true; {duyệt W}
Insert_queue(w,Q);
End;
End;
Trang 58Duyệt đồ thị – Duyệt theo chiều rộng (3)
Ví dụ:
Lấy A, duyệt các đỉnh kề với A là B, C, D
Lấy B, duyệt các đỉnh kề với B là F
Lấy C, các đỉnh kề với C đã duyệt
Lấy D, duyệt các đỉnh kề với D là E, G
Lấy F, các đỉnh kề với F đã duyệt
Lấy E, các đỉnh kề với E đã duyệt
Lấy G Tất cả các nút đã được duyệt nên đồ thị đã duyệt xong
Trang 59Duyệt đồ thị – Duyệt theo chiều sâu (1)
2 Duyệt theo chiều sâu:
Quá trình duyệt theo chiều sâu bắt đầu từ một đỉnh
nào đó của đồ thị Sau khi thăm đỉnh này, quá trình duyệt theo chiều sâu được lặp lại với tất cả các đỉnh
kề với nó cho đến khi không còn thực hiện được nữa.
Giải thuật này duyệt theo một hướng nào đó sâu
nhất có thể nên gọi là duyệt theo chiều sâu.
Trang 60Duyệt đồ thị – Duyệt theo chiều sâu (2)
Giải thuật:
Để xác định đỉnh nào đã thăm rồi đỉnh nào chưa thì
dùng một mảng B có n phần tử tương ứng với n đỉnh để đánh dấu.
• Đầu tiên B[i]:=false ứng với đỉnh i chưa được thăm.
• B[i]:=true khi đỉnh i đã được thăm.
Trang 61Duyệt đồ thị – Duyệt theo chiều sâu (3)
Ví dụ:
Duyệt A, A có các đỉnh kề là B, C, D
Duyệt B, B có đỉnh kề chưa duyệt là F
Duyệt F, F có các đỉnh kề chưa duyệt là D, G
Duyệt D, D có các đỉnh kề chưa duyệt là C, E, G
Duyệt C, các đỉnh kề với C đã duyệt
Duyệt E, các đỉnh kề với E chưa duyệt là G
Duyệt G Tất cả các nút đã được duyệt nên đồ thị đã duyệt
Trang 631 Cây:
1.1 Định nghĩa:
Cây là đơn đồ thị liên thông, không có chu trình
Vd: Đồ thị nào trong các đồ thị là cây.
CÂY VÀ CÂY KHUNG
Trang 64đó là đỉnh a.
Ta xóa đi đỉnh a => đồ thị còn lại là cây có k
đỉnh, có k-1 cạnh
Vậy cây ban đầu có k-1+1=k cạnh.
CÂY VÀ CÂY KHUNG(tt)
Trang 65b Trong một cây giửa hai đỉnh bất kỳ của cây có duy nhất một đường đi.
2 Cây khung:
Cho G=(V, E) là một đồ thị liên thông, cây
T gọi là cây khung của đồ thị G nếu nó đi qua tất cả các đỉnh của đồ thị G.
Điều kiện tồn tại cây khung:
Đồ thị vô hướng G(V, E) tồn tại cây khung khi và chỉ khi G là đồ thị liên thông
CÂY VÀ CÂY KHUNG(tt)
Trang 66Cách tìm cây khung:
Trong khi đồ thị G có chu trình C
Xóa đi một cạnh bất kì trên C
⇒ Đồ thị G còn lại là cây khung.
Cây khung tối thiểu:
Cho G=(V, E) vô hướng liên thông có
trọng số Cây khung có tổng trọng số bé nhất gọi là cây khung tối thiểu.
CÂY VÀ CÂY KHUNG
Trang 67Giải thuật tìm cây khung tối thiểu:
Giải thuật Prim:
Input: G=(V, E), V=n liên thông có trọng số
Output: Cây khung T của đồ thị
1 Chọn 1 đỉnh bất kỳ đưa vào T
2 for i:=1 to n-1
Chọn một cạnh ei có trọng số nhỏ nhất
thỏa :
- Liên thuộc với 1 đỉnh thuộc T
- Không tạo thành chu trình trong T
CÂY VÀ CÂY KHUNG
Trang 68Giải thuật Kruskal tìm cây khung nhỏ nhất:
Input: G=(V, E), V=n liên thông có trọng số
Output: Cây khung T của đồ thị
1 T=O.
2 For i:=1 to n-1
chọn cạnh ei có trọng số nhỏ nhất không tạo thành chu trình trong T
T = T U {ei}
3 Xuất T.
CÂY VÀ CÂY KHUNG
Trang 69Đường đi Euler
Trang 70Bài toán Thị trấn Königsberg chia thành 4 phần bởi các nhánh của dòng sông Pregel
Bốn phần này được nối kết bởi 7 cây cầu
Đường đi Euler
Trang 71Đường đi Euler
Trang 72Câu hỏi. Có thể đi qua bảy cây cầu mà không có cây cầu nào đi quá 1 lần
Đường đi Euler
Trang 73D
Trang 74Định nghĩa.
1 Đường đi Euler là đường đi qua tất cả các cạnh
mỗi cạnh (cung) đúng một lần Chu trình Euler là chu trình đi qua tất cả các cạnh của
đồ thị mỗi cạnh đúng một lần.
2 Đồ thị được gọi là đồ thị Euler nếu nó có chu
Đường đi Euler
Đường đi Euler
Trang 75Điều kiện cần và đủ.
Cho G = (V,E) là đồ thị vô hướng liên thông G
là đồ thị Euler ⇔ Mọi đỉnh của G đều có bậc chẵn
Nếu G có hai đỉnh bậc lẻ còn mọi đỉnh khác
đều có bậc chẵn thì G có đường đi Euler
Đường đi Euler
Nhận xét
- Nếu đồ thị G có 2 đỉnh bậc lẻ thì G có 1 đường đi Euler
- Nếu đồ thị G có 2k đỉnh bậc chẵn thì ta có thể vẽ đồ thị bằng k nét
Trang 761 Bắt đầu từ một đỉnh bất kỳ của G và tuân
theo qui tắc sau: Mỗi khi đi qua một cạnh nào đó thì xoá nó đi, sau đó xoá đỉnh cô lập nếu có.
2 Không bao giờ đi qua một cầu trừ phi
không còn cách đi nào khác.
Thuật toán Fleury để tìm chu trình Euler.
Đường đi Euler
Trang 77a b c d
e f
g h
abcfdcefghbga
Đường đi Euler