trình thỏa mãn điều kiện: Mỗi chu trình có đúng một cạnh riêng, cạnh đó không nằm trong các chu trình còn lại và việc loại bỏ cạnh này không ảnh hưởng đến tính liên thông củ[r]
(1)Bài toán khung nhỏ nhất
(2)Nội dung
4.1 Cây tính chất cây
4.1 Cây tính chất cây
4.2 Cây khung đồ thị
(3)3
Cây rừng (Tree and Forest)
Định nghĩa 1. Ta gọi đồ thị vô hướng liên thơng khơng có chu trình Đồ thị khơng có chu trình gọi rừng.
Như vậy, rừng đồ thị mà thành phần liên
thơng
T1
T3
Rừng F gồm T1, T2,, T3
(4)VÍ DỤ
(5)5
Các tính chất cây
Định lý Giả sử T=(V,E) đồ thị vơ hướng n đỉnh Khi
đó mệnh đề sau tương đương:
MĐ1: T ( T liên thông không chứa chu trình ). MĐ2: T khơng chứa chu trình có n-1 cạnh.
MĐ3: T liên thơng có n-1 cạnh.
MĐ4: T liên thông cạnh cầu.
MĐ5: Hai đỉnh bất kỳcủa T nối với đường đơn.
(6)Nội dung 4.1 Cây tính chất
4.2 Cây khung đồ thị
4.2 Cây khung đồ thị
(7)7
Cây khung đồ thị
Định nghĩa 2. Giả sử G=(V,E) đồ thị vô hướng liên
thông Cây T=(V,F) với F E gọi khung đồ thị G
a b e c d a b e c d a b e c d G
(8)Số lượng khung đồ thị
Định lý sau cho biết số lượng khung
của đồ thị đầy đủ Kn:
Định lý (Cayley) Số khung đồ thị
Kn nn-2
a
b
c
a b c
b c a
c a b
(9)9 C H H H H C H H H H C H H C H H H H C H H C H H C H H H H C H H C H H C H H methane ethane propane butane
(10)Cây mơ hình
Khi n = 4, có khơng đẳng cấu, có đúng đồng phân dạng C4H10
(11)Ví dụ:
Các khung đồ thị:
abc, bcd, cda, dab, afc, dfb, aec, deb, aed, afb, bec, cfd, efc, efd, efa, efb
Số khung là: 42= 16
(12)Nội dung 4.1 Cây tính chất 4.2 Cây khung đồ thị
4.3 Xây dựng tập chu trình đồ thị
4.3 Xây dựng tập chu trình đồ thị
(13)13
Tập chu trình bản
Định nghĩa: Giả sử G=(V,E) đơn đồ thị vô hướng
hướng liên thông, H=(V,T) khung G
Nếu thêm cạnh e E\T vào khung H ta sẽ∈
thu chu trình H, ký hiệu n Ce
Tập chu trình: Ω= { Ce: e E\T } gọi là∈ tập
(14)Tính chất:
Tập chu trình phụ thuộc vào khung
đồ thị Hai khung khác cho hai tập chu trình sở khác nhau.
Nếu đồ thị liên thơng có n đỉnh, m cạnh Khi
khung có n-1 cạnh, cịn lại m-n+1 cạnh ngồi Tương ứng với cạnh ngồi, ta có chu trình Vì vậy, số chu trình đồ thị liên thông m-n+1.
Tập chu trình tập nhiều chu
(15)15
Tính chất
Giả sử A B hai tập hợp, ta đưa vào phép toán
sau
A B = (A B) \ (A B).
Tập AB gọi hiệu đối xứng hai tập A và B.
Tên gọi chu trình bản gắn liền với kiện
trong định lý sau đây:
Định lý Giả sử G=(V,E) đồ thị vô hướng liên
(16)Ý nghĩa ứng dụng
Việc tìm tập chu trình giữ vai trị
quan trọng vấn đề giải tích mạng điện:
Theo chu trình đồ thị tương ứng với mạng điện cần phân tích ta thiết lập được phương trình tuyến tính theo định luật Kirchoff: Tổng hiệu điện dọc theo mạch vịng khơng
(17)17
Thuật toán xây dựng tập chu trình bản
Đầu vào: Đồ thị G=(V,E) mô tả danh sách kề Ke(v), vV. procedure Cycle(v);
(* Tập chu trình thành phần liên thơng chứa đỉnh v
Các biến d, num, STACK, Index toàn cục *) begin
d:=d+1;
STACK[d] := v; num := num+1; Index[v] := num; for u Ke(v)
if Index[u]=0 then Cycle(u) else
if (u STACK[d-1]) and (Index[v] > Index[u]) then < Ghi nhận chu trình với đỉnh:
(18)Thuật toán xây dựng tập chu trình bản (* Main Program *)
BEGIN
for v V Index[v] := 0; num := 0; d := 0;
STACK[0] := 0; for v V
if Index[v] = then Cycle(v); END
(19)Ví dụ:
(20)(21)21
Nội dung 4.1 Cây tính chất 4.2 Cây khung đồ thị
4.3 Xây dựng tập chu trình đồ thị
4.4 Xây dựng theo chiều sâu chiều rộng
4.4 Xây dựng theo chiều sâu chiều rộng
(22)Xây dựng khung
Xây dựng theo chiều sâu Xây dựng theo chiều rộng Tham số
• Input: Đồ thị G lưu dạng danh sách kề-Mảng Ke[]
• Output: Cây khung T đồthị
Mảng ChuaXet[] dùng để đánh đấu đỉnh
(23)Xây dựng theo chiều sâu
/* Khai báo biến toàn cục ChuaXet, Ke, T */ void Tree_DFS(v);
{
ChuaXet[v] = 0; for (u Ke(v)) ∈
if (ChuaXet[u]) {
T = T (v,u); ∪
Tree_DFS(u); }; }
(24)Xây dựng theo chiều sâu
main(){
/* Nhập đồ thị, tạo biến Ke */ for (v V) ∈
ChuaXet[v] = 1; /* Khởi tạo cờ cho đỉnh */ T = ; /* T tập cạnh khung */∅
(25)Ví dụ: Xây dựng theo chiều sâu
(26)Xây dựng theo chiều rộng
/* Khai báo biến toàn cục ChuaXet, Ke, QUEUE */ void Tree_BFS(r);{
QUEUE = ; ∅ QUEUE r; ⇐ ChuaXet[r] = 0;
while (QUEUE != ){∅ v QUEUE; ⇐
for (u Ke(v))∈ if ( ChuaXet[u] ){ QUEUE u; ⇐
ChuaXet[u] = 0; T = T (v,u); ∪ };
(27)Xây dựng theo chiều rộng
main() /* Nhập đồthị, tạo biến Ke */{ for (v V) ∈
ChuaXet[v] = 1; /* Khởi tạo cờ cho đỉnh */ T = ; /* T tập cạnh khung */∅
Tree_BFS(root); /* root đỉnh đồ thị */
}
(28)Ví dụ: Xây dựng theo chiều rộng
(29)29
Nội dung 4.1 Cây tính chất 4.2 Cây khung đồ thị
4.3 Xây dựng tập chu trình đồ thị
4.4 Bài toán khung nhỏ nhất
(30)BÀI TOÁN CÂY KHUNG NHỎ NHẤT
(31)31 Bài toán CKNN
Bài toán: Cho đồ thị vô hướng liên thông G=(V,E) với trọng số
c(e), e E Độ dài khung tổng trọng số cạnh
của Cần tìm khung có độ dài nhỏ
1 f d a b c e g 7 3 4
(32)Bài toán khung nhỏ nhất
Có thể phát biểu dạng tốn tối ưu tổ hợp:
Tìm cực tiểu
c(H) = c(e) min,
eT
với điều kiện H=(V,T) là khung của G.
(33)33 Ứng dụng thực tế: Mạng truyền thông
Công ty truyền thông AT&T cần xây dựng mạng
truyền thông kết nối n khách hàng Chi phí thực
kênh nối i j cij Hỏi chi phí nhỏ để thực
hiện việc kết nối tất khách hàng bao nhiêu?
1 6 3 7 5 8 9 4 2 10
(34)Bài toán xây dựng hệ thống đựờng sắt
Giả sử ta muốn xây dựng hệ thống đường sắt nối n thành
phố cho hành khách lại hai thành phố đồng thời tổng chi phí xây dựng phải nhỏ
Rõ ràng đồ thị mà đỉnh thành phố cạnh
tuyến đường sắt nối thành phố tương ứng với phương án xây dựng tối ưu phải
Vì vậy, tốn đặt dẫn tốn tìm khung nhỏ
(35)35
Sơ đồ chung giải thuật
Generic-MST(G, c) A = { }
//Bất biến: A tập cạnh CKNN
while A chưa khung
tìm cạnh (u, v) an toàn A
A = A {(u, v)}
// A tập cạnh CKNN
return A
Tìm cạnh an toàn cách nào?
Cạnh rẻ
(36)Lát cắt
Lát cắt
Ta gọi lát cắt (S, V S) cách phân hoạch tập
đỉnh V thành hai tập S V S Ta nói cạnh e
cạnh vượt lát cắt (S, V S) đầu mút
là thuộc S đầu mút lại thuộc V S
Giả sử A tập cạnh đồ thị Lát
cắt (S,V S) gọi tương thích với A nếu
(37)37 Lát cắt
Lát cắt G = (V, E) phân hoạch V thành (S, V – S)
Ví dụ. S = {a, b, c, f}, V – S = {e, d, g}
Các cạnh (b, d), (a, d), (b, e), (c, e) cạnh vượt lát cắt Các cạnh lại không vượt lát cắt
(38)Lát cắt tương thích với tập cạnh f d a b c e g 7 3 4
Ví dụ. S = {a, b, c, f} A = { (a, b), (d, g), (f, b), (a, f) } A = A { (b, d) }
2
1
(39)39 Cạnh nhẹ f d a b c e g 7 4
VD S = {a, b, c, f}
Cạnh (b, e) có trọng số 3, “nhẹ hơn” cạnh vượt lát cắt lại (a, d), (b, d), (c, e)
cạnh nhẹ
Cạnh nhẹ cạnh có trọng số nhỏ số cạnh vượt lát cắt
(40)Cạnh nhẹ cạnh an toàn!
Định lý. Giả sử (S, V – S) lát cắt G=(V, E) tương thích với tập A E, A là tập tập cạnh CKNN G Gọi (u, v) cạnh nhẹ vượt lát cắt (S, V – S) Khi (u, v) an
toàn A; nghĩa là, A {(u, v)} tập
tập cạnh CKNN
S
V – S
4
v
(41)41
Tại cạnh nhẹ an toàn?
S
V – S
4 u v A y x
A { (u, v) } T ', tức là, (u, v) an toàn A
Chứng minh. Giả sử T CKNN (gồm cạnh đỏ) chứa A Giả sử cạnh nhẹ (u, v) T Ta có
T { (u, v) } chứa chu trình
Tìm cạnh (x, y) T vượt lát cắt (S, V – S)
Cây khung T ' = T – { (x, y) } { (u, v) } có độ dài
(42)
Hệ quả Giả sử A tập E tập tập cạnh CKNN của G, C thành phần liên thông rừng F = (V, A) Nếu (u, v) cạnh nhẹ nối C với thành phần liên thông khác F, (u, v) an tồn A
u
v
7
4 w
CM
Cạnh (u, v) cạnh nhẹ vượt lát cắt (C, V – C) tương thích với A Theo định lý trên, cạnh (u, v) an toàn A
8
(43)43 Tìm cạnh an tồn?
Giả sử A tập tập cạnh CKNN
A rừng.
Cạnh an toàn bổ sung vào A có trọng số nhỏ
trong số cạnh nối cặp thành phần liên thông
Thuật tốn Kruskal
Thuật tốn Prim
A là cây
(44)Thuật toán Kruskal:
Thuật toán xây dựng tập cạnh ETcủa khung
(45)Cụ thể mô tả sau:
1 Bắt đầu từ đồ thị rỗng T có n đỉnh
2 Sắp xếp cạnh G theo thứ tự không giảm
của trọng số
3 Bắt đầu từ cạnh dãy này, ta thêm
dần cạnh dãy xếp vào T theo nguyên tắc cạnh thêm vào không tạo thành chu trình T
4 Lặp lại Bước số cạnh T
bằng n−1, ta thu khung nhỏ cần tìm
(46)Thuật toán Kruskal
Thuật toán Kruskal Generic-MST(G, c) A = { }
//Bất biến: A tập cạnh CKNN
while A chưa khung
tìm cạnh (u, v) an toàn A
A = A {(u, v)}
// A tập cạnh CKNN
return A
(47)47 Mơ tả thuật tốn Kruskal
procedure Kruskal; begin
xếp cạnh e1, , em theo thứ tự không giảm độ dài; T = ; (* T – tập cạnh CKNN *)
for i = to m
if T {ei} khơng chứa chu trình then T := T {ei};
(48)Ví dụ:
Tìm khung nhỏ đồ thị cho
(49)Cách giải
Bắt đầu từ đồ thị rỗng T có đỉnh
Sắp xếp cạnh đồ thị theo thứ tự không giảm
trọng số:
{(v3, v5), (v4, v6), (v4, v5), (v5, v6), (v3, v4), (v1, v3), (v2, v3), (v2, v4), (v1, v2)}
Thêm vào đồ thị T cạnh (v3, v5)
Do số cạnh T 1<6−1 nên tiếp tục thêm cạnh (v4,
v6) vào T
Bây số cạnh T nhỏ 6, ta tiếp
tục thêm cạnh dãy xếp vào T
(50)Cách giải
Sau thêm cạnh (v4, v5) vào T, thêm cạnh
(v5, v6) tạo thành với cạnh (v4, v5), (v4, v6) có T chu trình
Tình tương tự xãy cạnh
(v3, v4) cạnh dãy
Tiếp theo ta bổ sung cạnh (v1, v3), (v2, v3) vào T
và thu dược tập ET gồm cạnh:
(51)Bài tập
Tìm khung nhỏ đồ thị cho
hình đây:
(52)Bài tập f d a b c e g 7 4
Tìm khung nhỏ đồ thị cho
(53)53 Thời gian tính
Bước Sắp xếp dãy độ dài cạnh. O(m log n)
Bước lặp: Xác định xem T { ei } có chứa chu trình hay khơng?
Có thể sử dụng DFS để kiểm tra với thời gian O(n).
(54)Cách cài đặt hiệu quả
Vấn đề đặt là:
Khi cạnh ei=(j,k) xét, ta cần biết có phải j k
thuộc hai thành phần liên thông (tplt) khác hay
không Nếu đúng, cạnh bổ sung vào
cây khung nối tplt chứa j tplt chứa k.
(55)55
Mỗi tplt C rừng F cất giữ tập Ký hiệu First(C) đỉnh tplt C
Với đỉnh j tplt C, đặt First(j) = First(C) = đỉnh đầu
tiên C
Chú ý: Thêm cạnh (i,j) vào rừng F tạo thành chu trình iff i
j thuộc tplt, tức First(i) = First(j)
Khi nối tplt C D, nối tplt nhỏ (ít đỉnh hơn) vào tplt
lớn (nhiều đỉnh hơn):
Nếu |C| > |D|, First(CD) := First(C)
(56)Phân tích thời gian tính
Thời gian xác định First(i) = First(j) i, j: O(1) cho
cạnh Tổng cộng O(m)
Thời gian nối tplt S Q, giả thiết |S| |Q|
O(1) với đỉnh Q (là tplt nhỏ hơn)
Mỗi đỉnh i tplt nhỏ nhiều log n lần (Bởi vì, số
đỉnh tplt chứa i tăng lên gấp đôi sau lần nối.)
(57)57 Thuật toán Prim
A (Bắt đầu từ có đỉnh)
Cạnh an toàn cạnh nhẹ
số cạnh nối đỉnh A với
(58)Thuật toán Prim
Thuật toán Kruskal làm việc hiệu
những đồ thị dày (đồ thị có số cạnh m ≈n(n−1)/2) Trong trường hợp đó, thuật tốn Prim tỏ hiệu quả Thuật tốn Prim cịn gọi
(59)59
Mô tả thuật toán Prim
procedure Prim(G, c)
begin
Chọn đỉnh tuỳ ý r V;
Khởi tạo T=(V(T), E(T)) với V(T)={ r }và E(T)=;
while T có < n đỉnh do
begin
Gọi (u, v) cạnh nhẹ với u V(T) vV(G) – V(T)
E(T) E(T) { (u, v) }; V(T) V(T) { v }
end end;
Tính đắn suy từ hệ chứng minh:
Giả sử A tập E tập tập cạnh CKNN của G,
(60)f d a b c e g 7 4
Thuật tốn Prim – Ví dụ
chọn
(61)(62)(63)(64)(65)65 f d a b c e g 7 4
Độ dài CKNN: 14
(66)Thuật toán Prim
1 VT:={v*}, v*là đỉnh tuỳ ý đồ thị G
ET:= ∅
2 Với đỉnh vj∉VT, tìm đỉnh wj∈VT cho
m(wj,vj) = m(xi, vj)=:βj xi∈VT gán cho đỉnh vj nhãn
[wj, βj] Nếu không tìm đuợc wj (tức vj
khơng kề với đỉnh VT) gán cho vj nhãn
[0, ∞]
3.Chọn đỉnh vj* cho βj*= βj vj∉VT
(67)Thuật toán Prim
Nếu |VT| = n thuật tốn dừng (VT, ET)
khung nhỏ
Nếu |VT| < n chuyển sang Bước
4 Đối với tất đỉnh vj∉VT mà kề với vj*, ta thay đổi nhãn chúng sau:
Nếu βj> m(vj*, vj) đặt βj:=m(vj*, vj) nhãn vj [vj*, βj] Ngược lại, ta giữ nguyên nhãn vj Sau quay lại Bước 3.
(68)Ví dụ:
Tìm khung nhỏ thuật tốn Prim
(69)(70)Cài đặt thuật toán Prim đồ thị dày Giả sử đồ thị cho ma trận trọng số C={c[i,j], i, j = 1,
2, , n}
Ở bước để nhanh chóng chọn đỉnh cạnh cần bổ
sung vào khung, đỉnh đồ thị gán cho nhãn
Nhãn đỉnh v V-S có dạng [d[v], near[v]] :
d[v] dùng để ghi nhận khoảng cách từ đỉnh v đến tập đỉnh
S:
(71)71
Thuật toán Prim procedure Prim;
begin
(* Bước khởi tạo *)
S := { r }; T := ; d[r] := 0; near[r] := r.
for v V \ S begin
d[v] := c[r,v]; near[v] := r; end;
(* Bước lặp *) for k:=2 to n do
begin
Tìm u V\ S thoả mãn: d[u] = { d[v] : v V\ S };
S := S { u }; T := T { ( u, near[u] ) } ;
for v V\ S do
if d[v] > c[u,v] then begin
d[v] := c[u,v] ; near[v] := u; end;
end;
H = ( S , T ) là khung nhỏ đồ thị ;
end;
(72)Thuật toán Prim – Ví dụ
Ví dụ: Tìm CKNN cho đồ thị cho ma trận trọng số
6
33 17
33 18 20
C = 17 18 16
20 16 8
14
(73)73
Thuật tốn Prim: Ví dụ
Bước Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 S
Khởi tạo
1
2
3
4
(74)Thuật toán Prim: Ví dụ
Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 S
Khởi tạo [0, 1] [33, 1] [17, 1]* [, 1] [, 1] [, 1] 1
1
2
3
4
(75)75
Thuật tốn Prim: Ví dụ
Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 S
Khởi tạo [0, 1] [33, 1] [17, 1]* [, 1] [, 1] [, 1] 1
1 - [18, 3] - [16, 3] [4, 3]* [, 1] 1, 3
2
3
4
5
for v V\ S do
if d[v] > c[u,v] then
(76)Thuật tốn Prim: Ví dụ
Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 S
Khởi tạo [0, 1] [33, 1] [17, 1]* [, 1] [, 1] [, 1] 1
1 - [18, 3] - [16, 3] [4, 3]* [, 1] 1, 3
2 - [18, 3] - [9,5]* - [14, 5] 1, 3, 5
3
4
(77)77
Thuật toán Prim: Ví dụ
Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 S
Khởi tạo [0, 1] [33, 1] [17, 1]* [, 1] [, 1] [, 1] 1
1 - [18, 3] - [16, 3] [4, 3]* [, 1] 1, 3
2 - [18, 3] - [9,5]* - [14, 5] 1, 3, 5
3 - [18,3] - - - [8,4]* 1,3,5,4
4
5
for v V\ S do
if d[v] > c[u,v] then
(78)Thuật tốn Prim: Ví dụ
Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 S
Khởi tạo [0, 1] [33, 1] [17, 1]* [, 1] [, 1] [, 1] 1
1 - [18, 3] - [16, 3] [4, 3]* [, 1] 1, 3
2 - [18, 3] - [9,5]* - [14, 5] 1, 3, 5
3 - [18,3] - - - [8,4]* 1,3,5,4
4 - [18,3]* - - - - 1,3,5,4,6
(79)79
Thuật tốn Prim: Ví dụ
Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 S
Khởi tạo [0, 1] [33, 1] [17, 1]* [, 1] [, 1] [, 1] 1
1 - [18, 3] - [16, 3] [4, 3]* [, 1] 1, 3
2 - [18, 3] - [9,5]* - [14, 5] 1, 3, 5
3 - [18,3] - - - [8,4]* 1,3,5,4
4 - [18,3]* - - - - 1,3,5,4,6
5 - - - - - - 1,3,5,4,6,2
(80)Bài tập
(81)CHƯƠNG V
(82)Giới thiệu
Một đồ thị liên thơng khơng có chu trình
gọi cây.
Dùng để xây dựng thuật tốn có hiệu
quả để định vị phần tử danh sách
Cây dùng để xây dựng mạng máy tính
với chi phí rẻ cho đường điện thoại nối các máy phân tán
Cây dùng để tạo mã có hiệu
quả để lưu trữ truyền liệu
Dùng mơ hình thủ tục mà để thi
(83)ĐỊNH NGHĨA VÀ CÁC TÍNH CHẤT CƠ BẢN
Định nghĩa: Cây đồ thị vô hướng liên
thông, không chứa chu trình có hai đỉnh.
Một đồ thị vô hướng không chứa chu trình có
ít hai đỉnh gọi rừng.
Trong rừng, thành phần liên thơng
(84)Ví dụ:
(85)CÂY CÓ GỐC
Định nghĩa: Cây có hướng đồ thị có hướng mà
đồ thị vơ hướng cây.
Cây có gốc có hướng, có
(86)Ví dụ:
(87)(88)Các khái niệm:
T có gốc
x, y, z đỉnhtrong T
V0, v1, …, vnlà đường đơn trongT Vn-1là cha vn
v0,v1,…,vn-1 tiền bối vn Vn là vn-1
(89)Các khái niệm:
Nếu x khơng có x (leaf) Nếu x khơng x đỉnh trong
Mức(level) đỉnh x chiều dài (số cành) đường đơn từ gốc v0 tới x level(v0) = 0
Chiều cao(height) mức lớn cây Cây con(subtree) T gốc x đồ thị T mà:
Tập đỉnh gồm x tất hậu duệ x
Tập cành gồm cành nối tới hậu duệ x
(90)Ví dụ:
Cha c b
Con g h, i, j
Các tiền bối e c, b, a Các hậu duệ b c, d, e
(91)Các khái niệm:
Một có gốc gọi là:
m – cây(m-ary tree) đỉnh khơng có q m con
m – đầy(full m-ary tree) đỉnh có đúng m con
Cây nhị phân(binary tree) đỉnh khơng có q con
Cây có gốc thứ tự(Ordered rooted tree) của đỉnh xếp thứ tự từ trái qua phải
(92)Các khái niệm:
Đặc biệt: Cây nhị phân có thứ tự: Nếu đỉnh có đủ thì
Con thứ bên trái( left child) Con thứ bên phải ( right child)
Một m – với chiều cao h gọi thăng
(93)Ví dụ:
Mơ hình gia phả dịng họ
Mơ hình biểu diễn tổ chức
Mơ hình tổ chức Trường Đại Học
(94)Ví dụ:
Mơ hình tập tin máy tính
Các tập tin máy tính tổ chức
(95)Cây tìm kiếm nhị phân:
Một tìm kiếm nhị phân nhị phân T
mà đó:
Mỗi đỉnh gán cho nhãn
Các nhãn có thểso sánh với đỉnh ∀
v T, nhãn bên trái v ∈
đều nhỏ nhãn v nhãn cây bên phải v lớn nhãn v
(96)Ví dụ:
Cho dãy số: 30, 20, 10, 40, 32, 27, 17, 8, 42, 78, 35
(97)Cây định:
Cây địnhlà có gốc mà:
Mỗi đỉnh tương ứng với định
Mỗi đỉnh ứng với kết
cục của định
Một lời giải đường từ gốc đến lá
(98)Ví dụ:
Cho đồng xu, có đồng nhẹ
Xác định cân thăng bằng. Giải:
Có trạng thái sau lần cân Do
định cho dãy lần cân làcây tam phân Có định có kết
cục kết cục cần biểu diễn nhất lá
Số lần cân nhiều để xác định đồng xu giả
chiều cao h.
(99)Cây định:
(100)Một số mệnh đề:
Mệnh đề: Một m-phân đầy đủ có i đỉnh
thì có m*i+1 đỉnh có (m−1)i+1 lá.
Mệnh đề:
1) Một m-phân có chiều cao h có nhiều
nhất mh lá.
2) Một m-phân có l lá có chiều cao h ≥
(101)Các phương pháp duyệt cây
Thuật toán viếng thăm đỉnh có
gốc có thứ tự lần cách có hệ thống gọi thuật tốn duyệt cây
Có thuật tốn phổthơng:
Duyệt tiền tự (Preoder traversal) Duyệt trung tự(Inorder traversal) Duyệt hậu tự (Postorder traversal)
(102)Thuật toán tiền thứ tự:
1 Thăm gốc r.
2 Duyệt bên trái T(r) theo tiền thứ
tự.
3 Duyệt bên phải T(r) theo tiền
(103)Thuật toán trung thứ tự:
1 Duyệt bên trái T(r) theo trung
thứ tự.
2 Thăm gốc r.
3 Duyệt bên phải T(r) theo trung
(104)Thuật toán hậu thứ tự:
1 Duyệt bên trái T(r) theo hậu thứ
tự.
2 Duyệt bên phải T(r) theo hậu
thứ tự.
(105)Ví dụ: Duyệt theo phương pháp trên
(106)Ký pháp Ba Lan:
Xét biểu thức đại số sau đây:
Vẽ cây: đỉnh mang dấu
(107)Ký pháp Ba Lan:
Duyệt nhị phân hình theo trung
thứ tự là:
a + b c −d / ∗ (2)
Ta biết dấu ngoặc (1) cần thiết, vì (2) hiểu theo nhiều cách khác (1), chẳng hạn :
(a + b c) −d / ∗ (3)
hoặc a + (b c −d) / 2∗ (4)
(108)Ký pháp Ba Lan:
Các biểu thức (3) biểu diễn nhị
(109)Ký pháp Ba Lan:
Các biểu thức (4) biểu diễn nhị
phân hình sau:
Nhưng hai có kết giống duyệt
theo trung thứ tự.
(110)Ký pháp Ba Lan:
Đối với hình thứ nhất, duyệt theo
tiền thứ tự, ta có
∗+ a b −c / d (5)
và duyệt theo hậu thứ tự, ta có: a b + c d / − ∗ (6)
Đối với thứ duyệt theo tiền thứ tự
(111)Ký pháp Ba Lan:
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ách viết theo hậu thứ tự là ký pháp Ba Lan đảo, để ghi nhớ đóng góp nhà tốn học lơgic học Ba Lan Lukasiewicz (1878-1956) vấn đề
(112)chuyển biểu thức thành cây
Chuyển biểu thức viết theo ký pháp quen
(113)Ví dụ:
Chuyển biểu thức theo ký pháp Ba Lan sau thành biểu
thức dạng quen thuộc:
− ↑ ∗ / − − a b c ↑ − c d − − a c d / ↑ − b d ∗ ∗ ∗
5
Ta phân tích dần cơng thức phận sau:
(114)(115)Bài tập:
1) Duyệt sau thuật
(116)Bài tập:
2) Duyệt sau thuật
(117)Bài tập:
Viết biểu thức sau theo ký pháp Ba Lan
và ký pháp Ba Lan đảo.
Viết biểu thức sau theo ký pháp quen