Tải bản đầy đủ (.doc) (12 trang)

Giáo trình Toán rời rạc Chương 6

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (468.83 KB, 12 trang )

II. CÂY (TREE)
1. Các khái niệm cơ bản:
Đònh nghóa: Đồ thò vô hướng, liên thông và không chứa chu trình đơn nào gọi là cây.
Vì cây không chứa chu trình đơn nên nó không thể có cạnh bội và vòng. Vì vậy cây là
một đồ thò đơn.
Ví dụ:
(hình 1)
Nếu một đồ thò vô hướng, không chứa chu trình đơn nào nhưng không liên thông thì đồ
thò đó phải chứa các thành phần liên thông. Ta sẽ gọi loại đồ thò đó là rừng.
Ví dụ:
(Hình 2: Một rừng với 5 thành phần liên thông)
Đònh lý: Một đồ thò vô hướng là một cây nếu và chỉ nếu tồn tại một đường đi duy nhất
giữa mọi cặp đỉnh bất kì của nó.
Chứng minh:
- Giả sử đồ thò vô hướng T là một cây. Cho x và y là hai đỉnh bất kì của T. Vì T liên
thông nên phải có một đường đi
α
từ x đến y. Nếu có một đường đi
β
(khác
α
) từ x đến y thì
cặp (
α
,
β
) sẽ tạo thành một chu trình đơn. Mâu thuẩn với giả thiết T là một cây.
- Ngược lại giả sử đồ thò vô hướng T thỏa tính chất tồn tại một đường đi duy nhất giữa
mọi cặp đỉnh bất kì của nó. Ta suy ra được:
1. T liên thông.
2. Nếu tồn tại một chu trình đơn trong T. Chẳng hạn chu trình đơn chứa hai đỉnh x, y nào


đó của T. Khi đó ta có hai đường đi phân biệt tách ra được từ chu trình đơn nói trên và nối x với
y. Mâu thuẩn với giả thiết về tính chất của T. Vậy T không thể chứa chu trình đơn được.
Vậy T là một cây.
118
QED.
Thuật ngữ:
Ta qui ước gọi cây không có đỉnh nào là cây rỗng (empty tree). Trong phần lớn các ứng
dụng về cây, một đỉnh đặc biệt của cây được gọi là gốc (roof | root). Khi đã xác đỉnh một đỉnh
của cây là gốc thì ta có thể xác đònh hướng cho từng cạnh như sau: Vì có một đường đi duy nhất
từ gốc đến mọi đỉnh của đồ thò nên ta đònh hướng cho từng cạnh theo hướng từ gốc đi ra. Đỉnh
nào từ đó không có một cạnh đi ra nữa thì gọi là một lá. Các đỉnh của cây không phải là lá gọi
là đỉnh trong.
Nếu v là một đỉnh của cây T mà không phải là gốc thì cha (parent) của v là đỉnh (duy
nhất) u sao cho cho có cạnh nối từ u đến v (có vẻ như gọi v là con (child) của u cũng hợp lí !).
Các đỉnh có cùng một cha sẽ được gọi là các đỉnh anh em(siblings). Tổ tiên (ancestors) của
một đỉnh là mọi đỉnh trên đường đi từ gốc (kể cả gốc) đến đỉnh đó loại trừ đỉnh đó. Nếu b là
con của a thì đồ thò con của cây đó gồm b và mọi con cháu của b cùng tất cả các cạnh liên hệ
với các con cháu của b gọi là một cây con ứng với đỉnh a.
Cây mà mỗi đỉnh trừ các lá đều có đúng m con gọi là cây m-phân chính xác. Cây 2-
phân chính xác gọi là cây nhò phân (binary tree). Trong cây nhò phân thì trong hai đỉnh anh em
bất kì sẽ có một đỉnh gọi là em bên trái (left sibling), đỉnh còn lại gọi là em bên phải (right
sibling)
Đònh lý: Một cây có n đỉnh sẽ có (n-1) cạnh.
Chứng minh
(tầm thường).
QED
Đònh lý: Một cây m-phân chính xác với i đỉnh trong có mi+1 đỉnh.
Chứng minh:
Vì đỉnh nào trong số i đỉnh trong cũng có đúng m đỉnh con. Suy ra cây có mi đỉnh không
phải là đỉnh gốc. Vậy tổng số đỉnh của cây m-phân chính xác làø mi+1.

