Giáo trình Toán rời rạc - Chương VI: Cây

Một đồ thị liên thông và không có chu trình được gọi là cây. Cây đã được dùng từ năm 1857, khi nhà toán học Anh tên là Arthur Cayley dùng cây để xác định những dạng khác nhau của hợp chất hoá học. Từ đó cây đã được dùng để giải nhiều bài toán trong nhiều lĩnh vực khác nhau. Cây rất hay được sử dụng trong tin học. Chẳng hạn, người ta dùng cây để xây dựng các thuật toán rất có hiệu quả để định vị các phần tử trong một danh sách. Cây cũng dùng để xây dựng các mạng máy tính với chi phí rẻ nhất cho các đường điện thoại nối các máy phân tán. Cây cũng được dùng để tạo ra các mã có hiệu quả để lưu trữ và truyền dữ liệu. Dùng cây có thể mô hình các thủ tục mà để thi hành nó cần dùng một dãy các quyết định. Vì vậy cây đặc biệt có giá trị khi nghiên cứu các thuật toán sắp xếp.

doc17 trang | Chuyên mục: Cấu Trúc Rời Rạc | Chia sẻ: yen2110 | Lượt xem: 518 | Lượt tải: 0download
Tóm tắt nội dung Giáo trình Toán rời rạc - Chương VI: Cây, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
con bên trái hay con bên phải; con bên trái (t.ư. phải) được vẽ phía dưới và bên trái (t.ư. phải) của cha.
	Cây có gốc T được gọi là một cây m-phân đầy đủ nếu mỗi đỉnh trong của T đều có m con.
6.3.4. Mệnh đề: Một cây m-phân đầy đủ có i đỉnh trong thì có mi+1 đỉnh và có (m-1)i+1 lá.
Chứng minh: Mọi đỉnh trong của cây m-phân đầy đủ đều có bậc ra là m, còn lá có bậc ra là 0, vậy số cung của cây này là mi và do đó số đỉnh của cây là mi+1. Gọi l là số lá thì ta có l+i=mi+1, nên l=(m-1)i+1.
6.3.5. Mệnh đề: 1) Một cây m-phân có chiều cao h thì có nhiều nhất là mh lá.
2) Một cây m-phân có l lá thì có chiều cao h ³ [logml].
Chứng minh: 1) Mệnh đề được chứng minh bằng quy nạp theo h. Mệnh đề hiển nhiên đúng khi h=1. Giả sử mọi cây có chiều cao k £ h-1 đều có nhiều nhất mk-1 lá (với h³2). Xét cây T có chiều cao h. Bỏ gốc khỏi cây ta được một rừng gồm không quá m cây con, mỗi cây con này có chiều cao £ h-1. Do giả thiết quy nạp, mỗi cây con này có nhiều nhất là mh-1 lá. Do lá của những cây con này cũng là lá của T, nên T có nhiều nhất là m.mh-1=mh lá.
2) l £ mh Û h ³ [logml]. 
6.4. DUYỆT CÂY NHỊ PHÂN.
6.4.1. Định nghĩa: Trong nhiều trường hợp, ta cần phải “điểm danh” hay “thăm” một cách có hệ thống mọi đỉnh của một cây nhị phân, mỗi đỉnh chỉ một lần. Ta gọi đó là việc duyệt cây nhị phân hay đọc cây nhị phân.
	Có nhiều thuật toán duyệt cây nhị phân, các thuật toán đó khác nhau chủ yếu ở thứ tự thăm các đỉnh.
	Cây nhị phân T có gốc r được ký hiệu là T(r). Giả sử r có con bên trái là u, con bên phải là v. Cây có gốc u và các đỉnh khác là mọi dòng dõi của u trong T gọi là cây con bên trái của T, ký hiệu T(u). Tương tự, ta có cây con bên phải T(v) của T. Một cây T(r) có thể không có cây con bên trái hay bên phải.
	Sau đây là ba trong các thuật toán duyệt cây nhị phân T(r). Các thuật toán đều được trình bày đệ quy. Chú ý rằng khi cây T(x) chỉ là môt đỉnh x thì “duyệt T(x)” có nghĩa là “thăm đỉnh x”.
