Tải bản đầy đủ
Định nghĩa đồ thị

Định nghĩa đồ thị

Tải bản đầy đủ

11

Hình 1.3: Đa đồ thị
Hai loại đồ thị cơ bản:
a) Đồ thị vô hướng (6 đỉnh, 9 cạnh). b) Đồ thị có hướng (5 đỉnh, 7 cung).
Định nghĩa 1.5. [3] Đồ thị hỗn hợp G=(V, E, A ) bao gồm V là tập các đỉnh,
E là tập các cạnh (E≠Ø) và A là tập các cung (A ≠Ø) của đồ thị.

Hình 1.4: Đồ thị hỗn hợp
Đồ thị hỗn hợp (6 đỉnh 5 cạnh, 4 cung)
Số đỉnh của đồ thị G là số phần tử trong V.
Chúng ta có thể coi các đồ thị vô hướng và có hướng là các trường hợp riêng
của đồ thị hỗn hợp G=(V, E, A) khi mà A =Ø hoặc E=Ø.
1.1.1. Các thuật ngữ cơ bản
Định nghĩa 1.6.[3] Hai đỉnh u và v của đồ thị vô hướng G được gọi là kề
nhau nếu (u,v) là cạnh của đồ thị G. Nếu e=(u,v) là cạnh của đồ thị thì chúng
ta nói cạnh này là liên thuộc với hai đỉnh u và v, hoặc cũng nói là cạnh e là
nối đỉnh u và đỉnh v, đồng thời các đỉnh u và v sẽ được gọi là các đỉnh đầu
của cạnh (u,v).
Để có thể biết được bao nhiêu cạnh liên thuộc với một đỉnh, ta đưa vào
định nghĩa sau
Định nghĩa 1.7.[3] Chúng ta gọi bậc của đỉnh v trong đồ thị vô hướng là số
cạnh liên thuộc với nó và sẽ kí hiệu là deg(v).

12

Định lý 1.1. [3] Giả sử G=(V,E) là đồ thị vô hướng với m cạnh. Khi đó

2m = ∑ deg(v)
v∈V

Chứng minh. Rõ ràng mỗi cạnh e=(u,v) được tính một lần trong deg(u) và
một lần trong deg(v). Từ đó suy ra tổng tất cả các bậc của các đỉnh bằng hai
lần số cạnh.
Ví dụ 1.1: Đồ thị với n đỉnh và mỗi đỉnh có bậc là 6 có bao nhiêu cạnh?
Giải: Theo định lý 1.1, ta có 2m=6n. Từ đó suy ra số cạnh của đồ thị là 3n.
Hệ quả 1.1.[3] Trong đồ thị vô hướng, số đỉnh bậc lẻ (nghĩa là có bậc là số
lẻ) là một số chẵn.
Chứng minh. Thực vậy, gọi O và U tương ứng là tập đỉnh bậc lẻ và tập đỉnh
bậc chẵn của đồ thị. Ta có
Do deg(v) là chẵn với v là đỉnh trong U nên tổng thứ hai trong vế phải ở trên
là số chẵn. Từ đó suy ra tổng thứ nhất (chính là tổng bậc của các đỉnh bậc lẻ)
cũng là số chẵn, do tất cả các số hạng của nó là số lẻ, nên tổng này phải gồm
một số chẵn các số hạng. Vì vậy, số đỉnh bậc lẻ phải là số chẵn.
Định nghĩa 1.8.[3] Nếu e=(u,v) là cung của đồ thị có hướng G thì chúng ta
nói hai đỉnh u và v là kề nhau, và nói cung (u,v) nối đỉnh u và đỉnh v hoặc
cũng nói cung này là đi ra khỏi đỉnh u và đi vào đỉnh v. Đỉnh u (v) sẽ được
gọi là đỉnh đầu (cuối) của cung (u,v)
Định nghĩa 1.9.[3] Chúng ta gọi bán bậc ra (bán bậc vào) của đỉnh v trong
đồ thị có hướng là số cung của đồ thị đi ra khỏi nó (đi vào nó) và ký hiệu là

