1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tài liệu ôn thi toán rời rạc

17 164 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

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 185,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tổng hợp các bài tập, đề thi môn Toán rời rạc các năm

Trang 1

1.2 ĐƯỜNG ĐI, CHU TRÌNH, ĐỒ THỊ LIÊN

THÔNG

Đồ thị vô hướng liên thông là đồ thị mà giữa hai đỉnh bất kỳ luôn tồn tại đường đi đến nhau Thành phần liên thông:

Trong trường hợp đồ thị là không liên thông, nó sẽ

rã ra thành một số đồ thị con liên thông đôi một không có đỉnh chung Những đồ thị con liên thông

như vậy ta sẽ gọi là các thành phần liên thông

của đồ thị

1.2 ĐƯỜNG ĐI, CHU TRÌNH, ĐỒ THỊ LIÊN

THÔNG

ĐƯỜNG ĐI ĐỘ DÀI N TRONG ĐỒ THỊ CÓ

HƯỚNG

Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó,

n là số nguyên dương, trên đồ thị có hướng G = (V, E) là dãy x0, x1,…, xn-1, xn

trong đó u = x0, v = xn, (xi , xi+1) E, i = 0, 1, 2,…,

n-1

Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cung:

(x0, x1), (x1, x2), …, (xn-1, xn)

Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi có đỉnh đầu trùng với đỉnh

cuối (tức là u = v) được gọi là chu trình Đường đi hay chu trình được gọi là đơn nếu như không có

cung nào bị lặp lại

1.2 ĐƯỜNG ĐI, CHU TRÌNH, ĐỒ THỊ LIÊN

THÔNG

Trang 2

ĐƯỜNG ĐI ĐỘ DÀI N TRONG ĐỒ THỊ CÓ

HƯỚNG

Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó,

n là số nguyên dương, trên đồ thị có hướng G = (V, E) là dãy x0, x1,…, xn-1, xn

trong đó u = x0, v = xn, (xi , xi+1) E, i = 0, 1, 2,…,

n-1

Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cung:

(x0, x1), (x1, x2), …, (xn-1, xn)

Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi có đỉnh đầu trùng với đỉnh

cuối (tức là u = v) được gọi là chu trình Đường đi hay chu trình được gọi là đơn nếu như không có

cung nào bị lặp lại

- Chu trình đơn trong đồ thị G đi qua mỗi cạnh của nó một lần được gọi là chu trình Euler.

- Đường đi đơn trong G đi qua mỗi cạnh của nó một lần được gọi là đường đi Euler

- Đồ thị được gọi là đồ thị Euler nếu nó có chu trình Euler, và gọi là đồ thị nửa Euler nếu nó

có đường đi Euler

Trang 3

3.3 Định lý Euler và thuật toán Flor

Định lý 3.1 (Euler) Đồ thị vô hướng liên thông G là

đồ thị Euler khi và chỉ khi mọi đỉnh của G đều có bậc chẵn.

Bổ đề 3.1 Nếu bậc của mỗi đỉnh của đồ thị G

không nhỏ hơn 2 thì G chứa chu trình.

v → v1 → v2 → → vi → ???

CM định lý:

ĐK cần: Nếu là đồ thị Euler thì bậc của tất cả các đỉnh đều là chẵn

Do tồn tại chu trình Euler ( chu trình đi qua các cạnh đúng một lần); mỗi lần chu trình này đi qua một đỉnh nào đó thì bậc của đỉnh tăng lên 2

⇒ Bậc của tất cả các đỉnh đều chẵn

Định lý 3.1 (Euler) Đồ thị vô hướng liên thông

G là đồ thị Euler khi và chỉ khi mọi đỉnh của G đều có bậc chẵn.

⇒ CM định lý:

Trang 4

⇒ ĐK đủ: Nếu bậc của tất cả các đỉnh đều là chẵn thì đồ thị Euler