QED
o Một số ứng dụng:
Cây được sử dụng trong rất nhiều lónh vực, đặc biệt là trong các mô hình liên quan đến
cấu trúc tổ chức của các đối tượng đang được xét đến:
119
o Hệ thống folder trong các máy tính:
Người ta tổ chức quản lí tài nguyên của hệ thống máy tính theo các folder. Mỗi folder
có thể chứa các folder con hoặc không. Loại folder không thể chứa các folder con gọi là các
file.
Một Folder gốc chứa toàn bộ các folder khác gọi là Desktop . Trong hình trên là một
phần hình ảnh trích từ giao diện của Windows Explorer (MicroSoft Windows 98). Một nhánh
của cây quản lí tài nguyên trên là:
Desktop
My Computer My Documents
A:\ C:\
Hp_xtra Register
Sku.11 t_drive.GDI
o Cây tìm kiếm nhò phân.
Bài toán tìm kiếm các mục thông tin trong một danh sách là một trong các bài toán
quan trọng của tin học. Thuật toán tìm kiếm sẽ có hiệu quả nhất khi các mục thông tin đó được
sắp xếp có thứ tự. Trong trường hợp các mục thông tin đó được sắp xếp theo các đỉnh của của
120
một cây nhò phân thì mỗi đỉnh sẽ được gán cho một khóa sao cho khóa của mỗi đỉnh đều lớn
hơn bất kì khóa nào của các đỉnh thuộc cây con bên trái của đỉnh đó và nhỏ hơn bất kì khóa
nào của các đỉnh thuộc cây con bên phải của đỉnh đó.
Giải thuật xây dựng các mục thông tin trên cây nhò phân có thể được phát biểu một
cách đệ qui như sau:
Bắt đầu với một cây chỉ chứa một đỉnh (tức là gốc). Mục thứ nhất trong danh sách sẽ
được gán làm khóa cho gốc đó. Để bổ sung một mục thông tin mới, trước hết so sánh nó với
các khóa của các đỉnh đã có trên cây, bắt đầu từ gốc đi sang trái nếu mục thông tin đó có khóa

bé hơn khóa của khóa của đỉnh tương ứng khi đỉnh này có con bên trái, hoặc đi sang phải nếu
mục thông tin đó có khóa lớn hơn khóa của khóa của đỉnh tương ứng khi đỉnh này có con bên
phải. Khi mục thông tin đó có khóa bé hơn khóa của đỉnh tương ứng và đỉnh đó không có con
bên trái thì một con bên trái của đỉnh này được đưa vào (với khóa của mục thông tin này).
Tương tự, khi mục thông tin đó có khóa lớn hơn khóa của đỉnh tương ứng và đỉnh đó không có
con bên phải thì một con bên phải của đỉnh này được đưa vào (với khóa của mục thông tin
này).
Ví dụ:
Ví dụ trên, theo thứ tự từ trái qua phải và từ trên xuống, cho thấy quá trình xây dựng
cây nhò phân tìm kiếm cho các từ khóa Huong, Bang, Luu, Dung, Kiet, Hung, Quan, Thuy đã
diễn ra như thế nào.
Giải thuật sau đây cho phép ta đònh vò một mục thông tin nếu nó đã có mặt trong cây
tìm kiếm nhò phân hoặc bổ sung một đỉnh mới có khóa là mục thông tin này nếu nó chưa có
mặt trên cây này:
121
Procedure BinarySearch (T: cây tìm kiếm nhò phân; X: khóa của mục thông tin);
{Đỉnh không có trong T có giá trò Null}
v:= Gốc của T
While (v

Null) và (Khóa(v)

X)
BEGIN
IF x < Khóa(v) THEN
IF (Con bên trái của v

Null) THEN v := Con bên trái của v
ELSE Thêm đỉnh mới u là con bên trái của v và gán v:= Null
ELSE

IF (Con bên phải của v

Null) THEN v:= Con bên phải của v
ELSE Thêm đỉnh mới u là con bên phải của v và gán v:= Null
END
IF (Gốc cuả T = Null) THEN Thêm đỉnh r vào cây và gán cho nó khóa X
ELSE IF (Khóa(v)

x) THEN Gán cho đỉnh mới u khóa X
ELSE Return(v)
o Cây quyết đònh.
Cây có gốc, trong đó mỗi đỉnh tương ứng với một quyết đònh và mỗi cây con của cây
này tương ứng với một phương án có thể có của một quyết đònh. Những lời giải có thể có của
bài toán tương ứng với các đường đi tới các lá.
o Mã Huffman.
Giả sử ta muốn gởi một thông báo bao gồm một dãy các kí tự. Trong mỗi thông báo các
kí tự là độc lập với nhau và xuất hiện với xác suất đã biết tại bất kì vò trí nào của thông báo.
Chẳng hạn, ta muốn gởi một thông báo chỉ gồm 5 kí tự a, b, c, d, e với xác suất xuất hiện lần
lượt là 0.12, 0.4, 0.15, 0.08, 0.25. Ta muốn mã hóa các kí tự đó bằng mã nhò phân 0 và 1 sao
cho không có mã hóa của kí tự nào là phần đầu (ie: trùng với) của mã hóa của các kí tự còn lại
(Gọi là điều kiện tiền tố).
Ví dụ
1
ta có hai cách mã hóa sau đây:
Kí tự Xác suất Code 1 Code 2
a 0.12 000 000
b 0.40 001 11
c 0.15 010 01
d 0.08 011 001
e 0.25 100 10

Với Code 1 để thông báo chuỗi bcd ta cần gởi đi 001 010 011 còn đối với Code 2 ta chỉ
cần gởi đi 1101001 (ngắn hơn!). Tuy nhiên khác với dùng bộ mã Code 1, ở nơi nhận ta không
thể xắt lát chuỗi 1101001 để được bảng rõ bcd nếu việc truyền nhận chưa kết thúc trừ khi Code
2 thỏa điều kiện đã nêu!
1
Ví dụ này dẫn từ: Data Structures and Algorithms - ALFRED V. AHO; JOHN E. HOPCROFT;
JEFFREY D. ULLMAN - Addison Wesley Publishing Company (Corrections April, 1987) - pp 94-98.
122

×