deg + (v)(deg − (v))

Hình 1.5. Đồ thị có hướng
Ví dụ 1.2. Xét đồ thị cho trong hình 1.5. Ta có
deg-(A) = 2, deg-(B) = 3, deg-(C) = 1, deg-(D) = 2, deg-(E) = 2
deg+(A) =3, deg+(B) =2, deg+(C) =2, deg+(D) = 2, deg+(E) =1
1.1.2. Đường đi, chu trình và đồ thị liên thông
Định nghĩa 1.12.[3] Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó
n là số nguyên dương, trên đồ thị vô hướng G = (V, E) là dãy
x0 , x1 , ..., xn-1 , xn ,
trong đó u = x0 , v = xn , (xi , xi+1 ) ∈ E, i = 0, 1, 2, ..., n - 1.
Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cạnh:
(x0 , x1 ), (x1 , x2 ), ..., (xn-1 , xn ).

13

Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi
có đỉnh đầu trùng với đỉnh cuối (tức là u = v) được gọi là chu trình. Đường đi
hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại.
Ví dụ 1.3. Xét đồ thị vô hướng cho trong hình 1.6.

Hình 1.6. Đường đi trên đồ thị vô hướng
Ta có: a, d, c, f, e là đường đi đơn độ dài 4. Còn d, e, c, a không là đường đi,
do (c, e) không phải là cạnh của đồ thị. Dãy b, c, f, e, b là chu trình độ dài 4.
Đường đi a, b, e, d, a, b có độ dài là 5 không phải là đường đi đơn, do cạnh (a,
b) có mặt trong nó hai lần.
Định nghĩa 1.13.[3] Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số
nguyên dương, trên đồ thị có hướng G = (V, A) là dãy
x0 , x1 , ..., xn-1 , xn ,
với u = x0 , v = xn , (xi , xi+1 ) ∈ A, i = 0, 1, 2, ..., n - 1.
Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cung:
(x0 , x1 ), (x1 , x2 ), ..., (xn-1 , xn ).
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi
có đỉnh đầu trùng với đỉnh cuối (tức là u = v) được gọi là chu trình. Đường đi
hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại.
Ví dụ 1.4. Xét đồ thị có hướng cho trong hình 1.7

Hình 1.7. Đường đi trên đồ thị có hướng
Ta có a, d, c, f, e là đường đi đơn độ dài 4. Còn d, e, c, a không là đường đi,
do (c, e) không phải là cạnh của đồ thị. Dãy b, c, f, e, b là chu trình độ dài 4.
Đường đi a,b, e, d, a, b có độ dài là 5 không phải là đường đi đơn, do cạnh (a,
b) có mặt trong nó hai lần.
Nếu sử dụng đồ thị để biểu diễn mạng máy tính (trong đó các đỉnh của đồ
thị tương ứng với các máy tính, còn các cạnh tương ứng với các kênh nối) câu
hỏi đặt ra là hai máy tính bất kì có thể trao đổi thông tin với nhau hoặc trực
tiếp qua kênh nối chúng hoặc thông qua một vài máy tính trong mạng trung
gian không? Câu hỏi đó được phát biểu trong ngôn ngữ đồ thị như sau: Tồn

14

tại hay không đường đi giữa mọi cặp đỉnh của đồ thị? Để trả lời câu hỏi đó ta
xét định nghĩa.
Định nghĩa 1.14.[3] Đồ thị vô hướng G = (V, E) được gọi là liên thông
nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó.
Hai máy tính bất kì trong mạng có thể trao đổi thông tin được với nhau
khi và chỉ khi đồ thị tương ứng với mạng này là đồ thị liên thông.
Ví dụ 1.5. Trong hình 1.8: Đồ thị G là liên thông, còn đồ thị H là không liên thông

