8. CÂY VÀ ỨNG
DỤNG
8.1 Mở đầu
8.2 Các phương pháp duyệt
cây
8.3 Cây và bài toán sắp xếp
8.4 Cây khung
8.5 Cây khung nhỏ nhất
Câu hỏi : Nhắc lại các khái niệm
- Đường đi
- Chu trình
- Đồ thị liên thông
Đường đi độ dài n ( n là số
nguyên dương) trong đồ thị từ đỉnh
u tới đỉnh v là một dãy liên tiếp
các cạnh e1 , e2 , … , en của đồ thị
sao cho ei = ( vi -1 , vi ) với vi V, v0 = u
,
vn = v
Đường đi được gọi là một chu trình
nếu nó bắt đầu và kết thúc tại
cùng một đỉnh, tức là u = v
Một đồ thị vô hướng được gọi là
liên thông nếu luôn có 1 đường
đi nối 2 cặp đỉnh phân biệt bất
kỳ của đồ thị
Đường đi hoặc chu trình được gọi
là đơn nếu không có cạnh nào
có mặt trong đường đi hoặc chu
trình ấy quá một lần
8.1 Mở đầu
- Một đồ thị liên thông và không có chu
trình
đơn được gọi là cây.
- Trong tin học, cây được sử dụng để xây dựng
các thuật toán để định vị các phần tử trong
một
danh sách; 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 …
Định nghóa 1: Cây là một đồ
thị vô hướng sao
cho giữa 2 đỉnh bất kỳ luôn có
một đường
G1 vàđi
G2 là
đơn duy nhất
cây nối chúng với nhau
Ví dụ 1:
a
b
a
d
c
f
e
G1
b
c
d
f
e
G2
a
G3 và G4 không là
cây
b
c
b
a
d
d
c
e
e
f
f
G3
G4
Nếu chọn 1 đỉnh bất kỳ làm
gốc ta có 1 đồ thị
có hướng gọi là cây có gốc .
Việc chọn gốc
khácT nhau sẽ tạo
ra các cây
có
Với
Với
f
g
a
gốc
khác
nhau.
gốc
a
gốc
c
c
dVí dụ : Cho đồ thò T
b
c
e
a
b
f
c
e
a
d
b
g
e
f
d
g
Cây T khi đã xác định gốc
- Mỗi đỉnh v khác với gốc sẽ chỉ có duy
nhất
một đỉnh u sao cho có một cạnh hướng từ u
đến v,
u được gọi là cha của v và v được gọi là con
của u.
- Các đỉnh có cùng cha gọi là các đỉnh anh
em.
- Các đỉnh nằm trên đường đi từ gốc tới
một đỉnh v khác với gốc được gọi là tổ
tiên của v.
- Một đỉnh của cây được gọi là lá nếu nó
không có con.
a
c
g
e
e
a
d
b
f
c
b
f
d
g
Cây T có 4 nút lá : f, g, e, d
- Chiều cao của cây là đường đi dài nhất có
thể có đi từ gốc tới lá của cây.
Nhiều bài toán thực tế được mô hình hóa
bằng
cây có gốc. Trong tin học, tìm kiếm một phần
tử trong danh sách là một trong những công
việc quan trọng nhất. Vấn đề đặt ra là đưa ra
một thuật toán hiệu quả nhất để tìm kiếm
một
phần tử trong dãy các phần tử được sắp
xếp
theo một thứ tự nào đó. Điều nầy có thể
thực
hiện bằng cây tìm kiếm nhị phân.
Định nghóa 2:
Cây nhị phân là một cây
có gốc, trong đó mỗi con
của một đỉnh hoặc là con
bên trái hoặc là con bên
phải, không có đỉnh nào
có nhiều hơn một con bên
trái hay nhiều hơn một con
bên phải. Cây nhị phân
được gọi là đầy đủ, nếu
mỗi đỉnh của nó hoặc laø
Định nghóa 3:
Cây tìm kiếm nhị phân là một cây nhị
phân, trong đó mỗi đỉnh được gán một
khóa sao cho mỗi giá trị khóa xác định
chỉ
một đỉnh và khóa của đỉnh lớn hơn
khóa
của tất cả các đỉnh con bên trái
đồng thời
nhỏ hơn khóa của tất cả các đỉnh con
bên
phải của noù.
Ví dụ 1 : Tạo cây tìm kiếm nhị phân cho dãy
số sau
11, 8, 7, 10, 12, 16, 14, 17
11
Cây con
T1
7
8
Nút
gốc T
12
Cây con T2
16
10
14
17
Ví dụ 2: Tạo cây tìm kiếm nhị phân
cho dãy soá sau
8, 5, 20, 2, 6, 1, 3, 7, 25, 15
8
5
2
1
20
15
6
3
7
25
Một số tính chất đặc trưng của cây
Định lý : Cho T là một đồ thị có n
đỉnh. Khi đó
các khẳng định sau là tương đương
a) T là một cây
b) T là đồ thị liên thông không có
chu trình
c) T là đồ thị liên thông có n-1 cạnh
d) T là đồ thị không có chu trình và
có n-1
cạnh
Chứng minh:
a)
b)
c)
d)
a)
a)
b) : Nếu T là một cây thì T là đồ thị
liên
thông ( theo định nghóa cây ). Đồng thời T
không
có chu trình vì nếu T có chu trình chứa 2
đỉnh x
và y của T thì khi đó sẽ có 2 đường đi giữa
x và y.
b)
c) : Giả sử T là đồ thị liên thông
không có
chu trình , ta chứng minh T có n-1 cạnh bằng
phương pháp quy nạp theo n.
c)
d) : Giả sử T là đồ thị liên thông có n-1
cạnh. Ta cần chứng minh T không có chu trình.
Thật vậy, giả sử T có chu trình. Do việc loại bỏ
một cạnh nào đó nằm trong chu trình hoàn toàn
không làm mất tính liên thông của đồ thị nên
ta
có thể giữ nguyên các đỉnh và loại bỏ dần
các
cạnh ra khỏi các chu trình có thể có trong T cho
tới khi đồ thị T’ nhận được cuối cùng là đồ thị
liên thông và không có chu trình. Lưu ý T’ cũng
có n đỉnh. Sử dụng kết quả đã chứng minh
b)
c) thì T’ có n – 1 cạnh . Điều đó có nghóa
là T có nhiều hơn n-1 cạnh . Mâu thuẩn này
chứng tỏ T phải là đồ thị không có chu trình.
d)
a) : Giả sử T không có chu trình và có n1
cạnh. Ta cần chứng minh T là cây.
Do T không có chu trình nên T không có bất
kỳ
một khuyên nào, T không thể chứa 2 cạnh e 1,
e2
khác nhau cùng liên thuộc hai đỉnh v, w . Vậy T
là đơn đồ thị.
Giả sử T không liên thông và T1, T2,, …, Tk
tương ứng có n1, n2 ,…, nk đỉnh là các thành
phần
liên thông của T. Do T không liên thông nên
k>1
và do T1, T2,, …, Tk liên thông, không có chu
trình nên theo kết quả b)
c) suy ra T1, T2,, …,
Tk có tương ứng n1- 1, n2 – 1, …, nk – 1 cạnh.
Mặt khác, ta lại có số cạnh của T ( là n-1 )
bằng
tổng số cạnh và số đỉnh của T ( là n ) bằng
tổng
số đỉnh của các thành phần liên thông.
Vì vậy :
n-1 = n1- 1 + n2 – 1 + … + nk – 1 <
(n1 + n2 + … + nk ) – 1 = n –
1 ( Vô lý )
Nên T là đồ thị liên thông. Định
lý được chứng
minh.