Thí dụ 5:
c
f
j
b
k
i
h
q
d
e
g
o
p
s
n
m
l
a
6.4.2. Các thuật toán duyệt cây nhị phân:
1) Thuật toán tiền thứ tự: 
1. Thăm gốc r.
2. Duyệt cây con bên trái của T(r) theo tiền thứ tự.
3. Duyệt cây con bên phải của T(r) theo tiền thứ tự.
	Duyệt cây nhị phân T(a) trong hình trên theo tiền thứ tự:
1. Thăm a
2. Duyệt T(b)
	2.1. Thăm b
	2.2. Duyệt T(d)
	2.2.1. Thăm d
2.2.2. Duyệt T(g)
	2.2.2.1. Thăm g
	2.2.2.3. Duyệt T(l): Thăm l
2.2.3. Duyệt T(h): Thăm h
	2.3. Duyệt T(e)
	2.3.1. Thăm e
	2.3.2. Duyệt T(i)
	2.3.2.1. Thăm i
	2.3.2.2. Duyệt T(m): Thăm m
	2.3.2.3. Duyệt T(n): Thăm n
3. Duyệt T(c)
	3.1. Thăm c
	3.3. Duyệt T(f)
	3.3.1.Thăm f
	3.3.2. Duyệt T(j)
	3.3.2.1. Thăm j
	3.3.2.2. Duyệt T(o): Thăm o
	3.3.2.3. Duyệt T(p): Thăm p
	3.3.3. Duyệt T(k)
	3.3.3.1. Thăm k
	3.3.3.2. Duyệt T(q): Thăm q
	3.3.3.3. Duyệt T(s): Thăm s
	Kết quả duyệt cây T(a) theo tiền thứ tự là:
a, b, d, g, l, h, e, i, m, n, c, f, j, o, p, k, q, s.
2) Thuật toán trung thứ tự: 
1. Duyệt cây con bên trái của T(r) theo trung thứ tự.
2. Thăm gốc r.
3. Duyệt cây con bên phải của T(r) theo trung thứ tự.
Duyệt cây nhị phân T(a) trong hình trên theo trung thứ tự:
1. Duyệt T(b)
	1.1. Duyệt T(d)
	1.1.1. Duyệt T(g)
	1.1.1.2. Thăm g
	1.1.1.3. Duyệt T(l): thăm l
	1.1.2. Thăm d
	1.1.3. Duyệt T(h): Thăm h
	1.2. Thăm b
	1.3. Duyệt T(e)
	1.3.1. Duyệt T(i)
	1.3.1.1. Duyệt T(m): Thăm m
	1.3.1.2. Thăm i
	1.3.1.3. Duyệt T(n): Thăm n
	1.3.2. Thăm e
2. Thăm a
3. Duyệt T(c)
	3.2. Thăm c
	3.3. Duyệt T(f)
	3.3.1. Duyệt T(j)
	3.3.1.1. Duyệt T(o): Thăm o
	3.3.1.2. Thăm j
	3.3.1.3. Duyệt T(p): Thăm p
	3.3.2. Thăm f
	3.3.3. Duyệt T(k)
	3.3.3.1. Duyệt T(q): Thăm q
	3.3.3.2. Thăm k
	3.3.3.3. Duyệt T(s): Thăm s
	Kết quả duyệt cây T(a) theo trung thứ tự là:
g, l, d, h, b, m, i, n, e, a, c, o, j, p, f, q, k, s.
3) Thuật toán hậu thứ tự: 
1. Duyệt cây con bên trái của T(r) theo hậu thứ tự.
2. Duyệt cây con bên phải của T(r) theo hậu thứ tự.
3. Thăm gốc r.
Duyệt cây nhị phân T(a) trong hình trên theo hậu thứ tự:
1. Duyệt T(b)
	1.1. Duyệt T(d)
	1.1.1. Duyệt T(g)
	1.1.1.2. Duyệt T(l): thăm l
	1.1.1.3. Thăm g
	1.1.2. Duyệt T(h): thăm h
	1.1.3. Thăm d
	1.2. Duyệt T(e)
	1.2.1. Duyệt T(i)
	1.2.1.1. Duyệt T(m): Thăm m
	1.2.1.2. Duyệt T(n): Thăm n
	1.2.1.3. Thăm i
	1.2.3. Thăm e
	1.3. Thăm b