Hình 1.8. Đồ thị liên thông G và đồ thị H gồm 3 thành phần liên thông H1, H2,
H3
1.1.3. Đồ thị có trọng số
Đồ thị được sử dụng để giải các bài toán trong nhiều lĩnh vực khác nhau.
Chẳng hạn, đồ thị được sử dụng để xác định các mạch vòng trong vấn đề giải
tích mạch điện. Chúng ta có thể xác định xem hai máy tính trong mạng có thể
trao đổi thông tin với nhau được hay không. Khi đó, đồ thị được sử dụng để
biễu diễn mạng truyền thông với các đỉnh là các nút mạng, các cạnh, các cung
là các đường truyền dữ liệu giữa các nút mạng. Đồ thị có thể dùng để biễu
diễn các đường đi trong một vùng: các đỉnh tương ứng với các ngã 3, ngã 4,
còn các cạnh, các cung tương ứng là các đường đi 2 chiều và đường đi 1
chiều. Để cấu trúc đồ thị có thể biễu diễn được các bài toán thực tế người ta
đưa vào khái niệm đồ thị có trọng số, trên mỗi cạnh hay mỗi cung được gán
một trọng số thể hiện chi phí cho việc thực hiện một mục đích nào đó trên
cạnh hay trên cung.
Định nghĩa 1.17.[3] Chúng ta kí hiệu đồ thị có trọng số là bộ 4 G=(V, E, A,
w), trong đó, w là hàm trọng số
w: E ∪ A → R ,
R: tập số thực,
ngoài ra còn có thể kí hiệu w bằng c hoặc weight, cost. Cho S là một tập con
của E ∪ A, khi đó chúng ta kí hiệu w(S)=∑w(s)| s ∈ S là giá trị trọng số của
tập S.
1.1.4. Các cấu trúc dữ liệu biểu diễn đồ thị
Có nhiều cách khác nhau để lưu trữ các đồ thị trong máy tính. Sử dụng cấu
trúc dữ liệu nào thì tùy theo cấu trúc của đồ thị và thuật toán dùng để thao tác
trên đồ thị đó. Trên lý thuyết, người ta có thể phân biệt giữa các cấu trúc danh
sách và các cấu trúc ma trận. Tuy nhiên, trong các ứng dụng cụ thể, cấu trúc
tốt nhất thường là kết hợp của cả hai. Người ta hay dùng các cấu trúc danh

15

sách cho các đồ thị thưa (sparse graph), do chúng đòi hỏi ít bộ nhớ. Trong khi
đó, các cấu trúc ma trận cho phép truy nhập dữ liệu nhanh hơn, nhưng lại cần
lượng bộ nhớ lớn nếu đồ thị có kích thước lớn.
Biểu diễn đồ thị: [2]
Một cách biểu diễn đồ thị không có cạnh bội là liệt kê tất cả các cạnh của
đồ thị. Nói cách khác, để biểu diễn đồ thị không có cạnh bội ta dùng danh
sách kề. Danh sách này chỉ rõ các đỉnh nối với mỗi đỉnh của đồ thị.
Ví dụ 1.6. Dùng danh sách kề để mô tả đơn đồ thị trên hình 1.9.
a
e
b
d
c

Hình 1.9. Đơn đồ thị

Bảng 1.1 Liệt kê tất cả các đỉnh kề với mỗi đỉnh của đồ thị.
Đỉnh
Các đỉnh kề
a
b,c,e
b
a
c
a,d,e
d
c,e
e
a,c,d
Ví dụ 1.7. Biểu diễn đồ thị có hướng trên hình 1.10 bằng cách liệt kê tất cả
các đỉnh cuối của các cung xuất phát từ mỗi đỉnh của đồ thị.
a
e
b
d
c

Hình 1.10. Đồ thị có hướng
Bảng 1.2. Biểu diễn đồ thị có hướng trên hình 1.10.
Đỉnh
Các đỉnh kề
a
b,c,d,e
b
b,d
c
a,c,e

16

d
e

b,c,d

