You are on page 1of 807

Phương pháp chứng minh

Trần Vĩnh Đức

HUST

Ngày 6 tháng 9 năm 2018

1 / 37
Bài tập
▶ GS Mc Brain và vợ là bà April tới một bữa tiệc ở đó có 4 đôi
vợ chồng khác.
▶ Có một vài cặp bắt tay nhau nhưng không ai bắt tay với vợ
hoặc chồng mình.
▶ GS hỏi mọi người khác xem họ bắt tay bao nhiêu người và
ông ấy nhận được 9 con số khác nhau.
▶ Hỏi có bao nhiêu người đã bắt tay April?

2 / 37
Tài liệu tham khảo

▶ Eric Lehman, F Thomson Leighton & Albert R Meyer,


Mathematics for Computer Science, 2013 (Miễn phí)
▶ K. Rosen, Toán học rời rạc ứng dụng trong tin học (Bản dịch
Tiếng Việt)

3 / 37
Định nghĩa
Chứng minh toán học của một mệnh đề là một dãy suy luận logic
dẫn đến mệnh đề này từ một tập tiên đề.

4 / 37
Nội dung

Mệnh đề, tiên đề, và suy luận logic

Phương pháp chứng minh

Nguyên lý sắp thứ tự tốt


Định nghĩa
Mệnh đề là một khẳng định hoặc đúng hoặc sai.
▶ Mệnh đề 2+3=5 3
▶ Mệnh đề 1+1=3 7

6 / 37
Khẳng định không phải mệnh đề

▶ “Đưa tôi cái bánh!”


▶ “Bây giờ là 5 giờ”

7 / 37
Mệnh đề
Với mọi số nguyên dương n, giá trị

p(n) ::= n2 + n + 41

là số nguyên tố.

▶ p(0) = 41 ✓ ▶ p(3) = 53 ✓
▶ p(1) = 43 ✓ ▶ ···
▶ p(2) = 47 ✓ ▶ p(39) = 1601 ✓
nhưng
p(40) = 402 + 40 + 41 = 41 × 41 7

8 / 37
Mệnh đề (Giả thuyết Euler, 1769)
Phương trình
a4 + b4 + c4 = d4
không có nghiệm khi a, b, c, d là số nguyên dương.
Năm 1988, Noam Eikies đã chứng minh là sai với phản ví dụ

a = 95800, b = 217519,
c = 414560, d = 422481

9 / 37
Mệnh đề
Phương trình
313(x3 + y3 ) = z3
không có nghiệm nguyên dương.
Mệnh đề này cũng sai nhưng phản ví dụ nhỏ nhất có nhiều hơn
1000 chữ số.

10 / 37
Mệnh đề (Định lý bốn màu)
Mọi bản đồ đều có thể tô được chỉ bằng bốn màu sao cho hai
vùng kề nhau có màu khác nhau.

Hình: Bản đồ tô 5 màu

11 / 37
Mệnh đề (Định lý bốn màu)
Mọi bản đồ đều có thể tô được chỉ bằng bốn màu sao cho hai
vùng kề nhau có màu khác nhau.
Appel & Hakel đã phân loại các bản đồ và dùng máy tính để kiểm
tra xem chúng có tô được bằng 4 màu. Họ đã hoàn tất chứng
minh năm 1976. Tuy nhiên
▶ Chứng minh quá dài để có thể kiểm tra mà không dùng máy
tính.
▶ Không ai đảm bảo rằng chương trình máy tính này chạy đúng.
▶ Không ai đủ nhiệt tình để kiểm tra hết hàng nghìn trường hợp
đã được chứng minh.

12 / 37
Mệnh đề (Định lý cuối cùng của Fermat)
Phương trình
xn + yn = zn
không có nghiệm nguyên với n ≥ 3.
▶ Bài toán được viết trong một quyển sách Fermat đọc năm
1630.
▶ Andrew Wiles chứng minh là đúng năm 1994.

13 / 37
Mệnh đề (Giả thuyết Goldbach)
Mọi số nguyên chẵn lớn hơn 2 đều là tổng của hai số nguyên tố.
▶ Được giả thuyết năm 1742
▶ Đã được khẳng định là đúng với mọi số không lớn hơn 1016 .
▶ 3 hay 7 ?

14 / 37
Định nghĩa
Vị từ là một mệnh đề mà giá trị chân lý phụ thuộc vào một hoặc
nhiều biến.

p(n) :: = “n là số bình phương hoàn hảo”


p(4) = “4 là số bình phương hoàn hảo”
p(4) = 3
p(5) = 7

15 / 37
Phương pháp tiên đề

▶ Thủ tục chuẩn để thiết lập các giá trị chân lý trong toán học
đã được phát triển khoảng từ 300 BC bởi Euclid.
▶ Bắt đầu từ 5 “giả sử” để xây dựng hình học Euclid. Ví dụ:
Qua một điểm nằm ngoài một đường thẳng ta vẽ được
một và chỉ một đường thẳng song song với đường thẳng
đã cho.
▶ Các mệnh đề như thế này được thừa nhận là đúng được gọi là
tiên đề.
▶ Bắt đầu từ các tiên đề này, Euclid thiết lập giá trị chân lý của
các mệnh đề khác bằng cách đưa ra “chứng minh”.
▶ Chứng minh là một dãy các lập luận logic từ tập tiên đề dẫn
đến mệnh đề cần chứng minh.

16 / 37
Một số thuật ngữ cho mệnh đề

▶ Mệnh đề đúng và quan trọng gọi là định lý.


▶ Bổ đề là mệnh đề chuẩn bị có ích để chứng minh các mệnh
đề khác.
▶ Hệ quả là một mệnh đề mà chứng minh nó chỉ cần vài bước
từ một định lý.

17 / 37
Hệ tiên đề của chúng ta

▶ Về cơ bản, toán học hiện đại dựa trên hệ tiên đề ZFC


(Zermelo-Fraekel with Choice) cùng với một vài quy tắc suy
luận logic.
▶ Tuy nhiên, chúng quá tối giản. Ví dụ, một chứng minh hình
thức trong ZFC cho 2 + 2 = 4 cần nhiều hơn 20, 000 bước lập
luận!
▶ Trong môn học này, ta thừa nhận mọi sự kiện trong toán
“phổ thông” như tiên đề.

18 / 37
Suy luận logic

▶ Luật Modus Ponens:


P, P⇒Q
Q
(Một chứng minh của P và một chứng minh P suy ra Q là
một chứng minh của Q)
▶ Luật
P ⇒ Q, Q ⇒ R
P⇒R
▶ Luật
¬P ⇒ ¬Q
Q⇒P

19 / 37
Không phải luật

¬P ⇒ ¬Q
P⇒Q
7

Ví dụ
▶ Nếu 4 là số nguyên tố, thì “tôi không biết bay”. 3
▶ Nếu 4 không phải số nguyên tố, thì “tôi biết bay”. 7.

20 / 37
Nội dung

Mệnh đề, tiên đề, và suy luận logic

Phương pháp chứng minh

Nguyên lý sắp thứ tự tốt


Chứng minh mệnh đề “Nếu ... thì”

Để chứng minh mệnh đề P ⇒ Q:


1. Viết, “Giả sử P”.
2. Chỉ ra bằng lập luận logic rằng Q đúng.

22 / 37
Định lý
Nếu 0 ≤ x ≤ 2 thì −x3 + 4x + 1 > 0.

Chứng minh.
Giả sử 0 ≤ x ≤ 2. Vậy các số

x, 2 + x, 2−x

đều lớn hơn hoặc bằng 0. Vậy

x(2 − x)(2 + x) ≥ 0

Thêm 1 vào tích trên ta được

x(2 − x)(2 + x) + 1 > 0

Khai triển tích ta được −x3 + 4x + 1 > 0.

23 / 37
Chứng minh bằng phản đảo

▶ Phản đảo của mệnh đề P ⇒ Q là mệnh đề ¬Q ⇒ ¬P.


▶ Ta chứng minh như sau:
1. Viết “Ta chứng minh mệnh đề phản đảo:”
và đưa ra mệnh đề phản đảo.
2. Làm như phương pháp chứng minh “Nếu ... thì”.

24 / 37
Định lý

Nếu r là số vô tỷ, vậy r cũng là số vô tỷ.

Chứng minh.

▶ Ta chứng minh mệnh đề phản đảo: Nếu r là số hữu tỉ, vậy r
là số hữu tỉ.

▶ Giả sử rằng r là số hữu tỉ. Có nghĩa rằng có hai số nguyên

p, q sao cho r = p/q.
▶ Bình phương hai vế ta được

p2
=r
q2

▶ Vì p2 , q2 đều là số nguyên nên r là số hữu tỉ.

25 / 37
Chứng minh mệnh đề “Nếu và chỉ nếu”

Có hai cách chứng minh:


1. Chứng minh
{
P⇒Q
P ⇔ Q tương đương với hai chứng minh
Q⇒P

2. Xây dựng dãy “nếu và chỉ nếu”.

26 / 37
Chứng minh bằng cách chia trường hợp

Định lý
Mọi nhóm gồm 6 người đều có 3 người hoặc đôi một quen nhau,
hoặc đôi một lạ nhau.

Chứng minh.
Xét x là một trong 6 người. Có hai trường hợp tương tự nhau:
1. Trong 5 người khác x, có ít nhất 3 người đều quen x.
2. Trong 5 người khác x, có ít nhất 3 người đều lạ x.
Tại sao?

27 / 37
Chứng minh bằng cách chia trường hợp

Định lý
Mọi nhóm gồm 6 người đều có 3 người hoặc đôi một quen nhau,
hoặc đôi một lạ nhau.

Chứng minh trường hợp 1.


Trong 5 người khác x, có ít nhất 3 người đều quen x.
Có hai trường hợp con:
1. Không có cặp nào trong số 3 người này quen nhau. 3
2. Có một cặp trong 3 người này quen nhau. Vậy cặp này cùng
với x tạo thành 3 người quen nhau từng đôi một. 3

28 / 37
Chứng minh phản chứng

Để chứng minh mệnh đề P bằng phản chứng:


1. Viết “Ta chứng minh dùng phản chứng”.
2. Viết “Giả sử P sai.”
3. Dẫn ra một sự kiện đã biết là sai (một phản chứng).
4. Viết “Điều này mâu thuẫn. Vậy P phải đúng.”

29 / 37
Định lý

2 là số vô tỉ.

Chứng minh.
▶ Ta chứng minh dùng phản chứng.

▶ Giả sử 2 là số hữu tỉ.

▶ Vậy ta có thể viết 2 = p/q ở dạng phân số tối giản.
▶ Ta có
√ p p2
2= ⇒ 2= ⇒ 2q2 = p2
q q2
▶ Vậy p chia hết cho 2. Tại sao? Nên p2 chia hết cho 4.
▶ Vậy q2 chia hết cho 2. Nên q chia hết cho 2.
▶ Vậy p/q không tối giản. 7

30 / 37
Nội dung

Mệnh đề, tiên đề, và suy luận logic

Phương pháp chứng minh

Nguyên lý sắp thứ tự tốt


Nguyên lý sắp thứ tự tốt (STTT)
Mọi tập số nguyên không âm khác rỗng đều có phần tử nhỏ nhất.
▶ Tập rỗng không có phần tử nhỏ nhất.
▶ Không đúng với tập số âm. Ví dụ tập

{· · · , −3, −2, −1}

▶ Không đúng với mọi tập số hữu tỉ. Ví dụ tập


{ }
1 1 1
, , , ···
1 2 3

32 / 37
Định lý
Mọi số hữu tỉ m/n đều viết được dưới dạng x/y sao cho x, y không
có ước chung nguyên tố.

Chứng minh.
▶ Giả sử ngược lại có m, n không viết được như trên.
▶ Xét C là tập tử số của các phân số như vậy. Vậy C ̸= ∅ vì
m ∈ C.
▶ Theo nguyên lý STTT, có số nhỏ nhất m0 ∈ C.
▶ Theo định nghĩa của tập C, có số n0 để m0 /n0 không viết
được ở dạng trên.

33 / 37
Chứng minh (tiếp).
▶ Có nghĩa rằng m0 , n0 có ước chung nguyên tố p > 0. Vậy

m0 /p m0
=
n0 /p n0
m0 /p
▶ Vì m0 /n0 không thể viết ở dạng trên. Vậy cũng không
n0 /p
viết được ở dạng trên.
▶ Vậy ta có
m0 m0
∈ C và < m0 7
p p

34 / 37
Chứng minh dùng STTT

Để chứng minh P(n) đúng với mọi số nguyên không âm n, ta làm


như sau
▶ Định nghĩa tập phản ví dụ của P :

C ::= {n ∈ N | ¬P(n) đúng }

▶ Giả sử phản chứng rằng C ̸= ∅.


▶ Bởi nguyên lý STTT có phần tử nhỏ nhất c ∈ C.
▶ Đưa ra phản chứng: thường bằng cách chỉ ra P(c) đúng hoặc
chỉ ra một phần tử d ∈ C và d < c.
▶ Kết luận rằng C rỗng, có nghĩa rằng không có phản ví dụ.

35 / 37
Định lý
Mọi số nguyên dương lớn hơn một đều phân tích được thành tích
các số nguyên tố.

Chứng minh bằng STTT.


▶ Giả sử tập phản ví dụ của định lý C ̸= ∅.
▶ Có phần tử n nhỏ nhất thuộc C. Vậy n không nguyên tố. Có
nghĩa rằng
n=a·b với a, b > 1
▶ Hơn nữa a, b phải phân tích được thành tích các số nguyên tố.
Tại sao?

a = p1 · · · pk và b = q1 · · · qm

▶ Vậy n = p1 · · · pk · q1 · · · qm . 7

36 / 37
Định lý
Mọi số nguyên dương đều thú vị.

Chứng minh.
▶ Xét S là tập các số nguyên dương không thú vị.
▶ Nếu S khác rỗng, S chứa phần tử nhỏ nhất n.
▶ Nhưng là phần tử nhỏ nhất của một tập phải là một tính chất
thú vị.
▶ Vậy n không thuộc S. 7

37 / 37
Quy nạp

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 37
Tài liệu tham khảo

▶ Eric Lehman, F Thomson Leighton & Albert R Meyer,


Mathematics for Computer Science, 2013 (Miễn phí)
▶ Kenneth H. Rosen, Toán học rời rạc ứng dụng trong tin học
(Bản dịch Tiếng Việt)

2 / 37
Nội dung

Nguyên lý quy nạp

Quy nạp mạnh


Nguyên lý quy nạp
880
81
777879
82
3 84

73747576
88
87 8685

72
71
70
69
68
67
666564
63661
260
59
58
5354 557
556
505152
49
48
47
46
45
4443 2
4 4140
9 3 3387
35
34 36
Xét vị từ P(n) trên N. Nếu 2 3 33133
0 2
2 28 9
2256 7
▶ P(0) đúng, và 24
23
22
22109
▶ với mọi n ∈ N, (P(n) ⇒ P(n + 1)) 1 8
1 1716
cũng đúng, 151143
2
110
11
thì P(n) đúng với mọi n ∈ N.
789
56
4
3
2
1

4 / 37
Ví dụ

Định lý
Với mọi n ∈ N,

n(n + 1)
1 + 2 + ··· + n =
2

Đặt P(n) là mệnh đề


n
n(n + 1)
i=
2
i=1

5 / 37
Chứng minh.
▶ Bước cơ sở: P(0) đúng.
▶ Bước quy nạp: Ta sẽ chứng minh: với mọi n ≥ 0, mệnh đề

P(n) ⇒ P(n + 1)

đúng.
Thật vậy, giả sử P(n) đúng, với n là một số nguyên bất kỳ. Vì

1 + 2 + · · · + n + (n + 1) = (1 + 2 + · · · + n) + (n + 1)
n(n + 1)
= + (n + 1)
2
(n + 1)(n + 2)
=
2
nên P(n + 1) đúng.
Theo quy nạp ta có P(n) đúng với mọi số n ∈ N.
6 / 37
Ví dụ
Chứng minh rằng
1 1 1 1
+ + + ··· + n < 1
2 4 8 2
với mọi n ≥ 1.

7 / 37
Ví dụ

Định lý
Với mọi n ∈ N, ta có n3 − n chia hết cho 3.
Đặt P(n) là mệnh đề
”n3 − n chia hết cho 3.”

8 / 37
Chứng minh.
▶ Bước cơ sở: P(0) đúng vì 03 − 0 = 0 chia hết cho 3.
▶ Bước quy nạp: Ta sẽ chứng minh rằng, với mọi n ∈ N, mệnh
đề
P(n) ⇒ P(n + 1)
đúng.
Thật vậy, giả sử P(n) đúng, với n là một số nguyên bất kỳ. Vì

(n + 1)3 − (n + 1) = n3 + 3n2 + 3n + 1 − n − 1
= n3 + 3n2 + 2n
= n3 − n + 3n2 + 3n
= (n3 − n) + 3(n2 + n)

chia hết cho 3 nên P(n + 1) đúng.


Theo quy nạp ta có P(n) đúng với mọi số n ∈ N.

9 / 37
Ví dụ chứng minh sai

Định lý (Sai)
Mọi con ngựa đều cùng màu.
Đặt P(n) là mệnh đề
”Trong mọi tập gồm n con ngựa, các con ngựa đều
cùng màu.”

10 / 37
Đặt P(n) là mệnh đề
”Trong mọi tập gồm n con ngựa, các con ngựa đều
cùng màu.”

Chứng minh Sai.


▶ Bước cơ sở: P(1) đúng vì chỉ có một con ngựa.
▶ Bước quy nạp: Giả sử P(n) đúng để chứng minh P(n + 1)
đúng.
Xét tập gồm n + 1 con ngựa {h1 , h2 , · · · , hn+1 }
▶ Các con h1 , h2 , . . . , hn có cùng màu (giả thiết quy nạp).
▶ Các con h2 , h3 , . . . , hn+1 có cùng màu (giả thiết quy nạp).

Vậy
màu(h1 ) = màu(h2 , . . . , hn ) = màu(hn+1 ).
Vậy các con ngựa {h1 , h2 , · · · , hn+1 } đều cùng màu. Có nghĩa
rằng P(n + 1) đúng.
Theo quy nạp ta có P(n) đúng với mọi số n ∈ N.
11 / 37
Bài tập

1. Chứng minh rằng


n
n(n + 1)(2n + 1)
i2 =
6
i=1

2. Chứng minh rằng 2n > n2 với n ≥ 5.


3. Chứng minh rằng với mọi n ≥ 1,

F(n − 1)F(n + 1) − F(n2 ) = (−1)n

với F(i) là số Fibonacci thứ i.

12 / 37
a proof technique in the preceding examples. But induction
rwise, there are four central squares.) A complica
Vígeneral
more dụ lát gạch tool.
reasoning
ntional architect,
d a new computer Frank
science building. As Gehry, insisted
the project went further that only spec
here were some radical fundraising ideas. One plan was to
dimensions 2n ⇥ 2n : A courtyard meeting these constraints exsists, at least for n = 2:

B
2n

2n
Hình:toLát
For larger values of n, is there a way tile agạch
2n ⇥và2n đặt
courtyard with L-s
Hình: Let’s
Hình: Sânstatue in the center? Gạchtry to prove
tượngthat
Billthis is so.
would be occupied by a statue of a wealthy potential donor.
g these constraints exsists, at least for n = 2:
e special case n = 0, the whole15.
Theorem courtyard
For all n consists
0 thereof a single
exists a tiling of a 2n ⇥ 2n courtyard wi
there are four central square.
squares.) A complication was that the
architect, Frank Gehry, insisted that only special L-shaped tiles

13 / 37
Định lý
Với mọi n, luôn có cách lát gạch một sân 2n × 2n chỉ để lại một ô
trống ở giữa (để đặt tượng Bill).

14 / 37
Chứng minh thử.
Xét P(n) là mệnh đề
”Có cách lát gạch sân 2n × 2n để lại một ô ở giữa.”

▶ Bước cơ sở: P(0) đúng vì chỉ có một ô dành cho Bill.


▶ Bước quy nạp: !

15 / 37
Proof. (successful attempt) The proof is by induction. Let P (n) be the propo
every location of Bill in a 2n ⇥ 2n courtyard, there exists a tiling of the rema