2. Duyệt T(c)
	2.2. Duyệt T(f)
	2.2.1. Duyệt T(j)
	2.2.1.1. Duyệt T(o): Thăm o
	2.2.1.2. Duyệt T(p): Thăm p
	2.2.1.3. Thăm j
	2.2.2. Duyệt T(k)
	2.2.2.1. Duyệt T(q): Thăm q
	2.2.2.2. Duyệt T(s): Thăm s
	2.2.2.3. Thăm k
	2.2.3. Thăm f
	2.3. Thăm c
3. Thăm a
	Kết quả duyệt cây T(a) theo trung thứ tự là:
l, g, h, d, m, n, i, e, b, o, p, j, q, s, k, f, c, a.
6.4.3. Ký pháp Ba Lan:
	Xét biểu thức đại số sau đây:
(a+b)(c-) (1)
	Ta vẽ một cây nhị phân như hình dưới đây, trong đó mỗi đỉnh trong mang dấu của một phép tính trong (1), gốc của cây mang phép tính sau cùng trong (1), ở đây là dấu nhân, ký hiệu là , mỗi lá mang một số hoặc một chữ đại diện cho số.
d
2
/
c
b
a
-
+
Duyệt cây nhị phân trong hình trên theo trung thứ tự là:
a + b c - d / 2 (2)
và đây là biểu thức (1) đã bỏ đi các dấu ngoặc.
	Ta nói rằng biểu thức (1) được biểu diễn bằng cây nhị phân T() trong hình trên, hay cây nhị phân T() này tương ứng với biểu thức (1). Ta cũng nói: cách viết (ký pháp) quen thuộc trong đại số học như cách viết biểu thức (1) là ký pháp trung thứ tự kèm theo các dấu ngoặc.
	Ta biết rằng các dấu ngoặc trong (1) là rất cần thiết, vì (2) có thể hiểu theo nhiều cách khác (1), chẳng hạn là
 (a + b c) - d / 2 (3)
hoặc là a + (b c - d) / 2 (4)
	Các biểu thức (3) và (4) có thể biểu diễn bằng cây nhị phân trong các hình sau. Hai cây nhị phân tương ứng là khác nhau, nhưng đều được duyệt theo trung thứ tự là (2).
b
2
d
a
/
+
-
c
-
2
/
a
+
d
b
c
	Đối với cây trong hình thứ nhất, nếu duyệt theo tiền thứ tự, ta có
 + a b - c / d 2 (5)
và nếu duyệt theo hậu thứ tự, ta có:
a b + c d 2 / - (6)
	Có thể chứng minh được rằng (5) hoặc (6) xác định duy nhất cây nhị phân trong hình thứ nhất, do đó xác định duy nhất biểu thức (1) mà không cần dấu ngoặc. Chẳng hạn cây nhị phân trên hình thứ hai được duyệt theo tiền thứ tự là
- + a b c / d 2 khác với (5).
và được duyệt theo hậu thứ tự là
a b c + d 2 / - khác với (6).
	Vì vậy, nếu ta viết các biểu thức trong đại số, trong lôgic bằng cách duyệt cây tương ứng theo tiền thứ tự hoặc hậu thứ tự thì ta không cần dùng các dấu ngoặc mà không sợ hiểu nhầm.
	Người ta gọi cách viết biểu thức theo tiền thứ tự là ký pháp Ba Lan, còn cách viết theo hậu thứ tự là ký pháp Ba Lan đảo, để ghi nhớ đóng góp của nhà toán học và lôgic học Ba Lan Lukasiewicz (1878-1956) trong vấn đề này.
	Việc chuyển một biểu thức viết theo ký pháp quen thuộc (có dấu ngoặc) sang dạng ký pháp Ba Lan hay ký pháp Ba Lan đảo hoặc ngược lại, có thể thực hiện bằng cách vẽ cây nhị phân tương ứng, như đã làm đối với biểu thức (1). Nhưng thay vì vẽ cây nhị phân, ta có thể xem xét để xác định dần các công thức bộ phận của công thức đã cho. Chẳng hạn cho biểu thức viết theo ký pháp Ba Lan là
- ­ / - - a b 5 c 2 3 ­ - c d 2 - - a c d / ­ - b 3 d 3 5
	Trước hết, chú ý rằng các phép toán +, -, *, /, ­ đều là các phép toán hai ngôi, vì vậy trong cây nhị phân tương ứng, các đỉnh mang dấu các phép toán đều là đỉnh trong và có hai con. Các chữ và số đều đặt ở lá. Theo ký pháp Ba Lan (t.ư. Ba Lan đảo) thì T a b (t.ư. a b T) có nghĩa là a T b, với T là một trong các phép toán +, -, *, /, ­.