Ma trận kề [2]
Khi biểu diễn đồ thị bởi danh sách các cạnh hay danh sách kề, thì việc thực
hiện một thuật toán có thể sẽ rất cồng kềnh, nếu đồ thị có nhiều cạnh. Để đơn
giản việc tính toán ta có thể biểu diễn đồ thị bằng ma trận. Có hai kiểu ma
trận thường được dùng để biểu diễn đồ thị sẽ được giới thiệu dưới đây.
Giả sử G= (V, E) là một đơn đồ thị, trong đó |V| = n và các đỉnh được liệt
kê một cách tùy ý v1,…vn. Ma trận kề A ( hay AG) của G ứng với danh sách
các đỉnh này là ma trận không - một cấp n x n có phần tử tại vị trí hàng i cột j
bằng 1 nếu vi và vj kề nhau và bằng 0 nếu chúng không được nối với nhau.
Nói cách khác, ma trận kề của đồ thị là ma trận A = [aij] trong đó
1 nếu{ vi,vj} là một cạnh của G
0 nếu không có cạnh nối đỉnh vi với vj
aij =
Ví dụ 1.8. Dùng ma trận kề hãy biểu diễn đồ thị trên hình 1.11
a
d
b
c

Hình 1.11. Đơn đồ thị
Ta sắp xếp các đỉnh theo thứ tự a, b, c, d. Ma trận biểu diễn đồ thị này là:

Ma trận kề cũng có thể dùng để biểu diễn đồ thị vô hướng có khuyên và có
cạnh bội. Khuyên tại đỉnh ai được biểu diễn bằng 1 tại vị trí (i,j) của ma trận
kề. khi có cạnh bội, ma trận kề không còn là ma trận không - một nữa, vì phần
tử ở vị trí thứ (i,j) của ma trận này bằng số cạnh nối các đỉnh ai và aj . Tất cả
các đồ thị vô hướng, kể cả đa đồ thị và giả đồ thị đều có ma trận kề đối xứng.
Ví dụ 1.9. Dùng ma trận kề biểu diễn giả đồ thị trên hình 1.12
a
d

17

b
c

Hình 1.12. Giả đồ thị
Ma trận kề với thứ tự các đỉnh a, b, c, d là:

Ma trận kề của đồ thị có hướng G = (V, E) có giá trị bằng 1 tại vị trí (i,j)
nếu có một cạnh (cung) từ vi tới vj trong đó v1,v2,…,vn là một danh sách bất kỳ
của các đỉnh đồ thị. Nói cách khác, nếu A = [aij] là ma trận kề của đồ thị có
hướng theo danh sách này của đỉnh thì
1 nếu có cạnh đi từ vi tới vj
0 trong các trường hợp khác
aij =
Ma trận liên thuộc [2]
Một cách thường dùng nữa để biểu diễn đồ thị là dùng ma trận liên thuộc.
Giả sử G = (V, E) là một đồ thị vô hướng, v1,v2,…,vn là tập các đỉnh, còn e1,e2,
…,em là tập các cạnh của nó. Khi đó ma trận liên thuộc theo thứ tự trên của V
và E là ma trận M = [mij], trong đó
1 nếu có cạnh ej nối với đỉnh vi
0 nếu có cạnh ej không nối với đỉnh vi
mij =
Ví dụ 1.10. Hãy biểu diễn đồ thị trên hình 1.13 bằng ma trận liên thuộc.
v1
v2
v3
v4
v5
e1
e3
e2

18

e4
e6
e5

Hình 1.13. Đồ thị vô hướng
Ma trận liên thuộc có dạng