⇒ Hệ quả 3.1 Đồ thị vô hướng liên thông G là nửa Euler khi và chỉ khi nó có không quá 2 đỉnh bậc lẻ

Thuật toán Flor để liệt kê chu trình Euler

Xuất phát từ một đỉnh nào đó, lần lượt đi qua các cạnh của đồ thị và chỉ đi qua cạnh cầu khi không còn lựa chọn nào khác;

⇒ Hệ quả 3.1 Đồ thị vô hướng liên thông G là nửa Euler khi và chỉ khi nó có không quá 2 đỉnh bậc lẻ

Thuật toán Flor để liệt kê chu trình Euler

CE là tập các cạnh của chu trình

STACK

if (Ke(x)!=)

Ke(x);

Trang 5

Ke(x)=Ke(x)\ { y} ; Ke(y)=Ke(y)\{ x} ;

⇒ Ke(B)= {C, E}

⇒ Ke( C) = { B, D}

⇒ Ke( D) = {C, E}

⇒ Ke(E ) = {B, D}

⇒ Xuất phát từ đỉnh B;

⇒ Cho B vào Stack

⇒ Lần lượt duyệt Stack

⇒ Bước lặp 1:

⇒ X = B ; ( do B là đỉnh của Stack)

⇒ Kiểm tra Ke(X) tức là Ke(B) = {C, E} khác rỗng

⇒ Gán Y = C ( do C là phần tử đầu tiên trong DS

kề của B)

⇒ Đưa Y ( C ) vào Stack;

⇒ Loại bỏ cạnh (B,C)

Bước lặp 2:

X = C ; ( do C là đỉnh của Stack)

Kiểm tra Ke(X) tức là Ke(C) = {D} khác rỗng

Gán Y = D ( do D là phần tử đầu tiên trong DS

kề của C)

Đưa Y ( D) vào Stack;

Trang 6

Loại bỏ cạnh (D,C)

Ke(D)= {E}

Ke( C) = {}

Ke(B)= {E}

Ke(E) = {D, B}

Bước lặp 3:

X = D ; ( do D là đỉnh của Stack)

Kiểm tra Ke(X) tức là Ke(D) = {E} khác rỗng Gán Y = E ( do E là phần tử đầu tiên trong DS

kề của D)

Đưa Y ( E) vào Stack;

Loại bỏ cạnh (D,E)

Ke(D)= {}

Ke( C) = {}

Ke(B)= {E}

Ke(E) = {B}

Bước lặp 4:

X = E ; ( do E là đỉnh của Stack)

Kiểm tra Ke(X) tức là Ke(E) = {B} khác rỗng Gán Y = B ( do B là phần tử đầu tiên trong DS

kề của E)

Đưa Y ( B) vào Stack;

Loại bỏ cạnh (E,B)

Ke(D)= {}

Ke( C) = {}

Ke(B)= {}

Ke(E) = {}

Bước lặp 5:

X = B ; ( do B là đỉnh của Stack)

Kiểm tra Ke(X) tức là Ke(B) = {} rỗng

Trang 7

loại bỏ 1 phần tử ra khỏi Stack gán cho X X= B; CE = {B}

Bước lặp 6:

X = E; đưa E vào CE; CE= {B, E}

Tương tự lần lượt lấy các đỉnh ra khỏi Stack đến khi rỗng ta nhận được chu trình Euler

CE = {B, E, D, C, B}

Trang 8

Bài 4 Đồ thị Hamilton

4.2 Định lý và thuật toán liệt kê tất cả các chu trình Hamilton

Định lý 4.1 (Dirak 1952) Đơn đồ thị vô hướng

G với n>2 đỉnh, mỗi đỉnh có bậc không nhỏ hơn n/2 là đồ thị Hamilton.

CM: Thêm k (k là số đỉnh nhỏ nhất) đỉnh mới

vào G và nối chúng với tất cả các đỉnh của G ta nhận được G’ là Hamilton;Ta sẽ chỉ ra k= 0;