Chứng minh. Base case: P (0) is true because Bill fills the whole courtyard.
Inductive step: Asume that P (n) is true for some n 0; that is, for every loc
Xét P(n) là mệnh đềa 2n ⇥ 2n courtyard, there exists a tiling of the remainder. Divide the 2n+1 ⇥ 2
into four quadrants, each 2n ⇥ 2n . One quadrant contains Bill (B in the dia
”Với mỗi vị Place
trí đặt tượng Bill
a temporary Bill(Xtrong sân 2nin×each
in the diagram) 2n of
, ta
theđều
three central squares
this quadrant:
có cách lát gạch kín sân.”

B
▶ Bước cơ sở: P(0) đúng vì chỉ có 2n

một ô dành cho Bill. X


X X
▶ Bước quy nạp: Giả sử P(n) đúng,
2n
ta chứng minh P(n + 1) đúng.
2n 2n
Theo quy nạp ta có P(n) đúng với mọi số n ∈ N.

16 / 37
“mcs-ftl”
“mcs-ftl” —
— 2010/9/8
2010/9/8 —
— 0:40
0:40 —
— page
page 59
59 —
— #65
#65
15-Puzzle

3.3.
3.3.Invariants
Invariants 59
59

22 33 44 55 2 3 4 55

66 77 88 99 6 7 8 99

:: 21
21 22
22 23
23 : 21 22

24
24 26
26 25
25 24
24 26
26 25
25 23
23

(a)
(a) (b)
(b)

Figure3.5
Chuyển
Figure 3.5 The
hợp The15-puzzle
lệ: di15-puzzle
chuyển in its
in its starting
một starting configuration
số sang (a)cạnh
ô trống(a)
configuration and
and after
nó.the
after the 12-block
12-block
isismoved
movedinto
intothe
thehole
holebelow
below(b).
(b).

22 33 44 55

66 77 88 99 17 / 37
6 7 8 9 6 7 8 9
15-Puzzle
: 21 22 23 : 21 22

24 — 26
“mcs-ftl” — 2010/9/8 — 0:40 25 — #65
page 59 24 26 25 23

(a) (b)

Có thể chuyển từ
3.3. Invariants Figure 3.5 The 15-puzzle in its starting configuration
59 (a) and after the 12-block
is moved into the hole below (b).

2 3 4 5 2 23 34 45 5

6 7 8 9 6 67 78 89 9
sang
: 21 22 23 : 21
: 22
21 22 23

24 26 25 24 26
24 25
25 23
26

(a) (b)
Figure 3.6 The desired final configuration for the 15-puzzle. Can it be achieved
không? Figure 3.5 The 15-puzzle in its starting configuration (a) and after the 12-block
by only moving one block at a time into an adjacent hole?
is moved into the hole below (b).

get all 15 blocks into their natural order. A picture of the 15-puzzle is shown in
Figure2 3.5 along
3 4 the5 configuration after the 12-block is moved into the hole
with
below. The desired final configuration is shown in Figure 3.6.
The6 15-puzzle
7 became
8 9 very popular in North America and Europe and is still
sold in game and puzzle shops today. Prizes were offered for its solution, but
it is doubtful
: 21 that22
they were
23 ever awarded, since it is impossible to get from the
configuration in Figure 3.5(a) to the configuration in Figure 3.6 by only moving
18 / 37
one block at a time into an adjacent hole. The proof of this fact is a little tricky so
8-Puzzle
“mcs-ftl” — 2010/9/8 — 0:40 — page 60 — #66

Chapter 3 Induction

A B C A B C A B C

D E F D E F D F

H G H G H E G

(a) (b) (c)

Figure 3.7 The 8-Puzzle in its initial configuration (a) and after one (b) and
two (c) possible moves.

3.3.4 The 8-Puzzle


In the 8-Puzzle, there are 8 lettered tiles (A–H) and a blank square arranged in a
3 ⇥ 3 grid. Any lettered tile adjacent to the blank square can be slid into the blank.
19 / 37
8-Puzzle

“mcs-ftl” — 2010/9/8 — 0:40 — page 60 — #66


“mcs-ftl” — 2010/9/8 — 0:40 — page 61 — #67

Bài tập
60 Chapter 3 Induction
Liệu có thể tìm 3.3.
được một dãy chuyển hợp lệ để chuyển từ
Invariants

A B C A B A C B CA B C

D E F sang
D E D F E FD F

H G H G G H H E G

(a) (b) (c)


Figure 3.8 The desired final configuration of the 8-puzzle.
Figure 3.7 The 8-Puzzle in its initial configuration (a) and after one (b) and
two (c) possible moves.
2 3 4
3.3.4 The 8-Puzzle
5 6 7
In the 8-Puzzle, there are 8 lettered tiles (A–H) and a blank square arranged in20a/ 37
Định lý
Không tồn tại dãy chuyển cho bài toán trên.

21 / 37
D E F
Chuyển hàng
G H

Thứ tự tựFigure
nhiên3.8củaThe
cácdesired
chữ trên ô:
final configuration of the 8-puzzle.

2 3 4

5 6 7

8 9 :

problem:
Bổ đề
Lemma 3.3.4. A row move does not change the order of the tiles.
Mỗi lần chuyển hàng không làm thay đổi thứ tự các chữ.
Proof. A row move moves a tile from cell i to cell i C 1 or vice versa. This tile
does not change its order with respect to any other tile. Since no other tile moves,
there is no change in the order of any of the other pairs of tiles. ⌅

Let’s turn to column moves. This is the more interesting case, since here the 22 / 37
Chuyển cột
“mcs-ftl” — 2010/9/8 — 0:40 — page 62 — #68

Bổ đề
Chapter 3 Induction
Mỗi lần chuyển theo cột làm thay đổi thứ tự của đúng hai cặp chữ.

A B C A B C

D F D F G

H E G H E

(a) (b)

Figure 3.9 An example of a column move in which the G-tile is moved into the
adjacent hole above. In this case, G changes order with E and H .

23 / 37
.E; G/. H E G H E

Cặp ngược (a) (b)


A B C
Figure 3.9 An example of a column move in which the G-tile is
— 2010/9/8 — 0:40 — page 63 — #69
adjacent hole above. In this case, G changes order with E and H .
F D G
Định nghĩa Definition 3.3.6. A pair of letters L1 and L2 is an inversion if L1
E H
the alphabet, but L1 appears
63 after L2 in the puzzle order.
Cặp chữ L1 và L2 gọi là ngược nếu L1 đứng trước L2 trong bảng
chữ cái nhưng L1 lại đứng For sauexample,
L2 trong in theô puzzle
chữ. below, there are three inversions: .D
inversions in theThere
end state:
is exactly one inversion .G; H / in the start state:
.E; G/.

A B C A B C A B C

D E F D E F F D G

G H H G E H

Thereofisinversions.
ut the effects of row and column moves in terms exactly one inversion .G; H / in the start state:

During a move, the number of inversions can only increase by 2,


or remain the same. A B C

ma 3.3.4, a row move does not change the order of the tiles, and so D E F
24 / 37
Bổ đề
Mỗi bước di chuyển, số cặp ngược chỉ có thể tăng 2, hoặc giảm 2,
hoặc giữ nguyên.

Chứng minh.
Chuyển hàng: không đổi vì không làm thay đổi thứ tự các chữ

Chuyển cột: sẽ làm thay đổi thứ tự đúng 2 cặp chữ.


▶ Nếu cả hai cặp này không ngược: số cặp ngược tăng 2.
▶ Nếu cả hai cặp này ngược: số cặp ngược giảm 2.
▶ Nếu trong hay cặp này chỉ có một cặp ngược: số cặp ngược
giữ nguyên.

25 / 37
Hệ quả
Trong mọi bước di chuyển, tính chẵn lẻ của số cặp ngược là không
đổi.

26 / 37
“mcs-ftl” — 2010/9/8 — 0:40 — page 60 — #66

Bổ đề60 Chapter 3 Induction


Số cặp ngược trong trong mọi cấu hình đạt được từ

A B C A B C A

D E F D E F D

H G H G H

(a) (b)

luôn là lẻ. Figure 3.7 The 8-Puzzle in its initial configuration (a) and
two (c) possible moves.

3.3.4 The 8-Puzzle


In the 8-Puzzle, there are 8 lettered tiles (A–H) and a blank squ
27 / 37
“mcs-ftl” — 2010/9/8 — 0:40 — page 60 — #66

Chứng60 minh bằng Chapter


quy nạp.3 Induction
Đặt P(n) là mệnh đề : “ Số cặp ngược trong cấu hình đạt được từ

A B C A B C A

D E F D E F D

H G H G H

(a) (b)

sau n bước chuyển luôn


Figurelà3.7
lẻ” The 8-Puzzle in its initial configuration (a) and
two (c) possible moves.
▶ Bước cơ sở: P(0) đúng. Tại sao?
▶ Bước quy nạp: Giả sử P(n) đúng, do hệ quả trước về tính
3.3.4 The 8-Puzzle
chẵn lẻ không đổi của số cặp ngược. Ta được P(n + 1) đúng.
In the 8-Puzzle, there are 8 lettered tiles (A–H) and a blank squ
3 ⇥ 3 grid. Any lettered tile adjacent to the blank square can be s
For example, a sequence of two moves is illustrated in Figure
28 / 373.7
“mcs-ftl” — 2010/9/8 — 0:40 — page 60 — #66
“mcs-ftl” — 2010/9/8 — 0:40 — page 61 — #67

Định lý
60 Chapter 3 Induction
Không tồn tại dãy chuyển hợp lệ để chuyển từ
3.3. Invariants

A B C A B A C B CA B C

D E F sang
D E D F E FD F

H G H G G H H E G

(a) (b) (c)


Figure 3.8 The desired final configuration of the 8-puzzle.
Figure 3.7 The 8-Puzzle in its initial configuration (a) and after one (b) and
two (c) possible moves.
2 3 4
3.3.4 The 8-Puzzle
5 6 7
In the 8-Puzzle, there are 8 lettered tiles (A–H) and a blank square arranged in a
3 ⇥ 3 grid. Any lettered tile adjacent to the blank square can be slid into the blank.
8 9 : 29 / 37
Nội dung

Nguyên lý quy nạp

Quy nạp mạnh


Bài tập
Hãy dùng quy nạp để chứng minh rằng mọi số nguyên dương đều
phân tích được thành tích của các số nguyên tố.

31 / 37
Nguyên lý quy nạp mạnh

Xét vị từ P(n) trên N. Nếu


▶ P(0) đúng, và
▶ với mọi n ∈ N, (P(0) ∧ P(1) ∧ · · · ∧ P(n)) ⇒ P(n + 1),
thì P(n) đúng với mọi n ∈ N.

32 / 37
Ví dụ
Ở nước Quy nạp, họ dùng đơn vị tiền Mạnh. Họ chỉ có hai loại
tiền 3M (Mạnh) và 5M. Dù họ có vấn đề nhỏ với việc đổi tiền 4M
hoặc 7M, nhưng họ nhận thấy rằng họ có thể đổi mọi số tiền ít
nhất 8M. Hãy giải thích cho họ xem tại sao điều này đúng.

33 / 37
Unstacking Game

▶ Có một chồng hộp. Bạn sẽ thực hiện một dãy bước chuyển.
▶ Mỗi bước chuyển bạn chia một hộp kích thước (a + b) thành
hai chồng khác rỗng kích thước a và b. Và bạn được ab điểm
cho bước chuyển này.
▶ Trò chơi kết thúc khi mỗi chồng hộp chỉ còn một hộp.
▶ Điểm của bạn là tổng điểm bạn đạt được ở mỗi bước.
▶ Hãy tìm một chiến lược chơi để tối đa hoá điểm của bạn?

34 / 37
Một chiến lược kiểu “chia đôi” cho trò chơi với n = 10 đĩa

Điểm
10
5 5 25
5 3 2 6
3 3 2 2 6
2 3 2 2 1 2
1 3 2 2 1 1 1
1 2 2 2 1 1 1 2
1 1 2 2 1 1 1 1 1
1 1 1 2 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
45

35 / 37
Định lý
Mọi chiến lược của trò chơi gồm chồng n hộp đều cho cùng điểm

n(n − 1)
S(n) = .
2

36 / 37
Chứng minh.
Ta gọi P(n) là mệnh đề S(n) = n(n − 1)/2.

Bước cơ sở: P(0) đúng vì S(0) = 0.

Bước quy nạp: Giả sử P(0) ∧ · · · ∧ P(n) đúng để chứng minh


P(n + 1).

Xét trò chơi với n + 1 đĩa. Ta chia n + 1 đĩa này tùy ý thành hai
phần không rỗng a, b thỏa mãn a + b = n + 1. Theo giả thiết quy
nạp, ta được

a(a − 1) b(b − 1)
S(a + b) = S(a) + S(b) + ab = + + ab
2 2
a2 − a + b2 − b + 2ab (a + b)2 − (a + b)
= =
2 2
(a + b)(a + b − 1) (n + 1)n
= = 3
2 2
37 / 37
Đồ thị

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 57
Tài liệu tham khảo

▶ Norman L. Biggs, Discrete Mathematics, Oxford University


Press, 2002.

2 / 57
3 / 57
Nội dung

Đồ thị và biểu diễn

Một số đồ thị đặc biệt

Đẳng cấu

Bậc

Đường đi và chu trình


Định nghĩa
Một đồ thị G là một cặp có thứ tự G = (V, E), ở đây V là một
tập, còn E là tập với các phần tử là các tập con hai phần tử của V.
Các phần tử của V được gọi là các đỉnh, còn các phần tử của E
gọi là các cạnh của G.

Ví dụ
a

Xét đồ thị G = (V, E) trong đó z b

V = {a, b, c, d, z}
E = {{a, b}, {a, d}, {b, z}, {c, d}, {d, z}}.

d c

5 / 57
Định nghĩa
▶ Hai đỉnh x và y gọi là kề nhau (hay hàng xóm) nếu {x, y} là
một cạnh của đồ thị.
▶ Ta biểu diễn đồ thị G = (V, E) bởi danh sách kề, trong đó
mỗi đỉnh v giữ một danh sách các đỉnh kề với v.

Ví dụ a

z b
a b c d z
b a d a b
d z c d
z

d c

6 / 57
Bài tập
Có ba ngôi nhà A, B, C, mỗi ngôi nhà đều kết nối với cả ba nhà
cung cấp ga, nước, và điện: G, W, E.
1. Hãy viết danh sách kề cho đồ thị biểu diễn bài toán này và
vẽ nó.
2. Liệu bạn có thể vẽ đồ thị này trên mặt phẳng để không có
cạnh cắt nhau không?

7 / 57
Ví dụ
▶ GS Mc Brain và vợ là bà April tới một bữa tiệc ở đó có 4 đôi
vợ chồng khác.
▶ Có một vài cặp bắt tay nhau nhưng không ai bắt tay với vợ
hoặc chồng mình.
▶ GS hỏi mọi người khác xem họ bắt tay bao nhiêu người và
ông ấy nhận được 9 con số khác nhau.
▶ Hỏi có bao nhiêu người đã bắt tay April?

8 / 57
Nội dung

Đồ thị và biểu diễn

Một số đồ thị đặc biệt

Đẳng cấu

Bậc

Đường đi và chu trình


Đồ thị đầy đủ

10.2 Graph Terminology and Special Types of Grap


Định nghĩa
Đồ thị đầy đủ5 gồm
EXAMPLE n đỉnh,
Complete Graphský Ahiệu là Kgraph
complete n là on
đồn thị có đúng
vertices, denotedmột
by Kn , is a simple
that contains exactly one edge between each pair of distinct vertices. The graphs K
cạnh nối mỗi cặpn =đỉnh
1, 2, 3,phân
4, 5, 6, biệt.
are displayed in Figure 3. A simple graph for which there is at le
pair of distinct vertex not connected by an edge is called noncomplete.

K1 K2 K3 K4 K5 K6

FIGURE 3 The Graphs Kn for 1 ≤ n ≤ 6.

EXAMPLE 6 Cycles A cycle Cn , n ≥ 3, consists of n vertices v1 , v2 , . . . , vn and edges {


{v2 , v3 }, . . . , {vn−1 , vn }, and {vn , v1 }. The cycles C3 , C4 , C5 , and C6 are displa
Figure 4.

10 / 57
Câu hỏi
Đồ thị Kn có bao nhiêu cạnh?

11 / 57
Đồ thị vòng
K3 K4 K5
Định nghĩa
he Graphs n forC1n ,≤
Đồ thịKvòng vớin n≤≥6.3 là một đồ thị có n đỉnh v1 , v2 , . . . , vn và
các cạnh
LE 6 Cycles A cycle Cn , n ≥ 3, consists of n vertices v1 , v2 , . . .
{v , v }, {v , v }, · · · , {v , vn }, và {vn , v1 }
{v2 , v3 }, . . .1, {v2n−1 , 2vn },3 and {vnn−1
, v1 }. The cycles C3 , C4 , C5 , a
Figure 4.

C3 C4 C5 C6

FIGURE 4 The Cycles C3 , C4 , C5 , and C6 .

12 / 57
Câu hỏi
Đồ thị Cn có bao nhiêu cạnh?

13 / 57
Đồ thị bánh xe
C3 C4 C5 C6

FIGURE 4 The Cycles C3 , C4 , C5 , and C6 .


Định nghĩa
MPLE Khi thêm mộtWe
7 Wheels đỉnhobtain
vào vòng Cn W
a wheel ≥ 3 we
vớin nwhen và nối
addđỉnh này với mỗi
an additional vertex to
đỉnhand
trong C bằng một cạnh mới ta sẽ nhận được đồ thị bánh xe
connect this new vertex to each of the n vertices in Cn , by new edge
n
Wn . W5 , and W6 are displayed in Figure 5.

W3 W4 W5 W6

FIGURE 5 The Wheels W3 , W4 , W5 , and W6 .

MPLE 8 n-Cubes An n-dimensional hypercube, or n-cube, denoted by Qn , is a


representing the 2n bit strings of length n. Two vertices are adjacent14 if
/ 57an
Câu hỏi
Đồ thị Wn có bao nhiêu cạnh?

15 / 57
Các khối n chiều

Định nghĩa
Các khối n chiều, ký hiệu Qn , là các đồ thị có 2n đỉnh, mỗi đỉnh
được biểu diễn bằng xâu nhị phân độ dài n. Hai đỉnh liền kề nếu và
56 chỉ nếu các xâu nhị phân biểu diễn chúng khác nhau đúng một bit.
10 / Graphs

110 111

10 11 100 101

010 011
0 1

00 01 000 001

Q1 Q2 Q3

FIGURE 6 The n-cube Qn , n = 1, 2, 3.

Bipartite Graphs
16 / 57
Câu hỏi
Đồ thị Qn có bao nhiêu cạnh?

17 / 57
Đồ thị hai phần
EXAMPLE 11 Are the graphs G and
Định nghĩa
Một đồ thị được gọi là hai phần nếu tập đỉnh V có thể phân hoạch
thành hai tập V1 và V2 sao cho mỗi cạnh của đồ thị nối một đỉnh
của V1 tới một đỉnh của V2 .

V1 V2
v1 v2
v3 v4
v5 v6

FIGURE 7 Showing That C6 Is


Bipartite. 18 / 57
Câu hỏi8 bipartite?
ed in Figure
Đồ thị nào dưới đây là đồ thị hai phần?

a b a b

g c
f c
f

e d e d

G H

FIGURE 8 The Undirected Graphs G and H .

19 / 57
Câu hỏi
Đồ thị C5 và C6 có phải là những đồ thị hai phần?

20 / 57
Đồ thị hai phần đầy đủ

Định nghĩa
Đồ thị Bipartite
Complete hai phần đầy đủ Km,n
Graphs là đồ thị bipartite
A complete có tập đỉnh đượcKphân
graph m,n is a graph tha
hoạch thành
set partitioned haitwo
into tập subsets
con tương
of mứngandcónmvertices,
đỉnh và respectively
n đỉnh và cówith
mộtan edg
cạnhifnối
vertices andhai đỉnh
only nếuvertex
if one có một đỉnh
is in the thuộc tập này
first subset andvàthemột đỉnh
other vertex is in the
The thuộc tập bipartite
complete kia. graphs K2,3 , K3,3 , K3,5 , and K2,6 are displayed in Figur

K2,3 K3,3

21 / 57
The complete bipartite graphs K2,3 , K3,3 , K3,5 , and K2,6 are displayed in Figure 9.

K2,3 K3,3

K3,5 K2,6

FIGURE 9 Some Complete Bipartite Graphs.

Bipartite Graphs and Matchings


Bipartite graphs can be used to model many types of applications that involve matching the
elements of one set to elements of another, as Example 14 illustrates.
MPLE 14 Job Assignments Suppose that there are m employees in a group and n different jobs that
need to be done, where m ≥ n. Each employee is trained to do one or more of these n jobs. We
would like to assign an employee to each job. To help with this task, we can use a graph to model
employee capabilities. We represent each employee by a vertex and each job by a vertex. For
each employee, we include an edge from that employee to all jobs that the employee has 22 /been
57
Câu hỏi
Đồ thị Km,n có bao nhiêu cạnh?

23 / 57
Bài tập
Hãy xây dựng một đồ thị với 5 đỉnh và 6 cạnh mà không chứa C3
(tam giác) nào.

24 / 57
Nội dung

Đồ thị và biểu diễn

Một số đồ thị đặc biệt

Đẳng cấu

Bậc

Đường đi và chu trình


Định nghĩa
Hai đồ thị G1 và G2 được gọi là đẳng cấu nếu có một song ánh α
từ tập đỉnh của G1 đến tập đỉnh của G2 sao cho {α(x), α(y)} là
một cạnh của G1 nếu và chỉ nếu {x, y} là một cạnh của G2 .

Song ánh α được gọi là một đẳng cấu.

26 / 57
Ví dụ
Hai đồ thị sau đây đẳng cấu với nhau và đẳng cấu α định nghĩa
bởi:
α(a) = t, α(b) = v, α(c) = w, α(d) = u.

a b t

d c v u

27 / 57
Ví dụ
Hai đồ thị sau có đẳng cấu không?
a a

e b e b

d c d c

28 / 57
Bài tập
Hãy chứng minh rằng hai đồ thị sau không đẳng cấu.

29 / 57
Nội dung

Đồ thị và biểu diễn

Một số đồ thị đặc biệt

Đẳng cấu

Bậc

Đường đi và chu trình


Định nghĩa
Bậc của một đỉnh v trong đồ thị G = (V, E) là số cạnh của G
chứa v. Ta ký hiệu deg(v) là bậc của đỉnh v. Có nghĩa rằng

deg(v) = |Dv | với Dv = {e ∈ E | v ∈ e }.

Ví dụ a

z b đỉnh deg
a 2
b 2
c 1
d 3
z 2
d c

31 / 57
Định lý
Tổng các bậc deg(v), lấy trên mọi đỉnh v của đồ thị G = (V, E),
bằng hai lần số cạnh:

deg(v) = 2|E|.
v∈V

Ví dụ a

đỉnh thuộc vào cạnh


z b
a {a, b}, {a, d}
b {a, b}, {b, z}
c {c, d}
d {a, d}, {c, d}, {d, z}
z {b, z}, {d, z}
d c

32 / 57
Một đỉnh của đồ thị G là lẻ nếu bậc của nó là lẻ, và là chẵn nếu
bậc của nó là chẵn.
Hệ quả
Số đỉnh lẻ của đồ thị là số chẵn.

Chứng minh.
∑ ∑
deg(v) + deg(v) = 2|E|
v∈Vlẻ v∈Vchẵn

33 / 57
Bậc và đẳng cấu

▶ Nếu α : V1 → V2 là một đẳng cấu giữa G1 và G2 và


α(v) = w, vậy
deg(v) = deg(w).
Tại sao?
▶ Nếu trong G1 có đỉnh x với deg(x) = δ0 và trong G2 không có
đỉnh nào có bậc δ0 , vậy thì G1 và G2 không đẳng cấu.

34 / 57
Bài tập
Các dãy số sau đây có thể là các bậc của mọi đỉnh của đồ thị nào
đó không? Nếu có hãy vẽ một đồ thị như vậy.

1. 2, 2, 2, 3 3. 2, 2, 4, 4, 4
2. 1, 2, 2, 3, 4 4. 1, 2, 3, 4.

35 / 57
Bài tập
▶ Xét đồ thị G = (V, E), phần bù G của G là đồ thị có cùng
tập đỉnh là V và tập cạnh là tất cả các cặp đỉnh phân biệt
không kề nhau trong G.
▶ Giả sử G có n đỉnh và các bậc của nó là

d1 , d2 , . . . , dn .

Các bậc của G là gì?

36 / 57
Đồ thị chính quy

▶ Đồ thị mà trong đó mọi đỉnh đều có cùng bậc r được gọi là


chính quy. Khi đó r|V| = 2|E|.
▶ Đồ thị Kn là đồ thị chính quy bậc n − 1.
▶ Đồ thị vòng Cn là đồ thị chính quy bậc 2.
▶ Đồ thị Qn là đồ thị chính quy bậc mấy ?

37 / 57
a 0

e b 4 1

d c 3 2

Hình: Đồ thị đầy đủ K5 và đồ thị chu trình C5

38 / 57
Bài tập
Liệt kê các đồ thị chính quy bậc 4 (đôi một không đẳng cấu) với
bảy đỉnh.

39 / 57
Bài tập
Chứng minh rằng trong mọi đồ thị với ít nhất hai đỉnh luôn có hai
đỉnh cùng bậc.

40 / 57
Nội dung

Đồ thị và biểu diễn

Một số đồ thị đặc biệt

Đẳng cấu

Bậc

Đường đi và chu trình


Định nghĩa
Một hành trình trong đồ thị G là một dãy đỉnh

v1 , v2 , . . . , vk ,

thỏa mãn vi và vi+1 kề nhau (với 1 ≤ i ≤ k − 1).

e b

d c

42 / 57
Định nghĩa
Hành trình mà trong đó mọi đỉnh đều khác nhau được gọi là
đường đi.

e b

d c

43 / 57
TABLE 1 The Number T
Đồ thị cộng tác of Mathematicians
with a Given Erdős
o
B
Number (as of early e
2006).
Erdős Number
Number of People

0 1
1 504
2 6,593
3 33,605
4 83,642
5 87,760
▶ Đỉnh: các tác giả 6 40,014
▶ Đỉnh a nối b nếu hai tác giả a và b 7 11,591
8 3,146
viết chung bài báo. 9 819
▶ Số Erdös của nhà toán học m là 10 244
11 68
đường đi ngắn nhất giữa m và Paul 12 23
Erdös. 13 5

game where participants where challenged


named to Kevin Bacon. We can find a num
center of the acting universe.
44 / 57
TABLE 1 The Number TABLE 2 The Number
Đồ thị Hollywood
of Mathematicians of Actors with a Given
with a Given Erdős Bacon Number (as of
Number (as of early early 2011).
2006).
Bacon Number
Erdős Number Number of People
Number of People
0 1
0 1 1 2,367
1 504 2 242,407
2 6,593 3 785,389
▶ Đỉnh: các3 diễn viên
33,605 4 200,602
4 83,642
▶ Diễn viên a nối với diễn viên b nếu 5 14,048
5 87,760 6 1,277
a và b đóng
6 chung40,014
một bộ phim
7 114
▶ Số Bacon7 của diễn viên c là đường
11,591 8 16
đi ngắn nhất giữa 3,146
8 c và Kevin
Bacon. 9 819
10 244
11 68
12 23
13 5

45 / 57
Định nghĩa
Ta ký hiệu x ∼ y nếu hai đỉnh x và y trong G có thể nối với nhau
bằng một đường đi. Có nghĩa rằng, tồn tại một đường đi

v1 , v2 , · · · , vk

trong G với x = v1 và y = vk .

e b

d c

46 / 57
Dễ thấy, quan hệ ∼ là quan hệ tương đương trên tập đỉnh V của G.
Vậy thì V được phân hoạch thành các lớp tương đương rời nhau.

Hai đỉnh nằm trong cùng một lớp nếu giữa chúng có đường đi, và
trong hai lớp khác nhau nếu không có đường đi.
Ví dụ
a

Với đồ thị bên, ta có phân hoạch: f b

V = Vđỏ ∪ Vxanh e c

47 / 57
Định nghĩa
Giả sử G = (V, E) là một đồ thị và phân hoạch của V tương ứng
với quan hệ tương đương ∼ là

V = V1 ∪ V2 ∪ · · · ∪ Vr .

Ký hiệu Ei (với 1 ≤ i ≤ r) là các tập con của E bao gồm các cạnh
với đầu mút nằm trong Vi . Vậy thì các đồ thị Gi = (Vi , Ei ) được
gọi là các thành phần liên thông của G.

Ta nói G liên thông nếu nó chỉ có một thành phần liên thông.

48 / 57
Ví dụ
Đồ thị dưới đây không liên thông. Nó có hai thành phần liên thông.

f b

e c

49 / 57
Bài tập
Tìm số thành phần liên thông của đồ thị với danh sách kề là
a b c d e f g h i j
f c b h c a b d a a
i g e g i c f f
j g j e

50 / 57
Bài tập
Đồ thị mô tả bữa tiệc của bà April có bao nhiêu thành phần liên
thông?

51 / 57
Định nghĩa
Một hành trình
v1 , v2 , · · · , vr+1
trong đó mọi đỉnh đều phân biệt ngoại trừ v1 = vr+1 được gọi là
một chu trình.
Vì nó có r đỉnh phân biệt và r cạnh nên ta cũng thường gọi nó là
r-chu trình, hay chu trình độ dài r.

e b

d c

52 / 57
Bài tập
▶ Hình dưới đây thể hiện các địa điểm thú vị trên đảo Wanda và
đường đi giữa chúng.
▶ Hãy tìm đường đi trên đảo để thăm mỗi địa điểm đúng một
lần và trở về vị trí xuất phát.
p q

r t

53 / 57
Bài tập
Hãy tìm cách để đi hết các con đường, mỗi đường đúng một lần.
Địa điểm bắt đầu và kết thúc có thể khác nhau.

p q

r t

54 / 57
Định nghĩa
▶ Chu trình chứa mọi đỉnh của đồ thị gọi là chu trình
Hamilton.
▶ Hành trình dùng mỗi cạnh đúng một lần gọi là hành trình
Euler.

55 / 57
Bài tập
Tìm chu trình Hamilton của đồ thị tạo bởi các đỉnh và cạnh của 10.7 P
khối lập phương.

K4 Drawn FIGURE 4 The FIGURE 5


sings. Graph Q3 . Represent 56 / 57
Bài tập
Năm tới, Dr Chunner và Dr Dodder định đi thăm đảo Mianda. Các
địa điểm hấp dẫn và đường đi nối giữa chúng được biểu diễn bởi
đồ thị có danh sách kề là
0 1 2 3 4 5 6 7 8
1 0 1 0 3 0 1 0 1
3 2 3 2 5 4 5 2 3
5 6 7 4 6 7 6 5
7 8 8 8 8 7

▶ Liệu họ có thể tìm đường đi trên đảo để thăm mỗi địa điểm
đúng một lần và trở về vị trí xuất phát?
▶ Liệu họ có thể tìm cách để đi hết các con đường, mỗi đường
đúng một lần; địa điểm bắt đầu và kết thúc có thể khác nhau?

57 / 57
Cây

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 46
Tài liệu tham khảo

▶ Norman L. Biggs, Discrete Mathematics, Oxford University


Press, 2002.
▶ L. Lovász, J. Pelikán, K. Vesztergombi, Discrete Mathematics:
Elementary and Beyond, Springer-Verlag New York, 2003.
▶ K. H. Rosen, Toán học rời rạc ứng dụng trong tin học.

2 / 46
Nội dung

Một số tính chất của cây

Đếm cây gán nhãn


Định nghĩa
Ta nói rằng đồ thị T là một cây nếu nó có hai tính chất:
(T1) T liên thông;
(T2) T không có chu trình.

Ví dụ

4 / 46
Các cây với 1, 2 hoặc 3 đỉnh

5 / 46
Có hai cây với 4 đỉnh

6 / 46
Có ba cây với 5 đỉnh

7 / 46
Bài tập
Ta biết rằng có sáu cây (đôi một không đẳng cấu) với sáu đỉnh;
hãy vẽ chúng.

8 / 46
Mệnh đề
Nếu T = (V, E) là một cây với ít nhất hai đỉnh, thì với mỗi cặp
đỉnh x, y có duy nhất một đường đi từ x tới y.

Chứng minh.
Vì T liên thông nên có đường đi từ x tới y. Nếu có đường đi khác
từ x tới y, vậy thì ta có chu trình

y
x

Mâu thuẫn với định nghĩa của cây.

9 / 46
Bài tập
Hãy chứng minh rằng tính chất:
(T3) với mỗi cặp đỉnh x, y có duy nhất một đường đi từ x tới y;
kéo theo cả hai tính chất:
(T1) T liên thông; và
(T2) T không có chu trình.

10 / 46
Mệnh đề
Nếu T = (V, E) là một cây với ít nhất hai đỉnh, thì đồ thị thu
được từ T bằng cách xóa đi một cạnh bất kỳ sẽ có hai thành phần
liên thông, mỗi thành phần là một cây.

11 / 46
Mệnh đề
Nếu T = (V, E) là một cây thì |E| = |V| − 1.

5 6 7 8

2 3 4

12 / 46
Chứng minh bằng quy nạp mạnh
Đặt P(n) = “Cây với n đỉnh có n − 1 cạnh”
Bước cơ sở: P(1) đúng. Tại sao?
Bước quy nạp: Giả sử P(1), · · · , P(k) đều đúng để chứng minh
P(k + 1).
▶ Xét T là cây với |V| = k + 1 và xét uv là một cạnh của T.
▶ Xóa cạnh uv khỏi T ta được hai cây T1 = (V1 , E1 ) và
T2 = (V2 , E2 ), ta có

|V1 | + |V2 | = |V|, |E1 | + |E2 | = |E| − 1.

▶ Áp dụng giả thiết quy nạp ta được

|E| = |E1 | + |E2 | + 1


= (|V1 | − 1) + (|V2 | − 1) + 1
= |V| − 1.
13 / 46
Định lý
Nếu T = (V, E) là một cây với ít nhất hai đỉnh, vậy thì:
(T3) với mỗi cặp đỉnh x, y có duy nhất một đường đi từ x tới y;
(T4) đồ thị thu được từ T bằng cách xóa đi một cạnh bất kỳ sẽ có
hai thành phần liên thông, mỗi thành phần là một cây;
(T5) |E| = |V| − 1.

14 / 46
Bài tập
Xét cây T = (V, E) với |V| ≥ 2. Hãy chứng minh rằng T có ít nhất
hai đỉnh bậc 1.

15 / 46
Bài tập
Xét T = (V, E) là cây với |V| ≥ 2. Hãy dùng tính chất
(T5) |E| = |V| − 1;
để chứng minh rằng T có ít nhất hai đỉnh bậc 1.

16 / 46
Bài tập
Ta nói rằng đồ thị F là một rừng nếu nó có tính chất:
(T2) F không có chu trình.
Hãy chứng minh rằng nếu F = (V, E) là một rừng với c thành
phần liên thông thì
|E| = |V| − c.

17 / 46
Định lý
Xét đồ thị T = (V, E). Các khẳng định sau đây là tương đương
nhau:
1. T là cây;
2. T không chứa chu trình và |E| = |V| − 1;
3. T liên thông và |E| = |V| − 1;
4. T là đồ thị liên thông, nhưng nếu xóa đi một cạnh bất kỳ thì
đồ thị thu được là không liên thông;
5. Hai đỉnh khác nhau bất kỳ của T được nối với nhau bởi đúng
một đường;
6. T không chứa chu trình, nhưng nếu ta thêm một cạnh nối hai
đỉnh không kề nhau trong T thì đồ thị nhận được có đúng
một chu trình.

18 / 46
Bài tập
Hãy chứng minh định lý trước.

19 / 46
Nội dung

Một số tính chất của cây

Đếm cây gán nhãn


Câu hỏi
Có bao nhiêu cây với n đỉnh?

21 / 46
Câu hỏi
Hai cây này có trùng nhau?

22 / 46
Cây gán nhãn

▶ Ta cố định các đỉnh của cây, mỗi đỉnh được gán một nhãn.
▶ Hai cây là giống nhau nếu và chỉ nếu chúng có cùng tập cạnh.

23 / 46
Ví dụ
Hoán đổi nhãn 2 và 4 của cây gán nhãn dưới đây cho ta một cây
gán nhãn khác.

24 / 46
Bài tập
Tìm số cây gán nhãn với 2, 3, 4, và 5 đỉnh?

25 / 46
Định lý (Cayley)
Số cây gán nhãn với n đỉnh là nn−2 .
Trong phần còn lại của mục này, ta sẽ đi chứng minh định lý
Cayley.

26 / 46
Lưu trữ cây: dùng ma trận kề

0 0 1 1 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
1 0 0 0 1 0 1 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 1 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1 1 0

27 / 46
Mệnh đề
2 −n)/2
Số lượng cây gán nhãn với n đỉnh phải không nhiều hơn 2(n .
Tại sao?

28 / 46
Lưu trữ cây: dùng danh sách cạnh

7 8 9 6 3 0 2 6 6
9 9 2 2 0 2 4 1 5

29 / 46
Mệnh đề
Số lượng cây gán nhãn với n đỉnh phải ít hơn 22n log2 n .
Tại sao?

30 / 46
Lưu trữ cây: dùng Father code

▶ Cố định một đỉnh làm gốc (ví dụ đỉnh có nhãn nhỏ nhất).
▶ Liệt kê các cạnh giống như lưu trữ dùng danh sách cạnh (theo
hai dòng); tuy nhiên
▶ với mỗi cạnh, đỉnh ở dòng dưới luôn là đỉnh gần gốc hơn (hay
còn gọi là cha của) đỉnh ở dòng trên, và
▶ các đỉnh ở trên được sắp thứ tự.

31 / 46
Father code: Ví dụ

1 2 3 4 5 6 7 8 9
6 0 0 2 6 2 9 9 2
Câu hỏi
Tại sao dòng đầu tiên lại là các
số 1, 2, 3, 4, 5, 6, 7, 8, 9?

32 / 46
Father code

▶ Nếu cây có n đỉnh thì dòng đầu tiên luôn là 1, 2, . . . , n − 1.


▶ Tại sao số 0 không xuất hiện ở dòng đầu tiên?
▶ Vậy ta có thể xóa dòng đầu tiên.
▶ Father code là dòng thứ 2.

33 / 46
Bài tập
Xét các ”mã” sau:
1. (0, 1, 2, 3, 4, 5, 6, 7);
2. (7, 6, 5, 4, 3, 2, 1, 0);
3. (0, 0, 0, 0, 0, 0, 0, 0);
4. (2, 3, 1, 2, 3, 1, 2, 3).
Những mã nào ở trên có thể là ”father codes” của cây?

34 / 46
Mệnh đề
Số lượng cây gán nhãn với n đỉnh phải không nhiều hơn nn−1 .

35 / 46
Lưu trữ cây: dùng Prüfer code mở rộng

Thuật toán tính Prüfer code mở rộng từ cây


8.4 How to St

1. Nếu cây không có cạnh nào thì thuật 7


toán dừng.
2. Tìm đỉnh u có bậc 1 và có nhãn nhỏ nhất 6 3
khác 0.
u 5 2 1
3. Gọi cạnh có đầu mút u là {u, v}. Ghi ra v .
4. Xóa đỉnh u và cạnh {u, v} khỏi cây.
4 0
5. Quay lại bước 1.
FIGURE 8.5. A tree reconstructed from its Prüfer

How does the first row start? Remember that this is th


delete in the first step; by the rule of constructing the Prü
the node with degree 1 with smallest label. Could this node
because then we would have to delete it in the first step,
longer occur, but it does. By the same token, no number
36 / 46 o
Prüfer code mở rộng

1 3 4 5 6 7 8 9 2
6 0 2 6 2 9 9 2 0
Câu hỏi
Tại sao vị trí cuối ở hàng dưới
luôn là 0?

37 / 46
Bổ đề
Hàng đầu tiên của một Prüfer code mở rộng có thể tính được từ
hàng thứ hai.

38 / 46
Ví dụ
Giả sử ta có một Prüfer code mở rộng còn thiếu hàng trên như sau:
x1
2 4 0 3 3 1 0

Đỉnh x1 phải thỏa mãn ba điều kiện:


1. x1 ∈ {0, 1, . . . , 7}. Tại sao?
2. x1 là đỉnh bậc 1, có nhãn nhỏ nhất khác 0.
3. khi xây dựng dãy từ cây, x1 bị xóa khỏi cây ở bước đầu tiên.

Điều kiện 3 chỉ ra rằng x1 sẽ không xuất hiện trong hàng 2. Tại
sao? Từ điều kiện 2, ta được x1 = 5. Tại sao?

39 / 46
Ví dụ
Tiếp tục ví dụ trước, bây giờ ta có:
5 x2
2 4 0 3 3 1 0

Đỉnh x2 phải thỏa mãn ba điều kiện:


1. x2 ∈ {0, 1, . . . , 7}. Tại sao?
2. x2 là đỉnh bậc 1, có nhãn nhỏ nhất khác 0 và 5.
3. khi xây dựng dãy từ cây, x2 bị xóa khỏi cây ở bước thứ hai.

Vậy x2 = 2.

40 / 46
Bài tập
Hãy hoàn thành nốt hàng trên của Prüfer code mở rộng sau
5 2
2 4 0 3 3 1 0

41 / 46
Khẳng định
Mỗi phần tử ở hàng đầu tiên của Prüfer code mở rộng là số
nguyên nhỏ nhất thỏa mãn:
▶ ở hàng đầu tiên, số này không xuất hiện trước nó;
▶ ở hàng thứ hai, số này không xuất hiện ở dưới nó hoặc phía
sau nó.

Ví dụ

1/ 3/ 4/ ?
6 0 2 6/ 2/ 9/ 9/ 2/ 0/

42 / 46
Prüfer code

▶ Ta không cần lưu trữ toàn bộ Prüfer code mở rộng, mà


▶ ta chỉ cần lưu tữ dãy gồm n − 2 phần tử của hàng thứ hai.
▶ Dãy này gọi là Prüfer code của cây.
▶ Vậy thì, Prüfer code là một dãy số độ dài n − 2, với mỗi phần
tử của nó là một số nguyên từ 0 đến n − 1.

43 / 46
Bổ đề
Mọi dãy có độ dài n − 2 gồm các số nguyên giữa 0 và n − 1 đều là
Prüfer code của một cây n đỉnh nào đó.

Ta đã hoàn thành chứng minh định lý sau chưa?


Định lý (Cayley)
Số cây gán nhãn với n đỉnh là nn−2 .

44 / 46
Bài tập (Lập trình)
Viết chương trình nhập vào một dãy là mã Prüfer của một cây và
in ra cây đó. Bạn có thể hiện cây ở dạng danh sách cạnh, hoặc sử
dụng công cụ Graphviz để vẽ tự động.

45 / 46
Cài đặt Prufer Code

1. Version 1
2. Version 2
3. Version 3

46 / 46
Tô màu đỉnh của đồ thị

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 44
Tài liệu tham khảo

▶ Norman L. Biggs, Discrete Mathematics, Oxford University


Press, 2002.

2 / 44
Nội dung

Định nghĩa và ví dụ

Thuật toán tham lam tô màu đỉnh

Đồ thị hai phần

Bài tập
Ví dụ
Trường BK muốn xếp giờ học cho sáu môn học v1 , v2 , v3 , v4 , v5 , v6
biết rằng có một vài sinh viên học các môn :
v1 và v2 , v1 và v4 , v3 và v5 , v2 và v6 ,
v4 và v5 , v5 và v6 , v1 và v6 .

v1

v6 v2

v5 v3

v4

4 / 44
Xếp lịch học

v1

v6 v2

v5 v3

v4

Tiết 1 Tiết 2 Tiết 3 Tiết 4


v1 và v3 v2 và v4 v5 v6

5 / 44
Xếp lịch học

▶ Ta tìm cách phân hoạch tập đỉnh thành 4 phần sao cho không
phần nào chứa cặp đỉnh kề nhau.
▶ Một cách hình thức, đây là một hàm

c : {v1 , v2 , v3 , v4 , v5 , v6 } −→ {1, 2, 3, 4}

gán mỗi đỉnh với một giờ học.


▶ Không mất tổng quát ta dùng các số nguyên dương cho các
màu.

6 / 44
Định nghĩa
Một cách tô màu đỉnh của đồ thị G = (V, E) là một hàm

c : V −→ N

thỏa mãn tính chất : Nếu {x, y} ∈ E thì c(x) ̸= c(y).

v1

v6 v2

v5 v3

v4

7 / 44
Định nghĩa
Sắc số của đồ thị G, ký hiệu là χ(G), là số nguyên k nhỏ nhất
thỏa mãn có một cách tô màu G dùng k màu.
Nói cách khác, χ(G) = k nếu và chỉ nếu có một cách tô màu c từ
V tới tập {1, 2, . . . , k}, và k là số nguyên nhỏ nhất thỏa mãn tính
chất này.

Ví dụ
v1

v6 v2
Tìm sắc số của đồ thị
v5 v3

v4

8 / 44
Tìm số màu

Để chứng minh rằng sắc số của một đồ thị là k thì ta phải:


1. tìm một cách tô màu dùng k màu;
2. chứng minh rằng không có cách tô màu nào dùng ít hơn k
màu.

9 / 44
Bài tập
Tìm sắc số của các đồ thị sau:
(i) đồ thị đầy đủ Kn ;
(ii) đồ thị vòng C2r ;
(iii) đồ thị vòng C2r+1 ;

10 / 44
Bài tập
Tìm sắc số của các đồ thị sau:

11 / 44
Bài tập
Hãy mô tả tất cả các đồ thị G có χ(G) = 1.

12 / 44
Nội dung

Định nghĩa và ví dụ

Thuật toán tham lam tô màu đỉnh

Đồ thị hai phần

Bài tập
Bài toán
Cho đồ thị G. Hãy tìm χ(G).
là bài toán khó. Người ta chưa biết thuật toán “nhanh” nào để
giải nó, và hầu hết mọi người đều tin rằng không có thuật toán
như vậy.

14 / 44
Thuật toán tham lam
1. Sắp thứ tự các đỉnh theo thứ tự nào đó: v1 , v2 , · · · , vn .
2. for i = 1, 2, . . . , n :
3. Gán màu hợp lệ nhỏ nhất cho vi .

15 / 44
Bài tập
Dùng thuật toán tham lam để tô màu đồ thị sau:
v1

v6 v2

v5 v3

v4

16 / 44
Bài tập
Tìm một cách sắp thứ tự các đỉnh để thuật toán tham lam tô màu
đồ thị sau dùng ít màu nhất có thể.

17 / 44
Bài tập
Tìm một cách sắp thứ tự các đỉnh để thuật toán tham lam tô màu
đồ thị sau dùng ít màu nhất có thể.

18 / 44
Mệnh đề
Nếu mọi đỉnh trong G đều có bậc ≤ k, thì thuật toán tham lam
dùng nhiều nhất k + 1 màu.

Thử chứng minh bằng quy nạp theo k


Đặt P(k) = “nếu mọi đỉnh trong G đều có bậc ≤ k thì thuật toán
tham lam dùng nhiều nhất k + 1 màu”
Bước cơ sở : P(0) đúng. Tại sao?
Bước quy nạp : Giả sử P(k) đúng để chứng minh P(k + 1) !!!

19 / 44
Chứng minh bằng quy nạp theo số đỉnh

Đặt P(n) = “Đồ thị G với n đỉnh và bậc mọi đỉnh trong G đều
≤ k thì thuật toán tham lam dùng nhiều nhất k + 1 màu.”
Bước cơ sở : P(1) đúng vì G không có cạnh nào.
Bước quy nạp : Giả sử P(n) đúng để chứng minh P(n + 1).
▶ Xét G là đồ thị bất kỳ với n + 1 đỉnh và có bậc lớn nhất ≤ k.
▶ Sắp xếp các đỉnh theo thứ tự nào đó: v1 , v2 , . . . , vn , vn+1 .
▶ Xóa đỉnh vn+1 khỏi G ta thu được đồ thị G′ .
▶ Đồ thị G′ cũng có bậc lớn nhất ≤ k. Tại sao?
▶ Theo quy nạp, thuật toán tham lam tô màu G′ dùng nhiều
nhất k + 1 màu.

20 / 44
Chứng minh (tiếp)

u1

u2

vn+1 .. vn+1 có ℓ ≤ k hàng xóm


.

uℓ

▶ Thêm đỉnh vn+1 và các cạnh liên quan vào lại G′ để được G.
▶ Đỉnh vn+1 có ≤ k hàng xóm. Tại sao?
▶ Vậy tồn tại một màu hợp lệ trong {1, 2, . . . , k + 1} để tô cho
vn+1 .
▶ Vậy thuật toán tham lam tô màu G dùng không quá k + 1
màu. 3
21 / 44
Bài tập
Một đồ thị có độ rộng k − 1 nếu các đỉnh có nó có thể được sắp
xếp thành dãy
v1 , v2 , · · · , vn
sao cho mỗi đỉnh vi có cạnh nối với nhiều nhất k − 1 đỉnh đứng
trước nó.

Hãy dùng quy nạp để chứng minh rằng mọi đồ thị với độ rộng nhỏ
hơn hoặc bằng k − 1 đều có thể tô bằng k màu.

22 / 44
Mệnh đề
Cho G là đồ thị với mọi đỉnh đều có bậc ≤ k. Nếu G liên thông và
không chính quy, vậy thì χ(G) ≤ k.

Hình: Đồ thị này có độ rộng 2. Tại sao?

23 / 44
Mệnh đề
Cho G là đồ thị với mọi đỉnh đều có bậc ≤ k. Nếu G liên thông và
không chính quy, vậy thì χ(G) ≤ k.

Ý tưởng chứng minh


Ta tìm một cách sắp thứ tự

v1 , v2 , · · · , vn

cho các đỉnh để thuật toán tham lam tô màu cho G dùng không
quá k màu.

24 / 44
Sắp thứ tự các đỉnh
▶ Chọn một đỉnh trong G có bậc ≤ k − 1. Gán nó là vn .
▶ Liệt kê cho các hàng xóm của vn theo thứ tự là:

vn−1 , vn−2 , · · · , vn−r .

▶ Liệt kê các hàng xóm của vn−1 (trừ vn ). Có ≤ k − 1 đỉnh.


▶ Liệt kê các hàng xóm của vn−2 chưa được liệt kê. Có ≤ k − 1
đỉnh.
▶ Và cứ thế đến khi mọi đỉnh của G được liệt kê. (do G liên
thông)

25 / 44
Ví dụ
v5

v4 v6

v2 v1

v3

26 / 44
Khẳng định
Với cách sắp xếp thứ tự đỉnh v1 , v2 , . . . , vn như trên, mỗi đỉnh vi
chỉ nối với nhiều nhất k − 1 đỉnh đứng trước nó.

Có nghĩa rằng đồ thị này có độ rộng k − 1.

27 / 44
Định lý
Nếu G là đồ thị với mọi đỉnh đều có bậc ≤ k, thì
(i) χ(G) ≤ k + 1;
(ii) nếu G liên thông và không chính quy, thì χ(G) ≤ k.

28 / 44
Nội dung

Định nghĩa và ví dụ

Thuật toán tham lam tô màu đỉnh

Đồ thị hai phần

Bài tập
Định nghĩa
Đồ thị G là đồ thị hai phần nếu χ(G) ≤ 2.

Khi đó tập đỉnh V của G


được phân hoạch thành hai
phần

V = Vđỏ ∪ Vxanh

30 / 44
Ví dụ
Đồ thị sau có phải đồ thị hai phần không?

31 / 44
Định lý
G là đồ thị hai phần nếu và chỉ nếu nó không chứa chu trình độ
dài lẻ.

32 / 44
Chứng minh

Nếu G có chu trình độ dài lẻ

Mâu thuẫn với tính chất χ(G) ≤ 2.

33 / 44
Chứng minh (tiếp)
Ngược lại, giả sử G không có chu trình độ dài lẻ. Ta xây dựng một
thứ tự cho các đỉnh của G để thuật toán tham lam tô G bằng hai
màu.
Sắp thứ tự các đỉnh
▶ Chọn một đỉnh bất kỳ gọi là v1 ; ta nói rằng v1 có mức 0.
▶ Liệt kê các hàng xóm của v1 , gọi chúng là v2 , v3 , . . . , vr ; ta
nói rằng các đỉnh này có mức 1.
▶ Liệt kê các hàng xóm của các đỉnh ở mức 1 (trừ v1 ); ta nói
rằng các đỉnh này có mức 2.
▶ Cứ thế tiếp tục, ta liệt kê ở mức ℓ các đỉnh là hàng xóm của
mức ℓ − 1, ngoại trừ những đỉnh đã liệt kê ở mức ℓ − 2.
▶ Khi không còn đỉnh nào được thêm vào, ta đã sắp thứ tự cho
cho các đỉnh trong một thành phần liên thông G0 của G. Ta
tiếp tục như vậy với thành phần liên thông tiếp theo.

34 / 44
Ví dụ
Đồ thị dưới đây có thể tô bằng hai màu: các đỉnh có mức chẵn
được tô màu đỏ, các đỉnh có mức lẻ được tô màu xanh.

1 0

2 1

3 2

2 1

35 / 44
Chứng minh (tiếp)

▶ Các đỉnh mức ℓ chỉ nối với đỉnh mức ℓ − 1 hoặc ℓ + 1.


▶ Các đỉnh mức ℓ không nối với nhau; ngược lại đồ thị sẽ có
chu trình độ dài lẻ.
z

u
7 v
▶ Với cách sắp thứ tự các đỉnh như vậy, thuật toán tô màu sẽ
chỉ dùng hai màu: các đỉnh có mức chẵn được tô màu đỏ, các
đỉnh có mức lẻ được tô màu xanh.

36 / 44
Nội dung

Định nghĩa và ví dụ

Thuật toán tham lam tô màu đỉnh

Đồ thị hai phần

Bài tập
Bài tập
Tìm 3 cách đánh số thứ tự các đỉnh của đồ thị lập phương dưới
đây để thuật toán tham lam dùng 2, 3, và 4 màu.

38 / 44
Bài tập
Chứng minh rằng với mọi đồ thị G ta luôn có cách sắp thứ tự các
đỉnh để thuật toán tham lam tô màu G dùng đúng χ(G) màu.
[Gợi ý: dùng một cách tô màu dùng χ(G) màu để xác định thứ tự
đỉnh cho thuật toán tham lam.]

39 / 44
Bài tập
Có sáu trạm phát sóng radio A, B, C, D, E, F với khoảng cách giữa
các trạm (tính theo dặm) được cho bởi bảng sau

A B C D E F
A - 85 175 100 50 100
B 85 - 125 175 100 130
C 175 125 - 100 200 250
D 100 175 100 - 210 220
E 50 100 200 210 - 100
F 100 130 250 220 100 -

Giả sử những trạm phát ở cách nhau ít hơn 150 dặm phải phát ở
tần số khác nhau. Hãy tìm cách gán tần số cho mỗi trạm để số tần
số là ít nhất.

40 / 44
Bài tập
Viện CNTT&TT lên lịch bảo vệ khóa luận cho sinh viên K56. Các
giáo sư A, B, . . . , J sẽ là thành viên của 8 hội đồng bảo vệ dưới
đây:
Hội đồng 1 : A B C D 5 : A H J
2 : A C D E 6 : H I J
3 : B D F G 7 : G H J
4 : C D F G 8 : E I

Thời gian bảo vệ của mỗi hội đồng là một ngày. Hai hội đồng có
thể bảo vệ cùng ngày nếu không có chung thành viên. Hãy tìm
số ngày ít nhất để tất cả các hội đồng có thể bảo vệ xong. Giải
thích câu trả lời của bạn.

41 / 44
Số hội đồng bảo vệ

▶ Xét đồ thị với tập đỉnh là


các hội đồng, giữa hai dỉnh 7
có cạnh nối nếu hai hội 5 6
đồng có chung thành viên.
▶ Bài toán tương đương với
bài toán tìm số màu ít nhất 2 8
để tô đồ thị này.
▶ Đồ thị này có chứa clique
{1, 2, 3, 4} có kích thước 4 1 3
nên số ngày bằng 4 là ít 4
nhất có thể.

42 / 44
Bài tập
Ký hiệu ei (G) là số đỉnh của đồ thị G có bậc lớn hơn i. Dùng
thuật toán tham lam để chỉ ra rằng nếu tồn tại i để ei (G) ≤ i + 1
thì χ(G) ≤ i + 1.

43 / 44
Bài tập
Đồ thị Mr (r ≥ 2) đạt được từ đồ thị chu trình C2r bằng cách
thêm các cạnh nối giữa mỗi cặp đỉnh đối nhau. Chứng minh rằng
(i) Mr là đồ thị hai phần khi r là số lẻ.
(ii) χ(Mr ) = 3 khi r chẵn và r ̸= 2.
(iii) χ(M2 ) = 4.

44 / 44
Ghép cặp trên đồ thị hai phần

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 39
Ghép cặp trên đồ thị hai phần

▶ Eric Lehman, F Thomson Leighton & Albert R Meyer,


Mathematics for Computer Science, 2013 (Miễn phí)
▶ Albert R Meyer’s slides

2 / 39
Tìm bạn nhảy

▶ Tối thứ bảy, hội sinh viên tổ chức tiệc.


▶ Có 300 sinh viên tham gia.
▶ Họ không quen hết nhau!
▶ Trong 6 người luôn có ba người đôi một quen nhau hoặc ba
người đôi một lạ nhau!

3 / 39
Tìm bạn nhảy

▶ Tối thứ bảy, hội sinh viên tổ chức tiệc.


▶ Có 300 sinh viên tham gia.
▶ Họ không quen hết nhau!
▶ Nhưng mỗi cô gái quen đúng 50 chàng trai, và mỗi chàng trai
quen đúng 50 cô gái!
▶ Liệu mọi sinh viên có thể nhảy đồng thời sao cho hai người
nhảy cùng nhau phải biết nhau?

4 / 39
Nội dung

Ghép cặp Nam & Nữ

Định lý Hall

Làm thế nào để tìm ghép cặp cực đại?


Đồ thị Nam & Nữ

Nam & Nữ hợp nhau

G B

Hợp nhau
Albert R Meyer. April 3, 2013 bipartite.2

6 / 39
Đồ thị Nam & Nữ

Compatible Boys & Girls

G B

Albert R Meyer. April 3, 2013 bipartite.3

Hãy tìm cách ghép cặp mỗi cô gái với chỉ một chàng trai phù hợp.

7 / 39
Đồ thị Nam & Nữ

Compatible Boys & Girls

G B

Albert R Meyer. April 3, 2013 bipartite.4


Hình: Một ghép cặp

8 / 39
Đồ thị Nam & Nữ

Compatible Boys & Girls

G B

suppose this edge was missing


Albert R Meyer. April 3, 2013 bipartite.5

Giả sử không có cạnh này.

9 / 39
Đồ thị Nam & Nữ

Compatible Boys & Girls

G B

suppose this edge was missing


Albert R Meyer. April 3, 2013 bipartite.6

Giả sử không có cạnh này.

10 / 39
Đồ thị Nam & Nữ

Compatible Boys & Girls

G B

Albert R Meyer. April 3, 2013 bipartite.7

11 / 39
Không đủ số Nam

NotCompatible
enough boys
Boys &for these girls!
Girls

G B

3 2

3 girls like only 2 boys


Albert R Meyer. April 3, 2013 bipartite.8

Có 3 cô gái nhưng chỉ có 2 chàng trai phù hợp.

12 / 39
Không tồn tại cặp ghép cho Nữ

No match is possible!

G B

2
E(S)
S
3

Albert R Meyer. April 3, 2013 bipartite.9

|S| = 3 > 2 = |E(S)|

13 / 39
Tắc nghẽn

a bottleneck
No match is possible!

G B

E(S)
S

|S| > |E(S)|


Albert R Meyer. April 3, 2013 bipartite.10

14 / 39
Tắc nghẽn

▶ Tắc nghẽn là một tập Nữ S không có đủ số Nam phù hợp.

E(S) ::= {chàng trai w |


w kề với ít nhất một cô cái trong S}

▶ Tập S là tắc nghẽn


|S| > |E(S)|

15 / 39
Bổ đề (Tắc nghẽn)
Nếu tồn tại tắc nghẽn, vậy không tồn tại cặp ghép.

16 / 39
Định lý (Hall)
Ngược lại, nếu không có tắc nghẽn, vậy có tồn tại cặp ghép.

17 / 39
for bricklayer and plumber, and two for plumber and toolmaker.
Bài(i)tậpDraw the corresponding bipartite graph.
(ii) Check whether the marriage condition holds for this problem.
Can all of the jobs be filled by qualified people?
Tại sao đồ thị dưới đây không có cặp ghép nào phủ tập V ?
s
Explain why the graph in Fig. 25.4 has no complete matching from1 V\ to V2- Whe
the marriage condition fail?

25.4

(The 'harem problem') Let B be a set of boys, and suppose that each boy in B wish
marry more than one of his girl friends. Find a necessary and sufficient condition fo
18 / 39
Nội dung

Ghép cặp Nam & Nữ

Định lý Hall

Làm thế nào để tìm ghép cặp cực đại?


Đồ thị hai phần H

Bipartite graph H

G B

E(H)
L(H) R(H)
Albert R Meyer. April 3, 2013 Hall.2

20 / 39
Ghép cặp hai phía

Định nghĩa
Một cặp ghép là một hàm đơn ánh

m : L(H) −→ R(H)

thoả mãn: Nếu m(g) = b thì {g, b} là một cạnh của H.

21 / 39
Định lý (Hall)
Nếu với mọi tập S ⊆ L(H) ta đều có

|S| ≤ |E(S)|

vậy có tồn tại một cặp ghép.

22 / 39
Chứng minh định lý Hall

Bổ đề
Giả sử không có tắc nghẽn. Hơn nữa, nếu S là một tập những cô
gái thoả mãn |S| = |E(S)|. Vậy không có tắc nghẽn giữa S và E(S).

23 / 39
T Tắc nghẽn
s E(S)

S E(S)

7
Albert R Meyer.
Vậy S ∪ T là một tắc nghẽn.
April 3, 2013 Hall.13

24 / 39
Chứng minh định lý Hall

▶ Chứng minh bằng quy nạp mạnh theo số Nữ.


▶ Nếu chỉ có 1 Nữ. Định lý hiển nhiên đúng.
▶ Với số Nữ nhiều hơn 1. Ta xét hai trường hợp.

25 / 39
Trường hợp 1

▶ Có một tập con những cô gái S mà |S| = |E(S)|.


▶ Vậy theo bổ đề trước, không có tắc nghẽn trong cả hai đồ thị
hai phần
(S, E(S)) và (S, E(S))
▶ Theo quy nạp, ta có thể ghép cặp hai đồ thị này riêng biệt. 3.

26 / 39
Trường hợp 2

▶ Nếu với mọi tập không rỗng những cô gái S ta đều có

|S| < |E(S)|

▶ Chọn lấy một cô gái g. Cô ấy phải hợp với một chàng trai b
nào đó. Tại sao?
▶ Ghép cặp g với b.
▶ Loại bỏ g và b.
▶ Ta vẫn không có tắc nghẽn đối với các cô gái và chàng trai
còn lại. Tại sao?
▶ Theo quy nạp, ta có thể ghép cặp cho những người còn lại. 3

27 / 39
Kiểm tra tắc nghẽn?

Mệnh đề
Nếu mỗi cô gái đều thích ≥ d chàng trai, và mỗi chàng trai đều
thích ≤ d cô gái, vậy không có tắc nghẽn.

28 / 39
Chứng minh.
Xét tập các cô gái S và e là số cạnh liên thuộc với S. Ta có
∑ ∑
e= deg(g) ≥ d = d · |S|
g∈S g∈S
∑ ∑
e≤ deg(b) ≤ d = d · |E(S)|
b∈E(S) b∈E(S)

Vậy ta có
d · |S| ≤ e ≤ d · |E(S)|.
Vậy
|S| ≤ |E(S)|.

29 / 39
Tìm bạn nhảy

▶ Tối thứ bảy, hội sinh viên tổ chức tiệc.


▶ Có 300 sinh viên tham gia.
▶ Họ không quen hết nhau!
▶ Nhưng mỗi cô gái quen đúng 50 chàng trai, và mỗi chàng trai
quen đúng 50 cô gái!
▶ Liệu mọi sinh viên có thể nhảy đồng thời sao cho hai người
nhảy cùng nhau phải biết nhau?

30 / 39
Nội dung

Ghép cặp Nam & Nữ

Định lý Hall

Làm thế nào để tìm ghép cặp cực đại?


Đường mở

Định nghĩa
Xét đồ thị hai phần G và M là một ghép cặp trong G. Ta nói rằng
đường đi P là một đường mở (cho M) nếu:
▶ P bắt đầu và kết thúc ở hai đỉnh u, v nào đó chưa được ghép
cặp; và
▶ Các cạnh trong P luân phiên thuộc M và không thuộc M.

32 / 39
ond edge of P belongs to M (Figure 10.6). Such a path is called
Tính chất của đường mở
enting path. It is clear that an augmenting path P contains an odd
of edges, and in fact, the number of its edges not in M is one larger
number of its edges in M .

u v

▶ đường mở P chứa một số lẻ


cạnh.
▶ Số cạnh không thuộc M lớn
hơn 1 so với số cạnh trong M.

Edges in M Edges in P
not in M
33 / 39
Tăng kích thước ghép cặp dùng đường mở

Hình: Nếu tìm được một đường mở P, ta có thể xóa các cạnh trong M
và thay bằng các cạnh P không thuộc M.

34 / 39
Chiến lược tìm ghép cặp cực đại
1. Bắt đầu với một ghép cặp M bất kỳ (có thể chỉ dùng 1 cạnh).
2. Tìm một đường mở cho M.
3. Nếu tìm thấy một đường mở, xây dựng một ghép cặp tốt hơn
M′ .
4. Nếu không tìm thấy đường mở nào, thì dừng; M là ghép cặp
cực đại.

35 / 39
Tại sao chiến lược này đúng?

Định lý
Nếu ghép cặp M trong đồ thị hai phần G không phải ghép cặp cực
đại, thì G chứa một đường mở cho M.

36 / 39
Chứng minh

▶ Xét M∗ là một ghép cặp cực đại;


▶ đặt F là tập mọi cạnh thuộc M hoặc M∗ , nhưng không thuộc
cả hai.
▶ Tập cạnh F và các đỉnh tạo thành đồ thị với các đỉnh chỉ có
bậc 1 hoặc 2. Tại sao?
▶ Vậy mỗi thành phần liên thông của đồ thị chỉ là đường đi
hoặc chu trình;
▶ và trong mỗi đường đi hoặc chu trình này, các cạnh thuộc M
luân phiên với các cạnh không thuộc M.

37 / 39
Chứng minh (tiếp)

▶ Vậy thì, trong các chu trình, số cạnh thuộc M bằng với số
cạnh không thuộc M.
▶ Vì |M∗ | > |M|, phải có ít nhất một thành phần liên thông là
đường đi,
▶ và đây chính là đường mở.

38 / 39
39 / 39
10.4 How to Find a Perfect Matching 177
FIGURE 10.9. A graph for trying out the algorithm.
minh nó là ghép cặp cực đại.
Hãy tìm ghép cặp cực đại cho cho đồ thị hai phần sau và chứng
10.4.8 Now suppose that we have the weaker condition that every nonempty
Bài tập
subset A on the left has at least |A| − 1 neighbors on the right. Prove that G
contains a matching that matches up all but one node on each side.
Hôn nhân bền
vững
1
Hay lấy người mình yêu và không bỏ được

•stable.2
Tham khảo

• Mathematics for Computer Science.


• Albert R. Meyer ‘s slides

•stable.3
Hôn nhân bền vững
Tổ chức đám cưới
1 2 3 4 5
Chàng trai

Cô gái

A B C D E
•stable.4
Hôn nhân bền vững
Mức độ yêu thích
Nam Nữ
1 : CBEAD A : 35214
2 : ABECD B : 52143
3 : DCBAE C : 43512
4 : ACDBE D : 12345
5 : ABDEC E : 23415

•stable.5
Hôn nhân bền vững

Mức độ yêu thích


1: CBEAD
Thử chiến lược
2 : ABECD
3 : DCBAE “tham lam” cho nam
4 : ACDBE
5 : ABDEC

•stable.6
Hôn nhân bền vững

Mức độ yêu thích Chàng trai 1 cưới Cô gái C


1: CBEAD (lựa chọn thứ 1 của anh ta)

2 : ABECD
3 : DCBAE
4 : ACDBE
5 : ABDEC 1 C

•stable.7
Hôn nhân bền vững

Mức độ yêu thích

2 : ABE D
3 : D BAE
4 : A DBE
5 : ABDE

•stable.8
Hôn nhân bền vững

Mức độ yêu thích

2 : ABED
3 : DBAE
4 : ADBE
5 : ABDE

•stable.9
Hôn nhân bền vững
Tiếp theo:
Mức độ yêu thích Chàng trai 2 cưới Cô gái A
(vẫn là lựa chọn thứ 1 của anh ta)

2 : ABED
3 : DBAE
4 : ADBE
5 : ABDE 2 A

•stable.10
Hôn nhân bền vững
Cuối cùng với đám cưới “tham lam cho nam”

1 C 2 A 3 D

4 B 5 E

•stable.11
Hôn nhân bền vững
Vấn đề!

1 C

4 B •stable.12
Hôn nhân bền vững
Chàng trai 4 thích cô C hơn vợ anh ta.

1 C

4 B •stable.13
Hôn nhân bền vững
và ngược lại

1 C

4 B •stable.14
Hôn nhân bền vững
Một cặp lừa đảo

1 C

4 B •stable.15
Hôn nhân bền vững
Bài toán
Hôn nhân bền vững:
Tổ chức đám cưới cho mọi
người mà không có cặp lừa
đảo!

•stable.16
Hôn nhân bền vững

Dễ không?
Cùng thử xem!

•stable.17
Hôn nhân bền vững
Mức độ yêu thích
Nam Nữ
1 : CBEAD A : 35214
2 : ABECD B : 52143
3 : DCBAE C : 43512
4 : ACDBE D : 12345
5 : ABDEC E : 23415

•stable.18
Hôn nhân bền vững I.

3A 5B 4C

1D 2E

Mọi cô gái đều lấy được người yêu thích nhất


•stable.19
Hôn nhân bền vững II

5A 2B 4C

3D 1E

“tối ưu cho nam”


•stable.20
Hôn nhân bền vững
Không chỉ là một bài toán vui:
• Tuyển sinh đại học
(bài báo của Gale & Shapley, 1962)

• Ghép cặp Bệnh viện & Sinh viên nội


trú.
• Ghép cặp các Clients & Servers
•stable.21
Hôn nhân bền vững
Không chỉ là một bài toán vui:
• Tuyển sinh đại học
(bài báo của Gale & Shapley, 1962)

• Ghép cặp cho các Bệnh viện & các


Sinh viên nội trú.
• Ghép cặp nhảy
•stable.22
Hôn nhân bền vững

•stable.23
Bài toán Hôn nhân bền vững

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 26
Tài liệu tham khảo

▶ Eric Lehman, F Thomson Leighton & Albert R Meyer,


Mathematics for Computer Science, 2013 (Miễn phí)
▶ Albert R Meyer’s slides

2 / 26
Bài toán Hôn nhân bền vững

▶ N chàng trai & N cô gái,


▶ Mỗi chàng trai có một danh sách xếp hạng các cô gái,
▶ Mỗi cô gái có một danh sách xếp hạng các chàng trai.
▶ Hãy tìm cách ghép cặp mỗi chàng trai với một cô gái sao cho
không có cặp lừa đảo.

3 / 26
Định nghĩa
▶ Cho một cặp ghép M, cô gái x và chàng trai y gọi là một cặp
lừa đảo nếu họ thích nhau hơn bạn của họ trong cặp ghép
M.
▶ Cặp ghép không chứa cặp lừa đảo gọi là cặp ghép ổn định.

4 / 26
Nội dung

Thủ tục kén chồng

Cặp ghép tối ưu


Thủ tục kén chồng

Ngày qua ngày...

6 / 26
Buổi sáng

Các chàng trai đến hát dưới ban công cô gái chàng thích nhất.

7 / 26
Buổi chiều

Cô gái từ chối hết chỉ trừ chàng trai cô thích nhất ở dưới ban công.

Hình: Nếu anh không phải Brad thì về đi!

8 / 26
Buổi tối

Chàng trai bị từ chối xóa tên cô gái khỏi danh sách yêu thích của
anh ta

9 / 26
Kén chồng (theo ngày)

Buổi sáng: Chàng trai đến hát dưới ban công nhà cô gái mình
thích nhất.
Buổi chiều: Cô gái từ chối hết chỉ trừ chàng trai cô thích nhất ở
dưới ban công.
Buổi tối: Chàng trai bị từ chối xóa tên cô gái khỏi danh sách
yêu thích của anh ta

10 / 26
Điều kiện dừng

▶ Dừng khi mọi cô gái không còn ai để từ chối.


▶ Và các cô gái cưới chàng trai hiện tại đến cầu hôn.

11 / 26
Hôn nhân bền vững

▶ Thuật toán luôn Dừng:


▶ Luôn có một ngày để làm đám cưới.
▶ Thuật toán Đúng đắn:
▶ Mọi người đều có chồng (hoặc vợ).
▶ Hôn nhân ổn định.

12 / 26
Định lý
Thuật toán dừng trong ≤ N2 + 1 ngày.
▶ Nếu vào một ngày thuật toán chưa kết thúc, vậy đêm đó có
một chàng trai xóa tên một cô gái khỏi danh sách.
▶ Có N danh sách, mỗi danh sách có N tên. Vậy chỉ có ≤ N2
lần xóa.

13 / 26
Tính đúng đắn của thuật toán

Khẳng định
Với mỗi cô gái, chàng trai mà cô thích nhất đến cầu hôn vào ngày
mai không tệ hơn chàng của ngày hôm nay.
vì chàng thích nhất của ngày hôm nay vẫn ở lại cho đến khi bị cô
từ chối vì có chàng tốt hơn.

14 / 26
Tính đúng đắn của thuật toán

Khẳng định
Với mỗi chàng trai, cô gái mà chàng cầu hôn ngày mai sẽ không
tốt hơn cô của ngày hôm nay.
vì nếu bị cô gái thích nhất từ chối, chàng phải chấp nhận thôi
bằng cách xóa tên cô ta khỏi danh sách yêu thích.

15 / 26
Tính đúng đắn của thuật toán

Bất biến trong mọi ngày


Nếu cô gái G không có trong danh sách của chàng trai B, vậy hiện
tại G đang được một chàng trai B′ mà cô ấy thích hơn cầu hôn.

16 / 26
Định lý
Khi thuật toán dừng, mọi người đều có chồng hoặc vợ.
▶ Vì mỗi cô gái chỉ giữ lại một chàng trai mà cô ấy thích nhất
trong danh sách.
▶ và tại mỗi thời điểm, mỗi chàng trai chỉ đến hát dưới ban
công một cô gái.

17 / 26
Định lý
Cặp ghép thu được được bởi thủ tục kén chồng là ổn định.

18 / 26
Chứng minh.
Chàng Bob không thể nằm trong cặp lừa đảo
1. với cô gái G có trong danh sách yêu thích cuối cùng của mình:
vì Bob đã cưới cô gái anh ấy thích nhất trong danh sách này.
2. với cô gái G không có trong danh sách cuối cùng của mình: vì
theo bất biến thì G thích chồng của mình hơn Bob.

19 / 26
Nội dung

Thủ tục kén chồng

Cặp ghép tối ưu


Ai thích thủ tục kén chồng hơn,
các chàng trai hay các cô gái?

21 / 26
Định nghĩa
Ký hiệu
S = ”tập mọi cặp ghép ổn định”.
Với chàng trai (hoặc cô gái) p, ta định nghĩa lựa chọn có thể của
p là tập
{q | ∃m ∈ S, {p, q} ∈ m}
Đây là những cô gái (hoặc chàng trai) có thể ghép cặp với p trong
một cặp ghép ổn định nào đó.

22 / 26
Ví dụ
Xét danh sách

Chàng trai thích Cô gái thích


1: a,b a: 1,2
2: a,b b: 1,2

Hãy tìm các lựa chọn có thể của chàng trai 1.

23 / 26
Định nghĩa
▶ Bạn đời tốt nhất của một người là người tốt nhất trong các
lựa chọn có thể của anh/chị ta.
▶ Bạn đời tệ nhất của một người là người tệ nhất trong các
lựa chọn có thể của anh/chị ta.

24 / 26
Định lý
Trong thủ tục kén chồng, mọi chàng trai đều được bạn đời tốt
nhất.

25 / 26
Định lý
Trong thủ tục kén chồng, mọi cô gái đều được bạn đời tệ nhất.

Chứng minh.
▶ Giả sử tồn tại cách ghép cặp ổn định M sao cho cô gái g lấy
anh b′ tệ hơn anh b trong thủ tục kén chồng.
▶ Trong M ta có cặp ghép

{b′ , g} và {b, g′ }

Vậy b và g là cặp lừa đảo với M. Tại sao?

26 / 26
Đồ thị phẳng

Trần Vĩnh Đức

HUST

Ngày 1 tháng 3 năm 2016

1 / 36
Tài liệu tham khảo

▶ Eric Lehman, F Thomson Leighton & Albert R Meyer,


Mathematics for Computer Science, 2013 (Miễn phí)
▶ K. Rosen, Toán học rời rạc ứng dụng trong tin học (Bản dịch
Tiếng Việt)
▶ Ngô Đắc Tân, Lý thuyết Tổ hợp và Đồ thị, NXB ĐHQG Hà
Nội, 2004.

2 / 36
way to represent this graph in a plane without any edges crossing?
Giới thiệu

FIGURE 1 Three Houses and Three Utilities.

3 / 36
Định nghĩa
Một đồ thị được gọi là phẳng nếu ta có thể vẽ nó trên mặt phẳng
mà không có cạnh nào cắt nhau. Hình vẽ như thế gọi là một biểu
diễn phẳng của đồ thị.

FIGURE 2 The FIGURE 3 K4 Drawn


FIGURE 2 The FIGURE 3 K4 Drawn
Graph K . with No Crossings.
Graph K4 . 4 with No Crossings.
4 / 36
Ví dụ
10.7 Planar Graphs 719
10.7 Planar Graphs 719

wn FIGURE 4 The FIGURE 5 A Planar


FIGURE 4 The FIGURE 5 A Planar
Graph Q3 . Representation of Q3 .
Graph Q3 . Representation of Q3 .

5 / 36
anar. We will give an example to showsubregions, R21beand
how this can R22in, an
done as shown
ad in Figure 7
develop some general results that can be used to do this.
Ví dụ v
, planar?
Đồ thị K3,3 : v1 v2 v3
draw K3,3 in the plane with no edges crossing is doomed. We now
presentation of K3,3 , the vertices v1 and v2 must be connected to both
s form a closed curve that splits the plane into two regions, R1 and
a). The vertex v3 is in either R1 or R2 . When v3 is in R2 , the inside v
ges between v3 and v4 and between v3 and v5 separate R2 into two
v4 v5 v6
s shown in Figure 7(b).
không phẳng vì FIGURE 6 The Graph K . F
3,3
v1 v5 v1 v5

R21
R2 R1 v3 R1
R22

v4 v2 v4 v2

(a) (b)

6 / 36
Proof: First, we specify a planar representati
a sequence of subgraphs G1 , G2 , . . . , Ge =
is done using the following inductive defini
Obtain
Euler chứng minh rằng Gn from
mọi biểu diễn phẳngby
Gn−1 củaarbitrarily adding a
một đồ thị đều
chia mặt phẳng thành cùng số miền như nhau.

R4
R2 R6
R3
R1
R5

FIGURE 8 The Regions of the Planar R

7 / 36
Định lý (Công thức Euler)
Cho G là một đồ thị phẳng liên thông với e cạnh và v đỉnh. Gọi r
là số miền trong biểu diễn phẳng của G. Khi đó

r = e − v + 2.

8 / 36
Ví dụ
Xét một đồ thị phẳng liên thông có 20 đỉnh, mỗi đỉnh đều có bậc
3. Biểu diễn phẳng của đồ thị này chia mặt phẳng thành bao nhiêu
miền?
▶ Tổng bậc bằng 3v = 3 × 20 = 60
▶ Số cạnh e = 30
▶ Theo công thức Euler

r = e − v + 2 = 30 − 20 + 2 = 12

9 / 36
Chứng minh công thức Euler

▶ Ta chứng minh bằng quy nạp theo số miền r.


▶ Nếu r = 1 thì đồ thị không có chu trình. Tại sao?
▶ Vậy e = v − 1. 3
▶ Giả sử định lý đúng với r > 1.

10 / 36
Chứng minh công thức Euler

▶ Vì r > 1, nên đồ thị có chu trình.


▶ Giả sử {u, v} là cạnh của một chu trình nào đó.
▶ Vậy {u, v} là biên của hai miền S và T. Tại sao?
▶ Xóa cạnh {u, v} làm nhập hai miền S và T làm một, còn các
miền khác giữ nguyên.
▶ Đồ thị mới thu được có e − 1 cạnh và r − 1 miền.
▶ Theo giả thiết quy nạp:

r−1=e−1−v+2

▶ Ta được r = e − v + 2. 3

11 / 36
Hệ quả
Nếu G là một đồ thị phẳng liên thông với e cạnh và v đỉnh thỏa
s
mãn v ≥ 3. Vậy thì e ≤ 3v − 6.

c
7
▶ Bậc của một miền là số
b d
3 cạnh trên biên của miền đó.
R1
▶ Bậc của mỗi miền ít nhất
a
R2 phải bằng 3.
g
6 ▶
e Tổng bậc các miền bằng bao
R3
nhiêu cạnh?

FIGURE 11 The Degrees of Regions.

12 / 36
Chứng minh.
▶ Tổng bậc các miền

deg(R) = 2e ≥ 3r
R

Vậy ta có 2e/3 ≥ r.
▶ Theo công thức Euler

r = e − v + 2 ≤ 2e/3.

▶ Kết luận e ≤ 3v − 6.

13 / 36
Bài tập
E, we can produce a subgraph of G by removing the edges in E
subgraph has the same vertex set V as G. Its edge set is E − E %
▶ Dùng hệ quả trước, hãy chỉ ra rằng đồ thị K5 không phẳng.

a a

e b
e

d c c

ocessors. FIGURE 15 A Subgraph of K5 .

14 / 36
Hệ quả
Nếu G là một đồ thị phẳng liên thông thì G có một đỉnh bậc
không vượt quá 5.

Chứng minh.
Dùng hệ quả trước & Định lý bắt tay.

15 / 36
Hệ quả
Nếu một đồ thị phẳng liên thông có e cạnh, v đỉnh trong đó v ≥ 3
và không có chu trình độ dài 3 thì e ≤ 2v − 4.

Chứng minh.
▶ Nếu không có chu trình độ dài 3 thì bậc của mỗi miền ≥ 4.
▶ Bài tập: Chứng minh tiếp hệ quả này.

16 / 36
R2 , as shown in Figure 7(a). The ver
Bài tập of the closed curve, the edges betwe
subregions, R21 and R22 , as shown in
▶ Dùng hệ quả trước, hãy chứng minh rằng đồ thị K3,3 không
phẳng?

v1 v2 v3

v4 v5 v6

FIGURE 6 The Graph K3,3 .

17 / 36
Định nghĩa
Độ dài của chu trình ngắn nhất trong đồ thị được gọi là chu vi
nhỏ nhất của đồ thị đó.

Nếu như đồ thị không tồn tại chu trình, thì chu vi nhỏ nhất của G
được định nghĩa bằng ∞.

18 / 36
Định lý (Bất đẳng thức cạnh đỉnh)
Trong đồ thị phẳng liên thông G = (V, E) bất kỳ với chu vi nhỏ
nhất g thỏa mãn 3 ≤ g < ∞ ta luôn có
g
|E| ≤ (|V| − 2).
g−2

19 / 36
Bài tập

Dùng bất đẳng thức cạnh đỉnh để chứng minh rằng K3,3 và K5
không phải đồ thị phẳng.

20 / 36
Chứng minh bất đẳng thức cạnh đỉnh

▶ Xét G = (V, E) là đồ thị phẳng liên thông với chu vi nhỏ


nhất 3 ≤ g ≤ ∞.
▶ Đặt tập cạnh E = {e1 , e2 , . . . , et }.
▶ Xét một biểu diễn phẳng bất kỳ của G với ℓ miền là

{R1 , R2 , . . . , Rℓ }.

▶ Xây dựng bảng X = (xij ) gồm t hàng và ℓ cột như sau


{
1 nếu ei là một cạnh trên biên của của miền Rj
xij =
0 trong trường hợp ngược lại

21 / 36
Ví dụ

R3
e1 e2 R1 R2 R3
e1 1 0 1
R1 e2 1 0 1
e4 e3 0 1 1
e3 e4 1 1 0
e5
R2
e5 1 0 1
e6 0 1 1
e6 e7 e7 0 1 1

▶ Mỗi hàng có nhiều nhất 2 số 1. Tại sao?


▶ Mỗi cột có ít nhất g số 1. Tại sao?

22 / 36
Chứng minh (tiếp)

▶ Mỗi cạnh chỉ nằm trên biên của nhiều nhất hai miền, nên mỗi
hàng của X có nhiều nhất hai số 1.
▶ Các cạnh trên biên của mỗi miền tạo ra một chu trình trong
G, nên mỗi cột có ít nhất g số một.
▶ Đặt
s := số lượng số 1 trong X
ta được
gℓ ≤ s ≤ 2t.
với ℓ là số miền và t là số cạnh.

23 / 36
Chứng minh (tiếp)

Kết hợp với công thức Euler

ℓ = t − |V| + 2

ta được
gℓ = gℓ − g|V| + 2g ≤ 2t
Vậy thì
g
t(g − 2) ≤ g(|V| − 2) ⇐⇒ |E| ≤ (|V| − 2)
g−2

Ta hoàn thành chứng minh của bất đẳng thức cạnh đỉnh.

24 / 36
Hai đồ thị đồng phôi
Định nghĩa
▶ Phép toán loại bỏ cạnh {u, v} và thêm một đỉnh mới w cùng
hai cạnh {u, w}, {w, v} gọi là phép phân chia sơ cấp.
▶ Hai đồ thị gọi là đồng phôi nếu chúng có thể nhận được từ
cùng một đồ thị bằng một dãy phép phân chia sơ cấp.
10.7 Planar Graphs 723

a b a b a b
G1 G2 G3
h
k
f i
j
g g

c d e c d e c d e

FIGURE 12 Homeomorphic Graphs.

Using r = e − v + 2 (Euler’s formula), we obtain

e − v + 2 ≤ (2/3)e.
25 / 36
Định lý (Kuratowski)
Đồ thị là không phẳng nếu và chỉ nếu nó chứa một đồ thị con
đồng phôi với K3,3 hoặc K5 .
hs
Ví dụ
a b a b a b

i c i c i c
k h d d
e e
f f
g g g
G H K5

FIGURE 13 The Undirected Graph G, a Subgraph H Homeomorphic to K5 , and K

Kuratowski’s Theorem
26 / 36
Đồ thị Petersen

Ví dụ 10.7 Planar Graphs 725

f c
f d f d j
j
e b
j g
a g

i h
e
i h e i h
d c

(a) (b) H (c) K 3,3

FIGURE 14 (a) The Petersen Graph, (b) a Subgraph H Homeomorphic to K3,3 , and (c) K3,3 .

EXAMPLE 9 Is the Petersen graph, shown in Figure 14(a), planar? (The Danish mathematician Julius Petersen
studied this graph in 1891; it is often used to illustrate various theoretical properties of graphs.)

Solution: The subgraph H of the Petersen graph obtained by deleting b and the three edges
that have b as an endpoint, shown in Figure 14(b), is homeomorphic to K3,3 , with vertex sets
{f, d, j } and {e, i, h}, because it can be obtained by a sequence of elementary subdivisions,
27 / 36
Dính hai đỉnh kề nhau

28 / 36
Định nghĩa
Một minor của đồ thị G là một đồ thị thu được từ G bằng một số
hữu hạn lần xóa đỉnh, xóa cạnh, và dính hai đỉnh kề nhau của G.

29 / 36
Ví dụ
Chu trình C3 có phải là một minor của đồ thị sau không?

30 / 36
31 / 36
Định lý (Wagner)
Đồ thị là không phẳng nếu và chỉ nếu nó chứa một minor là K3,3
hoặc K5 .

32 / 36
Bài tập
Chứng minh rằng đồ thị Peterson dưới đây không phẳng.

33 / 36
Tô màu bản đồ

B G B
C D A
F
A C
E
E D

FIGURE 1 Two Maps.


Hình: Hai bản đồ

Graph Coloring
Introduction
34 / 36
Tô màu đồ thị
TION 1 A coloring of a simple graph is the assignment of a color to each vertex o
no two adjacent vertices are assigned the same color.

B
B
C
D G C
A A E
F

D
E

FIGURE 2 Hình:
DualCác
Graphs
đồ thịofcủa
thehai
Maps
bản in
đồ Figure
trước 1.

∗ We will assume that all regions in a map are connected. This eliminates any problems presented by
as Michigan.

35 / 36
Định lý (Bốn màu)
Số màu của một đồ thị phẳng không lớn hơn 4.

Hình: từ wikipedia

36 / 36
Đồ thị Hamilton

Trần Vĩnh Đức

Ngày 11 tháng 3 năm 2016

1 / 24
Tài liệu tham khảo

▶ Ngô Đắc Tân, Lý thuyết Tổ hợp và Đồ thị, NXB ĐHQG Hà


Nội, 2004.
▶ Douglas B. West. Introduction to Graph Theory. 2nd Edition,
2000.
▶ K. Rosen, Toán học rời rạc ứng dụng trong tin học (Bản dịch
Tiếng Việt)

2 / 24
Đi vòng quanh thế giới

10.5 Euler

(a) (b)
FIGU
FIGURE 8 Hamilton’s “A Voyage Round the the “A
World” Puzzle. World

Because the author cannot supply each reader with a wooden solid w
will consider the equivalent question: Is there a circuit in the graph sho
passes through each vertex exactly once? This solves the puzzle because
3 / 24 th
Con Mã đi trên bàn cờ

4 / 24
Con Mã đi trên bàn cờ 2

5 / 24
Định nghĩa (Đồ thị nửa Hamilton)
▶ Một đường đi trong đồ thị G được gọi là đường đi Hamilton
nếu nó chứa tất cả các đỉnh của G.
▶ Một đồ thị được gọi là đồ thị nửa Hamilton nếu nó có đường
đi Hamilton.

Nói cách khác, đồ thị nửa Hamilton là đồ thị có đường đi bao


trùm.

6 / 24
Solution: G1 has a Hamilton circuit: a, b, c, d, e, a. There is no Hamilton circuit in G
be seen by noting that any circuit containing every vertex must contain the edge {a
but G2 does have a Hamilton path, namely, a, b, c, d. G3 has neither a Hamilton c
Ví dụ path, because any path containing all vertices must contain one of the ed
Hamilton
{e, f }, and {c, d} more than once.
Đồ thị nào dưới đây là nửa Hamilton?
a b a b a b g

e c
d c d c e f
G1 G2 G3
d

FIGURE 10 Three Simple Graphs.

CONDITIONS FOR THE EXISTENCE OF HAMILTON CIRCUITS Is there a


to determine whether a graph has a Hamilton circuit or path? At first, it might seem
should be an easy way to determine this, because there is a simple way to answer
question of whether a graph has an Euler circuit. Surprisingly, there are no kno
7 / 24
Định nghĩa (Đồ thị Hamilton)
▶ Một chu trình trong đồ thị G được gọi là chu trình Hamilton
nếu nó chứa tất cả các đỉnh của G.
▶ Một đồ thị được gọi là đồ thị Hamilton nếu nó có chu trình
Hamilton.

Nói cách khác, đồ thị Hamilton là đồ thị có chu trình bao trùm.

8 / 24
Solution: G1 has a Hamilton circuit: a, b, c, d, e, a. There is no Hamilton circuit in G
be seen by noting that any circuit containing every vertex must contain the edge {a
but G2 does have a Hamilton path, namely, a, b, c, d. G3 has neither a Hamilton c
Ví dụ path, because any path containing all vertices must contain one of the ed
Hamilton
{e, f }, and {c, d} more than once.
Đồ thị nào dưới đây là Hamilton?
a b a b a b g

e c
d c d c e f
G1 G2 G3
d

FIGURE 10 Three Simple Graphs.

CONDITIONS FOR THE EXISTENCE OF HAMILTON CIRCUITS Is there a


to determine whether a graph has a Hamilton circuit or path? At first, it might seem
should be an easy way to determine this, because there is a simple way to answer
question of whether a graph has an Euler circuit. Surprisingly, there are no kno
9 / 24
raphs Ví dụ
Đồ thị nào dưới là Hamilton? Nếu không, có là nửa Hamilton?

a d e a d
c

b c b e

G H

FIGURE 11 Two Graphs That Do Not Have a H

MPLE 6 Show that neither graph displayed in Figure 11 has a


10 / 24
Ví dụ
Chứng minh rằng đồ thị đầy đủ Kn có chu trình Hamilton với mọi
n ≥ 3.

11 / 24
Mệnh đề
Nếu G = (V, E) có chu trình Hamilton, vậy thì với mọi tập đỉnh
khác rỗng S ⊆ V, đồ thị thu được từ G bằng cách xóa các đỉnh
thuộc S chỉ có nhiều nhất |S| thành phần liên thông.

Chứng minh.

12 / 24
Ví dụ
Đồ thị sau có phải là Hamilton không?

13 / 24
Ví dụ
Đồ thị sau đây chỉ ra rằng điều kiện cần trước không phải điều
kiện đủ. Tại sao?

14 / 24
Bài tập

Alice và Bob nhìn trộm đề thi Toán Rời Rạc của thầy Đức. Alice
thấy thầy đang mô tả một đồ thị với 17 đỉnh và 129 cạnh; còn
Bob thấy thầy hỏi xem đồ thị này có chu trình Hamilton không.

- Bob nói rằng: ”không cần biết chi tiết đồ thị thầy đang vẽ thế
nào, chắc chắn đồ thị này có chu trình Hamilton.”

- Còn Alice nói: ”Nếu không biết chi tiết thì không thể quyết định
được đồ thị này có chu trình Hamilton hay không.”

Ai đúng, ai sai? Bạn hãy giải thích.

15 / 24
Định lý (Ore)
Giả sử G là một đơn đồ thị với n ≥ 3 đỉnh thỏa mãn: với mọi cặp
đỉnh không liền kề u và v, ta có

deg(u) + deg(v) ≥ n,

khi đó G là đồ thị Hamilton.

16 / 24
Chứng minh định lý Ore

▶ Giả sử định lý không đúng.


▶ Tồn tại đồ thị G = (V, E) với n đỉnh và có nhiều cạnh nhất
thỏa mãn điều kiện của định lý Ore nhưng không là Hamilton.
Tại sao?
▶ Vì G có nhiều cạnh nhất có thể nên đồ thị thu được bằng
cách thêm một cạnh mới nối hai đỉnh không kề nhau phải có
chu trình Hamilton chứa cạnh thêm đó. Tại sao?
▶ Vậy giữa hai đỉnh bất kỳ trong G có thể nối với nhau bằng
một đường Hamilton.

17 / 24
Chứng minh (tiếp)

▶ Vì đồ thị Kn có chu trình Hamilton nên G ̸= Kn .


▶ Vậy tồn tại hai đỉnh v1 và vn không kề nhau trong G,
▶ và tồn tại đường Hamilton:

v1 v2 vn−1 vn
...

18 / 24
Chứng minh (tiếp)

▶ Giả sử v1 kề với k đỉnh là: vi1 , vi2 , · · · , vik và

2 = i1 < i2 < · · · < ik

▶ Đỉnh vn không thể kề với đỉnh vij −1 nào (2 ≤ j ≤ k) vì nếu


không sẽ tồn tại chu trình Hamilton:

v1 v2 vij −1 vij vn−1 vn


... ...

19 / 24
Chứng minh (tiếp)

v1 v2 vij −1 vij vn−1 vn


... ...

▶ Vậy vn không kề với ít nhất k đỉnh {vi1 −1 , vi2 −1 , . . . , vik −1 , }.


Tức là

deg(vn ) ≤ n − 1 − k

▶ Nhưng vậy thì

n ≤ deg(v1 ) + deg(vn ) ≤ k + (n − 1 − k) = n − 1 7

20 / 24
Định lý (Dirac)
Nếu G là một đồ thị với n ≥ 3 đỉnh thỏa mãn: bậc của mỗi đỉnh ít
nhất bằng n/2, khi đó G là đồ thị Hamilton.

Chứng minh.
▶ Với hai đỉnh không kề nhau bất kỳ u và v ta có

deg(u) + deg(v) ≥ n/2 + n/2 = n

▶ Suy ra, G thỏa mãn các điều kiện của định lý Ore, vì thế nó
có chu trình Hamilton.

21 / 24
Bài tập

▶ Hãy chỉ ra rằng các điều kiện trên không phải điều kiện cần.
▶ Có nghĩa rằng: chỉ ra tồn tại đồ thị không thỏa mãn điều kiện
Dirac mà vẫn có chu trình Hamilton.

22 / 24
one position from the preceding bit string, and the last string differ
Mã Gray position. We can model this problem using the n-cube Qn . What is
is a Hamilton circuit in Qn . Such Hamilton circuits are easily fou
▶ Chia đường tròn thành 2n cung có độ dài bằng nhau, và gán
mỗi xâu bít độ dài n cho một cung.
(a) (b)
111 000 100 000

110 001 101 001

101 010 111


011
100 011 110 010

▶ Tìm cách gán đảm


FIGURE 12 bảo rằng haithe
Converting cung cạnh nhau
Position chỉ khácinto Digita
of a Pointer
nhau một bit.

23 / 24
Mã Gray 2

110 111

100
101
010
011

000 001

FIGURE 14 A Hamilton 24 / 24
Đồ thị có hướng

Trần Vĩnh Đức

Ngày 24 tháng 7 năm 2018

1 / 34
Tài liệu tham khảo

▶ Eric Lehman, F Thomson Leighton & Albert R Meyer,


Mathematics for Computer Science, 2013 (Miễn phí)
▶ Ngô Đắc Tân, Lý thuyết Tổ hợp và Đồ thị, NXB ĐHQG Hà
Nội, 2004.
▶ Douglas B. West. Introduction to Graph Theory. 2nd Edition,
2000.

2 / 34
Nội dung

Định nghĩa và ví dụ

Đồ thị thi đấu


Định nghĩa
Một đồ thị có hướng là một cặp có thứ tự G = (V, E), ở đây V là
một tập, còn E là một tập con của tích đề các V × V, tức E là
một quan hệ hai ngôi trên V.
▶ Các phần tử của V thường được gọi là các đỉnh.
▶ Các phần của E gọi là các cung.
▶ Cụ thể hơn, nếu (a, b) ∈ E thì (a, b) được gọi là cung của G
với đỉnh đầu là a và đỉnh cuối là b,
▶ và ta viết a → b

4 / 34
Đồ thị có hướng

v2 Đồ thị có hướng G =
(V, E):

V = {v1 , v2 , v3 }
v1
E = {v1 → v1 , v1 → v2 , v1 → v3 ,
v2 → v3 , v3 → v2 }
v3

5 / 34
Bậc vào & bậc ra

v2
Đỉnh indeg outdeg
v1 1 3
v1 v2 2 1
v3 2 1
5 5
v3

6 / 34
v2
Mệnh đề

∑ ∑ v1
indeg(v) = outdeg(v) = |E|
v∈V v∈V
v3

7 / 34
Hành trình có hướng và đường đi có hướng

Hành trình Hành trình đơn Đường đi


Lặp cạnh 3 7 7
Lặp đỉnh 3 3 7

8 / 34
Định nghĩa
Xét G = (V, E) là đồ thị có hướng với V = {v1 , v2 , . . . , vn }.
Ma trận kề A = (aij ) của G định nghĩa bởi
{
1 nếu vi → vj
aij =
0 ngược lại.

Ví dụ

v2

 
1 1 1
v1
A = 0 0 1
0 1 0
v3

9 / 34
Định lý
Xét G = (V, E) là đồ thị có hướng với n đỉnh

V = {v1 , v2 , . . . , vn }.
(k)
và A = (aij ) là ma trận kề của G. Xét (pij ) là số hành trình có
hướng từ vi tới vj . Khi đó
(k)
Ak = (pij ).

10 / 34
Ví dụ
v2  
1 1 1
A= 0 0 1
v1 0 1 0
   
1 2 2 1 3 3
A2 = 0 1 0 A3 = 0 0 1 
v3 0 0 1 0 1 0

11 / 34
Chứng minh

▶ Bằng quy nạp theo độ dài hành trình.


▶ Ta ký hiệu aij(k) là phần tử ở hàng i cột j của ma trận Ak .
▶ Ta đặt
(k) (k)
P(k) := ∀i, j aij = pij
▶ Bước cơ sở: k = 1. 3 Tại sao?

12 / 34
Chứng minh: Bước quy nạp

▶ Giả sử P(k) 3
▶ Hành trình độ dài k + 1 từ vi đến vj có thể tách thành

k
vi ; vh → vj

k
▶ với vi ; vh là một hành trình độ dài k từ vi tới vh
▶ và h : vh → vj là một cạnh trong G.

13 / 34
Chứng minh: Bước quy nạp (tiếp)

(k+1)
∑ (k)

n
(k)
pij = pih = pih · ahj
h: vh →vj h=1

n
(k)
= aih · ahj (giả thiết quy nạp)
h=1
(k+1)
= aij (quy tắc nhân ma trận)
3

14 / 34
Định nghĩa
Một đồ thị có hướng G = (V, E) là liên thông mạnh nếu với mọi
u, v ∈ V, tồn tại một đường đi có hướng từ u tới v trong G.

15 / 34
Định nghĩa
Một đồ thị có hướng được là phi chu trình (DAG) nếu nó không
chứa chu trình có hướng.

v2

v1 v4 v5

v3

16 / 34
Nội dung

Định nghĩa và ví dụ

Đồ thị thi đấu


Định nghĩa
▶ Một đồ thị định hướng của một đồ thị (vô hướng)
G = (V, E) là một đồ thị có hướng thu được từ G bằng cách
chọn một hướng

x→y hoặc y → x

cho mỗi cạnh xy ∈ E.


▶ Đồ thị thi đấu là một đồ thị định hướng của một đồ thị đầy
đủ nào đó.

18 / 34
Ví dụ
▶ Đồ thị định hướng của đồ thị đầy đủ cho phép mô hình hóa
các giải đấu thể thao kiểu “round-robin”.
▶ Giải đấu gồm n đội và mỗi đội thi đấu với tất cả các đội khác.
▶ Với mỗi cặp u, v, ta có cạnh u → v nếu u thắng v.
▶ Cuối giải ta có một đồ thị định hướng của Kn .
▶ “Điểm số” của mỗi đội chính là bậc ra của đội đó, là số lần
thắng.

19 / 34
Đội nào vô địch?

20 / 34
Định nghĩa
Một đường đi Hamilton có hướng là hành trình đi qua mỗi đỉnh
của G đúng một lần.

21 / 34
Có phải mọi đồ thị thi đấu đều có đường Hamilton?

22 / 34
Định lý
Mọi đồ thị thi đấu đều chứa một đường đi Hamilton.

23 / 34
Chứng minh
▶ Bằng quy nạp theo số đỉnh n của đồ thị. Đặt

P(n) := “Mọi đồ thị thi đấu với n đỉnh đều chứa đường đi Hamilton

▶ Bước cơ sở: n = 1 3
▶ Bước quy nạp: Giả sử P(n) đúng.
▶ Xét đồ thị thi đấu n + 1 đỉnh.
▶ Bỏ đi một đỉnh v bất kỳ, ta còn đồ thị thi đấu n đỉnh:

{v1 , v2 , . . . , vn }.

▶ Theo quy nạp ta có đường đi

v1 → v2 → · · · → vn .

24 / 34
Trường hợp 1

Nếu v → v1 , vậy ta có đường Hamilton

v → v1 → v2 → · · · → vn

25 / 34
Trường hợp 2

Nếu v1 → v và tồn tại i nhỏ nhất sao cho v → vi .


v1 v2 vi−1 vi vn
... ...

26 / 34
Trường hợp 3

Nếu v1 → v và với mọi i, vi → v. Vậy ta có đường Hamilton

v1 → v2 → · · · → vn → v 3

27 / 34
Trò chơi chọi gà

▶ Hoặc con gà u thắng con gà v: u → v


▶ Hoặc con gà v thắng con gà u: v → u
▶ Con gà u gọi là gần thắng con gà v nếu
{
u→w
u→v hoặc
w→v

▶ Một vua gà là con gà gần thắng mọi con gà khác.

28 / 34
Ví dụ
Hãy tìm các vua gà.

v1 v2

v4 v3

29 / 34
Câu hỏi
Có phải mọi đồ thị thi đấu đều có vua gà?

30 / 34
Định lý
Con gà với bậc ra cao nhất là một vua.

31 / 34
Chứng minh

Ta chứng minh bằng phản chứng. Xét u có bậc ra cao nhất và u


không là vua. Vậy tồn tại v thỏa mãn:
1. v → u, và
2. Với mọi w: ¬(u → w) hoặc ¬(w → v)
| {z } | {z }
w→u v→w

32 / 34
Nhắc lại tương đương logic

¬P ∨ Q ≡ P⇒Q

33 / 34
Chứng minh

Ta chứng minh bằng phản chứng. Xét u có bậc ra cao nhất và u


không là vua. Vậy tồn tại v thỏa mãn:
1. v → u, và
2. Với mọi w: ¬(u → w) hoặc ¬(w → v)
| {z } | {z }
w→u v→w
Khẳng định 2 tương đương với
Nếu u → w vậy v → w.
Kết
hợp với khẳng định 1 ta được

outdeg(v) ≥ outdeg(u) + 1 7.

34 / 34
Đếm

Trần Vĩnh Đức

HUST

1 / 48
Tài liệu tham khảo

▶ E.Lehman, T. Leighton, A. Meyer, Mathematics for Computer


Science, 2015.

2 / 48
Nội dung

Tập, dãy, và ánh xạ

Luật ánh xạ

Luật tích và luật tổng

Nguyên lý bù trừ

Luật BOOKEEPER

Chứng minh tổ hợp


Dãy và tập

▶ Dãy: có thứ tự, các phần tử có thể trùng nhau

(a, b, a) ̸= (b, a, a)

▶ Tập: không thứ tự, các phần tử không trùng nhau

{a, b, c} = {b, a, c}

4 / 48
Định nghĩa
Một hoán vị của một tập S là một dãy chứa mỗi phần tử của S
đúng một lần.

5 / 48
Số hoán vị của một tập

▶ Tập {a, b, c} có 6 hoán vị:

{ (a, b, c), (b, c, a), (c, a, b),


(c, b, a), (b, a, c), (a, c, b) }

▶ Số hoán vị của tập n phần tử là

n! = n(n − 1) · · · 1

6 / 48
Định nghĩa
Một ánh xạ
f:X→Y
là một quy tắc cho tương ứng mỗi phần tử của X với đúng một
phần tử của Y.

7 / 48
Ví dụ
Quy tắc tương ứng f : {a, b, c} → {1, 2, 3} định nghĩa dưới đây có
phải ánh xạ không?

a 1

b 2

c 3

8 / 48
Ví dụ
Quy tắc sau đây có phải ánh xạ không?

a 1

b 2

c 3

9 / 48
Định nghĩa
Ánh xạ f : X → Y là
▶ toàn ánh nếu mỗi phần tử của Y đều có ít nhất một phần tử
tương ứng từ X.
▶ đơn ánh nếu mỗi phần tử của Y đều có nhiều nhất một phần
tử tương ứng từ X.
▶ song ánh nếu mỗi phần tử của Y đều có chính xác một phần
tử tương ứng từ X.

10 / 48
Ví dụ

Ánh xạ dưới đây là đơn ánh hay toàn ánh hay song ánh?

a 1

b 2

c 3

11 / 48
Ví dụ
Xét hoán vị (a1 , a2 , · · · , an ) của tập S = {a1 , a2 , · · · , an }. Ánh xạ

π : {a1 , a2 , . . . , an } → {1, 2, . . . , n}

định nghĩa bởi


π(ai ) = i
là song ánh. Tại sao?

12 / 48
Nội dung

Tập, dãy, và ánh xạ

Luật ánh xạ

Luật tích và luật tổng

Nguyên lý bù trừ

Luật BOOKEEPER

Chứng minh tổ hợp


Định lý
Nếu ánh xạ f : X → Y là
▶ toàn ánh thì |X| ≥ |Y|.
▶ đơn ánh thì |X| ≤ |Y|.
▶ song ánh thì |X| = |Y|.

14 / 48
Định lý
Số cây gán nhãn với n đỉnh là nn−2 .
0

5 3

2 4 12
1

Prüfer(T) ←→ 8 9 7

10 6 16
15 13

11
14

15 / 48
Ví dụ
Có bao nhiêu cách chọn 12 chiếc bánh từ 5 loại bánh sô cô la,
chanh, có đường, kem, nguyên chất?
▶ X = tập mọi cách chọn 12 chiếc bánh từ 5 loại bánh.
▶ Y = tập mọi xâu 16 bit có đúng 4 số 1.
▶ Song ánh từ X đến Y

0 0 1 |{z} 1 0| 0 0{z0 0 0} 1 |{z}


|{z} 00 1 00
|{z}
sô cô la chanh có đường kem nguyên chất

▶ |X| = |Y|

16 / 48
Ví dụ
▶ Xét song ánh từ các tập con của X = {1, 2, . . . , n} tới dãy
n-bit
S → (b1 , . . . , bn )
với {
1 nếu i ∈ S
bi =
0 nếu i ∈
/S
▶ Số dãy n-bit là 2n .
▶ Vậy X có 2n tập con.

17 / 48
Ánh Xạ “k đến 1”

Định nghĩa
Ánh xạ f : X → Y gọi là ánh xạ “k đến 1” nếu nó ánh xạ đúng k
phần tử của X tới mỗi phần tử của Y.
Song ánh là ánh xạ “1 đến 1”

18 / 48
Luật chia (tổng quát hóa của luật song ánh)

▶ Nếu f : X → Y là ánh xạ “k đến 1”, thì

|X| = k · |Y|.

▶ Nếu f là song ánh vậy |X| = |Y|.

19 / 48
Ví dụ
Có bao nhiêu cách đặt hai quân cờ giống nhau lên bàn cờ 8 × 8
sao cho chúng không chung hàng và không chung cột ?
▶ Y = tập mọi cấu hình hợp lệ cho hai quân cờ.
▶ X = mọi dãy
(h1 , c1 , h2 , c2 )
| {z } | {z }
quân1 quân2

thỏa mãn h1 ̸= h2 và c1 ̸= c2 .
▶ Có một ánh xạ “2 đến 1” từ X lên Y. Tại sao?
▶ Vậy
|X| 8×8×7×7
|Y| = = .
2 2

20 / 48
Nội dung

Tập, dãy, và ánh xạ

Luật ánh xạ

Luật tích và luật tổng

Nguyên lý bù trừ

Luật BOOKEEPER

Chứng minh tổ hợp


Luật tích

Định nghĩa

A1 × A2 × · · · × An = {(a1 , · · · , an ) | ai ∈ Ai }

Định lý
Nếu A1 , . . . , An là các tập hữu hạn, vậy thì

|A1 × A2 × · · · × An | = |A1 | × |A2 | × · · · × |An |.

22 / 48
Luật tổng

Định lý
Nếu A1 , A2 , . . . , An là các tập rời nhau, vậy

|A1 ∪ A2 ∪ · · · ∪ An | = |A1 | + |A2 | + · · · + |An |.

23 / 48
Bài toán
Có bao nhiêu cách chọn trong nhóm n người một ủy ban ba người
trong đó một người làm chủ tịch, một người làm thư ký, và một
người làm tư vấn?

24 / 48
Lời giải
▶ Mỗi cách chọn một ủy ban

x , y , |{z}
( |{z} x )
|{z}
chủ tịch thư ký tư vấn

▶ với n người có thể làm chủ tịch,


▶ còn lại n − 1 người có thể làm thư ký (trừ x),
▶ còn lại n − 2 người có thể làm tư vấn (trừ x và y).
▶ Vậy có n(n − 1)(n − 2) cách chọn.

25 / 48
Bài toán
▶ Số seri của các tờ tiền có dạng

MQ 09 19 99 99

▶ Tờ tiền khuyết số nếu có một chữ số xuất hiện hơn một lần
trong số seri gồm 8 chữ số.
▶ Tờ tiền khuyết số có phổ biến không?

26 / 48
Bài toán
Đếm xem có bao nhiêu mật khẩu thỏa mãn 4 yêu cầu sau đây:
1. Dài từ 6 đến 8 ký hiệu;
2. Phải bắt đầu bằng một chữ cái;
3. Chỉ gồm 26 chữ cái thường hoặc 26 chữ cái hoa hoặc các số 0
đến 9;
4. Có phân biệt chữ hoa chữ thường.

27 / 48
Nội dung

Tập, dãy, và ánh xạ

Luật ánh xạ

Luật tích và luật tổng

Nguyên lý bù trừ

Luật BOOKEEPER

Chứng minh tổ hợp


A∩B

A B

Theo luật tổng ta có:

|A| = |A \ B| + |A ∩ B|
|B| = |B \ A| + |A ∩ B|
|A ∪ B| = |A \ B| + |A ∩ B| + |B \ A|

29 / 48
Nguyên lý bù trừ cho hai tập

|A ∪ B| = |A| + |B| − |A ∩ B|.

30 / 48
Nguyên lý bù trừ cho ba tập

|A ∪ B ∪ C| = |A| + |B| + |C|


− |A ∩ B| − |B ∩ C| − |A ∩ C|
+ |A ∩ B ∩ C|.

A C

31 / 48
Nguyên lý bù trừ


n
|S1 ∪ S2 ∪ · · · ∪ Sn | = |Si |
i=1

− |Si ∩ Sj |
1≤i<j≤n

+ |Si ∩ Sj ∩ Sk | + · · ·
1≤i<j<k≤n

(−1)n−1 | ∩ni=1 Si |.

32 / 48
Nguyên lý bù trừ (cách viết khác)

∑ ∩
|I|−1
|S1 ∪ S2 ∪ · · · ∪ Sn | = (−1) Si

∅̸=I⊆{1,2,...,n} i∈I

33 / 48
Bài toán
▶ Có bao nhiêu hoán vị của tập {0, 1, . . . , 9} có chứa (liền
nhau) 42, 04 hoặc 60?
▶ Ví dụ, hoán vị sau đây chứa 60 và 04.

(7, 2, 5, 6, 0, 4, 3, 5, 1, 9)

34 / 48
Bài toán (François Édouard Anatole Lucas, 1894)
Cho một cái bàn tròn và m cặp vợ chồng, có bao nhiêu cách để
xếp họ ngồi nam nữ xem kẽ sao cho không cặp vợ chồng nào ngồi
kề nhau?

35 / 48
Nội dung

Tập, dãy, và ánh xạ

Luật ánh xạ

Luật tích và luật tổng

Nguyên lý bù trừ

Luật BOOKEEPER

Chứng minh tổ hợp


Định lý (Luật BOOKEEPER)
▶ Xét k chữ phân biệt c1 , c2 , . . . , ck .
▶ Số dãy gồm n1 chữ c1 , n2 chữ c2 , . . . , và nk chữ ck là
( )
n1 + n2 + · · · + nk (n1 + n2 + · · · + nk )!
=
n1 , n2 , · · · , nk n1 !n2 ! · · · nk !

37 / 48
Định lý (Công thức nhị thức)

( ) ( )
n n n!
= =
k, n − k k k!(n − k)!

38 / 48
Ví dụ
Số dãy 16-bit chứa đúng 4 bit 1 là
( )
16 16!
= .
4 4!12!

Đây chính là số cách chọn tập con 4 phần tử từ tập 16 phần tử.

39 / 48
Ví dụ (Luật tập con)
Số tập con k phần tử của tập n phần tử là
( )
n
.
k

40 / 48
Định lý (Hệ số nhị thức)
Với mọi n ≥ 0 ta có
n ( )
∑ n n−k k
(a + b)n = a b .
k
k=0

▶ (a + b)2 = aa + ab + ba + bb = a2 + 2ab + b2
▶ (a + b)3 =

aaa + aab + aba + baa + abb + bab + bba + bbb


= a3 + 3a2 b + 3b2 a + b3
( n)
▶ Số dãy độ dài n chứa k chữ a và (n − k) chữ b là k .

41 / 48
Nội dung

Tập, dãy, và ánh xạ

Luật ánh xạ

Luật tích và luật tổng

Nguyên lý bù trừ

Luật BOOKEEPER

Chứng minh tổ hợp


Ví dụ
▶ Có n chiếc áo phân biệt,
( )
▶ Số cách giữ lại k chiếc áo là nk .
( n )
▶ Số cách bỏ đi n − k chiếc áo là n−k .
▶ Vậy ta có ( ) ( )
n n n!
= =
k n−k k!(n − k)!

43 / 48
Ví dụ
▶ Chọn một đội gồm k sinh viên trong số n sinh viên.
( )
▶ Số đội có Bob là n−1
k−1 .
( )
▶ Số đội không có Bob là n−1
k .
▶ Vậy ta có (đẳng thức Pascal)
( ) ( ) ( )
n−1 n−1 n
+ = .
k−1 k k

44 / 48
Đếm bằng hai cách

1. Định nghĩa S.
2. Chứng minh |S| = n (một cách đếm).
3. Chứng minh |S| = m (một cách đếm khác).
4. Kết luận m = n.

45 / 48
Định lý
n ( ) (
∑ ) ( )
n 2n 3n
· = .
r n−r n
r=0

46 / 48
Chứng minh

▶ S = các bộ bài gồm n quân chọn từ n quân đỏ và 2n quân


đen trên bàn.
▶ Vậy ( )
3n
|S| = .
n

47 / 48
Chứng minh 2

▶ Số bộ bài với đúng r quân đỏ là


( )( )
n 2n
r n−r

▶ Số quân đỏ có thể từ 0 đến n nên ta có


n ( )(
∑ )
n 2n
|S| = .
r n−r
r=0

48 / 48
Hàm sinh

Trần Vĩnh Đức

HUST

Ngày 26 tháng 4 năm 2016

1 / 51
Nội dung

Đếm và đa thức

Định nghĩa hàm sinh

Các phép toán trên hàm sinh

Một bài toán đếm


Ký hiệu hình thức
▶ Có 2 quả táo, 3 quả mận, và 4 quả đào.
▶ Ta ký hiệu

T := “lấy một quả táo”


M := “lấy một quả mận”
D := “lấy một quả đào”.

▶ Lấy 1 quả táo, 2 quả mận, và 3 quả đào:

TMMDDD = TM2 D3 .

▶ Lấy 1 quả táo, 1 quả mận, và 1 quả đào hoặc lấy 1 quả táo, 1
quả đào, và 2 quả mận”:

TMD + TMD2 .

3 / 51
Câu hỏi
Xâu sau đây biểu diễn những lựa chọn gì?

TMD + TMD2 + TM2 D + T2 MD + TM2 D2 + · · · + T2 M3 D4


= (T + T2 )(M + M2 + M3 )(D + D2 + D3 + D4 ).

Lời giải
Đây như một chuỗi hình thức mô tả mọi khả năng chọn trong số 2
quả táo, 3 quả mận, và 4 quả đào, mỗi loại ít nhất một quả.

4 / 51
Bài tập
Có bao nhiêu cách chọn 6 quả trong số 2 quả táo, 3 quả mận, và 4
quả đào, mỗi loại ít nhất một quả?

Lời giải
▶ Ta chỉ cần thay thế mỗi T, M, D bằng biến hình thức x trong
chuỗi

(T + T2 )(M + M2 + M3 )(D + D2 + D3 + D4 ).

▶ Vậy mọi số hạng có số mũ 6 ứng với số lần x6 xuất hiện.


▶ Hệ số của x6 chính là số cách chọn 6 quả.

5 / 51
Đa thức và đếm

▶ Khi thay thế T, M, D bằng x thì hệ số của xk chính là số cách


chọn đúng k quả.
▶ Ta có

(x + x2 )(x + x2 + x3 )(x + x2 + x3 + x4 )
= x3 (1 + x)(1 + x + x2 )(1 + x + x2 + x3 )
= x3 (1 + 2x + 2x2 + x3 )(1 + x + x2 + x3 )
= x3 + 3x4 + 5x5 + 6x6 + 5x7 + 3x8 + x9 .

▶ Vậy có 6 cách lựa chọn 6 quả, 5 cách chọn 7 quả . . . .

6 / 51
Câu hỏi
▶ Giả sử một quả mận có 20 calo, một quả đào có 40 calo, và
một quả táo có 60 calo.
▶ Nếu ta thay thế

T → x60 , M → x40 D → x20

trong chuỗi hình thức

(T + T2 )(M + M2 + M3 )(D + D2 + D3 + D4 ).

thì hệ số của xn là gì?

7 / 51
Lời giải
▶ Ta thay thế

T → x60 , M → x40 D → x20

▶ Vậy thì hệ số của xn của đa thức là số cách chọn quả để có n


calo.
▶ Vì khi chọn Ti Mj Dk ta được 60i + 40j + 20k calo.

8 / 51
Ví dụ
▶ Từ đa thức
(x60 + x120 )(x40 + x80 + x120 )(x20 + x40 + x60 + x80 )
= x120 (1 + x20 + 2x40 + 3x60 + 3x80 + 4x100 + 3x120
+ 3x140 + 2x160 + x180 + x200 )
= x120 + x140 + 2x160 + 3x180 + 3x200 + 4x220 + 3x240
+ 3x260 + 2x280 + x300 + x320

▶ Ta thấy có 3 cách chọn quả để có 200 calo.

9 / 51
Bài tập
▶ Biết rằng quả táo giá 60 đồng, quả mận giá 40 đồng, và đào
giá 20 đồng.
▶ Có bao nhiêu cách chọn các quả giá 200 đồng, có thể có loại
quả không được chọn?

10 / 51
Bài tập
Hãy tìm đa thức có hệ số xk là số nghiệm nguyên không âm của
phương trình
x1 + x2 + x3 = k.

11 / 51
Câu hỏi
Ta có thể dùng kỹ thuật mô tả ở phần trước để lựa chọn các quả
táo, đào và mận nhưng không hạn chế bao nhiêu quả cần lấy.

T0 M0 D0 + TM0 D0 + · · · + TMD + TMD2 + · · · + Ti Mj Dk + · · ·

12 / 51
Tính toán hình thức

▶ Việc chọn không, một,. . . tới một số bất kỳ táo (mận, đào )
có thể biểu diễn một cách hình thức là

T0 + T1 + T2 + · · · + Ti + · · ·
M0 + M1 + M2 + · · · + Mj + · · ·
D0 + D1 + D2 + · · · + Dk + · · ·

▶ Việc chọn táo, đào, mận với số lượng tùy ý có thể viết dưới
dạng tích
( 0 )( )( )
T + T1 + · · · M0 + M1 + · · · D0 + D1 + · · · .

13 / 51
Ví dụ
Nếu thay thế T, M, D bởi x thì hệ số của xn trong tích của ba
chuỗi vô hạn sau chính là số cách chọn đúng n quả.

(1 + x + x2 + · · · + xi + · · · )3 .

14 / 51
Nội dung

Đếm và đa thức

Định nghĩa hàm sinh

Các phép toán trên hàm sinh

Một bài toán đếm


Định nghĩa
Hàm sinh của dãy số ⟨g0 , g1 , g2 , · · · ⟩ là chuỗi vô hạn

G(x) = g0 + g1 x + g2 x2 + · · · .

Ta sử dụng ký hiệu mũi tên hai phía để chỉ tương ứng giữa một
dãy số và hàm sinh của nó như sau:

⟨g0 , g1 , g2 , · · · ⟩ ←→ g0 + g1 x + g2 x2 + · · · .

16 / 51
Định nghĩa
Ta ký hiệu [xn ]G(x) là hệ số của xn trong hàm sinh

G(x) = g0 + g1 x + g2 x2 + · · · .

Có nghĩa rằng [xn ]G(x) = gn .

17 / 51
Ví dụ
Dưới đây là một vài dãy số và hàm sinh của chúng:

⟨0, 0, 0, 0, · · · ⟩ ←→ 0 + 0x + 0x2 + 0x3 + · · · = 0


⟨1, 0, 0, 0, · · · ⟩ ←→ 1 + 0x + 0x2 + 0x3 + · · · = 1
⟨3, 2, 1, 0, · · · ⟩ ←→ 3 + 2x + 1x2 + 0x3 + · · · = 3 + 2x + x2

18 / 51
Ví dụ
▶ Hàm sinh cho dãy vô hạn ⟨1, 1, 1, · · · ⟩ là chuỗi hình học

G(x) := 1 + x + x2 + x3 + · · ·

Ta có
G(x) = 1 + x + x2 + x3 + · · · + xn + · · ·
−xG(x) = 1 − x − x2 − x3 − · · · − xn − · · ·
G(x) − xG(x) = 1
▶ Vậy hàm sinh của dãy 1, 1, . . . là

∑ ∞
1
= G(x) := xn .
1−x
n=0

19 / 51
Bài tập
Hãy tìm công thức đóng cho hàm sinh của các dãy sau:
1. ⟨ 0, 0, 0, 0, −6, 6, −6, 6, −6, 6, · · · ⟩
2. ⟨1, 0, 1, 0, 1, 0, · · · ⟩
3. ⟨1, 1, 0, 1, 1, 0, 1, 1, 0, · · · ⟩

20 / 51
Bài tập
Chứng minh rằng hàm sinh của dãy ⟨1, 2, 3, · · · ⟩ là
1
.
(1 − x)2

21 / 51
Đạo hàm của chuỗi

Lời giải
▶ Lấy đạo hàm của chuỗi
1
1 + x + x2 + x3 + · · · =
1−x
ta được
1
1 + 2x + 3x2 + 4x3 + · · · =
(1 − x)2
▶ Đây chính là hàm sinh của dãy

⟨1, 2, 3, 4, · · · ⟩.

22 / 51
Dịch phải bằng cách nhân với x

Xét hàm sinh


G(x) = g0 + g1 x + g2 x2 + · · · .
Vậy thì
xG(x) = 0 + g0 x + g1 x2 + g2 x3 + · · ·
Có nghĩa rằng
[xn−1 ]G(x) = [xn ]xG(x).

23 / 51
Bài tập
Tìm hàm sinh của dãy

⟨0, 1, 2, 3, . . . ⟩

24 / 51
Lời giải
▶ Hàm sinh của dãy số ⟨1, 2, 3, · · · ⟩ là
1
G(x) =
(1 − x)2
▶ Vậy thì
x
xG(x) = = 0 + x + 2x2 + 3x3 + · · · .
(1 − x)2

là hàm sinh của dãy ⟨0, 1, 2, 3, · · · ⟩.

25 / 51
Bài tập

1
⟨1, −1, 1, −1, · · · ⟩ ←→ 1 − x + x2 − x3 + x4 − · · · =
1+x

26 / 51
Bài tập

1
⟨1, a, a2 , a3 , · · · ⟩ ←→ 1 + ax + a2 x2 + a3 x3 + · · · =
1 − ax

27 / 51
Bài tập

1
⟨1, 0, 1, 0, 1, 0, · · · ⟩ ←→ 1+x2 +x4 +x6 +x8 +· · · =
1 − x2

28 / 51
Nội dung

Đếm và đa thức

Định nghĩa hàm sinh

Các phép toán trên hàm sinh

Một bài toán đếm


Luật (nhân với hằng số)
Nếu
⟨f0 , f1 , f2 , · · · ⟩ ←→ F(x),
thì
⟨cf0 , cf1 , cf2 , · · · ⟩ ←→ c · F(x).

30 / 51
Ví dụ
Ta biết rằng
1
⟨1, 0, 1, 0, 1, 0, · · · ⟩ ←→ 1 + x2 + x4 + x6 + x8 + · · · =
1 − x2
Nhân hàm sinh này với 2 ta được
2
= 2 + 2x2 + 2x4 + 2x6 + · · ·
1 − x2
sinh dãy
⟨2, 0, 2, 0, 2, 0, · · · ⟩

31 / 51
Luật (cộng)
Nếu

⟨f0 , f1 , f2 , · · · ⟩ ←→ F(x),
⟨g0 , g1 , g2 , · · · ⟩ ←→ G(x),

thì

⟨f0 + g0 , f1 + g1 , f2 + g2 , · · · ⟩ ←→ F(x) + G(x).

32 / 51
Ý tưởng của luật cộng



⟨f0 + g0 , f1 + g1 , f2 + g2 , · · · ⟩ ←→ (fn + gn )xn
n=0
( ∞
) ( ∞
)
∑ ∑
= fn xn + gn xn
n=0 n=0
= F(x) + G(x)

33 / 51
Ví dụ
Xét hai hàm sinh:
1
⟨1, 1, 1, 1, · · · ⟩ ←→
1−x
1
+ ⟨1, −1, 1, −1, · · · ⟩ ←→
1+x

1 1 2
⟨2, 0, 2, 0, · · · ⟩ ←→ + =
1−x 1+x 1 − x2

34 / 51
Luật (dịch phải)
Nếu ⟨f0 , f1 , f2 , · · · ⟩ ←→ F(x), vậy thì

⟨0, · · · , 0, f0 , f1 , f2 , · · · ⟩ ←→ xk · F(x).
| {z }

35 / 51
Luật (đạo hàm)
Nếu
⟨f0 , f1 , f2 , · · · ⟩ ←→ F(x)
vậy thì
⟨f1 , 2f2 , 3f3 , · · · ⟩ ←→ F′ (x).

36 / 51
Bài tập
Hãy tìm hàm sinh cho dãy số bình phương hoàn hảo

⟨0 · 0, 1 · 1, 2 · 2, 3 · 3, · · · ⟩ = ⟨0, 1, 4, 9, · · · ⟩.

37 / 51
Luật (tích)
Nếu

⟨a0 , a1 , a2 , · · · ⟩ ←→ A(x)
⟨b0 , b1 , b2 , · · · ⟩ ←→ B(x),

vậy thì
⟨c0 , c1 , c2 , · · · ⟩ ←→ A(x) · B(x),
trong đó

cn := a0 bn + a1 bn−1 + a2 bn−2 + · · · + an b0 .

38 / 51
Luật tích

b0 x0 b1 x1 b2 x2 b3 x3 ···

a0 x0 a0 b0 x0 a0 b1 x1 a0 b2 x2 a0 b3 x3 ···

a1 x1 a1 b0 x1 a1 b1 x2 a1 b2 x3 ···

a2 x2 a2 b0 x2 a2 b1 x3 ···

a3 x3 a3 b0 x3 ···

..
. ···

39 / 51
Nội dung

Đếm và đa thức

Định nghĩa hàm sinh

Các phép toán trên hàm sinh

Một bài toán đếm


Bài tập
Có bao nhiêu cách để lấy n quả thỏa mãn ba yêu cầu sau đây?
▶ Nhiều nhất 2 quả cam.
▶ Số táo là tùy ý.
▶ Số chuối phải chia hết cho 3.

41 / 51
Với n = 4 quả

1. 0 quả cam, 1 quả táo, 3 quả chuối


2. 0 quả cam, 4 quả táo, 0 quả chuối
3. 1 quả cam, 0 quả táo, 3 quả chuối
4. 1 quả cam, 3 quả táo, 0 quả chuối
5. 2 quả cam, 2 quả táo, 0 quả chuối

42 / 51
Nhiều nhất hai quả cam

Hàm sinh cho dãy số ⟨ck ⟩ là “Số cách chọn k quả cam trong đó có
nhiều nhất hai quả cam”:


C(x) = ck xk = 1 + x + x2
k=0
1 − x3
= .
1−x

43 / 51
Số táo tùy ý

Hàm sinh cho dãy số ⟨tk ⟩ là “Số cách chọn k quả táo”:


T(x) = tk xk = 1 + x + x2 + · · ·
k=0
1
= .
1−x

44 / 51
Thay thế x bởi xk

1
←→ ⟨1, 1, 1, · · · ⟩
1−x
1
←→ ⟨1, 0, 0, · · · 0, 1, 0, 0, · · · 0, 1, 0, · · · ⟩
1 − xk | {z } | {z }
k−1 k−1

45 / 51
Số chuối chia hết cho 3

Hàm sinh cho dãy số ⟨bk ⟩ là “Số cách chọn k quả chuối thỏa mãn
số chuối chia hết cho 3”.

B(x) ←→ ⟨1, 0, 0, 1, 0, 0, 1, 0, · · · ⟩
1
B(x) = .
1 − x3

46 / 51
Câu hỏi
Liệu ta có thể dùng các hàm sinh riêng để giải bài toán ban đầu?

1 − x3
C(x) = (nhiều nhất hai cam)
1−x
1
T(x) = (số táo tùy ý)
1−x
1
B(x) = (số chuối chia hết cho 3)
1 − x3

47 / 51
Luật tích chập cho hàm sinh

Hàm sinh cho số cách chọn từ hợp của các tập rời nhau là tích của
các hàm sinh cho số cách chọn từ mỗi tập.

48 / 51
Tích các hàm sinh

▶ Hàm sinh cho số cách chọn quả

1 − x3 1 1
C(x) · T(x) · B(x) = · ·
1 − x 1 − x 1 − x3
1
=
(1 − x)2

▶ Đây chính là hàm sinh cho dãy số

⟨1, 2, 3, · · · ⟩

49 / 51
Bài tập
Có bao nhiêu cách để lấy n quả thỏa mãn ba yêu cầu sau đây?
▶ Nhiều nhất 2 quả cam.
▶ Số táo là tùy ý.
▶ Số chuối phải chia hết cho 3.

Lời giải
Số cách chọn n quả chính là hệ số của xn trong F(x):
( )
n 1
[x ] = n + 1.
(1 − x)2

50 / 51
Bài tập
Có bao nhiêu cách chọn tám thanh kẹo gồm các thanh kẹo sôcôla
hoặc kẹo cafe.

51 / 51
Kỹ thuật Hàm sinh

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 26
Nội dung

Tính các hệ số của hàm sinh

Dãy Fibonacci
Định nghĩa
Ta ký hiệu [xn ]G(x) là hệ số của xn trong hàm sinh

G(x) = g0 + g1 x + g2 x2 + · · · .

Có nghĩa rằng [xn ]G(x) = gn .

3 / 26
Bài tập
Tìm hệ số của xn trong hàm sinh
1
.
(1 − x)c

4 / 26
Lời giải
Ta có
1
= (1 + x + x2 + · · · )c .
(1 − x)c
Hệ số của xn trong hàm sinh trên chính là số nghiệm nguyên
không âm của phương trình

e1 + e2 + · · · + ec = n.

5 / 26
Lời giải (tiếp)
Xét song ánh giữa các nghiệm của phương trình

e1 + e2 + · · · + ec = n

với

”các dãy nhị phân gồm n số 1 và c − 1 số 0”

như sau:

e1 + e2 + · · · + ec = n ⇔ 11 · · · 1} 0 11
| {z · · · 1} 0 · · · 0 11
| {z · · · 1}
| {z
e1 e2 ec

6 / 26
Lời giải (tiếp)
Theo luật BOOKEEPER thì

”số dãy nhị phân gồm n số 1 và c − 1 số 0”

bằng ( )
n+c−1 (n + c − 1)!
= .
n n!(c − 1)!

7 / 26
Dãy hệ số tổ hợp

Vậy ta có
⟨ ( ) ( ) ( ) ⟩
c+1 c+2 c+3 1
1, c, , , , ··· ←→ .
2 3 4 (1 − x)c

8 / 26
Bài tập
Tìm hệ số của xn trong hàm sinh

(x2 + x3 + x4 + · · · )5 .

Hệ số này chính là số cách chọn n chiếc kẹo từ 5 loại kẹo, mỗi loại
lấy ít nhất hai chiếc.

9 / 26
Bài tập
Tìm hệ số của xn trong hàm sinh

(1 + x)c .

10 / 26
Bài tập
▶ Ta cần $15 để đóng góp cứu trợ đồng bào vùng bão lụt.
▶ Có 20 sinh viên tham gia đóng góp.
▶ Biết rằng 19 người đầu tiên sẽ góp $1 hoặc không, người
thứ 20 sẽ góp $1 hoặc $5 (hoặc không góp).
▶ Hãy dùng hàm sinh để tính số cách quyên góp $15.

11 / 26
Bài tập
Hãy tính số cách để lấy 25 quả bóng giống nhau từ 7 chiếc hộp
biết rằng hộp đầu tiên có không nhiều hơn 10 quả, còn các hộp
khác có số quả tuỳ ý.

12 / 26
Bài tập
Có bao nhiêu cách chọn n quả với các rằng buộc sau?
▶ Số táo phải chẵn.
▶ Số chuối phải chia hết cho 5.
▶ Có nhiều nhất bốn quả cam.
▶ Có nhiều nhất một quả đào.

13 / 26
Ví dụ
Chứng minh đẳng thức sau dùng hàm sinh.
( )2 ( )2 ( )2 ( )
n n n 2n
+ + ··· + = .
0 1 n n

14 / 26
Chứng minh.
Hệ số của xn trong hàm sinh F(x) = (1 + x)2n là
( )
2n
.
n

Đặt G(x) = H(x) = (1 + x)n . Vậy hệ số xr trong G(x) = H(x) là


( ) ( )
n n
= .
r n−r

Theo luật tích, hệ số xn trong hàm sinh G(x)H(x) = F(x) là


( )( ) ( )( ) ( )( )
n n n n n n
+ + ··· +
0 n 1 n−1 n 0
( )2 ( )2 ( )2
n n n
= + + ··· +
0 1 n

15 / 26
Nội dung

Tính các hệ số của hàm sinh

Dãy Fibonacci
Dãy Fibonacci

Dãy Fibonacci

⟨0, 1, 1, 2, 3, 5, 8, 13, · · · ⟩

được định nghĩa bởi

f0 = 0
f1 = 1
fn = fn−1 + fn−2 (với n ≥ 2).

17 / 26
Bài tập
Hãy tìm hàm sinh F(x) cho dãy Fibonacci.

⟨0, 1, f1 + f0 , f2 + f1 , f3 + f2 , · · · ⟩

18 / 26
Lời giải

⟨ 0, 1, 0, 0, 0, · · · ⟩ ←→ x
⟨ 0, f0 , f1 , f2 , f3 , · · · ⟩ ←→ xF(x)
+ ⟨ 0, 0, f0 , f1 , f2 , · · · ⟩ ←→ x2 F(x)
⟨ 0, 1 + f0 , f1 + f0 , f2 + f1 , f3 + f2 , · · · ⟩

Vậy ta có

F(x) = x + xF(x) + x2 F(x)


x
= .
1 − x − x2

19 / 26
Bài tập
Hãy viết ra công thức tường minh cho dãy sinh bởi hàm sinh
x
F(x) := .
1 − x − x2

20 / 26
Lời giải
Đầu tiên, ta phân tích mẫu số

1 − x − x2 = (1 − α1 x)(1 − α2 x).

Ta được
1 √
α1 = (1 + 5)
2
1 √
α2 = (1 − 5)
2

21 / 26
Lời giải (tiếp)
Sau đó, ta tìm A1 , A2 thoả mãn

x A1 A2
= + .
1−x−x 2 1 − α1 x 1 − α2 x

bằng cách giải hệ phương trình tuyến tính. Ta được


1 1
A1 = =√
α1 − α2 5
−1 1
A2 = = −√
α1 − α2 5

22 / 26
Lời giải (tiếp)
Bây giờ ta đã có
( )
x 1 1 1
=√ − .
1 − x − x2 5 1 − α1 x 1 − α2 x

Theo công thức hàm sinh ta có


1
= 1 + α1 x + α12 x2 + α13 x3 + · · ·
1 − α1 x
1
= 1 + α2 x + α22 x2 + α23 x3 + · · ·
1 − α2 x

23 / 26
Lời giải (tiếp)
Vậy thì
( )
1 1 1
F(x) = √ −
5 1 − α1 x 1 − α2 x
1 ( )
= √ (1 + α1 x + α12 x2 + · · · ) − (1 + α2 x + α22 x2 + · · · )
5

24 / 26
Lời giải (tiếp)
Cuối cùng ta được công thức lạ cho số Fibonacci thứ n:
α1n − α2n
fn = √
5
(( √ )n ( √ )n )
1 1+ 5 1− 5
= √ − .
5 2 2

25 / 26
Phân thức đơn giản

Bổ đề
▶ Xét p(x) là đa thức có bậc nhỏ hơn n với α1 , · · · , αn là các
nghiệm khác 0 đôi một phân biệt.
▶ Khi đó tồn tại các hằng số c1 , · · · , cn thỏa mãn
p(x) c1 cn
= + ··· + .
(1 − α1 x) · · · (1 − αn x) 1 − α1 x 1 − αn x

26 / 26
Công thức truy hồi

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 45
Nội dung

Ví dụ

Công thức truy hồi

Công thức truy hồi và hàm sinh

Số Catalan

Công thức truy hồi tuyến tính


Ví dụ
Một quần thể vi trùng có số lượng cá thể tăng gấp đôi sau mỗi giờ.
Nếu thoạt đầu có 5 cá thể hỏi sau 5 giờ số lượng của chúng là bao
nhiêu?
{
an = 2an−1
a0 = 5

3 / 45
Bài tập
Hãy tìm công thức tường minh cho dãy
{
an = 2an
a0 = 5

4 / 45
Ví dụ
Xét một cầu thang với n bậc thang. Có bao nhiêu cách để đi lên
cầu thang nếu chúng ta có thể leo lên 1 bậc hoặc 2 bậc trong mỗi
bước?

S1 = 1
S2 = 2
Sn+2 = Sn+1 + Sn với n≥1

5 / 45
Ví dụ
Có bao nhiêu xâu nhị phân độ dài n không chứa hai bit 0 liên tiếp?


an+1 = an + an−1
a1 = 2


a2 = 3

6 / 45
Bài tập
Hãy dùng kỹ thuật hàm sinh để tìm công thức tường minh cho dãy


an+1 = an + an−1
a1 = 2


a2 = 3

7 / 45
Ví dụ
Có bao nhiêu xâu tam phân độ dài n không chứa dãy con ”012”?


an+3 = 3an+2 − an
a1 = 3


a2 = 9

8 / 45
Nội dung

Ví dụ

Công thức truy hồi

Công thức truy hồi và hàm sinh

Số Catalan

Công thức truy hồi tuyến tính


Công thức truy hồi

Định nghĩa
Công thức truy hồi đối với dãy số ⟨an ⟩ là công thức biểu diễn an
qua một hay nhiều số hạng đi trước của dãy.

10 / 45
Ví dụ
Xét dãy số ⟨an ⟩ thỏa mãn công thức
{
an = an−1 − an−2
a0 = 3a1 = 5

Từ công thức truy hồi ta có

a2 = a1 − a0 = 5 − 3 = 2
a3 = a2 − a1 = 2 − 5 = −3

11 / 45
Định nghĩa
Một dãy số được gọi là nghiệm của công thức truy hồi nếu các số
hạng của nó thỏa mãn công thức truy hồi này.

12 / 45
Ví dụ
▶ Xét công thức truy hồi

an = 2an−1 − an−2 với n ≥ 2.

▶ Dãy số ⟨an ⟩ với an = 3n có phải là nghiệm của hệ thức truy


hồi trên hay không?
▶ Còn dãy an = 2n ?
▶ Còn dãy an = 5?

13 / 45
Ví dụ
Giả sử một người gửi 10, 000 đô la vào tài khoản của mình tại một
ngân hàng với lãi kép 11% mỗi năm. Hỏi sau 30 năm anh ta có
bao nhiêu tiền trong tài khoản ngân hàng.
{
Pn = Pn−1 + 0.11Pn−1 = 1.11Pn−1
P0 = 10, 000 đô la.

14 / 45
Ví dụ
▶ Một hệ máy tính coi một xâu các chữ số hệ thập phân là một
từ mã hợp lệ nếu nó chứa một số chẵn chữ số 0.
▶ Chẳng hạn, 1230407869 là hợp lệ, còn 120987045608 là
không hợp lệ.
▶ Giả sử an là số các từ mã độ dài n.
▶ Hãy tìm công thức truy hồi cho an .

an = 9an−1 + (10n−1 − an−1 )


= 8an−1 + 10n−1 .

15 / 45
e get four regions—that is, a2 = 4. See Figure 7.2a. From Figure 7.2b, we see that
= 7. The skeptical reader may ask: how do we know that three intersecting lines
ll always
Ví create
dụ seven regions? Let us go back one step, then.
Clearly two intersecting lines will always yield four regions, as shown in Figure
2a. Now ▶ Chúng
let us ta vẽthe
examine n effect
đườngofthẳng trênthe
drawing giấy saoline
third cho(labeled
mọi cặp“3”đường
in Figure
2b). It must cross
thẳngeach
đềuofcắtthenhau
othervàtwo lines có
không (at ba
different
đườngpoints).
thẳng Before,
nào đồngbetween,
d after thesequy.
two intersection points, the third line cuts through three of the regions
rmed by the
▶ Các two
first linesthẳng
đường (this action of the
này chia mặtthird linethành
phẳng does not
baodepend
nhiêuon how it is
miền?
awn, just that it intersects the other two lines). So in severing three regions, the third
e must form three new regions, actually creating six new regions out of three old
gions. Thus a3 = a2 + 3 = 4 + 3 = 7, independently of how the third line is drawn.

2 2 3 2 3
4

1 1 1

gure 7.2 (a) (b) (c)

16 / 45
Ví dụ (Chọn không lặp)
Đặt an,k là số cách chọn tập con k phần tử từ tập n phần tử. Hãy
tìm công thức truy hồi cho ak,n .

an,k = an−1,k + an−1,k−1 (Đẳng thức Pascal)

17 / 45
Ví dụ (Bỏ bóng)
Hãy tìm công thức truy hồi cho số cách bỏ n quả bóng giống nhau
và k chiếc hộp phân biệt sao cho mỗi hộp chỉ có 2 hoặc 3 hoặc 4
quả bóng.

an,k = an−2,k−1 + an−3,k−1 + an−4,k−1 .

18 / 45
Ví dụ (Hệ thức truy hồi)
Tìm công thức truy hồi cho: Số xâu tam phân độ dài n với một số
chẵn 0 và một số lẻ 1.

an = bn−1 + cn−1 + an−1


bn = 3n−1 − cn−1
cn = 3n−1 − bn−1

19 / 45
Nội dung

Ví dụ

Công thức truy hồi

Công thức truy hồi và hàm sinh

Số Catalan

Công thức truy hồi tuyến tính


Ví dụ
Tìm hàm sinh cho dãy số là nghiệm của công thức truy hồi

an = an−1 + n
a0 = 1

21 / 45
Ví dụ (Chọn không lặp)
Đặt gn (x) là họ các hàm sinh

gn (x) = an,0 + an,1 x + · · · + an,k xk + . . . an,n xn

thỏa mãn công thức truy hồi

an,k = an−1,k + an−1,k−1


an,0 = an,n = 1
an,k = 0 với mọi k > n

Hãy tìm dạng đóng cho hàm sinh gn (x) và dùng nó để tìm công
thức tường minh cho an,k .

22 / 45
Giải


n ∑
n
k
gn (x) − 1 = an,k x = (an−1,k xk + an−1,k−1 xk )
k=1 k=1
∑n ∑
n−1
= an−1,k xk + x an−1,h xk )
k=1 h=0
= gn−1 (x) − 1 + xgn−1 (x)

Vậy ta được

gn (x) = gn−1 (x) + xgn−1 (x) = (1 + x)gn−1 (x)

Giải công thức truy hồi trên, ta được

gn (x) = (1 + x)n g0 (x) = (1 + x)n .

23 / 45
Nội dung

Ví dụ

Công thức truy hồi

Công thức truy hồi và hàm sinh

Số Catalan

Công thức truy hồi tuyến tính


Số Catalan
Có bao nhiêu cách đặt dấu ngoặc cho tổng n số để chỉ định trình
tự thực hiện phép cộng?

Ví dụ
Với n = 4 ta có 5 khả năng:

(((a + b) + c) + d)
((a + (b + c)) + d)
((a + b) + (c + d))
(a + ((b + c) + d))
(a + (b + (c + d)))

25 / 45
Công thức truy hồi cho các số Catalan

Cn = C1 Cn−1 + C2 Cn−2 + · · · + Cn−1 C1



n−1
= Ci Cn−i .
i=1

Công thức này suy ra từ các cách đặt dấu ngoặc:

(1 . . . n) = (1)(2 . . . n),
(1 2)(3 . . . n),
···
(1 . . . n − 1)(n).

Ta đặt C0 = 0 và ta biết C1 = 1.

26 / 45
Công thức truy hồi cho các số Catalan

Cn = C0 Cn + C1 Cn−1 + C2 Cn−2 + · · · + Cn−1 C1 + Cn C0


∑n
= Ci Cn−i .
i=0

27 / 45
Hàm sinh của số Catalan
Xét hàm sinh của Cn :

C(x) = 0 + x + x2 + 2x3 + 5x4 + · · ·


∑ ∑∑ n
n
=0+ Cn x = (Ci Cn−i ) xn
n≥1 n≥1 i=0

Theo luật tích

C(x)2 = C0 2 + (C0 C1 + C1 C0 )x + (C0 C2 + C1 C1 + C2 C0 )x2 + · · ·


( n )
∑ ∑
=0+0+ Ci Cn−i xn
n≥2 i=0

= C(x) − x

28 / 45
Hàm sinh cho các số Catalan

Giải phương trình

C(x)2 − C(x) + x = 0.

Ta được

1± 1 − 4x
C(x) =
2
1 ± (1 − 4x)1/2
= .
2
Vì C0 = 0, ta lấy nghiệm

1 − (1 − 4x)1/2
C(x) = .
2

29 / 45
Định lý nhị thức tổng quát

Với số thực q bất kỳ, khai triển của chuỗi


( ) ( ) ( ) ( )
q q q q 2 q n
(1 + y) = + y+ y + ··· + y + ···
0 1 2 n
( )
có hệ số nq của yn được định nghĩa bởi
( )
q q(q − 1)(q − 2) × · · · × [q − (n − 1)]
:= .
n n!
( )
(Công thức cho hệ số tổng quát nq xuất hiện từ chuỗi Taylor cho
(1 + y)q .)

30 / 45
Bổ đề
Với mỗi n ≥ 1,
( ) (2n−2)
1/2 (−1)n−1
= × n−1
n n 22n−1

31 / 45
Định lý
Hàm sinh của dãy số Catalan là

1 − (1 − 4x)1/2
C(x) =
2

∑ ( )
1 2n − 2 n
= x .
n n−1
n=1

32 / 45
Số Catalan
( )
1 2n − 2
Cn = .
n n−1

33 / 45
Bài tập
Xét bàn cờ n × n:

Xét đường đi ngắn nhất từ góc A tới góc B đi qua các cạnh (mỗi
đường qua 2n cạnh).
1. Có bao nhiêu đường như vậy?
2. Chứng minh rằng số đường không xuống dưới đường chéo
chính là số Catalan Cn .
( )
3. Hãy tìm cách chứng minh số Catalan Cn = n1 2n−2
n−1 mà
không dùng hàm sinh.

34 / 45
Nội dung

Ví dụ

Công thức truy hồi

Công thức truy hồi và hàm sinh

Số Catalan

Công thức truy hồi tuyến tính


Định nghĩa
Một hệ thức truy hồi tuyến tính thuần nhất bậc k với hệ số hằng
là hệ thức truy hồi có dạng

an = c1 an−1 + c2 an−2 + · · · + ck an−k

trong đó c1 , c2 , . . . , ck là các số thực và ck ̸= 0.

36 / 45
Ví dụ
▶ Công thức truy hồi

Pn = (1.11)Pn−1

là tuyến tính thuần nhất bậc một.


▶ Công thức
fn = fn−1 + fn−2
là tuyến tính thuần nhất bậc hai.

37 / 45
Định lý
Cho c1 , c2 là hai số thực. Giả sử phương trình

r2 − c1 r − c2 = 0

có hai nghiệm phân biệt r1 , r2 . Khi đó dãy ⟨an ⟩ là nghiệm của hệ


thức truy hồi
an = c1 an−1 + c2 an−2
nếu và chỉ nếu
an = α1 r1 n + α2 r2 n
trong đó α1 , α2 là các hằng số.

38 / 45
Ví dụ
Tìm nghiệm của hệ thức truy hồi

an = an−1 + 2an−2

với a0 = 2, a1 = 7.

39 / 45
Bài tập
Hãy chứng minh định lý trước dùng hàm sinh.

40 / 45
Định lý
Cho c1 và c2 là hai số thực và c2 ̸= 0. Giả sử phương trình

r2 − c1 r − c2 = 0

có nghiệm kép r0 . Khi đó dãy ⟨an ⟩ là nghiệm của hệ thức truy hồi

an = c1 an−1 + c2 an−2

nếu và chỉ nếu


an = α1 r0 n + α2 nr0 n
trong đó α1 , α2 là các hằng số.

41 / 45
Ví dụ
Tìm nghiệm của hệ thức truy hồi

an = 6an−1 − 9an−2

với a0 = 1, a1 = 6.

42 / 45
Bài tập
Hãy chứng minh định lý trước dùng hàm sinh.

43 / 45
Định lý
Cho c1 , c2 , . . . , ck là các số thực. Giả sử phương trình

rk − c1 rk−1 − · · · − ck = 0

có k nghiệm phân biệt r1 , r2 , . . . , rk . Khi đó dãy ⟨an ⟩ là nghiệm


của hệ thức truy hồi

an = c1 an−1 + c2 an−2 + · · · + ck an−k

nếu và chỉ nếu

an = α1 r1 n + α2 r2 n + · · · + αk rk n

trong đó αi là các hằng số.

44 / 45
Ví dụ
Tìm nghiệm của hệ thức truy hồi

an = 6an−1 − 11an−2 + 6an−3

với a0 = 2, a1 = 5 và a2 = 15.

45 / 45
Tìm kiếm trên đồ thị (Version 0.4)

Trần Vĩnh Đức

HUST

Ngày 29 tháng 7 năm 2018

1 / 57
Tài liệu tham khảo

▶ S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani,


Algorithms, July 18, 2016.
▶ Chú ý: Nhiều hình vẽ trong tài liệu được lấy tùy tiện mà chưa
xin phép.

2 / 57
Nội dung

Biểu diễn đồ thị

Tìm kiếm theo chiều sâu trên đồ thị vô hướng

Tìm kiếm theo chiều sâu trên đồ thị có hướng

Thành phần liên thông mạnh


Biểu diễn đồ thị dùng Ma trận kề
Nếu đồ thị có n = |V| đỉnh v1 , v2 , . . . , vn , thì ma trận kề là một
mảng n × n với phần tử (i, j) của nó là
{
1 nếu có cạnh từ vi tới vj
aij =
0 ngược lại.

Ví dụ

v2

 
1 1 1
v1
A = 0 0 1
0 1 0
v3

4 / 57
Dùng ma trận kề có hiệu quả?

▶ Có thể kiểm tra có cạnh nối giữa cặp đỉnh bất kỳ chỉ cần một
lần truy cập bộ nhớ.
▶ Tuy nhiên, không gian lưu trữ là O(n2 )

5 / 57
Biểu diễn đồ thị dùng danh sách kề
▶ Dùng một mảng Adj gồm |V| danh sách.
▶ Với mỗi đỉnh u ∈ V, phần tử Adj[u] lưu trữ danh sách các
hàng xóm của u. Có nghĩa rằng:

Adj[u] = {v ∈ V | (u, v) ∈ E}.

Ví dụ

1
Adj[0] = {0, 1, 2}
Adj[1] = {2}
0 Adj[2] = {1}

6 / 57
Dùng danh sách kề có hiệu quả?

▶ Có thể liệt kê các đỉnh kề với một đỉnh cho trước một cách
hiệu quả.
▶ Nó cần không gian lưu trữ là O(|V| + |E|). Ít hơn O(|V|2 ) rất
nhiều khi đồ thị ít cạnh.

7 / 57
Nội dung

Biểu diễn đồ thị

Tìm kiếm theo chiều sâu trên đồ thị vô hướng

Tìm kiếm theo chiều sâu trên đồ thị có hướng

Thành phần liên thông mạnh


EALIZETHATTHEORDERINWHICHEDGES
WHICHVERTICESAPPEARINTHEARRAYOF
-
H
M
T
E
R
E CâutinyG.txt
hỏi
T VTừ một
13
đỉnh của đồ thị ta có
% thể đi tớiGraph
java những tinyG.txt
đỉnh nào?
E 13 vertices, 13 edges
Y 13
0: 6 2 1 5
0 5
T 4 3
1: 0
2: 0
N 0 1
3: 5 4
first adjacent
9 / 57
Tìm đường trong mê cung
Algorithms 83

Figure 3.2 Exploring a graph is rather like navigating a maze.

L
K
D A B E F
H
B

G H C F I J C G
E
J

K L

I A D

Hình: Tìm kiếm trên đồ thị cũng giống tìm đường trong mê cung
3.2 Depth-first search in undirected graphs
3.2.1 Exploring mazes
Depth-first search is a surprisingly versatile linear-time procedure that reveals a
wealth of information about a graph. The most basic question it addresses is,

What parts of the graph are reachable from a given vertex? 10 / 57


procedure explore(G, v)
Input: đồ thị G = (V, E); v ∈ V
Output: visited(u)=true với mọi đỉnh u có thể đến
được từ v

visited(v) = true
previsit(v)
for each edge (v, u) ∈ E:
if not visited(u): explore(G, u)
postvisit(v)

11 / 57
Ví dụ: Kết quả chạy explore(G, A) A
Chapter 3

Figure 3.2 Exploring


Figure 3.4a graph is rather
The result like navigating
of explore(A) a maze.
on the graph of Figure

L A
K
D A B E F
B
B D

G H C F I J E F G C
E
J

I C H
K L

I A
J

For instance, while B was being visited, the edge B − E was n


3.2 Depth-first
was as search in undirected
yet unknown, graphs
was traversed via a call to explore(E )
form a tree (a connected graph with no cycles) and are therefo
3.2.1 Exploring mazesedges were ignored because they led back to familia
The dotted
12 / 57
Tìm kiếm theo chiều sâu

procedure dfs(G)

for all v ∈ V:
visited(v) = false

for all v ∈ V :
if not visited(v): explore(G, v)

13 / 57
during explore(x) and once during explore(y). The overall time for step 2 is
therefore O(|E |) and so the depth-first search has a running time of O(|V| + |E |),
Ví dụ: Đồ thị và Rừng DFS
linear in the size of its input. This is as efficient as we could possibly hope for, since
it takes this long even just to read the adjacency list.

Figure 3.6 (a) A 12-node graph. (b) DFS search forest.

1,10 11,22 23,24


(a) (b) A C F
A B C D

B E 4,9 12,21 D
2,3

E F G H
I 5,8 13,20 H

I J K L J 14,17 G L
6,7 18,19

K
15,16

Figure 3.6 shows the outcome of depth-first search on a 12-node graph, once again
breaking ties alphabetically (ignore the pairs of numbers for the time being). The
outer loop of DFS calls explore three times, on A, C , and finally F . As a result,
there are three trees, each rooted at one of these starting points. Together they
constitute a forest.
14 / 57
Bài tập
Xây dựng rừng DFS cho đồ thị sau với các đỉnh lấy theo thứ tự từ
điển. Vẽ cả những cạnh nét đứt.

15 / 57
Rừng
. (b) DFSDFS vàforest.
search số thành phần liên thông

1,10 11,22 23,24


(b) v ccnum[v]
A C F
A 1
B 1
B E 4,9 12,21 D C 2
2,3
D 2
I 5,8 13,20 H E 1
F 3
J 14,17 G L
G 2
6,7 18,19
H 2
I 1
K
J 1
15,16

Biến ccnum[v] để xác định thành phần liên thông của đỉnh v.
depth-first search on a 12-node graph, once again
re the pairs of numbers for the time being). The
16 / 57
Tính liên thông trong đồ thị vô hướng
procedure dfs(G)
cc = 0
for all v ∈ V: visited(v) = false
for all v ∈ V:
if not visited(v):
cc = cc + 1
explore(G, v)

procedure explore(G, v)
visited(v) = true
previsit(v)
for each edge (v, u) ∈ E:
if not visited(u): explore(G, u)
postvisit(v)

procedure previsit(v)
ccnum[v] = cc
17 / 57
Bài tập
Hãy cài đặt chương trình tìm số thành phần liên thông của một đồ
thị vô hướng.

18 / 57
previsit và postvisit

▶ Lưu thời gian lần đầu đến đỉnh trong mảng pre
▶ Lưu thời gian lần cuối rời khỏi đỉnh trong mảng post
▶ Để tính hai thông tin này ta dùng một bộ đếm clock, khởi
tạo bằng 1, và được cập nhật như sau:

procedure previsit(v)
pre[v] = clock
clock = clock + 1

procedure postvisit(v)
post[v] = clock
clock = clock + 1

19 / 57
Bài tập
Vẽ rừng DFS với cả số pre và post cho mỗi đỉnh cho đồ thị sau.

20 / 57
Tính chất của previsit và postvisit

Mệnh đề
Với mọi đỉnh u và v, hai khoảng

[ pre(u), post(u) ] và [ pre(v), post(v) ]

▶ hoặc là rời nhau,


▶ hoặc là có một khoảng chứa một khoảng khác.

Tại sao? vì [ pre(u), post(u) ] là khoảng thời gian đỉnh u nằm


trong ngăn xếp. Cấu trúc vào-sau, ra-trước đảm bảo tính chất này.

21 / 57
Nội dung

Biểu diễn đồ thị

Tìm kiếm theo chiều sâu trên đồ thị vô hướng

Tìm kiếm theo chiều sâu trên đồ thị có hướng

Thành phần liên thông mạnh


Bài tập 88

Hãy vẽ rừng DFS với số pre


Figure 3.7 và post
DFS trên mỗi
on a directed đỉnh cho đồ thị có
graph.
hướng sau.
A

B A C

B 2,11

E F D E 3,10

4,7 F H

G H
5,6 G

In further analyzing the directed case, it helps to have terminolog


relationships between nodes of a tree. A is the root of the search
23 / 57
88 3.3 Depth-first search in

Lời giải
Figure 3.7 DFS on a directed graph.

A 1,16

B A C

B 2,11 C 12,15

E F D E 3,10 D 13,14

4,7 F H
8,9
G H
5,6 G

In further analyzing the directed case, it helps to have terminology for important
relationships between nodes of a tree. A is the root of the search tree; everything
else is its descendant. Similarly, E has descendants F , G , and H , and conversely,
24 / 57
relationships between nodes of a tree. A is the root of the search tree; everything
else is its descendant. Similarly, E has descendants F , G , and H , and conversely,
Các kiểu cạnh
is an ancestor of these three nodes. The family analogy is carried further: C is the
parent of D, which is its child.
Tree Edges
For undirected graphs we distinguished là cạnh
between treethuộc rừng
edges and DFS.edges. In
nontree
the directed case, there is a slightly more elaborate taxonomy:

DFS tree
Forward
Tree edges Edgespart
are actually là ofcạnh dẫnforest.
the DFS từ một nút
A tới một nút con cháu của nó nhưng
Forward edges lead from a node to a nonchild descendant in
không
the DFS tree. thuộc rừng DFS.
For
k
Bac

Back edges lead to an ancestor in the DFS tree.


war

B Cross edges lead to neither descendant nor ancestor; they


d

Back
therefore leadEdges là cạnh
to a node dẫnalready
that has từ một
beennút tới
completely
ee

một(that
explored tổ is,
tiên của postvisited).
already nó.
Tr

C D
Cross

Crosstwo
Figure 3.7 has two forward edges, Edges
back là cạnhanddẫn
edges, twotừ một
cross nútCan
edges. tới you
spot them? một nút không phải tổ tiên cũng không
Ancestor and descendant relationships,
phải conascháu
well as
củaedge types, can be read off directly
nó.
from pre and post numbers. Because of the depth-first exploration strategy, vertex
u is an ancestor of vertex v exactly in those cases where u is discovered first and
25 / 57
Bài tập
Thực hiện thuật toán DFS trên mỗi đồ thị sau; nếu phải thực hiện
lựa chọn đỉnh, chọn đỉnh theo thứ tự từ điển. Phân loại mỗi cạnh
(tree edge, forward edge, back edge, hay cross edge) và đưa ra số
pre và post cho mỗi đỉnh.

26 / 57
Các khả năng cho cạnh (u, v)

Thứ tự pre/post của (u, v) Kiểu cạnh


[ [ ] ]
u v v u Tree/forward
[ [ ] ]
v u u v Back
[ ] [ ]
v v u u Cross

Câu hỏi
Tại sao các kiểu thứ tự khác không thể xảy ra?

27 / 57
else is its descendant. Similarly, E has descendants F , G , and H , an
is an ancestor of these three nodes. The family analogy is carried fur
parent of D, which is its child.
Mệnh đề
For undirected graphs we distinguished between tree edges and nont
Một đồ thị có hướng có chu trình nếu và chỉ nếu thuật toán tìm
the directed case, there is a slightly more elaborate taxonomy:
kiếm theo chiều sâu tạo ra back edge.

ChứngDFS
minh.tree
▶ Nếu
Tree edges v) là
(u,are back edge,
actually part thì
of the DFS forest.
A u ; v → u là một chu trình.
Forward edges lead from a node to a nonchild d

the Ngược
DFS tree.lại, giả sử đồ thị có chu
For

trình
k
Bac

Back edges lead to an ancestor in the DFS tree.


war

C = v → v1 → · · · → vk → v0 .
B Cross edges 0lead to neither descendant nor a
d

therefore lead to a node that has already bee


Xét vi là đỉnh đầu tiên trong C
ee

explored (that is, already postvisited).


Tr

được thăm theo DFS. Mọi đỉnh


C D
Cross khác trong chu trình sẽ đạt được từ
vi . Vậy thì vi−1 → vi là back edge.
Figure 3.7 has two forward edges, two back edges, and two cross ed
spot them? 28 / 57
Bài tập
1. Hãy mô tả một thuật toán kiểm tra liệu đồ thị có hướng cho
trước có chu trình hay không.
2. Hãy cài đặt thuật toán này.

29 / 57
Đồ thị phi chu trình và sắp xếp topo

▶ Đồ thị phi chu trình (DAG) cho phép sắp thứ tự các đỉnh sao
cho:
Có cạnh (u, v) nếu và chỉ nếu u đứng trước v.

▶ Cách sắp thứ tự các đỉnh này gọi là sắp xếp topo.
▶ DAG cho phép mô hình hiệu quả các bài toán liên quan đến
quan hệ nhân quả, phân cấp, phụ thuộc thời gian.
▶ Ví dụ: Mỗi môn học có môn tiên quyết (môn cần học trước).
Một cách lựa chọn thứ tự học các môn là một cách sắp topo.

30 / 57
3.3 D
Đồ thị phi chu trình (DAG)
e 3.8 A directed acyclic graph with one source, two sinks, and four
le linearizations.

A C E

B D F

Phi chu trình ⇐⇒ Không có Back Edge ⇐⇒ Sắp topo


bed; you have to be out of bed, but not yet dressed, to take a shower;
he question then is, what is a valid order in which to perform the task
constraints are conveniently represented by a directed graph in whic
31 / 57
90 3.3 Depth-fir

Figure Bài
3.8 tập
A directed acyclic graph with one source, two sinks, and four
possibleHãy
linearizations.
đưa ra mọi cách sắp topo cho đồ thị phi chu trình sau:

A C E

B D F

out of bed; you have to be out of bed, but not yet dressed, to take a shower; and s
on). The question then is, what is a valid order in which to perform the tasks?
Such constraints are conveniently represented by a directed graph in which eac
ask is a node, and there is an edge from u to v if u is a precondition for v. In32 othe
/ 57
Tính chất của DAG

Mệnh đề
Trong DAG, nếu (u, v) ∈ E thì post(u) > post(v).

Vậy thì các đỉnh của DAG có thể sắp topo theo thứ tự giảm dần
của post.

33 / 57
Bài tập
Xét một DAG có pre và post như dưới đây. Hãy đưa ra một thứ
tự topo cho các đỉnh.

1 6
0 : [1, 16]
1 : [17, 18]
0 8
2 : [2, 9]
3 : [3, 8]
4 : [19, 20]
7 4
5 : [4, 7]
6 : [11, 14]
7 : [10, 15]
5 2 8 : [12, 13]
9 : [5, 6]
9 3

34 / 57
Bài tập
1. Hãy mô tả một thuật toán sắp Topo cho một DAG.
2. Hãy cài đặt thuật toán này.

35 / 57
90 3.3 Depth-fir
Đỉnh nguồn và đỉnh hút
Figure 3.8 A directed acyclic graph with one source, two sinks, and four
possible linearizations.

A C E

B D F

Trong đồ thị có hướng,


out of bed;
▶ you
Đỉnhhave to be
nguồn out of bed,
(source) butkhông
là đỉnh not yetcódressed,
cạnh đitovào.
take a shower; and s
on). The question then is, what is a valid order in which to perform the tasks?
▶ Đỉnh hút (sink) là đỉnh không có cạnh đi ra.
Such constraints are conveniently represented by a directed graph in which eac
ask is a node, and there is an edge from u to v if u is a precondition for v. In othe
words, before performing a task, all the tasks pointing to it must be completed. If thi
graph has a cycle, there is no hope: no ordering can possibly work. If on the othe
36 / 57
Tính chất của DAG

Mệnh đề (Nhắc lại)


Trong DAG, nếu (u, v) ∈ E thì post(u) > post(v).

Vậy thì các đỉnh của DAG có thể sắp topo theo thứ tự giảm dần
của post.

Và khi đó, đỉnh có post nhỏ nhất sẽ nằm cuối danh sách, và vậy
thì nó phải là đỉnh hút.

Tương tự, đỉnh có post lớn nhất là đỉnh nguồn.

37 / 57
Mệnh đề
Mọi DAG đều có ít nhất một đỉnh nguồn và ít nhất một đỉnh hút.

Bài tập
Hãy chứng minh mệnh đề trên.

38 / 57
Thuật toán sắp topo (thứ 2)

▶ Tìm một đỉnh nguồn, ghi ra nó, và xóa nó khỏi đồ thị.


▶ Lặp lại cho đến khi đồ thị trở thành rỗng.

39 / 57
Thuật toán sắp topo (thứ 2)

▶ Tìm một đỉnh nguồn, ghi ra nó, và xóa nó khỏi đồ thị.


▶ Lặp lại cho đến khi đồ thị trở thành rỗng.

40 / 57
Thuật toán sắp topo (thứ 2)

▶ Tìm một đỉnh nguồn, ghi ra nó, và xóa nó khỏi đồ thị.


▶ Lặp lại cho đến khi đồ thị trở thành rỗng.

41 / 57
Thuật toán sắp topo (thứ 2)

▶ Tìm một đỉnh nguồn, ghi ra nó, và xóa nó khỏi đồ thị.


▶ Lặp lại cho đến khi đồ thị trở thành rỗng.

42 / 57
Bài tập
Chạy thuật toán sắp topo trên đồ thị sau:

1. Chỉ ra số pre và post của mỗi đỉnh.


2. Tìm các đỉnh nguồn và đỉnh hút của đồ thị.
3. Tìm thứ tự topo theo thuật toán.
4. Đồ thị này có bao nhiêu thứ tự topo?

43 / 57
Câu hỏi

▶ Tại sao thuật toán trước cho một thứ tự topo?


▶ Nếu đồ thị có chu trình thì thuật toán gặp vấn gì?
▶ Làm thế nào để cài đặt thuật toán này trong thời gian tuyến
tính?

44 / 57
Nội dung

Biểu diễn đồ thị

Tìm kiếm theo chiều sâu trên đồ thị vô hướng

Tìm kiếm theo chiều sâu trên đồ thị có hướng

Thành phần liên thông mạnh


Thành phần liên thông mạnh

Định nghĩa
Hai đỉnh u và v của một đồ thị có hướng là liên thông nếu có một
đường đi từ u tới v và một đường đi từ v tới u.

Quan hệ này phân hoạch tập đỉnh V thành các tập rời nhau và ta
gọi các tập rời nhau này là các thành phần liên thông mạnh.

46 / 57
Thành phần
Figure liên
3.9 (a) thông
A directed mạnh
graph and its strongly connected components. (b) The
meta-graph.

(a) (b)
A B C

D E F A B,E C,F

G H
G,H,I
D
J,K,L

I J K

Hình: (a) Đồ thị có hướng và các thành phần liên thông mạnh. (b) Các
thành phần liên thông mạnh tạo thành một DAG

47 / 57
Các thành phần liên thông mạnh trong đồ thị

Mệnh đề
Mọi đồ thị có hướng đều là một DAG của các thành phần liên
thông mạnh.
Vì nếu có chu trình đi qua một số thành phần liên thông mạnh thì
các thành phần này phải được gộp chung lại thành một thành
phần liên thông mạnh.

48 / 57
Một số tính chất

Mệnh đề
Nếu thủ tục con explore bắt
đầu từ một đỉnh u, thì nó sẽ
kết thúc khi mọi đỉnh có thể
đến được từ u đã được thăm.

49 / 57
Một số tính chất

Nếu ta gọi explore từ một đỉnh


thuộc một thành phần liên thông
mạnh hút, vậy thì ta sẽ nhận
được đúng thành phần này.

50 / 57
Câu hỏi

1. Làm thế nào ta có thể tìm


được một đỉnh mà ta chắc
chắn nó thuộc vào thành phần
liên thông mạnh hút?

2. Ta sẽ tiếp tục thế nào khi


đã tìm được một thành phần
liên thông mạnh?

51 / 57
Câu hỏi 1
Làm thế nào ta có thể tìm được một đỉnh mà ta chắc chắn nó
thuộc vào thành phần liên thông mạnh hút?
Xét GR là đồ thị ngược của G, tức là đồ thị GR đạt được từ G
bằng cách đảo hướng các cạnh.

Thành phần liên thông mạnh của G cũng là của GR . Tại sao?

Và thành phần liên thông mạnh hút trong G sẽ là thành phần liên
thông mạnh nguồn trong GR .
Mệnh đề
Đỉnh có số post lớn nhất theo DFS phải thuộc một thành phần
liên thông mạnh nguồn.

52 / 57
Hình: Đồ thị G Hình: Đồ thị ngược GR của G

53 / 57
Câu hỏi 2
Ta sẽ tiếp tục thế nào khi đã tìm được một thành phần liên thông
mạnh?

Mệnh đề
Nếu C và D là các thành phần liên thông mạnh, và có một cạnh
từ một đỉnh trong C tới một đỉnh trong D, vậy thì số post lớn
nhất trong C phải lớn hơn số post lớn nhất trong D.

Khi ta tìm thấy một thành phần liên thông mạnh và xóa nó khỏi
đồ thị G, vậy thì đỉnh với số post lớn nhất trong các đỉnh còn lại
sẽ thuộc vào thành phần liên thông mạnh hút của đồ thị còn lại
của G.

54 / 57
Thuật toán tìm thành phần liên thông mạnh
1. Chạy DFS trên đồ thị ngược GR của G.
2. Chạy thuật toán tìm thành phần liên thông (tương tự như của
đồ thị vô hướng) trên đồ thị có hướng G;
và trong khi chạy DFS, xử lý các đỉnh theo thức tự giảm dần
theo số post của mỗi đỉnh (tìm được theo bước 1).

55 / 57
Bài tập
Chạy thuật toán tìm thành phần liên thông mạnh trên đồ thị sau.

56 / 57
Bài tập
Chạy thuật toán tìm thành phần liên thông mạnh trên đồ thị sau.

57 / 57
Đường đi trên đồ thị (Version 0.2)

Trần Vĩnh Đức

HUST

Ngày 24 tháng 7 năm 2018

1 / 52
Tài liệu tham khảo

▶ S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani,


Algorithms, July 18, 2016.
▶ Chú ý: Nhiều hình vẽ trong tài liệu được lấy tùy tiện mà chưa
xin phép.

2 / 52
Nội dung

Khoảng cách và tìm kiếm theo chiều rộng

Thuật toán Dijkstra

Cài đặt hàng đợi ưu tiên

Đường đi ngắn nhất khi có cạnh độ dài âm

Đường đi ngắn nhất trong một DAG


In Figure 4.2, for example, vertex B is at distance 2 from S, and there are two shorte
DFStovàit. đường
paths When S is điheld up, the strings along each of these paths become ta
aph and (b) its depth-first search tree.
Figure 4.1 (a) A simple graph and (b) its depth-first search tree.
(b) S
(a) (b) S
A
E S A
A D A D

B E B E
B D C B
C
C

104
Đường đi trên cây DFS thường không phải là đường đi ngắn nhất.

4 / 52
vertex s high enough, the other balls that get pulled up along with it are precisely
theKhoảng cách from s. And to find their distances from s, you need only
vertices reachable
measure how far below s they hang.
In Figure 4.2, for example, vertex B is at distance 2 from S, and there are two shortest
paths to it. When S is held up, the strings along each of these paths become taut.

Khoảng cách giữa hai đỉnh là độ dài của đường đi ngắn nhất giữa
Figure 4.1 (a) A simple graph and (b) its depth-first search tree.
chúng.
(a) (b)
v Khoảng cách (S − v) S
E S A A
A D
B
C
B E
D C B D
E
C

104

5 / 52
Mô hình vật lý của đồ thị
Algorithms 105
Algorithm

Giả sử rằng mọi cạnh có cùng độ dài. Ta nhấc đỉnh S lên:


A physical model
Figure 4.2 of a graph.
A physical model of a graph.

S S

S E A S A
A C D EA C D E

C D B C B
B
B

On the other hand, edge (D, E ) plays no role in any shortest path and the
hand, edgeslack.
remains (D, E ) plays no role in any shortest path and therefore
k.
6 / 52
Algorithms 105
Tìm kiếm theo chiều rộng (Breadth-First Search)
A physical model of a graph.

Chia đồ thị thành các mức: S


▶ S là mức có khoảng cách 0.
E S A
▶ Các đỉnh có khoảng cách tới
S bằng 1. A C D E
▶ Các đỉnh có khoảng cách tới
D CS bằng 2 B
▶ ... B

Ý tưởng thuật toán: Khi mức d đã được xác định, mức d + 1 có


er hand,
thể edge
thăm (D,
bằngE )cách
plays no qua
duyệt rolecác
in any
hàngshortest
xóm củapath
mức and
d. therefore
ck.

adth-first search
.2, the lifting of s partitions the graph into layers: s itself, the nodes at7 / 52
Ý tưởng loang theo chiều rộng

Khởi tạo: Hàng đợi Q chỉ chứa đỉnh s, là đỉnh duy nhất ở mức 0.

Với mỗi khoảng cách d = 1, 2, 3, . . . ,


▶ sẽ có thời điểm Q chỉ chứa các đỉnh có khoảng cách d và
không có gì khác.
▶ Khi đó các đỉnh có khoảng cách d này sẽ được loại bỏ dần từ
đầu hàng đợi,
▶ và các hàng xóm chưa được thăm sẽ được thêm vào cuối
hàng đợi.

8 / 52
n Figure 4.2, for example, vertex B is at distance 2 from S, and there are two
aths to it. When S is held up, the strings along each of these paths beco

Bài tập
igure 4.1 (a) A simple graph and (b) its depth-first search tree.
Chạy thuật toán BFS cho đồ thị dưới đây bắt đầu từ đỉnh S. Ghi
ra hàng đợi Q sau mỗi lần thăm đỉnh.
(a) (b) S

E S A Đỉnh thăm Hàng đợi


A
S [S]

B
D C B
C

04

9 / 52
procedure bfs(G, s)
Input: đồ thị G = (V, E), có hướng hoặc vô hướng;
một đỉnh s ∈ V
Output: Với mỗi đỉnh u đến được từ s,
dist(u) = khoảng cách từ s tới u.

for all u ∈ V:
dist(u) = ∞

dist(s) = 0
Q = [s] (hàng đợi chỉ chứa s)
while Q khác rỗng:
u = eject(Q) (loại bỏ u khỏi hàng đợi)
for all edges (u, v) ∈ E:
if dist(v) = ∞:
inject(Q, v) (thêm v vào hàng đợi)
dist(v) = dist(u) + 1
10 / 52
vertex s high enough, the other balls that get pulled up along with it are precisely
the vertices reachable from s. And to find their distances from s, you need only
measure how far below s they hang.
In Figure 4.2, for example, vertex B is at distance 2 from S, and there are two shortest
paths to it. When S is held up, the strings along each of these paths become taut.
Bài tập
Hãy chạy thuật toán BFS cho đồ thị dưới đây và ghi ra nội dung
Figure 4.1 (a)
của hàng đợiAQsimple graph
sau mỗi and (b) its depth-first search tree.
bước:
(a) (b) S

E S A Thứ tự thăm đỉnh Hàng đợi


S A [S] D

B E
D C B
C

104

11 / 52
Nội dung

Khoảng cách và tìm kiếm theo chiều rộng

Thuật toán Dijkstra

Cài đặt hàng đợi ưu tiên

Đường đi ngắn nhất khi có cạnh độ dài âm

Đường đi ngắn nhất trong một DAG


(each stretch of highway) is important. For the remainder of this chapter, we will
deal with this more general scenario, annotating every edge e ∈ E with a length le .
Độ dài của cạnh
If e = (u, v), we will sometimes also write l(u, v) or luv .

Figure 4.5 Edge lengths often matter.

Sacramento
95
San 133
Francisco Reno

290 271

409 445
Bakersfield

291
112

Los Las
Angeles 275 Vegas

These le ’s do not have to correspond to physical lengths. They could denote time
(driving time between cities) or money (cost of taking a bus), or any other quantity
Trong các bài toán thực tế, mỗi cạnh e thường gắn với độ dài le .
that we would like to conserve. In fact, there are cases in which we need to use
negative lengths, but we will briefly overlook this particular complication.

13 / 52
Câu hỏi
Liệu ta có thể sửa thuật toán BFS để nó chạy được trên đồ thị
tổng quát G = (V, E) trong đó mỗi cạnh có độ dài nguyên dương
le ?

14 / 52
Fordummy
any edgenodes between
e = (u, v) of E , ureplace
and v.it by le edges of length 1, by adding le − 1
dummy nodes between u and v.
Tách cạnh thành
Graph G ′
các
contains

cạnh
all the với Vđộthatdài
vertices đơnus,vịand the distances
interest betwee
themGarecontains
Graph exactlyallthe
thesame
vertices
as in that
V G interest
. Most us, and thethe
importantly, ′ distances
edges between
of G all have un
them
length. exactly
are the same
Therefore, as incompute
we can G . Most importantly,
distances intheG edges of G ′ allBFS
by running haveon
unit
G ′.
length. Therefore, we can compute distances in G by running BFS on G ′ .
Figure
Figure 4.64.6Breaking
Breaking edges
edges into unit-length
into unit-length pieces. pieces.

2 2 BB
2 2
D D B B D D
AA 1 3 32 A
1 2 A
1
1 C E
C 4
4 E C
C E
E

Alarm clocks
Thay cạnhclocks
IfAlarm
efficiency ewere not v)
= (u, bởi lwe
an issue, e cạnh độ dài
could stop Butbằng
here.1, when cách thêm
G has very −1
leedges,
long
the
đỉnh G ′ it engenders
If tạm
efficiency u vàisnot
giữa were thickly
v. populated
an issue, with stop
we could dummy nodes,
here. But and
whentheGBFS
hasspends
very long edge
most
the of
G ′itsit time diligently
engenders is computing distances with
thickly populated to these nodes nodes,
dummy that we and
don’tthe
careBFS spen
about at all.
most of its time diligently computing distances to these nodes that we don’t ca
Toabout
see this all. concretely, consider the graphs G and G ′ of Figure 4.7, and imagine
atmore
that the BFS, started at node s of G ′ , advances by one unit of distance per minute. For

Tofirst
the see99 this more itconcretely,
minutes consideralong
tediously progresses the graphs G and
S − A and S −G of endless
B, an Figure 4.7, and imagin
desert

ofthat
dummythe BFS, started
nodes. at node
Is there some sway of Gwe, advances
can snoozeby one unit
through of distance
these per minute. F
boring phases
thehave
and first an
99 minutes
alarm wakeit tediously progresses
us up whenever along interesting
something S − A andisS happening—
− B, an endless dese
15 / 52
Vấn đề Algorith

Algorithms 109
Figure 4.7 BFS on G ′ is mostly uneventful. The dotted lines show some
“wavefronts.”
Figure 4.7 BFS on G ′ is mostly uneventful. The dotted lines show some early
“wavefronts.”
G: G:
G:
100100 A
A G:
A A

S S 50
50 S S
200
200 B B
B

More generally, at any given moment the breadth-first search is advancing along
certain edges of G , and there is an alarm for every endpoint node toward which it
More generally,
Cả is99moving,
bước set at
go any
di tochuyển given
off atđầu moment
tiên đềutime
the estimated xửofthe Sbreadth-first
− at
lýarrival Athat S − search
và node. B trên
Some of is
cácadvancin
these
certain
might
đỉnh tạm.edges
be of G ,
overestimatesand there
because is
BFS an
may alarm
later for
find every
shortcuts,endpoint
as a result node
of futuretoward
arrivals elsewhere.
is moving, set to go In off
the preceding example, a quicker
at the estimated time of route to B was
arrival atrevealed upon Some
that node.
arrival at A. However, nothing interesting can possibly happen before an alarm goes
might
off. be
Theoverestimates
sounding of the next because
alarm mustBFS may signal
therefore later the
find shortcuts,
arrival as a result o
of the wavefront
arrivals elsewhere.
to a real node u ∈ VInby the preceding
BFS. example,
At that point, BFS might a quicker
also startroute to Balong
advancing was reveal
someatnew
arrival A. edges out of u,
However, and alarms
nothing need to be can
interesting set for their endpoints.
possibly happen before an ala
off. The sounding
The following of the
“alarm next
clock alarmfaithfully
algorithm” must therefore signal
simulates the the arrival
execution of the w
of BFS on

.
to aGreal node u ∈ V by BFS. At that point, BFS might also start advancin 16 / 52
Giải pháp: Đặt Alarm clock!
Chapter 4

Figure 4.7 BFS on G ′ is m


“wavefronts.”
▶ Với đỉnh A, đặt hẹn T = 100
G: G
▶ Với đỉnh B, đặt hẹn T = 200 100 A
▶ Bị đánh thức khi A được thăm lúc
S 50
T = 100
▶ Ước lượng lại thời gian đến của B là 200
B
T = 150; và đặt lại Alarm cho B.

More generally, at any given


certain edges of G , and there
is moving, set to go off at th
might be overestimates beca
arrivals elsewhere. In the prec
arrival at A. However, nothin
17 / 52
Thuật toán Alarm Clock

Đặt một alarm clock cho đỉnh s tại thời điểm T = 0

Lặp lại cho đến khi không còn alarm:


Giả sử alarm kêu tại thời điểm T cho đỉnh u. Vậy thì:
- Khoảng cách từ s tới u là T.
- Với mỗi hàng xóm v của u trong G:
* Nếu vẫn chưa có alarm cho v,
đặt alarm cho v tại thời điểm T + l(u, v).
* Nếu alarm của v đã đặt, nhưng lại muộn hơn so với
T + l(u, v),
vậy thì đặt lại alarm cho v bằng T + l(u, v).

18 / 52
long edges into unit-length pieces by introducing “dummy” nodes. Figure 4.6 shows
an example of this transformation. To construct the new graph G ′ ,

For any edge e = (u, v) of E , replace it by le edges of length 1, by adding le − 1


dummy nodes between u and v.

Ví dụ G ′ contains all the vertices V


Graph that interest us, and the distances between
them are exactly the same as in G . Most importantly, the edges of G ′ all have unit
length. Therefore, we can compute distances in G by running BFS on G ′ .
Thời gian A B C D E
Figure 4.6 Breaking edges into unit-length pieces.
0 − − − −
2
0 0B 2 1 −
D

2 B D
1 2 1 − 5
A 1 3 A
2
2 2 4 5
1
C E C E4
4 4 5
5 5
Alarm clocks 0 2 1 4 4
If efficiency were not an issue, we could stop here. But when G has very long edges,
the G ′ it engenders is thickly populated with dummy nodes, and the BFS spends
most of its time diligently computing distances to these nodes that we don’t care
about at all.
To see this more concretely, consider the graphs G and G ′ of Figure 4.7, and imagine
that the BFS, started at node s of G ′ , advances by one unit of distance per minute. For
the first 99 minutes it tediously progresses along S − A and S − B, an endless desert
of dummy nodes. Is there some way we can snooze through these boring phases 19 / 52
Hàng đợi ưu tiên

Tại sao cần hàng đợi ưu tiên? Để cài đặt hệ thống Alarm.

Hàng đợi ưu tiên là gì? Là một tập với mỗi phần tử được gắn với
giá trị số (còn gọi là khóa) và có các phép toán sau:

Insert. Thêm một phần tử mới vào tập.


Decrease-key. Giảm giá trị khóa của một phần tử cụ thể.
Delete-min. Trả lại phần tử có khóa nhỏ nhất và xóa nó khỏi tập.
Make-queue. xây dựng hàng đợi ưu tiên cho tập phần tử và giá trị
khóa cho trước.

Khóa của mỗi phần tử (đỉnh) ở đây chính là alarm của đỉnh đó.
Insert và Descrease-key để đặt alarm; Delete-min để xác định
thời điểm alarm tiếp theo kêu.

20 / 52
procedure dijkstra(G, l, s)
Input: đồ thị G = (V, E), có hướng hoặc vô hướng;
độ dài các cạnh {le : e ∈ E}; đỉnh s ∈ V
Output: Với mỗi đỉnh u đến được từ s,
dist(u) = khoảng cách từ s tới u.
for all u ∈ V:
dist(u) = ∞
prev(u) = nil (đỉnh trước u trong đường đi ngắn nhất)
dist(s) = 0
H = makequeue(V) (dùng các giá trị dist làm khóa)
while H khác rỗng:
u = deletemin(H)
for all edges (u, v) ∈ E:
if dist(v) > dist(u) + l(u, v):
dist(v) = dist(u) + l(u, v)
prev(v) = u (đỉnh trước v là u)
decreasekey(H, v)

21 / 52
r4
Ví dụ
Hãy chạyFigure
thuật 4.9
toán ADijkstra
completetrên đồofthịDijkstra’s
run sau. Saualgorithm,
mỗi bước,with
hãy node A
chỉ ra mảng Also phần
prev,
point. showntửare
và the
khóa của hàngdist
associated đợi ưu tiên.and the final sho
values

2
B D
4
4 A: 0 D
A 1 3 1 B: 4 E
3 C: 2
2

C 5
E

2
B D
4
4
1 3
A: 0 D
A 1
B: 3 E
2
3 C: 2
22 / 52
Ví dụ: Bước 1
Algorithms 111

Figure 4.9 A complete run of Dijkstra’s algorithm, with node A as the starting
point. Also shown are the associated dist values and the final shortest-path tree.

2
B D
4
4 A: 0 D: ∞
A 1 3 1 B: 4 E: ∞
3 C: 2
2

C 5
E

2
B D
4
4
1 3
A: 0 D: 6
A 1
B: 3 E: 7
2
3 C: 2
C 5
E
23 / 52
2
B D
Ví dụ: Bước 42
4 A: 0 D: ∞
A 1 3 1 B: 4 E: ∞
3 C: 2
2

C 5
E

2
B D
4
4
1 3
A: 0 D: 6
A 1
B: 3 E: 7
2
3 C: 2
C 5
E

2
B D
4
4

A 1 3 1
A: 0 D: 5
B: 3 E: 6
3
2 C: 2
24 / 52
2
B D
Ví dụ: Bước 43 4
1 3
A: 0 D: 6
A 1
B: 3 E: 7
2
3 C: 2
C 5
E

2
B D
4
4

A 1 3 1
A: 0 D: 5
B: 3 E: 6
3
2 C: 2
C 5
E

2
B D
4
4 A: 0 D: 5
A 1 3 1
B: 3 E: 6
3
2 C: 2 25 / 52
B D
4
Ví dụ: Bước 4 4

A 1 3 1
A: 0 D: 5
B: 3 E: 6
3
2 C: 2
C 5
E

2
B D
4
4 A: 0 D: 5
A 1 3 1
B: 3 E: 6
3
2 C: 2
C 5
E

2
B D

A 1 3

2 26 / 52
4
Ví dụ: Mảng
4
prev
1
A: 0 D: 5
1 3
3
B: 3 E: 6
2 C: 2
C 5
E

2
B D u prev[u]
A nil
B C
A 1 3
C A
2 D B
C E E B

27 / 52
Nội dung

Khoảng cách và tìm kiếm theo chiều rộng

Thuật toán Dijkstra

Cài đặt hàng đợi ưu tiên

Đường đi ngắn nhất khi có cạnh độ dài âm

Đường đi ngắn nhất trong một DAG


Cài đặt hàng đợi ưu tiên dùng mảng

▶ Dùng mảng lưu trữ giá trị khóa cho mỗi phần tử (đỉnh của đồ
thị).
▶ Phép toán insert và decreasekey chạy trong O(1).
▶ nhưng deletemin chạy trong O(|V|)!
▶ Với cách cài đặt này, thuật toán Dijkstra chạy trong O(|V|2 )

29 / 52
Dùng Binary Heap

▶ Các phần tử được lưu trong cây nhị phân đầy đủ: Mỗi mức
trên cây phải được điền đầy từ trái qua phải và phải đầy trước
khi thêm mức tiếp theo.
▶ Ràng buộc: Giá trị khóa của nút trên cây phải nhỏ hơn hoặc
bằng giá trị khóa của các con.
▶ Các phép toán insert, decreasekey, và deletemin chạy
trong O(log |V|)

30 / 52
Figure
Ví dụ: Thêm phần4.11
tử với(a)khóa
A binary
7 vào heap with
binary 10 elements. O
heap
shown. (b)–(d) The intermediate “bubble-up” steps
key 7. (e)–(g) The “sift-down” steps in a delete-min

(a) 3 (b

10 5

11 12 6 8

15 20 13

(c) 3 (d
31 / 52
h 10 elements. Only the key values are
ubble-up” steps in inserting an element with
in a delete-min operation.

(b) 3

10 5

11 12 6 8

15 20 13 7

(d) 3

7 5 32 / 52
15 20 13

(c) 3 (d

10 5

11 7 6 8

15 20 13 12

(e) (f

7 5 33 / 52
15 20 13 7

(d) 3

7 5

11 10 6 8

15 20 13 12

(f) 12

7 5 34 / 52
11 7 6 8

Ví dụ: Xóa phần tử ở gốc (deletemin)


15 20 13 12

(e) (f

7 5

11 10 6 8

15 20 13 12

(g) 5 (h
35 / 52
15 20 13 12

(f) 12

7 5

11 10 6 8

15 20 13

(h) 5

7 6 36 / 52
15 20 13 12

(g) 5 (h

7 12

11 10 6 8

15 20 13

37 / 52
15 20 13

(h) 5

7 6

11 10 12 8

15 20 13

38 / 52
Nội dung

Khoảng cách và tìm kiếm theo chiều rộng

Thuật toán Dijkstra

Cài đặt hàng đợi ưu tiên

Đường đi ngắn nhất khi có cạnh độ dài âm

Đường đi ngắn nhất trong một DAG


Câu hỏi
Liệu ta đã quyết định được đường đi ngắn nhất từ S đến A bằng
bao nhiêu chưa?

A
3
S ?−2
4
B

40 / 52
Giải pháp

u
dist[u]
s l(u, v)

dist[v] v

procedure update((u, v) ∈ E)
dist(v) = min{dist(v), dist(u) + l(u, v)}

Ý tưởng: Khoảng cách từ s tới v không thể lớn hơn khoảng cách
từ s tới u, cộng với l(u, v).

41 / 52
procedure update((u, v) ∈ E)
dist(v) = min{dist(v), dist(u) + l(u, v)}

Câu hỏi
Giả sử
dist(S) = dist(A) = dist(B) = ∞.
Ta cần dùng hàm update() mấy lần thì tìm được khoảng cách
ngắn nhất từ S đến A?

A
3
S −2
4
B

42 / 52
Dãy update để tìm đường đi ngắn nhất

▶ Lấy một đỉnh T bất kỳ và xét đường đi ngắn nhất từ S tới T:

S u1 u2 ··· uk T

▶ Đường đi này có nhiều nhất |V| − 1 đỉnh. Tại sao?

Quan sát
Mọi cách gọi update trên dãy cạnh có chứa dãy con

(S, u1 ), (u1 , u2 ), . . . , (uk , T)

đều tính đúng khoảng cách từ S tới T. Tại sao?

43 / 52
Thuật toán Bellman-Ford
procedure shortest-paths(G, l, s)
Input: đồ thị có hướng G = (V, E);
độ dài các cạnh {le : e ∈ E}
mà không có chu trình âm;
đỉnh s ∈ V
Output: Với mỗi đỉnh u đến được từ s,
dist(u) = khoảng cách từ s tới u.

for all u ∈ V:
dist(u) = ∞
prev(u) = nil (chưa sử dụng)

dist(s) = 0
repeat |V| − 1 times:
for all edges e ∈ E:
update(e)

44 / 52
repeat |V| − 1 times:
forfor
allall : E:
e ∈ eE ∈
update(e)
update(e)

Figure 4.144.14
Figure TheThe
Bellman-Ford algorithm
Bellman-Ford illustrated
algorithm on aonsample
illustrated graph.
a sample graph.
Ví dụ
10 10
S S A A
8 8 1 1 Iteration
Iteration
Node
Node0 01 12 23 34 45 56 67 7
G G B B S S 0 00 00 00 00 00 00 00 0
−4 −4
A A∞ ∞10 10
10 105 55 55 55 55 5
1 1 2 2 1 1
B B∞ ∞∞ ∞∞ ∞10 106 65 55 55 5
C C∞ ∞∞ ∞∞ ∞∞ ∞ 11 117 76 66 6
D D∞ ∞∞ ∞∞ ∞∞ ∞ ∞ ∞ 14 14
10 10
9 9
F F −2 −2 C C E E∞ ∞∞ ∞12 128 87 77 77 77 7
F F∞ ∞∞ ∞9 99 99 99 99 99 9
−1 −1 3 3
G G∞ ∞8 88 88 88 88 88 88 8
E E −1 −1 D D

A note
A note about
about implementation:
implementation: for for
manymany graphs,
graphs, the the maximum
maximum number
number of edges
of edges
in any
in any shortest
shortest pathpath is substantially
is substantially lessless
thanthan 1, with
− 1,−with
|V| |V| the the result
result thatthat fewer
fewer
rounds
rounds of updates
of updates are are needed.
needed. Therefore,
Therefore, it makes
it makes sense
sense to add
to add an extra
an extra check
check to to
the the shortest-path
shortest-path algorithm,
algorithm, to make
to make it terminate
it terminate immediately
immediately afterafter
anyany round
round in in
which
which no update
no update occurred.
occurred. 45 / 52
Câu hỏi
Làm thế nào để tìm được đường đi ngắn nhất theo thuật toán
Bellman-Ford?

46 / 52
Kiểm tra sự tồn tại của chu trình độ dài âm?

▶ Bài toán đường đi ngắn nhất từ s đến t sẽ không có ý nghĩa


nếu từ s đến t có thể đi qua chu trình độ dài âm.
▶ Trong thuật toán Bellman-Ford, thay vì dừng sau |V|−1 vòng
lặp, ta thực hiện thêm một lần nữa.
▶ Đồ thị có chu trình độ dài âm nếu và chỉ nếu tồn tại đỉnh v
mà dist[v] vẫn bị giảm sau vòng cuối.

47 / 52
Nội dung

Khoảng cách và tìm kiếm theo chiều rộng

Thuật toán Dijkstra

Cài đặt hàng đợi ưu tiên

Đường đi ngắn nhất khi có cạnh độ dài âm

Đường đi ngắn nhất trong một DAG


Thuật toán Bellman-Ford cho DAG

3 −1 −2
S A B C

−2

Trong DAG, cần update những cạnh nào?

49 / 52
2

3 −1 −2
S A B C

−2

Tính chất
Với mọi đường đi của DAG, các đỉnh xuất hiện theo thứ tự topo.

50 / 52
procedure dag-shortest-paths(G, l, s)
Input: DAG G = (V, E);
độ dài các cạnh {le : e ∈ E}; đỉnh s ∈ V
Output: Với mỗi đỉnh u đến được từ s, dist(u) được
đặt bằng
khoảng cách từ s tới u.

for all u ∈ V:
dist(u) = ∞
prev(u) = nil

dist(s) = 0
Sắp topo các đỉnh của G
for each u ∈ V, theo thứ tự topo:
for all edges (u, v) ∈ E:
update(u, v)

51 / 52
2

3 −1 −2
S A B C

−2

Bài tập
Hãy liệt kê các lệnh update theo thuật toán Bellman-Ford cho
DAG?

52 / 52
Thuật toán tham lam

Trần Vĩnh Đức

HUST

Ngày 1 tháng 9 năm 2019

1 / 64
Tài liệu tham khảo

I S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani,


Algorithms, July 18, 2006.

2 / 64
Nội dung

Cây bao trùm nhỏ nhất

Mã hóa Huffman

Công thức Horn

Phủ các tập


ted edges are potential links, and the goal is to pick enough of the
Bài toán
nodes are connected. But this is not all; each link also has a main
flected in that edge’s weight. What is the cheapest possible networ

1
A C E
4 4
3
4 2 5

B 4 D 6 F

mediateIobservation is that the optimal set of edges cannot contain


Bạn cần xây dựng mạng máy tính bằng cách kết nối từng cặp
e removingmáy.
an edge from this cycle would reduce the cost without
connectivity:
I Cần chọn một số kết nối để mạng liên thông;
I nhưng không phải tất cả các cặp: Mỗi kết nối tốn một chi phí
y1 Removing a cycle edge cannot disconnect a graph.
(tiền bảo trì).
solutionImust
Mạngbe
vớiconnected and làacyclic:
chi phí nhỏ nhất gì? undirected graphs of this
rees. The particular tree we want is the one with minimum tota 4 / 64
nodes are connected. But this is not all; each link also has a main
flected in that edge’s weight. What is the cheapest possible networ

1
A C E
4 4
3
4 2 5

B 4 D 6 F

mediate observation is that the optimal set of edges cannot contain


Tính chất
e removing ancạnh
Xóa một edge from
trên this cycle
chu trình would
không làm mất reduce
tính liên the cost
thông củawithout
đồ
connectivity:
thị.

y 1 Vậy,
Removing
mạng vớiachi
cycle
phí edge cannot
nhỏ nhất disconnect
phải là một cây. a graph.

solution must be connected and acyclic: undirected graphs of this


rees. The particular tree we want is the one with minimum tota
as the minimum spanning tree. Here is its formal definition. 5 / 64
Bài toán Cây bao trùm nhỏ nhất (Minimal Spaning Tree)
I Input: Đồ thị vô hướng G = (V, E); mỗi cạnh có trọng số we .
I Output: Một cây T = (V, E′ ) với E′ ⊆ E, với tổng trọng số

weight(T) = we
e∈E′

là nhỏ nhất.

6 / 64
um spanning trees Input: An undirected graph G = (V, E ); edge weights we .
Tìm tocây
e asked bao atrùm
network collection of computers by linking selected
Output: A tree T = (V, E ′ ), with E ′ ⊆ E , that minimizes
his translates into a graph problem in which nodes are computers, !
s are potential links, and the goal is to pick enough of weight(T)
these edges
= we .
are connected. But this is not all; each link also has a maintenance e∈E ′
n that edge’s weight. WhatInisthe
thepreceding
cheapestexample,
possiblethe
network?
minimum spanning tree has a cost of

1 1
A C E A C E
4 4
3 4 2 5
4 2 5

B D F B 4 D F
4 6

However,
observation is that the optimal set this is notcannot
of edges the onlycontain
optimalasolution.
cycle, Can you spot anothe
ng an edge from this cycle would reduce the cost without compro-
vity: Đây có phải lời giải5.1.1 A greedy approach
tối ưu không?
Kruskal’s minimum spanning tree algorithm starts with the empty g
selects
moving a cycle edge cannot edges from
disconnect E according to the following rule.
a graph.
Repeatedly add the next lightest edge that doesn’t produce a cycl
must be connected and acyclic: undirected graphs of this kind are
e particular tree we wantInisother
the onewords, it constructs
with minimumthe treeweight,
total edge by edge and, apart from
avoid
inimum spanning tree. Here is cycles, simply
its formal picks whichever edge is cheapest at the moment.
definition.
algorithm: every decision it makes is the one with the most obvi
7 / 64
dges are potential links, and the goal is to pick enough o
esThuật toán Kruskal
are connected. But this is not all; each link also has a
d in that edge’s weight. What is the cheapest possible ne

1
A C E
4 4
3
4 2 5

B 4 D 6 F

ate observation is that the optimal set of edges cannot co


ovingBắtanđầuedge
với đồ thị rỗng và chọn cạnh từ E theo quy tắc sau.
from this cycle would reduce the cost wit
Lặp lại việc thêm cạnh nhỏ nhất mà không tạo thành
ectivity: chu trình.

Removing a cycle edge cannot disconnect a graph. 8 / 64


Ví dụ: Thuật toán Kruskal

1
7

8
5 2 3
7
9 5
15
4 5
6 9
8
11
6 7

Hình: Nguồn: tikz examples

9 / 64
Nhát
130 cắt 5.1

FigureĐịnh
5.2 nghĩa
T ∪ {e}. The addition of e (dotted) to T (solid lines) produces a
cycle. Xét
Thisđồcycle
thị must contain
G = (V, at least
E). Một nhátone
cắtother edge,
là một shown
cách chia here as e′ , across
tập đỉnh
the cutthành
(S, Vhai
− S).
nhóm: S và V − S.

S V −S

Hình: Nhát cắt và các cạnh nối giữa hai phân hoạch.
The correctness of Kruskal’s method follows from a certain cut property, which
is general enough to also justify a whole slew of other minimum spanning tree
algorithms. 10 / 64
B 1 D

Tính chất Cắt


Giả sử các cạnh X là một(b) phần của mộtA MST Algorithms
nào C 131 E
đó của
G = (V, E). Chọn một tập đỉnh bất kỳ S sao cho không có cạnh
property
nào at
củawork.
X nối(a)
giữa và VEdges
− S, vàX:
AnS undirected graph.
xét e là(b) SetcóX trọng
cạnh has số nhỏ
art of the MST T on the right. (c) If S = {A,
nhất nối hai phân hoạch này. Khi đó, X ∪ {e}
B B, C , D},Dthen
là một phần củaFmột
weightMSTedgesnàoacross
đó. the cut (S, V − S) is e = {D, E }. X ∪ {e}
own on the right.

1
(c)
3 A C E
A C E
2 2 The
1 cut:
e
2 3
B D F
B 1 D 4 F
S V −S

C E A C E

MST T :
′ 11 / 64
C E A C E
Ví dụ A C E
MST T: A C E

Edges X: MST T :
D F B D F
B D F B D F

C A E A
C E AC CE E

The cut: e e
MST T : MST T :
B F D F
D B DF F
B D
S V −S
V −S

Nhát cắt S và V − S và một cây bao trùm nhỏ nhất.

e and e′ cross between S and V − S, and e is specifically the lightest edge


′ ′
ype.
ween Therefore
S and V w(e)
−≤ and),′eand
S,w(e is weight(T ) ≤ weight(T).
specifically Since
the lightest T isofan MS
edge

ust be the case
′ that weight(T )′ = weight(T) and that T is also an MST.
e) ≤ w(e ), and weight(T ) ≤ weight(T). Since T is an MST,
re 5.3 shows ′an
t weight(T ) =example of theand
weight(T) cut property. Which
that T ′ is also edge is e′ ?
an MST. 12 / 64
Chứng
Figure 5.2minh Tính
T ∪ {e}. The chất Cắt
addition of e (dotted) to T (solid lines) produces a
cycle. This cycle must contain at least one other edge, shown here as e′ , across
the cut (S, V − S).

S V −S

Xét X là một phần của MST T; nếu cạnh e cũng là một phần của
The correctness
T thì Tính of Kruskal’s
chất method follows from a certain cut property, which
Cắt đúng.
is general enough to also justify a whole slew of other minimum spanning tree
algorithms.

5.1.2 The cut property 13 / 64


Figure 5.2 T ∪ {e}. The addition of e (dotted) to T (solid lines) produces a
Chứng
cycle. This minh Tính
cycle must chấtatCắt
contain least (2)
one other edge, shown here as e′ , across
the cut (S, V − S).

S V −S

I Giả sử e không thuộc MST T. Xét T ∪ {e}.


The correctness of Kruskal’s method follows from a certain cut property, which
I Việc thêm cạnh e vào T sẽ tạo ra một chu trình.
is general enough to also justify a whole slew of other minimum spanning tree
I Chu trình này chứa ít nhất một cạnh e′ khác đi qua nhát cắt.
algorithms.

5.1.2 The cut property


Say that in the process of building a minimum spanning tree (MST), we have already
14 / 64
cycle. This cycle must contain at least one other edge, shown here as e′ , across
Chứng
the cut (S, minh
V − S).Tính chất Cắt (3)

S V −S

I Xét đồ thị T′ = (T ∪ {e}) − {e′ }.


The correctness of Kruskal’s method follows from a certain cut property, which
I T′ là một cây. Tại sao?
is general enough to also justify a whole slew of other minimum spanning tree
algorithms.
G = (V, E) là một cây nếu và chỉ nếu G liên thông và
5.1.2 The cut property
|E| = |V| − 1;
Say that in the process of building a minimum spanning tree (MST), we have already
chosen some edges and are so far on the right track. Which edge should we 15 /add
64
cycle. This cycle must contain at least one other edge, shown here as e′ , across
Chứng
the cut (S, minh
V − S).Tính chất Cắt (3)

S V −S

I Xét đồ thị T′ = T ∪ {e} − {e′ }.


The correctness of Kruskal’s method follows from a certain cut property, which
I T′ là một cây.
is general enough to also justify a whole slew of other minimum spanning tree
I Cây T′ cũng là cây bao trùm nhỏ nhất vì:
algorithms.

5.1.2 The weight(T ) = weight(T) + w(e) − w(e′ ) và w(e) ≤ w(e′ ).
cut property
Say that in the process of building a minimum spanning tree (MST), we have already
chosen some edges and are so far on the right track. Which edge should we 16 /add
64
uppose you are asked to network a collection of computers by linking select
Tính
airs đúng
of them. đắn
This của Thuật
translates toánproblem
into a graph Kruskal?in which nodes are computer
ndirected edges are potential links, and the goal is to pick enough of these edg
hat the nodes are connected. But this is not all; each link also has a maintenan
ost, reflected in that edge’s weight. What is the cheapest possible network?

1
A C E
4 4
3
4 2 5

B 4 D 6 F

One immediate observation is that the optimal set of edges cannot contain a cyc
ecause removing an edge from this cycle would reduce the cost without compr
Bắt đầu với đồ thị rỗng và chọn cạnh từ E theo quy tắc sau.
mising connectivity:
Lặp lại việc thêm cạnh nhỏ nhất mà không tạo thành
Property 1 chu
Removing
trình. a cycle edge cannot disconnect a graph.

o the solution must be connected and acyclic: undirected graphs of this kind a
alled trees. The particular tree we want is the one with minimum total weigh
nown as the minimum spanning tree. Here is its formal definition.
17 / 64
Cài đặt thuật toán Kruskal

Sử dụng cấu trúc dữ liệu disjoint sets: mỗi tập là một thành phần
liên thông.

Disjoint sets có ba phép toán:


I makeset(x): tạo ra một tập chỉ chứa phần tử x.
I find(x): x thuộc tập nào?
I union(x, y): hợp hai tập chứa x và y.

18 / 64
procedure kruskal(G, w)
Input: đồ thị liên thông vô hướng G = (V, E);
với trọng số cạnh we
Output: MST định nghĩa bởi tập cạnh X.

for all u ∈ V:
makeset(u)

X=∅
Sắp xếp các cạnh e theo trọng số
for all {u, v} ∈ E, lấy không giảm theo trọng số:
if find(u) ̸= find(v):
thêm cạnh {u, v} vào X
union(u, v)

19 / 64
Cấu trúc dữ liệu Disjoint sets

I Lưu trữ tập dùng cây có hướng.


I Các nút là các phần tử của tập.
I Mỗi nút x có một con trỏ tới nút cha π(x) của nó.
I Ngoài ra mỗi nút có một rank để lưu trữ độ cao của cây con
từ nút này.
I Phần tử ở gốc là đại diện, hoặc là tên, của tập.
I Cha của gốc là chính nó.

20 / 64
anged in no particular order, and each has parent pointers that eventually le
of the tree. This root element is a convenient representative, or name, for th
guished from the other elements by the fact that its parent pointer is a self-l

Ví dụ
5.5 A directed-tree
Cây có hướngrepresentation of {B,
biểu diễn hai tập twoE}
sets
và{B, C,and
{A,E} D, F,{A,
G,C,
H}D, F, G, H}.

E H

B C D F

G A

21 / 64
Cài đặt Disjoint sets

procedure markset(x)
π(x) = x
rank(x) = 0

function find(x)
while x ̸= π(x): x = π(x)
return x

Ở đây, π(x) chỉ đến cha của x.

22 / 64
procedure union(x, y)
rx = find(x)
ry = find(y)
if rx = ry : return
if rank(rx ) > rank(ry ): π(ry ) = rx
else:
π(rx ) = ry
if rank(rx ) = rank(ry ): rank(ry ) = rank(rx ) + 1

23 / 64
Bài tập
Hãy vẽ cây biểu diễn disjoint sets sau các phép toán sau:
I makeset(A), makeset(B),..., makeset(G)
I union(A, D), union(B, E), union(C, F)
I union(C, G), union(E, A)
I union(B, G)

24 / 64
Tính chất của union-find

Tính chất
Với mọi x, ta luôn có rank(x) < rank(π(x)).

Tính chất
Mọi nút gốc r với rank k có ít nhất 2k nút trong cây của nó.

Tính chất
Nếu có n phần tử, có nhiều nhất n/2k nút có rank k.

25 / 64
Cải tiến: Path Compression
Gán nút gốc là cha của mọi nút x

function find(x)
if x ̸= π(x):
π(x) = find(π(x)) (Gán nút gốc là cha của x)
return π(x)

26 / 64
148 Algorithms
Ví dụ: find(I) rồi find(K)
Figure 5.7 The effect of path compression: find(I) followed by find(K).

A3 A3

1
B0 C E2 B0 C1 E2 F
1
I
0

D0 F1 G1 H
0
−→ D0 G1 H0 J
0

0
I0 J
0
K K0

A3

−→ B0 C
1
E2 F
1
I0 K0 G1

D0 H0 J0

to n to bring it down to 1 (or below 1). For instance, log ∗ 1000 = 4 since log log log log 1000 ≤ 1.
In practice there will just be the first five of the intervals shown; more are needed only if 27 / 64
Thuật toán tổng quát dựa trên tính chất cắt

X={ }
Lặp lại các bước sau cho đến khi |X| = |V| − 1:
I Chọn một tập S ⊂ V thỏa mãn: X không chứa cạnh
nối giữa nhát cắt S và V − S.
I Xét e ∈ E là cạnh có trọng số nhỏ nhất nối giữa
nhát cắt S và V − S
I X = X ∪ {e}

28 / 64
Thuật toán Prim

X={ }
Lặp lại các bước sau cho đến khi |X| = |V| − 1:
I Chọn một tập S ⊂ V thỏa mãn: X không chứa cạnh
nối giữa nhát cắt S và V − S.
I Xét e ∈ E là cạnh có trọng số nhỏ nhất nối giữa
nhát cắt S và V − S
I X = X ∪ {e}

Thuật toán Prim


I Tập cạnh X luôn tạo ra một cây con, và
I Tập S được chọn là tập đỉnh của cây con này.

29 / 64
m’s algorithm: the edges X form a tree, and S consists of its ve

S V −S

X e

Thuật toán Prim


ude the
I vertex vX
Tập cạnh S oftạo
̸∈ luôn smallest cost:
ra một cây con, và
I Tập S được chọn là tập đỉnh của cây con này.
cost(v) = min w(u, v).
u∈S
30 / 64
Ví dụ: Thuật toán Prim

1
7

8
5 2 3
7
9 5
15
4 5
6 9
8
11
6 7

Hình: Nguồn: tikz examples

31 / 64
Thuật
gure toán
5.8 Prim’s Prim vs
algorithm: the Dijkstra
edges X form a tree, and S consists of its vertices.

S V −S

X e

I Mỗi bước lặp, cây con X sẽ được thêm một cạnh.


owing to include the vertex v ̸∈ S of smallest cost:
I Đây là cạnh có trọng số nhỏ nhất nối giữa một đỉnh trong S
và một đỉnh ngoàicost(v)
S. = min w(u, v).
u∈S
I Có nghĩa rằng, thêm vào S đỉnh v ∈
/ S có cost nhỏ nhất:
his is strongly reminiscent of Dijkstra’s algorithm, and in fact the pseudocode (Figure
almost identical. The only difference is in the key values by which the priority queu
cost(v)
dered. In Prim’s algorithm, the value = min
of a node w(u,
is the v) of the lightest incoming e
weight
u∈S
om set S, whereas in Dijkstra’s it is the length of an entire path to that node from
arting point. Nonetheless, the two algorithms are similar enough that they have the sa
nning time, which depends on the particular priority queue implementation. 32 / 64
Ví dụ
6 5
A C E A
4 1 3
5 2 4

B 2 D 4 F B

Tập S A B Set S C AD B E C F D
{} 0/nil ∞/nil {}∞/nil 0/nil
∞/nil ∞/nil
∞/nil∞/nil
∞/nil∞/nil
A 5/A A 6/A ∞/nil 6/A
4/A 5/A ∞/nil 4/A
A, D 2/D A, D2/D ∞/nil 2/D4/D
2/D
A, D, B A, D, 1/B
B ∞/nil 1/B4/D
A, D, B, C A, D, B, C 5/C 3/C
A, D, B, C, F A, D, B, C, F 4/F

33 / 64
procedure prim(G, w)
Input: đồ thị vô hướng G = (V, E) với cạnh có trọng số
we .
Output: MST định nghĩa bởi mảng prev.
for all u ∈ V:
cost(u) = ∞
prev(u) = nil (đỉnh trước u khi xây dựng cây)
Chọn tùy ý một đỉnh ban đầu u0
cost(u0 ) = 0

H = makequeue(V) (dùng các giá trị cost làm khóa)


while H khác rỗng:
v = deletemin(H)
for all edges {v, z} ∈ E:
if cost(z) > w(v, z):
cost(z) = w(v, z)
prev(z) = v (đỉnh trước z là v)
decreasekey(H, z)
34 / 64
Nội dung

Cây bao trùm nhỏ nhất

Mã hóa Huffman

Công thức Horn

Phủ các tập


Sơ đồ nén MP3

1. Số hóa bằng cách lấy mẫu theo khoảng. Tạo ra một dãy
số thực
s1 , s2 , . . . , sT
Ví dụ, với tốc độ 44, 100 mẫu trên giây, bản giao hưởng 50
phút có
T = 50×60×44, 100 ≈ 130 triệu.
2. Lượng hóa. Xấp xỉ si bởi giá trị gần nhất thuộc tập hữu hạn
Γ.
3. Mã hóa. Xâu s1 s2 . . . sT trên bảng chữ Γ được mã hóa ở
dạng nhị phân. (Dùng mã Huffman)

36 / 64
Mã hóa

Ký hiệu Số lần xuất hiện


A 70 triệu
B 3 triệu
C 20 triệu
D 37 triệu

I Bảng chữ Γ = {A, B, C, D} và T = 130 triệu.


I Nếu mã hóa dùng 2 bit cho mỗi ký hiệu, ví dụ
A → 00, B → 01, C → 10, D → 11
ta cần 260 megabits.
I Liệu ta có thể dùng mã độ dài thay đổi để giảm kích thước
bản mã?

37 / 64
Mã độ dài thay đổi

I Dùng các dãy bit độ dài khác nhau để mã hóa các chữ cái.
I Chữ cái xuất hiện thường xuyên hơn sẽ được mã bằng dãy bit
ngắn hơn.
I Vấn đề: Làm thế nào xác định được mỗi chữ bắt đầu và kết
thúc ở đâu trong dãy bit.?

Ví dụ
Cách mã hóa

A → 0, C → 01, D → 11, B → 001

gây ra nhập nhằng khi giải mã


001 → AC
001 → B

38 / 64
Mã tiền tố
Định nghĩa
Mã tiền tố là tập xâu thỏa mãn không có xâu nào là khúc đầu của
xâu khác.

Hãy giải mã dãy bit 10100100?

39 / 64
Kích thước bản mã

Ký hiệu Số lần xuất hiện Từ mã


A 70 triệu 0
B 3 triệu 100
C 20 triệu 101
D 37 triệu 11

I Kích thước bản mã

= (1 × 70 + 3 × 3 + 3 × 20 + 2 × 37) megabits
= 213 megabits

I Cải thiện 17% so với 260 megabits khi dùng mã độ dài cố


định.

40 / 64
Bài toán

I Cho n ký hiệu có tần suất

f1 , f2 , . . . , fn .

I Hãy tìm cây ở đó mỗi lá ứng với


một ký hiệu và có chi phí cực tiểu.


n
Chi phí của cây = fi · (độ sâu ký hiệu thứ i trong cây)
i=1

41 / 64
Hãy tính chi phí của cây sau.


n
Chi phí của cây = fi · (độ sâu ký hiệu thứ i trong cây)
i=1

42 / 64
I Tần suất nút lá là fi .
I Tần suất nút trong là tổng
tần suất của các lá con cháu của nó.

Mệnh đề
Chi phí của cây là tổng tần suất của mọi nút ngoại trừ nút gốc.

43 / 64
Tối ưu hàm chi phí


n
Chi phí của cây = fi · (độ sâu của ký hiệu thứ i trong cây)
i=1

Nhận xét
Hai ký hiệu với tần suất nhỏ nhất sẽ phải ở đáy của cây tối ưu.

44 / 64
Xây dựng cây một cách tham lam

I Tìm hai ký hiệu có tần suất nhỏ nhất, gọi là i và j, và tạo nút
cha của chúng với tần suất fi + fj .
Để đơn giản ký hiệu, ta giả sử chúng là f1 và f2 .
I Mọi cây trong đó f1 và f2 là nút lá anh em có chi phí f1 + f2
cộng với chi phí cho cây gồm n − 1 nút lá của các tần suất:

(f1 + f2 ), f3 , f4 , . . . , fn .

I Ta đưa về bài toán kích thước nhỏ hơn. Ta loại bỏ f1 và f2


khỏi dãy tần suất và thêm (f1 + f2 ) vào, và lặp lại.

45 / 64
Xây dựng cây một cách tham lam
C.H. Papadimitriou, and U.V. Vazirani

f1 + f2
f5 f4 f3

f1 f2

oblem is just aHình:


smaller
Loại fversion of fthe
1 , f2 và thêm 1 + fone
2 vào we
dãy started
tần suất. with. So we p
frequencies, insert (f 1 + f2 ), and loop. The resulting algorithm can
riority queue operations (as defined on page 120) and takes O(n lo
46 / 64
procedure Huffman(f)
Input: mảng f[1 · · · n] của các tần suất
Output: Một cây mã hóa với n lá

Xét H là hàng đợi ưu tiên của các số nguyên, thứ tự


bởi f
for i = 1 to n: insert(H, i)
for k = n + 1 to 2n − 1:
i = deletemin(H), j = deletemin(H)
Tạo một nút đánh số k với các con là i, j
f[k] = f[i] + f[j]
insert(H, k)

47 / 64
Nội dung

Cây bao trùm nhỏ nhất

Mã hóa Huffman

Công thức Horn

Phủ các tập


Biến Boolean

I Đối tượng cơ sở trong công thức Horn là biến Boolean, nhận


giá trị true hoặc false.
I Một literal là một biến x hoặc nghịch đảo của nó x (“NOT
x”).

Ví dụ
Biến x, y và z ký hiệu các khả năng sau đây:

x ≡ vụ giết người xảy ra trong bếp


y ≡ người quản gia vô tội
z ≡ ngài đại tá đã ngủ lúc 8 giờ tối

49 / 64
Công thức Horn
Trong công thức Horn, tri thức về các biến được biển diễn bởi hai
loại mệnh đề:
1. Kéo theo, vế trái là một AND của một số các literal dương
và vế phải là một literal dương.
Các khẳng định này có dạng “nếu mệnh đề vế trái mà đúng,
thì vế phải cũng phải đúng”. Ví dụ,

(x ∧ w) ⇒ u

Một trường hợp riêng là dạng đơn ⇒ x với ý nghĩa rằng “x là


true”.
2. Toàn phủ định, bao gồm một OR của một số literal âm.
Ví dụ
(u ∨ v ∨ y)
(“không thể tất cả cùng vô tội”).

50 / 64
Bài toán nhất quán
I Cho một tập các mệnh đề kéo theo hoặc toàn phủ định;
I Hãy xác định liệu chúng có nhất quán. Tức là, có cách gán
true/false cho các biến để thỏa mãn mọi mệnh đề. Đây
cũng gọi là phép gán thỏa được.

Câu hỏi
Hãy xác định liệu các mệnh đề sau có nhất quán:

(w ∧ y ∧ z) ⇒ x, (x ∧ z) ⇒ w, x ⇒ y,
⇒ x, (x ∧ y) ⇒ w, (w ∨ x ∨ y), (z).

51 / 64
Thuật toán tham lam

Input: Một công thức Horn


Output: Một phép gán thỏa được, nếu tồn tại

Đặt mọi biến bằng false


while còn phép kéo theo chưa thỏa mãn:
Đặt biến ở vế phải của phép kéo theo này bằng
true

if mọi mệnh đề toàn phủ định được thỏa mãn:


return phép gán
else:
return ``công thức không thỏa mãn''

52 / 64
Bài tập
Hãy chạy thuật toán với công thức Horn gồm các mệnh đề sau:

(w ∧ y ∧ z) ⇒ x,
(x ∧ z) ⇒ w,
x ⇒ y,
⇒ x,
(x ∧ y) ⇒ w,
(w ∨ x ∨ y),
(z).

53 / 64
Tính đúng đắn của thuật toán

I Nếu return một phép gán, thì phép gán này phải thỏa mãn
cả các mệnh đề kéo theo và các mệnh đề toàn phủ định.
I Ngược lại, ta có bất biến trong vòng lặp while:
Nếu một biến được đặt bằng true, vậy thì nó phải
bằng true trong mọi phép gán thỏa được.
Nếu có một phép gán được tìm thấy sau vòng lặp while mà
không thỏa mãn mệnh đề toàn phủ định, vậy không có phép
gán nào thỏa được.

54 / 64
Nội dung

Cây bao trùm nhỏ nhất

Mã hóa Huffman

Công thức Horn

Phủ các tập


Xây trường học trong các thị trấn

I Mỗi trường phải ở trong một thị trấn và không ai phải đi hơn
30 dặm để tới trường.
I Số trường tối thiểu cần xây là bao nhiêu?

56 / 64
Xây trường học trong các thị trấn

I Mỗi thị trấn x, đặt Sx là tập thị trấn cách x trong vòng 30
dặm. Một trường tại x sẽ “phủ” các thị trấn này.
I Cần lấy bao nhiêu tập Sx để phủ mọi thị trấn?

57 / 64
Bài toán phủ tập

I Input: Một tập B; và các tập S1 , S2 , . . . , Sm ⊆ B


I Output: Một cách chọn các Si sao cho hợp của chúng là B
I Chi phí: Số tập được chọn

58 / 64
Thuật toán tham lam
Lặp lại cho đến khi mọi phần tử của B được phủ:
Chọn tập Si với nhiều phần tử chưa được phủ nhất.

59 / 64
Bài tập
Hãy tìm phủ tối ưu cho tập thị trấn như sau:

60 / 64
Khẳng định
Giả sử B chứa n phần tử và phủ tối ưu gồm k tập. Thuật toán
tham lam sẽ dùng nhiều nhất k ln n tập.

61 / 64
Chứng minh
I Xét nt là số phần tử vẫn chưa được phủ sau t lần lặp của
thuật toán tham lam. Ta có n0 = n.
I Vì các phần tử này bị phủ bởi k tập tối ưu, nên phải có một
tập với ít nhất nt /k phần tử trong số k tập này.
I Vậy chiến lược tham lam đảm bảo
( ) ( ) ( )
nt 1 1 2 1 t+1
nt+1 ≤ nt − = nt 1 − < nt−1 1 − < n0 1 −
k k k k

I Do 1 − x ≤ e−x , ta được
( )
1 t
nt ≤ n0 1 − < n0 (e−1/k )t = ne−t/k
k

I Khi t = k ln n, thì nt < ne− ln n = 1, tức là không còn phần tử


nào cần phủ.

62 / 64
st easily proved by a picture:

e−x

1−x 1

x
0

x ≤ e−x "
Hình: Chỉ ra rằng 1 −! vớit mọi x, đẳng thức nếu và chỉ nếu x = 0.
1
nt ≤ n0 1 − < n0 (e−1/k )t = ne−t/k .
k
63 / 64
Tỉ suất của thuật toán tham lam

I Tỉ lệ giữa nghiệm của thuật toán tham lam và nghiệm tối ưu


thay đổi theo dữ liệu vào nhưng luôn nhỏ hơn ln n.
I Có một số input tỉ lệ rất gần với ln n.
I Ta gọi tỉ lệ lớn nhất là tỉ suất của thuật toán tham lam.

Nhận xét
Dưới một số giả sử được thừa nhận rộng rãi, ta có thể chứng minh
được rằng: không có thuật toán thời gian đa thức với tỉ suất xấp xỉ
nhỏ hơn.

64 / 64
Quy hoạch động

Trần Vĩnh Đức

HUST

Ngày 7 tháng 9 năm 2019

1 / 61
Tài liệu tham khảo

▶ S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani,


Algorithms, July 18, 2006.

2 / 61
Nội dung

Đường đi ngắn nhất trên DAG

Dãy con tăng dài nhất

Khoảng cách soạn thảo

Bài toán cái túi

Nhân nhiều ma trận

Đường đi ngắn nhất

Tập độc lập trên cây


At the conclusion of our study of shortest paths (Chapter 4), we observed that the problem is
Đồespecially
thị phi easy chu trình
in directed (DAG):
acyclic Nhắc
graphs (dags). lại
Let’s recapitulate this case, because it lies at
the heart of dynamic programming.
The special distinguishing feature of a dag is that its nodes can be linearized; that is, they
can be arranged on a line so that all edges go from left to right (Figure 6.1). To see why
this helps with
Trong đồ thịshortest paths,trình,
phi chu suppose
tawecówant
thểtosắp
figure outthứ
xếp distances
tự cácfrom nodesao
đỉnh S to the
other nodes. For concreteness, let’s focus on node D. The only way to get to it is through its
cho nó chỉ có cung đi đi từ trái sang phải.
Figure 6.1 A dag and its linearization (topological ordering).

6 3
A B
1 2
2 4 6 1 1
S 4 1 E S C A B D E
2 3 1 1 2
C D

Hình: Đồ thị phi chu trình G và 169


biểu diễn dạng tuyến tính của nó.

4 / 61
this helps with shortest paths, suppose we want to figure out distances from node S to the
other nodes. For concreteness, let’s focus on node D. The only way to get to it is through its
Đường đi ngắn nhất trên DAG
Figure 6.1 A dag and its linearization (topological ordering).

6 3
A B
1 2
2 4 6 1 1
S 4 1 E S C A B D E
2 3 1 1 2
C D

Hình: Đồ thị phi chu trình G và 169


biểu diễn dạng tuyến tính của nó.

▶ Xét nút D của đồ thị, cách duy nhất để đi từ S đến D là phải


qua B hoặc C.
▶ Vậy, để tìm đường đi ngắn nhất từ S tới D ta chỉ phải so sánh
hai đường:
dist(D) = min{dist(B) + 1, dist(C) + 3}
5 / 61
ness, let’s focus on node D. The only way to get to it is through its
Thuật toán tìm đường đi ngắn nhất cho DAG
linearization (topological ordering).

3
B
2
2 4 6 1 1
1 E S C A B D E

1 1 2
D

Thuật toán
169
Khởi tạo mọi giá trị dist(.) bằng ∞
dist(s) = 0
for each v ∈ V \ {s}, theo thứ tự tuyến tính:
dist(v) = min(u,v)∈E {dist(u) + ℓ(u, v)}

6 / 61
paths, suppose we want to figure out distances from node S to the
ness, let’s focus on node D. The only way to get to it is through its

linearization (topological ordering).

3
B
2
2 4 6 1 1
1 E S C A B D E

1 1 2
D

Bài tập 169


Làm thế nào để tìm đường đi dài nhất trong DAG?

7 / 61
Ý tưởng quy hoạch động
linearization (topological ordering).

3
B
2
2 4 6 1 1
1 E S C A B D E

1 1 2
D

Hình: Để giải bài toán D ta cần giải bài toán con C và B.


169

▶ Quy hoạch động là kỹ thuật giải bài toán bằng cách xác
định một tập các bài toán con và giải từng bài toán con một,
nhỏ nhất trước,
▶ dùng câu trả lời của bài toán nhỏ để hình dung ra đáp án của
bài toán lớn hơn,
▶ cho tới khi toàn bộ các bài toán được giải.
8 / 61
Nội dung

Đường đi ngắn nhất trên DAG

Dãy con tăng dài nhất

Khoảng cách soạn thảo

Bài toán cái túi

Nhân nhiều ma trận

Đường đi ngắn nhất

Tập độc lập trên cây


Bài toán dãy con tăng dài nhất
Cho dãy số a1 , a2 , . . . , an . Một dãy con là một tập con các số lấy
theo thứ tự, nó có dạng

ai1 , ai2 , . . . , aik

ở đó 1 ≤ i1 < i2 < · · · < ik ≤ n, và dãy tăng là dãy mà các phần


tử tăng dần. Nhiệm vụ của bạn là tìm dãy tăng có số phần tử
nhiều nhất.

Ví dụ
Dãy con dài nhất của dãy 5, 2, 8, 6, 3, 6, 9, 7 là:

10 / 61
Bài tập
Hãy tìm dãy con tăng dài nhất của dãy

5, 3, 8, 6, 2, 6, 9, 7.

11 / 61
S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani 171
DAG của dãy tăng
Figure 6.2 The dag of increasing subsequences.

5 2 8 6 3 6 9 7

Hình: DAG G = (V, E) của dãy 5, 2, 8, 6, 3, 6, 9, 7.


In this example, the arrows denote transitions between consecutive elements of the opti-
mal solution. More generally, to better understand the solution space, let’s create a graph of
all permissible transitions: establish a node i for each element a i , and add directed edges (i, j)
whenever it is possible for ai and aj to be consecutive elements in an increasing subsequence,
that is, whenever i < j and ai < aj (Figure 6.2).
Noticedựng
Ta xây that (1) this graph
DAG G =G (V, = (V,E) is a dag,
E) cho dãysince
a1 ,allaedges (i, j) have i < j, and (2)
2 , . . . , an như sau:
there is a one-to-one correspondence between increasing subsequences and paths in this dag.
Therefore,
▶ V =our {agoal
1 , ais2simply }, the
, . . . , toanfind vàlongest path in the dag!
Here is the algorithm:
▶ có cung (ai , aj ) ∈ E nếu i < j và ai < aj .
for j = 1, 2, . . . , n:
Bài toánL(j)tìm
= 1 dãy
+ max{L(i)tăng: (i,
dài j) ∈nhất
E} được đưa về bài toán tìm đường đi
return maxj L(j)
dài nhất trên DAG.
L(j) is the length of the longest path—the longest increasing subsequence—ending at j (plus
1, since strictly speaking we need to count nodes on the path, not edges). By reasoning in the
12 / 61
Tìm đường đi dài nhất trên DAG

for j = 1, 2, . . . , n:
L(j) = 1 + max{L(i) : (i, j) ∈ E}
return maxj L(j)
▶ L(j) là độ dài của đường đi dài nhất kết thúc tại j.

13 / 61
gupta, C.H. Papadimitriou, and U.V. Vazirani
Bài tập
e 6.2 The
Hãydag
tìmofđường
increasing
đi dàisubsequences.
nhất trên DAG sau:

5 2 8 6 3 6 9 7

this example, the arrows denote transitions between consecutive elements of th


lution. More generally, to better understand the solution space, let’s create a gr
missible transitions: establish a node i for each element a i , and add directed edge
ver it is possible for ai and aj to be consecutive elements in an increasing subseq
14 / 61
Tìm đường đi dài nhất
S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani 171

Figure 6.2 The dag of increasing subsequences.

5 2 8 6 3 6 9 7

In this example, the arrows denote transitions between consecutive elements of the opti-
▶ Làm thế nào tìm được đường đi dài nhất từ các L-giá trị?
mal solution. More generally, to better understand the solution space, let’s create a graph of
all▶permissible transitions: establish a node i for each element a i , and add directed edges (i, j)
Ta quản lý các cạnh trên đường đi bởi con trỏ ngược prev(j)
whenever it is possible for ai and aj to be consecutive elements in an increasing subsequence,
that is, whenever
giống j and aitìm
nhưi <trong < aj (Figure
đường6.2). đi ngắn nhất.
Notice that (1) this graph G = (V, E) is a dag, since all edges (i, j) have i < j, and (2)
▶ Dãy
there tối ưu correspondence
is a one-to-one có thể tìm between
được theo consubsequences
increasing trỏ ngược andnày.
paths in this dag.
Therefore, our goal is simply to find the longest path in the dag!
Here is the algorithm:

for j = 1, 2, . . . , n:
L(j) = 1 + max{L(i) : (i, j) ∈ E}
return maxj L(j)
15 / 61
Ta có nên dùng đệ quy?

Có nên dùng đệ quy để tính công thức sau?

L(j) = 1 + max{L(i) : (i, j) ∈ E}

16 / 61
Nội dung

Đường đi ngắn nhất trên DAG

Dãy con tăng dài nhất

Khoảng cách soạn thảo

Bài toán cái túi

Nhân nhiều ma trận

Đường đi ngắn nhất

Tập độc lập trên cây


Khoảng cách soạn thảo

▶ Khi chương trình kiểm tra chính tả bắt gặp lỗi chính tả, nó sẽ
tìm trong từ điển một từ gần với từ này nhất.
▶ Ký hiệu thích hợp cho khái niệm gần trong trường hợp này là
gì?

Ví dụ
Khoảng cách giữa hai xâu SNOWY và SUNNY là gì?

S - N O W Y - S N O W - Y
S U N N - Y S U N - - N Y

Chi phí: 3 Chi phí: 5

18 / 61
Khoảng cách soạn thảo

Định nghĩa
Khoảng cách soạn thảo của hai xâu x và y là số tối thiểu phép
toán soạn thảo (xóa, chèn, và thay thế) để biến đổi xâu x thành
xâu y.

Ví dụ
Biến đổi xâu SNOWY thành xâu SUNNY.

S - N O W Y
S U N N - Y

▶ chèn U,
▶ thay thế O → N, và
▶ xóa W.

19 / 61
Lời giải quy hoạch động

Câu hỏi
Bài toán con là gì?
▶ Để tìm khoảng cách soạn thảo giữa hai xâu x[1 . . . m] và
y[1 . . . n],
▶ ta xem xét khoảng cách soạn thảo giữa hai khúc đầu

x[1 . . . i] và y[1 . . . j].

▶ Ta gọi đây là bài toán con E(i, j).


▶ Ta cần tính E(m, n).

20 / 61
Ví dụ

Hình: Bài toán con E(7, 5)

Để giải bài toán E(8, 6), ta xem xét các khả năng gióng hàng của
hai ký tự ở vị trí x[8] và y[6]:
x[8] − x[8]
hoặc hoặc
− y[6] y[6]
Cụ thể
T − T
hoặc hoặc
− O O
21 / 61
Bài toán con

▶ Làm thế nào để tính E(i, j) từ các bài toán con?


▶ Làm thế nào để gióng hàng x[1 . . . i] và y[1 . . . j]?
▶ Việc gióng hàng ở cột phải nhất có thể chia làm ba trường
hợp:
x[i] − x[i]
hoặc hoặc
− y[j] y[j]
Ta có công thức


E(i − 1, j) + 1,
E(i, j) = min E(i, j − 1) + 1,


E(i − 1, j − 1) + diff(i, j)

ở đó diff(i, j) = 0 nếu x[i] = y[j] và 1 nếu ngược lại.

22 / 61
Đưa về bài toán nhỏ hơn



E(i − 1, j) + 1,
E(i, j) = min E(i, j − 1) + 1,


E(i − 1, j − 1) + diff(i, j)
ở đó diff(i, j) = 0 nếu x[i] = y[j] và 1 nếu ngược lại.
23 / 61
Thuật toán quy hoạch động

for i = 0, 1, . . . , m :
E(i, 0) = i
for j = 1, 2, . . . , n :
E(0, j) = j
for i = 1, 2, . . . , m :
for j = 1, 2, . . . , n :


E(i − 1, j) + 1,
E(i, j) = min E(i, j − 1) + 1,


E(i − 1, j − 1) + diff(i, j)

24 / 61
Bài tập
Hãy đánh giá độ phức tạp của thuật toán.

for i = 0, 1, . . . , m :
E(i, 0) = i
for j = 1, 2, . . . , n :
E(0, j) = j
for i = 1, 2, . . . , m :
for j = 1, 2, . . . , n :


E(i − 1, j) + 1,
E(i, j) = min E(i, j − 1) + 1,


E(i − 1, j − 1) + diff(i, j)

25 / 61
Ví dụ

E(i, j) = min{1+E(i−1, j), 1+E(i, j−1), diff(i, j)+E(i−1, j−1)}


ở đó diff(i, j) = 0 nếu x[i] = y[j] và 1 nếu ngược lại.
26 / 61
DAG của bài toán & đường đi độ dài 6

27 / 61
DAG của bài toán

Xây dựng đồ thị G = (V, E) với


▶ tập đỉnh ứng với các vị trí (i, j) trong bảng,
▶ các cung

(i−1, j) → (i, j), (i, j−1) → (i, j), (i−1, j−1) → (i, j)

đều có trọng số 1, ngoại trừ cung

{(i − 1, j − 1) → (i, j) : x[i] = y[j]} có trọng số 0.

Ta cần tìm đường đi ngắn nhất từ đỉnh s = (0, 0) tới t = (m, n).

Trên đường đi này: sang phải (thêm), đi xuống (xóa), đi chéo (thay
thế).

28 / 61
Số lượng các bài toán con

▶ Đầu vào x1 , x2 , . . . , xn và một bài toán con là x1 , x2 , . . . , xi .


Số bài toán con là tuyến tính.
▶ Đầu vào x1 , x2 , . . . , xn và y1 , y2 , . . . , ym . bài toán con là
x1 , x2 , . . . , xi và y1 , y2 , . . . , yj . Số bài toán con là O(mn).
▶ Đầu vào x1 , x2 , . . . , xn và bài toán con là xi , xi+1 , . . . , xj . Số
bài toán con là O(n2 ).

29 / 61
The number of subproblems is O(n 2 ).
Số lượng các bài toán con (2)
The input is a rooted tree. A subproblem is a rooted subtree.

f the tree has n nodes, how many subproblems are there?


▶ Đầu vào là một cây có gốc. Một bài toán con là một cây con
already encountered
có gốc. the first two cases, and the others are coming up shortly.
▶ Nếu cây có n nút thì có thể có bao nhiêu bài toán con?

30 / 61
Nội dung

Đường đi ngắn nhất trên DAG

Dãy con tăng dài nhất

Khoảng cách soạn thảo

Bài toán cái túi

Nhân nhiều ma trận

Đường đi ngắn nhất

Tập độc lập trên cây


Bài toán cái túi
▶ Trong một vụ cướp, tên trộm tìm thấy nhiều chiến lợi phẩm
hơn anh ta dự kiến và phải quyết định xem lấy những gì.
▶ Chiếc túi của anh ấy (hay “knapsack”) chứa được tối đa là W
pao. Có n vật để chọn có trọng lượng w1 , . . . , wn và có giá trị
(theo đô la) là v1 , . . . , vn .
▶ Hắn nên lấy những mặt hàng nào để được lợi nhất?

Ví dụ
Nên lấy đồ vật nào nếu mỗi đồ vật có số lượng vô hạn? Nếu mỗi
đồ vật chỉ có một?

Đồ vật Trọng lượng Giá trị ($)


1 6 30
2 3 14
3 4 16
4 2 9
32 / 61
Các đồ vật có thể lấy nhiều lần

Câu hỏi
Bài toán con là gì? bài toán với trọng lượng túi nhỏ hơn w ≤ W
hay với số đồ vật ít hơn. Ví dụ 1, . . . , j với j ≤ n.

Đưa về bài toán con với trọng lượng túi nhỏ hơn
Đặt

K(w) = giá trị lớn nhất chọn được khi trọng lượng túi là w.

Khi đó K(w) = K(w − wi ) + vi với đồ vật i nào đó.

Do không biết là đồ vật nào được thêm vào, ta sẽ thử mọi khả
năng:
K(w) = max {K(w − wi ) + vi }.
i:wi ≤w

33 / 61
Thuật toán quy hoạch động

K(0) = 0
for w = 1 to W :
K(w) = max{K(w − wi ) + vi : wi ≤ w}
return K(W)

Câu hỏi
Độ phức tạp của thuật toán này là gì?

34 / 61
Mỗi đồ vật chỉ lấy một lần

Câu hỏi
Bài toán con là gì?

Giá trị K(w − wn ) rất lớn cũng không giúp gì vì ta không biết đồ
vật n đã có trong lời giải con chưa.

K(w, j) = giá trị lớn nhất chọn được khi trọng lượng túi là w
và các đồ vật là 1, 2, . . . , j.

35 / 61
Đưa về bài toán nhỏ hơn

K(w, j) = giá trị lớn nhất chọn được khi trọng lượng túi là w
và các đồ vật là 1, 2, . . . , j.

Để biểu diễn K(w, j) về các bài toán nhỏ hơn, ta xét hai trường
hợp:
▶ đồ vật j cần cho giá trị tối ưu,
▶ hoặc không cần:

K(w, j) = max{K(w − wj , j − 1) + vj , K(w, j − 1)}.

36 / 61
Thuật toán quy hoạch động

Khởi tạo mọi K(0, j) = 0 và mọi K(w, 0) = 0


for j = 1 to n:
for w = 1 to W:
if wj > w: K(w, j) = K(w, j−1)
else: K(w, j) = max{K(w−wj , j−1) + vj , K(w, j−1)}
return K(W, n)

Câu hỏi
Độ phức tạp của thuật toán này là gì?

37 / 61
Nội dung

Đường đi ngắn nhất trên DAG

Dãy con tăng dài nhất

Khoảng cách soạn thảo

Bài toán cái túi

Nhân nhiều ma trận

Đường đi ngắn nhất

Tập độc lập trên cây


Ví dụ nhân nhiều ma trận
▶ Giả sử ta muốn nhân 4 ma trận

A×B×C×D

với số chiều là

50 × 20, 20 × 1, 1 × 10, và 10 × 100.

▶ Do tính chất kết hợp của phép nhân ma trận, ta có thể nhân
theo nhiều cách.

Cách đặt ngoặc Tính toán Chi phí


A × ((B × C) × D) 20 · 1 · 10 + 20 · 10 · 100 + 50 · 20 · 100 120,200
(A × (B × C)) × D 20 · 1 · 10 + 50 · 20 · 10 + 50 · 10 · 100 60, 200
(A × B) × (C × D) 50 · 20 · 1 + 1 · 10 · 100 + 50 · 1 · 100 7, 000

39 / 61
Hình: A × B × C × D = (A × (B × C)) × D.

40 / 61
Mỗi phép nhân ứng với một cây nhị phân

41 / 61
Bài toán

▶ Ta cần tính
A1 × A2 × · · · × An
trong đó các Ai có số chiều tương ứng là

m0 × m1 , m1 × m2 , . . . mn−1 × mn .

▶ Hãy xác định thứ tự tính toán tối ưu.

42 / 61
Bài toán con
Đặt

C(i, j) = chi phí tối thiểu để nhân Ai × Ai+1 × · · · × Aj .

Cách tính tối ưu sẽ là một cách đặt ngoặc:

(Ai × Ai+1 × · · · × Ak ) × (Ak+1 × Ak+2 · · · × Aj )

với chi phí tối thiểu là

C(i, j) = C(i, k) + C(k + 1, j) + mi−1 · mk · mj .

Ta không biết vị trí k ở đâu nên phải thử mọi khả năng:

C(i, j) = min {C(i, k) + C(k + 1, j) + mi−1 · mk · mj }.


i≤k<j

43 / 61
Thuật toán quy hoạch động

for i = 1 to n: C(i, i) = 0
for s = 1 to n−1:
for i = 1 to n−s:
j=i+s

C(i, j) = min{C(i, k) + C(k + 1, j) + mi−1 · mk · mj : i ≤ k < j}


return C(1, n)

Câu hỏi
Độ phức tạp của thuật toán này là gì?

44 / 61
Nội dung

Đường đi ngắn nhất trên DAG

Dãy con tăng dài nhất

Khoảng cách soạn thảo

Bài toán cái túi

Nhân nhiều ma trận

Đường đi ngắn nhất

Tập độc lập trên cây


Algor
Đường đi tin cậy ngắn nhất
re 6.8 We want a path from s to t that is both short and has few edges.

2
A B
1 4

5
S 5
1 T
2 1
C 3
D

Hình: Ta muốn tìm đường đi từ s tới t vừa ngắn vừa ít cạnh.

Shortest paths
▶ Trong mạng truyền thông, dù độ dài cạnh có liên quan đến độ
arted this chapter with a dynamic programming algorithm for the elementary ta
trễ,path
ng the shortest ta cóinmột số We
a dag. cânnow
nhắc liêntoquan
turn moređến việc chọn shortest-path
sophisticated đường đi. pro
ee how these
▶ Mỗitoocạnh
can be accommodated
thêm vào đường by ourthể
đi có powerful
gây ra algorithmic
nguy cơ mất technique.
gói
tin.
rtest reliable paths
▶ Ta muốn tránh đường đi có quá nhiều cạnh.
46 / 61
Bài toán đường đi tin cậy ngắn nhất
▶ Cho đồ thị trọng số G, hai đỉnh s và t, và một số nguyên
dương k,
▶ ta muốn tìm đường đi ngắn nhất từ s tới t qua nhiều nhất k
cạnh.

dist(v, i) = độ dài đường đi ngắn nhất từ s đến v dùng i cạnh

Ta có
dist(v, i) = min {dist(u, i − 1) + ℓ(u, v)}
(u,v)∈E

47 / 61
Bài toán tìm đường ngắn nhất giữa mọi cặp đỉnh

Bài toán
▶ Các đỉnh của V = {1, 2, . . . , n}. Algor
▶ Ta cần tìm đường đi ngắn nhất giữa mọi cặp đỉnh.
re 6.8 We want a path from s to t that is both short and has few edges.

2
A B
1 4

5
S 5
1 T
2 1
C 3
D

Shortest paths
48 / 61
the shortest path from i to j in which only nodes {1, 2, . . . , k} can be used as interme-
nitially, dist(i, j, 0) is the length of the direct edge between i and j, if it exists, and is
Bài toán con
wise.
happens when we expand the intermediate set to include an extra node k? We must
ne all pairs i, j and check whether using k as an intermediate point gives us a shorter
m i to j. But this is easy: a shortest path from i to j that uses k along with possibly
dist(i,
wer-numbered j, k) = độnodes
intermediate dài đường đi ngắnk nhất
goes through từ i (why?
just once tới j because we assume
e are no negative cycles). And we have already calculated the
chỉ qua các đỉnh trung gian {1, length
2, . .of
. , the
k} shortest
m i to k and from k to j using only lower-numbered vertices:
k
dist(i, k, k − 1)

i dist(k, j, k − 1)

dist(i, j, k − 1) j

ing k gives us a shorter path from i to j if and only if


Đường đi i đến j qua đỉnh k sẽ ngắn hơn là không qua đỉnh k nếu
nếu:k, k − 1) + dist(k, j, k − 1) < dist(i, j, k − 1),
dist(i,
và chỉ
case dist(i, j, k) should be updated accordingly.
is the Floyd-Warshall k, k−1) + dist(k,
dist(i,algorithm—and j, k−1)
as you it takesj,O(|V
< dist(i,
can see, k−1),| 3 ) time.
r i = 1 to n:
49 / 61
Thuật toán quy hoạch động

for i = 1 to n:
for j = 1 to n:
dist(i, j, 0) = ∞
for all (i, j) ∈ E:
dist(i, j, 0) = ℓ(i, j)
for k = 1 to n:
for i = 1 to n:
for j = 1 to n:
{
dist(i, k, k−1) + dist(k, j, k−1),
dist(i, j, k) = min
dist(i, j, k−1)

50 / 61
re Bài toán
6.8 We wantngười
a path bán
from shàng duislịch
to t that both short and has few edges.

2
A B
1 4

5
S 5
1 T
2 1
C 3
D

▶ Một người bán hàng thích du lịch đang sẵn sàng cho một
Shortest paths
chuyến đi bán hàng.
▶ Bắt đầu từ nhà, với chiếc vali trong tay, anh sẽ đi một hành
arted this chapter with a dynamic programming algorithm for the elementary ta
trình
ng the shortest trong
path in ađó mỗi
dag. Wethành phố to
now turn cầnmore
đến sophisticated
sẽ được thămshortest-path
đúng pro
một lần trước khi quay về nhà.
ee how these too can be accommodated by our powerful algorithmic technique.
▶ Cho khoảng cách dij giữa mỗi cặp thành phố i và j, anh ta
rtest reliable
nên paths
thăm các thành phố theo thứ tự nào để tối ưu tổng
khoảng cách?
s complicated, and abstractions such as graphs, edge lengths, and shortest paths r
re the whole truth. In a communications network, for example, even if edge 51 / 61le
Bài tập Algor
Người bán hàng nên thăm các thành phố theo thứ tự nào để tối
re 6.8 We
ưu want a path from
tổng khoảng s to t that is both short and has few edges.
cách?

2
A B
1 4

5
S 5
1 T
2 1
C 3
D

Shortest paths

arted this chapter with a dynamic programming algorithm for the elementary ta
ng the shortest path in a dag. We now turn to more sophisticated shortest-path pro
52 / 61
Algor
Bài toán con
re 6.8 We want a path from s to t that is both short and has few edges.

2
A B
1 4

5
S 5
1 T
2 1
C 3
D

Shortest paths
Với mỗi tập con các thành phố S = {1, 2, . . . , n} có
chứa 1, và j ∈ S, ta ký hiệu C(S, j) là độ dài của đường
arted this chapter with a dynamic programming algorithm for the elementary ta
đi ngắn nhất thăm mỗi đỉnh của S đúng một lần, bắt đầu
ng the shortest path in a dag. We now turn to more sophisticated shortest-path pro
ee how thesetừtoo
1 và
cankết
be thúc tại j.
accommodated by our powerful algorithmic technique.

rtest reliable paths


53 / 61
Đưa về bài toán nhỏ hơn

▶ Nếu ta bắt đầu tại 1 và kết thúc tại j; ta nên chọn đến đỉnh
nào trước khi đến j?
▶ Đỉnh này sẽ là một đỉnh i ∈ S thỏa mãn: độ dài đường đi
ngắn nhất từ 1 đến i cộng với dij là nhỏ nhất.

C(S, j) = min C(S − {j}, i) + dij


i∈S:i̸=j

▶ Khi |S| > 1, ta ký hiệu C(S, 1) = ∞ vì đường đi không thể


vừa bắt đầu và kết thúc ở 1.

54 / 61
Thuật toán quy hoạch động

C({1}, 1) = 0
for s = 2 to n:
for all tập con S ⊆ {1, 2, . . . , n} thỏa mãn |S| = s và
1 ∈ S:
C(S, 1) = ∞
for all j ∈ S, j ̸= 1:
C(S, j) = min{C(S − {j}, i) + dij : i ∈ S, i ̸= j}
return minj C({1, . . . , n}, j) + dj1

Có nhiều nhất 2n · n bài toán con, và mỗi bài mất thời gian tuyến
tính để giải. Độ phức tạp là O(n2 · 2n ).

55 / 61
Nội dung

Đường đi ngắn nhất trên DAG

Dãy con tăng dài nhất

Khoảng cách soạn thảo

Bài toán cái túi

Nhân nhiều ma trận

Đường đi ngắn nhất

Tập độc lập trên cây


Tập độc lập

Định nghĩa
Dasgupta,
MộtC.H.
tập Papadimitriou,
con các đỉnh Sand
⊆ U.V.
V làVazirani
một tậpđộc lập của đồ thị 1
G = (V, E) nếu không có cạnh giữa chúng.
igure 6.10 The largest independent set in this graph has size 3.

1 2

5 6

3 4

igure 6.11 I(u) is the size of the largest independent set of the subtree rooted at u. T
▶ {1, 5} là một tập độc lập, nhưng {1, 4, 5} không phải.
ases: either u is in this independent set, or it isn’t.
▶ Tập độc lập lớn nhất là {2, 3, 6}.
r

57 / 61
Tập độc lập trên cây

▶ Bài toán tìm tập độc lập lớn nhất được nhiều người tin rằng
không có thuật toán hiệu quả để giải nó.
▶ Nhưng khi đồ thị là một cây thì bài toán có thể giải trong
thời gian tuyến tính.

Bài toán con


Lấy một nút r bất kỳ làm gốc của cây. Mỗi nút u bây giờ sẽ xác
định một cây con gốc u. Ta xét bài toán con:

I(u) = kích thước tập độc lập lớn nhất của cây con gốc u.

Mục đích của ta là tìm I(r).

58 / 61
Figure 6.11 I(u) is the size of the largest independent set of the subtree rooted at u. Two
Đưa về bài toán nhỏ hơn
cases: either u is in this independent set, or it isn’t.

Exercises
▶ Giả sử ta đã biết tập độc lập lớn nhất của mọi cây con bắt
đầu từ u; tức là ta đã biết I(w) cho mọi con cháu w của u.
6.1. A contiguous subsequence of a list S is a subsequence made up of consecutive elements of S. For
▶ Làm
instance, if S isthế nào để tính I(u)?
5, 15, −30, 10, −5, 40, 10,
▶ Tách thành hai trường hợp: tập độc lập hoặc chứa u hoặc nó
then 15, −30, 10 is a contiguous subsequence but 5, 15, 40 is not. Give a linear-time algorithm for
không chứa u.
the following task:

Input: A list of numbers, a1 , a2 , . . . , an . 59 / 61


Figure 6.11 I(u) is the size of the largest independent set of the subtree rooted at u. Two
Đưa về bài toán nhỏ hơn
cases: either u is in this independent set, or it isn’t.

Hai trường hợp: tập độc lập hoặc chứa u hoặc nó không chứa u.
Exercises
6.1. A contiguous subsequence of a list S is a subsequence made up of consecutive elements of S. For
instance, if S is { }
5,∑15, −30, 10, −5, 40, 10, ∑
then 15,I(u) =ismax
−30, 10 1 + subsequence but 5,I(w),
a contiguous I(w) algorithm for
15, 40 is not. Give a linear-time
the following task: các cháu w của u các con w của u
Input: A list of numbers, a1 , a2 , . . . , an .
60 / 61
Độ phức tạp tính toán
Figure 6.11 I(u) is the size of the largest independent set of the subtree rooted at u. Two
cases: either u is in this independent set, or it isn’t.

Exercises
Bài tập
Số cây con chính là số đỉnh. Liệu ta có thể cài đặt thuật toán chạy
6.1. A contiguous subsequence of a list S is a subsequence made up of consecutive elements of S. For
trong if S is
instance,
O(|V|
5, 15, −30, |E|)?
+10, −5, 40, 10,
then 15, −30, 10 is a contiguous subsequence but 5, 15, 40 is not. Give a linear-time algorithm for
the following task:

Input: A list of numbers, a , a , . . . , a . 61 / 61

You might also like