1. Trang chủ
  2. » Mẫu Slide

lý thuyết đồ thị

117 20 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

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

A

B

gọi

hiệu đối xứng

hai tập

A

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âuXây dựng theo chiều rộngTham 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), eE Độ 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,

eT

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

c

ij

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

{

e

i

} 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

e

i

=(

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ỳ ý rV;

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 uV(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 vV-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 trongTVn-1là cha vn

v0,v1,…,vn-1 tiền bối vnVn 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âyCâ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, aCá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

Ngày đăng: 21/04/2021, 06:32

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w