Thật vây, giả sử k>0; lúc đó ta có một chu trình Hamilton trong G’ có dạng v p w, , v trong đó v,

w thuộc G và p là một trong k đỉnh vừa thêm vào;

4.2 Định lý và thuật toán liệt kê tất cả các chu trình Hamilton

Từ đó ta suy ra: v không kề với w; vì nếu v kề với w thì ta ko cần p nữa, như vậy vi phạm điều kiện k nhỏ nhất;

Hơn nữa, một đỉnh w’ là kề với w thì không thể

đi liền sau đỉnh v’ là kề của v.

v → p → w → → v’ → w’ → → v

v → v’ → → w → w’ → → v

4.2 Định lý và thuật toán liệt kê tất cả các chu trình Hamilton

Từ đó ta suy ra:

Số đỉnh của đồ thị G’ không kề với w là không nhỏ hơn số đỉnh kề với v (tức là ít nhất cũng là

bằng n/2+k)

Trang 9

Đồng thời số đỉnh của G’ kề với w ít ra là phải

bằng n/2+k

Do không có đỉnh nào của G’ vừa không kề, lại vừa kề với w, cho nên tổng số đỉnh của đồ thị G’ (G’ có n+k đỉnh) không ít hơn n+2k

Mâu thuẫn thu được đã chứng minh định lý 4.2 Định lý và thuật toán liệt kê tất cả các chu trình Hamilton

Định lý 4.2 Giả sử G là đồ có hướng liên thông

với n đỉnh

Nếu deg+ (v) ≥ n/2, deg – (v) ≥ n/2, với ∀ v thì G

là Hamilton.

Đồ thị đấu loại là đồ thị có hướng mà trong đó

hai đỉnh bất kỳ của nó được nối với nhau bởi đúng một cung

Thuật toán liệt kê tất cả các chu trình

Hamilton của đồ thị

void Hamilton(k)

{/* liet ke cac chu trinh Hamilton thu duoc bang

viec phat trien day dinh (X[1], , X[k-1]) cua do thi G=(V,E) cho boi danh sach ke: Ke(v), v ∈ V */ for y ∈ Ke(X[k-1])

if( (k =N+1) && (y=v0))

Ghinhan(X[1], , X[n], v0)

else

if (Chuaxet[y])

{ X[k]=y;

Chuaxet[y]=false;

Hamilton(k+1);

Chuaxet[y]=true;

Trang 10

KIỂM TRA ĐỒ THỊ EULER

Bool KtraDoThiEuler(int A[20,20], int N)

{ Bac=0;

Book KT=true;

//Ktra qua bac cua tat cac cac dinh

for (int i=0; i<N;i++)

{ for(int j=0;j<N;j++)

if(A[i,j] != 0) bac++;

if( bac%2==1 ) // bac cua dinh phai chan

return false;

}return true;

}

Trang 11

ĐÁP ÁN ĐỀ 1 Câu 1.

a) Trình bày thuật toán BFS(u) :

Thuật toán BFS(u):

Bước 1 (Khởi tạo):

Bước 2 (Lặp):

s = Pop(Queue); <Thăm đỉnh s>;

if ( Chuaxet[t] ) {

Push(Queue, t); Chuaxet[t] = False;

} }

} Bước 3 (Trả lại kết quả) :

Return (<Tập đỉnh đã thăm>) ;

b) Tìm các đỉnh trụ của đồ thị:

liên thông (SOLT) của đồ thị là 1

Từ đây ta có kết luận: đỉnh 3, 5, 9, 10 là trụ

Trang 12

c) Tìm các cạnh cầu của đồ thị:

Phương pháp được tiến hành như trong bảng sau Chú ý, thứ tự các đỉnh được duyệt theo thuật toán là quan trọng:

Từ đây ta có kết luận: cạnh (3,5), (9,10) là cầu

Trang 13

Câu 2:

a) Chứng minh G là nửa Euler:

Ta có:

BFS(1) = 1, 4, 5, 6, 7, 10, 11, 3, 2, 8, 12, 13, 9 = V Nên G liên thông yếu

Ta lại có:

định lý G là nửa Euler nhưng không phải là Euler

b) Xây dựng thuật toán tìm một đường đi Euler:

Thuật toán Euler-Path :

Bước 1 (Khởi tạo):

Bước 2 (Lặp):

s = Get(stacks);

t = < đỉnh đầu trong danh sách Ke(s)>;

Push(stack, t); E = E \ (s, t);

} else {

s = Pop(stack); E =>CE;

} }

Bước 3 (Trả lại kết quả):

<Lật ngược lại các đỉnh trong CE ta nhận được đường đi Euler>

Trang 14

c) Kiểm nghiệm thuật toán:

thái của stack và CE được thể hiện trong bảng sau:

14 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11 ∅

15 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10 ∅

16 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12 ∅

17 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9 ∅

18 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8 ∅

19 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7 ∅

20 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5 ∅

21 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3 ∅

22 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2 ∅

23 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2, 6 ∅

24 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2, 6, 11 ∅

25 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2, 6, 11, 12 ∅

26 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2, 6, 11, 12, 13 ∅

27 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2, 6, 11, 12, 13, 9 ∅

28 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2, 6, 11, 12, 13, 9, 10 ∅

29 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2, 6, 11, 12, 13, 9, 10, 13 ∅

30 3, 1, 4, 7, 1, 5, 2, 1, 6, 4, 10, 8, 4,11, 10,12, 9, 8, 7, 5, 3, 2, 6, 11, 12, 13, 9, 10 13

CE= 13, 10, 9, 13, 12, 11, 6, 2, 3, 5, 7, 8, 9, 12, 10, 11, 4, 8, 10, 4, 6, 1, 2, 5, 1, 7, 4, 1, 3

Lật ngược các đỉnh trong CE ta nhận được đường đi Euler :

3-1- 4- 7- 1- 5- 2- 1- 6- 4- 10- 8- 4- 11- 10- 12- 9- 8- 7- 5- 3- 2- 6-11- 12-13-9-10-13

Trang 15

Câu 3

a) Trình bày thuật toán PRIM:

Thuật toán Prim:

Bước 1 (Khởi tạo):

Bước 2 (Lặp):

}

Bước 3 (Trả lại kết quả):

Return( T, D(T));

b) Kiểm nghiệm thuật toán:

e=(s,t)|

có độ dài

nhỏ nhất

Khởi tạo 2,3, 4, 5, 6, 7,8,9,10,11,12,13 1 T= ∅ ; D(T)=0 (1,6) 2, 3, 4, 5, 7,8,9,10,11,12,13 1, 6 T=T ∪ (1, 6);

D(T) = 0 + 1= 1 (1, 2) 3, 4, 5, 7,8,9,10,11,12,13 1,2, 6 T=T ∪ (1, 2);

D(T) = 1 + 2 = 3 (2, 3) 4, 5, 7,8,9,10,11,12,13 1, 2, 3, 6 T=T ∪ (2,3);

D(T) = 3 + 6 = 9 (3, 4) 5, 7,8,9,10, 11, 12,13 1,2,3,4, 6 T=T ∪ (3,4);

D(T) = 9 + 5 = 14 (4, 5) 7,8,9, 10, 11, 12,13 1,2,3,4, 5, 6 T=T ∪ (4,5);

D(T) = 14 + 1 = 15 (4,8) 7, 9, 10, 11, 12,13 1,2,3,4, 5, 6, 8 T=T ∪ (5,8);

D(T) = 15 + 5 = 20 (8,9) 7, 10, 11, 12,13 1,2,3,4, 5, 6, 8, 9 T=T ∪ (8,9);

D(T) = 20 + 3 = 23 (8,10) 7, 11, 12,13 1,2,3,4, 5, 6, 8, 9, 10 T=T ∪ (8,10);