1.2. Khái niệm về lớp các bài toán P và NP
1.2.1. Khái niệm các loại thời gian tính
Thời gian tính tốt nhất: là thời gian tính tối thiểu cần thiết để thực hiện
thuật toán với mọi bộ dữ liệu đầu vào kích thước n.
Thời gian tính tồi nhất: là thời gian tính tối đa cần thiết để thực hiện thuật
toán với mọi bộ dữ liệu đầu vào có kích thước n
Thời gian tính trung bình: là thời gian tính cần thiết để thực hiện thuật toán
trên một tập hữu hạn các bộ dữ liệu đầu vào có kích thước n. Thời gian tính
trung bình được tính theo công thức sau:
Thời gian tính trung bình = (Tổng thời gian tính tất cả các bộ dữ liệu có
thể)/ Số bộ dữ liệu.
Định nghĩa 1.18. Bài toán quyết định là bài toán mà đầu ra chỉ có thể là
‘yes’ hoặc ‘no’(đúng/sai, 0/1).
Đối với một bài toán quyết định, có những bộ dữ liệu vào cho ra câu trả lời
(đầu ra) là ‘yes’, chúng ta gọi đây là bộ dữ liệu ‘yes’, nhưng cũng có những
bộ dữ liệu vào cho ra câu trả lời là ‘no’, chúng ta gọi những bộ dữ liệu này là
bộ dữ liệu ‘no’.
1.2.2. Lớp bài toán P.
Định nghĩa 1.19.[1] Một máy Turing M được gọi là có độ phức tạp thời gian
T(n) (hoặc thời gian chạy T(n)) nếu mỗi khi M được cho một nguyên liệu đầu
vào w có độ dài n thì M sẽ dừng sau khi thực hiện tối đa T(n) bước chuyển,
bất kể M có kiểm nhận w hay không.
Chúng ta chủ yếu quan tâm khi T(n) là một hàm đa thức.
Một ngôn ngữ L thuộc lớp P nếu có một hàm đa thức T(n) sao cho L =
L(M) với một máy Turing đơn định M nào đó có độ phức tạp thời gian T(n)

19

Ví dụ 1.11: [2] Thuật toán Kruskal tìm cây khung bé nhất của một đồ thị có V
là số đỉnh và E là số cạnh với thời gian O(E log V). Thời gian thực hiện bởi
máy Turing cũng cùng bậc như vậy.
1.2.3. Lớp bài toán NP.
Định nghĩa 1.20.[1] Ngôn ngữ L thuộc lớp NP (Nondeterministic
Polynomial) nếu ∃ máy Turing không đơn định M và một độ phức tạp thời
gian T(n) sao cho L=L(M) và khi M được cho một nguyên liệu có độ dài n thì
nó sẽ kiểm nhận sau không quá T(n) bước chuyển.
Nhận xét: Vì mỗi máy Turing đơn định đều là máy Turing không đơn định
không bao giờ có lựa chọn bước chuyển nên P ⊆ NP. Tuy nhiên, dường như
NP cũng chứa nhiều bài toán không thuộc lớp P. Một câu hỏi toán học sâu sắc
còn bỏ ngỏ là liệu P = NP hay không, nghĩa là mọi thứ có thể thực hiện được
bởi một NTM thật sự trong thời gian đa thức có thể được thực hiện bởi một
DTM trong một thời gian đa thức hay không, dù có thể là một hàm đa thức
bậc cao hơn.
1.2.4. Lớp bài toán NP-đầy đủ (NP-Complete).
Định nghĩa 1.21.[1] Ta nói L là bài toán thuộc loại NP-C nếu các khẳng
định sau là đúng:
1) L thuộc NP
2) Với mọi ngôn ngữ L’ ∈ NP có một phép thu thời gian đa thức L’ về L
Định lý 1.2.[1] Nếu bài toán P1 là NP-C, P2 là NP và có một phép thu thời
gian đa thức từ P1 về P2 thì P2 cũng là NP-C.
Chứng minh: Ta cần chứng tỏ rằng mỗi ngôn ngữ L thuộc NP đều thu được
P2 trong thời gian đa thức. Khi đó theo định nghĩa P2 sẽ thuộc NP-C.
Thật vậy, vì P1 là NP-C nên có một phép thu đa thức L về P1. Giả sử thời
gian của phép thu này là P(n). Vì thế một chuỗi W ∈ L có chiều dài n được
biến đổi thành một chuối x ∈ P1 có chiều dài tối đa là P(n). Ta cũng biết rằng
có một phép thu đa thức từ P1 về P2. Giả sử thời gian của phép thu này là
q(m). Thế thì phép thu này biến đổi chuỗi x ∈ P1 về chuỗi y nào đó thuộc P2
với thời gian tối đa là q(p(n)). Vì thế phép biến đổi W ∈ L về y ∈ P2 mất thời
gian tối đa là p(n) + q(p(n)), đây cũng là một đa thức. Như vậy, ta kết luận
rằng L có thể thu về P2 trong thời gian đa thức.
Định lý 1.3.[1] Nếu có một bài toán nào đó là NP-C mà lại thuộc lớp P thì ta
có P = NP.
Chứng minh: Giả sử có bài toán Q ∈ NP-C và Q ∈ P. Thế thì mọi ngôn ngữ
L trong NP đều thu được về Q trong thời gian đa thức. Nếu Q ∈ P thì L ∈ P.
Như vậy NP ∈ P. Kết hợp với điều hiển nhên là P ∈ NP ta được P = NP.
Nhận xét: Chúng ta vẫn tin tưởng rằng nhiều bài toán thuộc lớp NP nhưng
không thuộc P nên chúng ta sẽ xem việc chứng minh một bài toán là NP-C có
giá trị ngang với việc chứng minh rằng nó không thể giải được trong thời gian