BÀI TẬP CHƯƠNG VI:
1. Vẽ tất cả các cây (không đẳng cấu) có:
a) 4 đỉnh b) 5 đỉnh c) 6 đỉnh
2. Một cây có n2 đỉnh bậc 2, n3 đỉnh bậc 3, , nk đỉnh bậc k. Hỏi có bao nhiêu đỉnh bậc 1?
3. Tìm số tối đa các đỉnh của một cây m-phân có chiều cao h.
4. Có thể tìm được một cây có 8 đỉnh và thoả điều kiện dưới đây hay không? Nếu có, vẽ cây đó ra, nếu không, giải thích tại sao:
	a) Mọi đỉnh đều có bậc 1.
	b) Mọi đỉnh đều có bậc 2.
	c) Có 6 đỉnh bậc 2 và 2 đỉnh bậc 1.
	d) Có đỉnh bậc 7 và 7 đỉnh bậc 1.
5. Chứng minh hoặc bác bỏ các mệnh đề sau đây.
	a) Trong một cây, đỉnh nào cũng là đỉnh cắt.
	b) Một cây có số đỉnh không nhỏ hơn 3 thì có nhiều đỉnh cắt hơn là cầu.
6. Có bốn đội bóng đá A, B, C, D lọt vào vòng bán kết trong giải các đội mạnh khu vực. Có mấy dự đoán xếp hạng như sau:
	a) Đội B vô địch, đội D nhì.
	b) Đội B nhì, đội C ba.
	c) Đọi A nhì, đội C tư.
	Biết rằng mỗi dự đoán trên đúng về một đội. Hãy cho biết kết quả xếp hạng của các đội.
7. Cây Fibonacci có gốc Tn đuợc dịnh nghĩa bằng hồi quy như sau. T1 và T2 đều là cây có gốc chỉ gồm một đỉnh và với n=3,4,  cây có gốc Tn được xây dựng từ gốc với Tn-1 như là cây con bên trái và Tn-2 như là cây con bên phải.
	a) Hãy vẽ 7 cây Fibonacci có gốc đầu tiên.
b) Cây Fibonacci Tn có bao nhiêu đỉnh, lá và bao nhiêu đỉnh trong. Chiều cao của nó bằng bao nhiêu?
8. Hãy tìm cây khung của đồ thị sau bằng cách xoá đi các cạnh trong các chu trình đơn.
c
b
a
	a)
g
f
d
e
j
i
h
b
a
	b)
e
d
c
g
f
j
i
h
l
k
9. Hãy tìm cây khung cho mỗi đồ thị sau.
	a) K5	b) K4,4	c) K1,6
	d) Q3	e) C5	f) W5.
10. Đồ thị Kn với n=3, 4, 5 có bao nhiêu cây khung không đẳng cấu?
42
11. Tìm cây khung nhỏ nhất của đồ thị sau theo thuật toán Kruskal và Prim.
b
a
3
4
10
14
11
1
3
f
e
d
c
9
20
5
7
15
h
g
12. Tìm cây khung nhỏ nhất bằng thuật toán Prim của đồ thị gồm các đỉnh A, B, C, D, E, F, H, I được cho bởi ma trận trọng số sau.
F
G
E
D
C
B
H
A
H
G
F
E
D
C
A
B
 . 
Yêu cầu viết các kết quả trung gian trong từng bước lặp, kết quả cuối cùng cần đưa ra tập cạnh và độ dài của cây khung nhỏ nhất.
13. Duyệt các cây sau đây lần lượt bằng các thuật toán tiền thứ tự, trung thứ tự và hậu thứ tự.
a
a
	a) b)
c
b
b
c
g
f
e
d
 f
d
e
l
k
 j
h
i
h
g
o
n
m
 j
i
q
p
14. Viết các biểu thức sau đây theo ký pháp Ba Lan và ký pháp Ba Lan đảo.
	a) .
	b) .
15. Viết các biểu thức sau đây theo ký pháp quen thuộc.
	a) x y + 2 ↑ x y − 2 ↑ − x y * /.
b) - ­ / - - a b 3 c 2 4 ­ - c d 5 - - a c d / ­ - b 2 d 4 3.

File đính kèm:

  • docgiao_trinh_toan_roi_rac_chuong_vi_cay.doc