D(T) = 23 + 3 = 26 (10,11) 7, 12,13 1,2,3,4, 5, 6, 8, 9, 10, 11 T=T ∪ (10,11);

D(T) = 26 + 3 = 29 (10, 12) 7, 13 1,2,3,4, 5, 6, 8, 9, 10, 11, 12 T=T ∪ (10, 12);

D(T) = 29 + 3 = 32 (11, 13) 7 1,2,3,4, 5, 6, 8, 9, 10, 11, 12, 13 T=T ∪ (12, 13);

D(T) = 32 + 2 = 34 (7, 8) ∅ 1,2,3,4, 5, 6, 7, 8, 9, 10, 11, 12, 13 T=T ∪ (7, 8);

D(T) = 34 + 5 = 39

V = φ : kết thúc bước lặp; D(T)=58

T = {(1,2), (1, 6), (2,3), (3,4), (4, 5), (4,8), (7,8), (8,9), (8,10), (10,11), (10, 12), (11, 13)}

Trang 16

D(T) = 39

c) Để tìm cây khung lớn nhất lớn nhất của đồ thị G, tại mỗi bước của thuật toán PRIM chọn cạnh có trọng số lớn nhất Kết quả như sau:

T= {(1, 5), (1, 13), (2, 3), (2, 5), (2, 6), (3, 11), (4, 7), (4, 8), (5, 7), (9, 12), (9, 13), (10, 13)}

D(T)= 83

Trang 17

Câu 4.

a) Trình bày thuật toán Dijkstra:

THUẬT TOÁN DIJKSTRA

BƯỚC KHỞI TẠO: s là đỉnh xuất phát

d[v] = A[s,v]; truoc[v] =s;

}

BƯỚC LẶP:

<Chọn u là đỉnh có d[u] nhỏ nhất>;

<Cố định nhãn của đỉnh u>; V = V\{u};

if (d[v]> d[u] +A[u,v]) {

d[v] = d[u] +A[u,v];

truoc[v] = u;

} }

}

BƯỚC TRẢ LẠI KẾT QUẢ: Return(d(s,t));

b) Kiểm nghiệm thuật toán:

1 <0,1> <4.1> <9,1> < ∞ ,1> < ∞ ,1> <3,1> < ∞ ,1> < ∞ ,1> <1,1> < ∞ ,1> < ∞ ,1> <5,1> < ∞ ,1> 1

2 - <4,1> <4,9> < ∞ ,1> < ∞ ,1> <5,9> <3,9> < ∞ ,1> - <5,9> <6,9> <5,1> < ∞ ,1> 9

3 - <4,91> <6,7 > <10,2 > <8,2> <5,9> - <7, 7> - <5,9> <6,9> <5,1> <5,2> 2

4 - - <6,2 > <6, 5 > <5,7> <5,9> - <7, 7> - <5,9> <6,9> <5,1> <5,2> 7

5 - - <6,2 > <6,5> - <5,9> - <7, 7> - <5,9> <6,9> <5,1> <5,2> 5

6 - - <6,2 > <6,5> - - - <6, 6> - <5,9> <6,9> <5,1> <5,2> 6

7 - - <6,2 > <6,5> - - - <6, 6> - - <6,9> <5,1> <5,2> 12

8 - - <6,2 > <6,5> - - - <6, 6> - - <6,9> - <5,2> 13

9 - - <6,2 > <6,5> - - - <6, 6> - - <6,9> - - 3

Đường đi ngắn nhất từ đỉnh 1 đến các đỉnh còn lại:

1->9->5->4 : độ dài 6

1->9->6->8 : độ dài 6

1->9->2->13 : độ dài 5

c) Tương tự câu b) có kết quả đường đi ngắn nhất từ đỉnh 3 đến đỉnh 4 là:

3->6->8->4: độ dài 4

Ngày đăng: 25/10/2018, 10:21

TỪ KHÓA LIÊN QUAN

w