20

đa thức, và vì thế không có lời giải đúng nào bằng máy tính (và ta sẽ chỉ đi
tìm lời giải gần đúng).
1.2.5. Lớp bài toán NP-khó (NP-Hard).
Một cách ngắn gọn có thể hiểu bài toán NP-khó là bài toán mà không có
thuật toán thời gian tính đa thức để giải nó trừ khi P = NP, mà chỉ có các thuật
toán giải trong thời gian hàm mũ. Sau đây là định nghĩa chính thức của bài
toán NP-khó.
Định nghĩa 1.22.[1]. Một bài toán A được gọi là NP- khó (NP-hard) nếu như
sự tồn tại thuật toán đa thức để giải nó kéo theo sự tồn tại thuật toán đa thức
để giải mọi bài toán trong NP.
Như vậy mọi bài toán NP-C đều là NP-Hard.
Một số bài toán NP-khó tiêu biểu như:
Bài toán bè cực đại (MaxClique): Cho một đồ thị vô hướng G = (V, E). V là
tập các đỉnh, E là tập các cạnh tương ứng các đỉnh trong V. Cần tìm bè lớn
nhất của G. Bè là tập các đỉnh trong đồ thị mà đôi một có cạnh nối với nhau
(là một đồ thị con đầy đủ trong đồ thị G).
Bài toán phủ đỉnh (Vertex cover): Ta gọi một phủ đỉnh của đồ thị vô hướng
G = (V, E) là một tập con các đỉnh của đồ thị S ⊆ V sao cho mỗi cạnh của đồ
thị có ít nhất một đầu mút trong S. Bài toán đặt ra là: Cho đồ thị vô hướng G
= (V, E) và số nguyên k. Hỏi G có phủ đỉnh với kích thước k hay không?
Một cách không hình thức, có thể nói rằng nếu ta có thể giải được một cách
hiệu quả một bài toán NP-khó cụ thể, thì ta cũng có thể giải hiệu quả bất kỳ
bài toán trong NP bằng cách sử dụng thuật toán giải bài toán NP-khó như một
chương trình con.
Từ định nghĩa bài toán NP-khó có thể suy ra rằng mỗi bài toán NP-đầy đủ
đều là NP-khó. Tuy nhiên một bài toán NP-khó không nhất thiết phải là NPđầy đủ.
Cũng từ bổ đề nêu trên, ta có thể suy ra rằng để chứng minh một bài toán A
nào đó là NP-khó, ta chỉ cần chỉ ra phép qui dẫn một bài toán đã biết là NPkhó về nó.
Từ phần trình bày trên, ta thấy có rất nhiều bài toán ứng dụng quan trọng
thuộc vào lớp NP-khó, và vì thế khó hy vọng xây dựng được thuật toán đúng
hiệu quả để giải chúng. Do đó, một trong những hướng phát triển thuật toán
giải các bài toán như vậy là xây dựng các thuật toán gần đúng.

21

Hình 1.14. Mô hình phân lớp các bài toán