ThiếT Kế Và đáNh Giá ThuậT ToáN

231
1 Thiết kế và đánh Thiết kế và đánh giá thuật toán giá thuật toán Cao học, khoa công nghệ thông Cao học, khoa công nghệ thông tin tin Đại học quốc gia Hà nội. Đại học quốc gia Hà nội. Phan Thị Hà Dương Phan Thị Hà Dương Viện Toán học. Viện Toán học. [email protected] [email protected]

Transcript of ThiếT Kế Và đáNh Giá ThuậT ToáN

Page 1: ThiếT Kế Và đáNh Giá ThuậT ToáN

11

Thiết kế và đánh Thiết kế và đánh giá thuật toángiá thuật toán

Cao học, khoa công nghệ thông Cao học, khoa công nghệ thông tintin

Đại học quốc gia Hà nội.Đại học quốc gia Hà nội.

Phan Thị Hà DươngPhan Thị Hà DươngViện Toán học. Viện Toán học.

[email protected]@gmail.com

Page 2: ThiếT Kế Và đáNh Giá ThuậT ToáN

22

Chương trìnhChương trình

Chương 1Chương 1: Giới thiệu về thuật toán: Giới thiệu về thuật toánChương 2Chương 2: Phân tích tính hiệu quả của : Phân tích tính hiệu quả của

thuật toán thuật toán Chương 3Chương 3: Phương pháp “tham lam”: Phương pháp “tham lam”Chương 4Chương 4: Phương pháp “chia để trị”: Phương pháp “chia để trị”Chương 5Chương 5: Phương pháp qui hoạch động: Phương pháp qui hoạch độngChương 6Chương 6: Thuật toán trên đồ thị: Thuật toán trên đồ thịChương 7Chương 7: Phương pháp xác suất: Phương pháp xác suấtChương 8Chương 8: Về độ phức tạp tính toán: Về độ phức tạp tính toán

Page 3: ThiếT Kế Và đáNh Giá ThuậT ToáN

33

Ví dụ: Chương 3: Phương Ví dụ: Chương 3: Phương pháp “tham lam”pháp “tham lam”

I.I. Giới thiệu chungGiới thiệu chungII.II. Thuật toán trên đồ thịThuật toán trên đồ thị

1)1) Cây bao trùm nhỏ nhấtCây bao trùm nhỏ nhất2)2) Đường đi ngắn nhấtĐường đi ngắn nhất

III.III. Thuật toán sắp xếp lịch làm việcThuật toán sắp xếp lịch làm việcIV.IV. Thuật toán “heurisitic”Thuật toán “heurisitic”

1)1) Tô màu đồ thịTô màu đồ thị2)2) Người đưa hàngNgười đưa hàng

Page 4: ThiếT Kế Và đáNh Giá ThuậT ToáN

44

Sách tham khảoSách tham khảo

Page 5: ThiếT Kế Và đáNh Giá ThuậT ToáN

55

Sách tham khảoSách tham khảo

2. 2. Algorithmique - conception et analyseAlgorithmique - conception et analyseG. Brassard and P.Bratley, Masson, Paris G. Brassard and P.Bratley, Masson, Paris

, 1987, 19873. 3. Data structure and algorithmsData structure and algorithmsA. Aho, J. Hopcroft and J. Ullman, A. Aho, J. Hopcroft and J. Ullman,

Addison Wesley Publishing CompanyAddison Wesley Publishing Company4. 4. Lý thuyết độ phức tạp tính toán.Lý thuyết độ phức tạp tính toán.Phan Đình Diệu.Phan Đình Diệu.

Page 6: ThiếT Kế Và đáNh Giá ThuậT ToáN

66

Chương 1: Giới thiệu về Chương 1: Giới thiệu về thuật toánthuật toán

I.I. Khái niệm thuật toánKhái niệm thuật toán

II.II. Một số ví dụMột số ví dụ

III.III. Đánh giá thuật toán trong trường Đánh giá thuật toán trong trường hợp xấu nhất và theo trung bìnhhợp xấu nhất và theo trung bình

IV.IV. Về thuật toán hiệu quảVề thuật toán hiệu quả

V.V. Một số bài toán cụ thểMột số bài toán cụ thể

VI.VI. Cấu trúc dữ liệu Cấu trúc dữ liệu

Page 7: ThiếT Kế Và đáNh Giá ThuậT ToáN

77

Khái niệm về thuật toánKhái niệm về thuật toán

Thuật toán:Thuật toán:

Dữ kiện vàoKết quả ra

Quá trình tính toánMột dãy các bước tính toán

Một dãy số Dãy số được

sắp xếpThuật toán sắp xếp

Page 8: ThiếT Kế Và đáNh Giá ThuậT ToáN

88

Một số từ khóaMột số từ khóaif (điều kiện) then {…} elseif (điều kiện) then {…} else

for (điều kiện) do {…}for (điều kiện) do {…}

while (điều kiện) do {…}while (điều kiện) do {…}

procedure (T, a, b) {…}procedure (T, a, b) {…}

function(A) {… return r; }function(A) {… return r; }

Page 9: ThiếT Kế Và đáNh Giá ThuậT ToáN

99

Sắp xếp chèn vàoSắp xếp chèn vào

55 22 4 6 1 3 4 6 1 3

66 5 5 44 6 1 3 6 1 3

22 4 5 4 5 66 1 3 1 3

22 4 54 56 6 11 3 3

33 2 4 5 6 2 4 5 6 33

1 2 3 4 5 61 2 3 4 5 6

Page 10: ThiếT Kế Và đáNh Giá ThuậT ToáN

1010

Thuật toán xếp chèn vàoThuật toán xếp chèn vào

Insertion-Sort (A) {Insertion-Sort (A) {forfor j = 2 j = 2 toto length (A) length (A) dodo { {

k = A[j]; // k = A[j]; // chèn A[j] vào dãy đã sắp A[1..j-1]chèn A[j] vào dãy đã sắp A[1..j-1]j = j-1;j = j-1;while while i > 0 and A[i] > k do {i > 0 and A[i] > k do {

A[i+1] = A[i];A[i+1] = A[i];I = i-1; }I = i-1; }

A{i+1} = k; }A{i+1} = k; }}}

Page 11: ThiếT Kế Và đáNh Giá ThuậT ToáN

1111

Thuật toán xen kẽ (merge Thuật toán xen kẽ (merge sort)sort)

Page 12: ThiếT Kế Và đáNh Giá ThuậT ToáN

1212

Sắp xếp xen kẽSắp xếp xen kẽ

Merge-Sort(A,p,r){Merge-Sort(A,p,r){

1.1. ifif p < r p < r thenthen { {

2.2. q = q = [(p+r-1)/2];[(p+r-1)/2];

3.3. Merge-Sort(A,p,q);Merge-Sort(A,p,q);

4.4. Merge-Sort(A,q+1,r);Merge-Sort(A,q+1,r);

5.5. Merge(A,p,q,r);Merge(A,p,q,r);

}}

}}

Page 13: ThiếT Kế Và đáNh Giá ThuậT ToáN

1313

Phân tích thuật toán Merge-Phân tích thuật toán Merge-SortSort

Đây là một thuật toán chia để trị.Đây là một thuật toán chia để trị.

ChiaChia:: bước 2: bước 2: θθ(1)(1)

TrịTrị:: bước 3 và 4:bước 3 và 4: 2T(n/2)2T(n/2)

Hợp lạiHợp lại:: bước 5:bước 5: θθ(n)(n)

Tổng kếtTổng kết::

T(n) = T(n) = θθ(1)(1) nếu n=1nếu n=1

2T(n/2) + 2T(n/2) + θθ(n)(n) nếu n >1nếu n >1

Page 14: ThiếT Kế Và đáNh Giá ThuậT ToáN

1414

Đánh giá thuật toánĐánh giá thuật toán

Giải quyết một bài toán. Giải quyết một bài toán.

Vấn đề:Vấn đề:

Có nhiều thuật toán. Chọn thuật toán Có nhiều thuật toán. Chọn thuật toán nào ?nào ?

Mô hình hóa Lập chương trìnhViết thuật toán

Page 15: ThiếT Kế Và đáNh Giá ThuậT ToáN

1515

Phương pháp đánh giáPhương pháp đánh giá

Phương pháp thực nghiệmPhương pháp thực nghiệm: Lập trình, và thử trên : Lập trình, và thử trên các ví dụ xem thuật toán nào nhanh.các ví dụ xem thuật toán nào nhanh.

Phương pháp lý thuyếtPhương pháp lý thuyết: Tính toán thời gian, bộ : Tính toán thời gian, bộ nhớ, … cần thiết của mỗi thuât toán dựa theo độ nhớ, … cần thiết của mỗi thuât toán dựa theo độ lớn của dữ liệu vào.lớn của dữ liệu vào.

Ưu điểmƯu điểm: - không phụ thuộc ngôn ngữ lập trình, : - không phụ thuộc ngôn ngữ lập trình, loại máy tínhloại máy tính

- Biết được tính hiệu quả của thuật toán - Biết được tính hiệu quả của thuật toán đối với các dữ liệu có kích thước lớn.đối với các dữ liệu có kích thước lớn.

Page 16: ThiếT Kế Và đáNh Giá ThuậT ToáN

1616

Đánh giá thuật toán trong Đánh giá thuật toán trong trường hợp xấu nhất và theo trường hợp xấu nhất và theo

trung bìnhtrung bìnhVí dụVí dụ: Sắp xếp lựa chọn: Sắp xếp lựa chọn

Select-SortSelect-Sort (A){ (A){forfor i=1 i=1 toto n-1 n-1 dodo { {

index = i; x = T[i];index = i; x = T[i];forfor j= i+1 j= i+1 toto n n dodo { {

ifif T[j] < x T[j] < x then then { index = j; x = T[j];}{ index = j; x = T[j];}}}T{index = T{i};T{index = T{i};T{i} = x;T{i} = x;

}}}}

Page 17: ThiếT Kế Và đáNh Giá ThuậT ToáN

1717

Ví dụVí dụ

Hãy chạy thuật toánHãy chạy thuật toán

Insertion-SortInsertion-Sort

Merge-SortMerge-Sort

Đối với các bảng sau :Đối với các bảng sau :

A = [3,1,4,1,5,9,2,6,5,3]A = [3,1,4,1,5,9,2,6,5,3]

B = [1,2,3,4,5,6]B = [1,2,3,4,5,6]

C = [6,5,4,3,2,1]C = [6,5,4,3,2,1]

Page 18: ThiếT Kế Và đáNh Giá ThuậT ToáN

1818

Thời gian chạy trong trường hợp xấu Thời gian chạy trong trường hợp xấu nhất: là cận trên đối với mọi dữ liệu nhất: là cận trên đối với mọi dữ liệu vào.vào.

Thời gian chạy trung bình: thường khó Thời gian chạy trung bình: thường khó phân tích và đánh giá hơn.phân tích và đánh giá hơn.

Page 19: ThiếT Kế Và đáNh Giá ThuậT ToáN

1919

Ví dụ: dãy FibonacciVí dụ: dãy Fibonacci

Dãy Fibonacci được định nghĩa:Dãy Fibonacci được định nghĩa:

F(0) = 0, F(1) = 1, vàF(0) = 0, F(1) = 1, và

F(n) = F(n-1) + F(n-2) với n > 1.F(n) = F(n-1) + F(n-2) với n > 1.

Tìm thuật toán tính số Fibonacci thứ n.Tìm thuật toán tính số Fibonacci thứ n.

Page 20: ThiếT Kế Và đáNh Giá ThuậT ToáN

2020

Thuật toán thứ nhất và thứ Thuật toán thứ nhất và thứ haihai

fontionfontion fib1(n){ fib1(n){ifif n < 2 n < 2 thenthen returnreturn n; n;else returnelse return f(n-1) + f(n-2); f(n-1) + f(n-2);

} }

fonctionfonction fib2(n){ fib2(n){a= 0; b = 1;a= 0; b = 1;forfor k = 1 k = 1 toto n n dodo {c=b; b = a+b; a=c;} {c=b; b = a+b; a=c;}return return b;b;

}}

Page 21: ThiếT Kế Và đáNh Giá ThuậT ToáN

2121

Thuật toán thứ baThuật toán thứ ba

fonctionfonction fib3(n){ fib3(n){i = 1; j = 0; k = 0; h = 1;i = 1; j = 0; k = 0; h = 1;whilewhile n>0 n>0 dodo { {

if if (n lẻ) (n lẻ) thenthen { t = jh; { t = jh; j = ih + jk +t;j = ih + jk +t; i = ik +t;}i = ik +t;}

t = h^2;t = h^2;h = 2kh+t;h = 2kh+t;k = k^2+t;k = k^2+t;n = n div 2;n = n div 2;

}}return return j;j;

}}

Page 22: ThiếT Kế Và đáNh Giá ThuậT ToáN

2222

Ví dụ về thời gian chạy Ví dụ về thời gian chạy (Pascal, CDC Cyber 835)(Pascal, CDC Cyber 835)

nn 1010 2020 3030 5050 100100 1000100000

1 0001 000

000000100010000000000000

fib1fib1 8 ms8 ms 1 s1 s 2 min2 min 21 21 daysdays

fib2fib2 1/6 1/6 msms

1/3 1/3 msms

½ ms½ ms ¾ ms¾ ms 3/2 3/2 msms

150 150 msms

15 s15 s 25 25 minmin

fib3fib3 1/3 1/3 msms

2/5 2/5 msms

½ ms½ ms ½ ms½ ms ½ ms½ ms 1 ms1 ms 3/2 3/2 msms

2 ms2 ms

Page 23: ThiếT Kế Và đáNh Giá ThuậT ToáN

2323

Cấu trúc dữ liệuCấu trúc dữ liệu

Dãy (list)Dãy (list)

typetype tablist = tablist = structurestructure{{value[1..lengthmax]: information elements;value[1..lengthmax]: information elements;counter: 0.. lengthmax;}counter: 0.. lengthmax;}

typetype elem = elem = structurestructure{{value: information element;value: information element;next: * elem;}next: * elem;}

6 7 314

Page 24: ThiếT Kế Và đáNh Giá ThuậT ToáN

2424

Đồ thịĐồ thị

typetype adjgraph = adjgraph = structurestructure { {value[1..n]: information elements;value[1..n]: information elements;adjacent[1..n, 1..n]: booleans;}adjacent[1..n, 1..n]: booleans;}

typetype listgraph = array[1..n] of listgraph = array[1..n] of structurestructure { {value: information element;value: information element;neighbours: list; }neighbours: list; }

12

43

Page 25: ThiếT Kế Và đáNh Giá ThuậT ToáN

2525

CâyCây

typetype treenode = treenode = structurestructure{{value: information element;value: information element;children: array[ ] of * treenodes;children: array[ ] of * treenodes;}}

typetype treenode = treenode = structurestructure{{value: information element;value: information element;first child: * treenode;first child: * treenode;next brother: * treenode;next brother: * treenode;}}

typetype binarytreenode = binarytreenode = structurestructure{{value: information element;value: information element;left child, right child: * binarytreenode;left child, right child: * binarytreenode;}}

a

b c

d e f

Page 26: ThiếT Kế Và đáNh Giá ThuậT ToáN

2626

Tập hợpTập hợp

set[1..N]: integer;set[1..N]: integer;

fonction find(x){ } fonction find(x){ } // tìm phần tử có giá trị x// tìm phần tử có giá trị x

procedure merge(a,b) // procedure merge(a,b) // tìm hợp của hai tập được tìm hợp của hai tập được sắpsắp

Page 27: ThiếT Kế Và đáNh Giá ThuậT ToáN

2727

Chương 2: Phân tích tính Chương 2: Phân tích tính hiệu quả của thuật toánhiệu quả của thuật toán

I.I. Các ký hiệu đánh giá tiệm cậnCác ký hiệu đánh giá tiệm cận

II.II. Phân tích thuật toánPhân tích thuật toán

III.III. Giải các phương trình đệ quiGiải các phương trình đệ qui

IV.IV. Một số ví dụMột số ví dụ

Page 28: ThiếT Kế Và đáNh Giá ThuậT ToáN

2828

Ký hiệu O:Ký hiệu O:

O(g(n)) = {f(n): tồn tại hằng số c và N O(g(n)) = {f(n): tồn tại hằng số c và N để:để:

0 ≤ f(n)< c g(n) với mọi n ≥ 0 ≤ f(n)< c g(n) với mọi n ≥ N}N}

Đây là một quan hệ thứ tự: phản xứng, Đây là một quan hệ thứ tự: phản xứng, “phi đối xứng” và bắc cầu.“phi đối xứng” và bắc cầu.

Page 29: ThiếT Kế Và đáNh Giá ThuậT ToáN

2929

Ký hiệu Ký hiệu ΩΩ

ΩΩ(g(n)) = {f(n): tồn tại hằng số c và N (g(n)) = {f(n): tồn tại hằng số c và N để:để:

f(n)≥ c g(n) với mọi n ≥ N}f(n)≥ c g(n) với mọi n ≥ N}

f(n) f(n) ЄЄ ΩΩ (g(n)) (g(n)) ≈ g(n) ≈ g(n) ЄЄ O(f(n)) O(f(n))

Đây là một quan hệ thứ tự: phản xứng, Đây là một quan hệ thứ tự: phản xứng, “phi đối xứng” và bắc cầu.“phi đối xứng” và bắc cầu.

Page 30: ThiếT Kế Và đáNh Giá ThuậT ToáN

3030

Ký hiệu Ký hiệu θθ

θθ(g(n))={f(n): tồn tại 2 hằng c, d và N để:(g(n))={f(n): tồn tại 2 hằng c, d và N để:

c g(n) ≤ f(n) ≤ d g(n) với mọi n ≥ N}c g(n) ≤ f(n) ≤ d g(n) với mọi n ≥ N}

f(n) = f(n) = θθ(g(n)) (g(n))

≈ ≈ f(n) = O(g(n)) và f(n) = f(n) = O(g(n)) và f(n) = ΩΩ(g(n))(g(n))

Đây là một quan hệ tương đương: phản xứng, Đây là một quan hệ tương đương: phản xứng, đối xứng và bắc cầu.đối xứng và bắc cầu.

Page 31: ThiếT Kế Và đáNh Giá ThuậT ToáN

3131

Ký hiệu Ký hiệu oo

oo(g(n)) = {f(n): với mọi hằng c >0, tồn (g(n)) = {f(n): với mọi hằng c >0, tồn tại tại N để: 0 ≤ f(n)< c g(n) với mọi n N để: 0 ≤ f(n)< c g(n) với mọi n ≥ N}≥ N}

Đây là một quan hệ thứ tự: phản xứng, Đây là một quan hệ thứ tự: phản xứng, “phi đối xứng” và bắc cầu.“phi đối xứng” và bắc cầu.

Page 32: ThiếT Kế Và đáNh Giá ThuậT ToáN

3232

Ký hiệu Ký hiệu ωω

ωω(g(n)) = {f(n): với mọi hằng c >0, tồn (g(n)) = {f(n): với mọi hằng c >0, tồn tại tại N để: 0 ≤ c g(n) <f(n) với mọi n ≥ N để: 0 ≤ c g(n) <f(n) với mọi n ≥ N}N}

f(n) f(n) ЄЄ ωω(g(n)) (g(n)) ≈ g(n) ≈ g(n) ЄЄ o(f(n)) o(f(n))

Đây là một quan hệ thứ tự: phản xứng, Đây là một quan hệ thứ tự: phản xứng, “phi đối xứng” và bắc cầu“phi đối xứng” và bắc cầu

Page 33: ThiếT Kế Và đáNh Giá ThuậT ToáN

3333

Nhận xétNhận xét

f(n) = O (g(n)) ≈ a ≤ bf(n) = O (g(n)) ≈ a ≤ b

f(n) = f(n) = ΩΩ (g(n)) ≈ a ≥ b (g(n)) ≈ a ≥ b

f(n) = f(n) = θθ (g(n)) ≈ a = b (g(n)) ≈ a = b

f(n) = o (g(n)) ≈ a < bf(n) = o (g(n)) ≈ a < b

f(n) = f(n) = ωω (g(n)) ≈ a > b (g(n)) ≈ a > b

Page 34: ThiếT Kế Và đáNh Giá ThuậT ToáN

3434

Sắp xếp các hàm sau theo quan hệ 0 Sắp xếp các hàm sau theo quan hệ 0

và và θθ

Page 35: ThiếT Kế Và đáNh Giá ThuậT ToáN

3535

Một số hàm cơ bảnMột số hàm cơ bản

1.1. n^b = o(a^n), với mọi a>1 và bn^b = o(a^n), với mọi a>1 và b

2.2. e^x = 1 + x + e^x = 1 + x + θθ(x^2), với |x| ≤ 1(x^2), với |x| ≤ 1

3.3. lg^b n = o(n^a), với mọi a > 0lg^b n = o(n^a), với mọi a > 0

4.4. n! = o(n^n)n! = o(n^n)

5.5. n! = n! = ωω(2^n)(2^n)

6.6. lg(n!)= lg(n!)= θθ(n lg n)(n lg n)

Page 36: ThiếT Kế Và đáNh Giá ThuậT ToáN

3636

Giải các phương trình đệ quiGiải các phương trình đệ qui

Ví dụ:Ví dụ:

T(n) = T(n) = θθ(1) (1) nếu nếu n= 1n= 1

2 T(n/2) + 2 T(n/2) + θθ(n)(n) nếu n >1nếu n >1

T(n) = T(n) = θθ(n lg n)(n lg n)

Page 37: ThiếT Kế Và đáNh Giá ThuậT ToáN

3737

Phương pháp truy hồiPhương pháp truy hồi

- Dự đoán kết quảDự đoán kết quả- Chứng minh bằng truy hồi (quy nạp)Chứng minh bằng truy hồi (quy nạp)

Ví dụ: Cho T(n) = 2 T(n/2) + n. Ta Ví dụ: Cho T(n) = 2 T(n/2) + n. Ta chứng minh truy hồi rằng T(n) = O(n chứng minh truy hồi rằng T(n) = O(n lg n).lg n).

Page 38: ThiếT Kế Và đáNh Giá ThuậT ToáN

3838

Đổi biếnĐổi biến

Ví dụ: Ví dụ:

T(n) = 2 T(T(n) = 2 T([[√n√n]) + lg n]) + lg n

Đặt m = lg n, ta có:Đặt m = lg n, ta có:

T(2^m) = 2 T(2^{m/2}) + mT(2^m) = 2 T(2^{m/2}) + m

Đặt S(m) = T(2^m), ta có: Đặt S(m) = T(2^m), ta có:

S(m)= 2 S(m/2) + mS(m)= 2 S(m/2) + m

T(n) = S(m) = O(m lg m) = O(lg n lg lg n)T(n) = S(m) = O(m lg m) = O(lg n lg lg n)

Page 39: ThiếT Kế Và đáNh Giá ThuậT ToáN

3939

Phương pháp tính dần từng Phương pháp tính dần từng bướcbước

Ví dụ T(n) = 3T(n/4)+nVí dụ T(n) = 3T(n/4)+n

T(n) = n+ 3 T(n/4)T(n) = n+ 3 T(n/4)

= n + 3(n/4 + 3T(n/16))= n + 3(n/4 + 3T(n/16))

= n + 3 n/4 + 3 (n/16 + = n + 3 n/4 + 3 (n/16 + 3T(n/64))3T(n/64))

≤ ≤ n + 3n/4 + 9n/16 + … n + 3n/4 + 9n/16 + …

Page 40: ThiếT Kế Và đáNh Giá ThuậT ToáN

4040

Ví dụ: Sắp xếp xen kẽVí dụ: Sắp xếp xen kẽ

Merge-Sort(A,p,r){Merge-Sort(A,p,r){

1.1. ifif p < r p < r thenthen { {

2.2. q = q = [(p+r-1)/2];[(p+r-1)/2];

3.3. Merge-Sort(A,p,q);Merge-Sort(A,p,q);

4.4. Merge-Sort(A,q+1,r);Merge-Sort(A,q+1,r);

5.5. Merge(A,p,q,r);Merge(A,p,q,r);

}}

}}

Page 41: ThiếT Kế Và đáNh Giá ThuậT ToáN

4141

Phân tích thuật toán Merge-Phân tích thuật toán Merge-SortSort

Đây là một thuật toán chia để trị.Đây là một thuật toán chia để trị.

ChiaChia:: bước 2: bước 2: θθ(1)(1)

TrịTrị:: bước 3 và 4:bước 3 và 4: 2T(n/2)2T(n/2)

Hợp lạiHợp lại:: bước 5:bước 5: θθ(n)(n)

Tổng kếtTổng kết::

T(n) = T(n) = θθ(1)(1) nếu n=1nếu n=1

2T(n/2) + 2T(n/2) + θθ(n)(n) nếu n >1nếu n >1

Page 42: ThiếT Kế Và đáNh Giá ThuậT ToáN

4242

Page 43: ThiếT Kế Và đáNh Giá ThuậT ToáN

4343

The Master TheoremThe Master Theorem

Cho a≥1 và b>1 hằng số, hàm số f(n) Cho a≥1 và b>1 hằng số, hàm số f(n) và T(n) được định nghĩa: và T(n) được định nghĩa:

T(n) = aT(n/b) + f(n),T(n) = aT(n/b) + f(n),

Khi đó định lý sẽ cho biết giới hạn tiệm Khi đó định lý sẽ cho biết giới hạn tiệm cận của T(n)cận của T(n)

Page 44: ThiếT Kế Và đáNh Giá ThuậT ToáN

4444

Chương 3: Phương pháp Chương 3: Phương pháp “tham lam”“tham lam”

I.I. Giới thiệu chungGiới thiệu chung

II.II. Thuật toán trên đồ thịThuật toán trên đồ thị1)1) Cây bao trùm nhỏ nhấtCây bao trùm nhỏ nhất

2)2) Đường đi ngắn nhấtĐường đi ngắn nhất

III.III. Thuật toán sắp xếp lịch làm việcThuật toán sắp xếp lịch làm việc

IV.IV. Thuật toán “heurisitique”Thuật toán “heurisitique”1)1) Tô màu đồ thịTô màu đồ thị

2)2) Người đưa hàngNgười đưa hàng

Page 45: ThiếT Kế Và đáNh Giá ThuậT ToáN

4545

Giới thiệu chung Giới thiệu chung (greedy algorithms)(greedy algorithms)

Các thuật toán tham lam chủ yếu để Các thuật toán tham lam chủ yếu để giải quyết các bài toán tối ưu. Ta có:giải quyết các bài toán tối ưu. Ta có:- Một tập các đối tượng- Một tập các đối tượng- Một dãy các đối tượng đã lựa chọn- Một dãy các đối tượng đã lựa chọn- Một hàm để xem một tập các đối tượng có lập - Một hàm để xem một tập các đối tượng có lập thành một thành một giải phápgiải pháp hay không (không nhất thiết hay không (không nhất thiết tối ưu)tối ưu)- Một hàm để xem một tập đối tượng có là - Một hàm để xem một tập đối tượng có là tiềm tiềm năngnăng hay không hay không- Một hàm để lựa chọn ứng viên có - Một hàm để lựa chọn ứng viên có triển vọngtriển vọng nhất nhất- Một hàm đích cho giá trị của một - Một hàm đích cho giá trị của một giải phápgiải pháp (để (để tối tối ưuưu hóa) hóa)

Page 46: ThiếT Kế Và đáNh Giá ThuậT ToáN

4646

Cách giải quyếtCách giải quyết

Tìm một tập các đối tượng lập thành Tìm một tập các đối tượng lập thành một giải pháp và tối ưu hóa hàm đích. một giải pháp và tối ưu hóa hàm đích. Từng bước một:Từng bước một:- Đầu tiên tập đối tượng là rỗng- Đầu tiên tập đối tượng là rỗng- Tại mỗi bước, ta cố thêm vào một đối tượng tốt - Tại mỗi bước, ta cố thêm vào một đối tượng tốt nhất còn lại (nhờ hàm chọn)nhất còn lại (nhờ hàm chọn)

+ Nếu tập mới không là tiềm năng, bỏ đối + Nếu tập mới không là tiềm năng, bỏ đối tượng này đi, chọn đối tượng kháctượng này đi, chọn đối tượng khác

+ Ngược lại, đối tượng mới này xếp vào cuối + Ngược lại, đối tượng mới này xếp vào cuối tậptập

+ Kiểm tra xem tập mới có là một giải pháp+ Kiểm tra xem tập mới có là một giải pháp

Page 47: ThiếT Kế Và đáNh Giá ThuậT ToáN

4747

Tính đúng đắnTính đúng đắn

Một thuật toán “tham lam” chạy đúng Một thuật toán “tham lam” chạy đúng nếu giải pháp được lựa chọn là tối ưu.nếu giải pháp được lựa chọn là tối ưu.

Page 48: ThiếT Kế Và đáNh Giá ThuậT ToáN

4848

Thuật toán sinhThuật toán sinh

Thuật_toán Tham_lam{Thuật_toán Tham_lam{// // vào: tập hợp C các đối tượngvào: tập hợp C các đối tượng// ra: tập S (giải pháp tối ưu)// ra: tập S (giải pháp tối ưu)

S = S = Ø;Ø;whilewhile(! (! solutionsolution(S) (S) andand C <> Ø) C <> Ø) do do {{

x = phần tử của C sao cho x = phần tử của C sao cho selectselect(x) max;(x) max;C = C \ {x};C = C \ {x};ifif realisablerealisable(S U {x}) (S U {x}) thenthen S = S U {x};} S = S U {x};}

ifif solutionsolution(S) (S) then returnthen return S; S; elseelse returnreturn “không có nghiệm”; “không có nghiệm”;

}}

Page 49: ThiếT Kế Và đáNh Giá ThuậT ToáN

4949

Cây bao trùm nhỏ nhấtCây bao trùm nhỏ nhất

Bài toánBài toán: Cho đồ thị vô hướng liên : Cho đồ thị vô hướng liên thông G=(V,E). Mỗi cạnh e thông G=(V,E). Mỗi cạnh e ЄЄ E có độ E có độ dài l(e). Tìm tập con T của E sao cho dài l(e). Tìm tập con T của E sao cho (V,T) vẫn liên thông và tổng (V,T) vẫn liên thông và tổng ΣΣ l(e) ( l(e) (e e ЄЄ E) là nhỏ nhất.E) là nhỏ nhất.

Vấn đềVấn đề: Chứng minh (V,T) là một cây.: Chứng minh (V,T) là một cây.

““Cây bao trùm nhỏ nhất” Cây bao trùm nhỏ nhất”

Page 50: ThiếT Kế Và đáNh Giá ThuậT ToáN

5050

Một số khái niệmMột số khái niệm

Một tập cạnh là:Một tập cạnh là:

-- một một giải phápgiải pháp nếu nó tạo một cây bao trùm nếu nó tạo một cây bao trùm- một một tiềm năngtiềm năng nếu nó không chứa xích nếu nó không chứa xích- một tập tiềm năng là một một tập tiềm năng là một triển vọngtriển vọng nếu có nếu có

thể thêm cạnh vào nó để đạt một thể thêm cạnh vào nó để đạt một giải pháp giải pháp tối ưutối ưu

Một cạnhMột cạnh “nối”“nối” một tập đỉnh nếu đúng một đỉnh một tập đỉnh nếu đúng một đỉnh của nó nằm trong tập đỉnh nàycủa nó nằm trong tập đỉnh này

Page 51: ThiếT Kế Và đáNh Giá ThuậT ToáN

5151

Mệnh đềMệnh đề: Cho đồ thị vô hướng liên thông : Cho đồ thị vô hướng liên thông G=(V,E). Mỗi cạnh e G=(V,E). Mỗi cạnh e ЄЄ E có độ dài l(e). E có độ dài l(e). Cho B là một tập con (thực) của V. Cho B là một tập con (thực) của V. Cho T là một tập cạnh triển vọng sao Cho T là một tập cạnh triển vọng sao cho không cạnh nào của T nối B.cho không cạnh nào của T nối B.Cho e là một cạnh có độ dài min của B.Cho e là một cạnh có độ dài min của B.

Ta có: T U {e} là một triển vọng.Ta có: T U {e} là một triển vọng.

Page 52: ThiếT Kế Và đáNh Giá ThuậT ToáN

5252

Thuật toán Kruskal (ý tưởng)Thuật toán Kruskal (ý tưởng)

- Lúc đầu T rỗngLúc đầu T rỗng- Tại mỗi thời điểm (V,T) là một hợp rời Tại mỗi thời điểm (V,T) là một hợp rời

các thành phần liên thông (tplt): các thành phần liên thông (tplt): trong mỗi tplt, các cạnh của T lập trong mỗi tplt, các cạnh của T lập thành một cây bao trùm nhỏ nhất.thành một cây bao trùm nhỏ nhất.

- Cuối cùng: chỉ còn một tplt, và T là Cuối cùng: chỉ còn một tplt, và T là cây bao trùm nhỏ nhất của đồ thị G.cây bao trùm nhỏ nhất của đồ thị G.

Page 53: ThiếT Kế Và đáNh Giá ThuậT ToáN

5353

- Xếp các cạnh của E theo thứ tự tăng Xếp các cạnh của E theo thứ tự tăng dầndần

- Nếu một cạnh nối hai tplt, thêm vào Nếu một cạnh nối hai tplt, thêm vào TT

- Nếu không, bỏ đi, xét cạnh tiếp theoNếu không, bỏ đi, xét cạnh tiếp theo

Page 54: ThiếT Kế Và đáNh Giá ThuậT ToáN

5454

Tính đúng đắnTính đúng đắn

Vấn đềVấn đề: chứng minh tính đúng đắn : chứng minh tính đúng đắn của thuật toán Kruskalcủa thuật toán Kruskal

Page 55: ThiếT Kế Và đáNh Giá ThuậT ToáN

5555

Ví dụVí dụ

1 2

3

4 5

6

7

12

46

4 56

3 8

47 3

Page 56: ThiếT Kế Và đáNh Giá ThuậT ToáN

5656

Thuật toán Kruskal Thuật toán Kruskal

MST-Kruskal(G,l){MST-Kruskal(G,l){1.1. Xếp E theo l tăng; n = # V; T = Xếp E theo l tăng; n = # V; T = Ø;Ø;2.2. Đặt n tplt, mỗi tplt chứa 1 phần tử của V;Đặt n tplt, mỗi tplt chứa 1 phần tử của V;3.3. dodo{{4.4. (u,v) cạnh độ dài min chưa xét đến;(u,v) cạnh độ dài min chưa xét đến;5.5. ifif setset(u)<> (u)<> setset(v) (v) thenthen{{6.6. T = T T = T U (u,v); U (u,v); unionunion((setset(u),(u),setset(v));(v));7.7. }}8.8. } } whilewhile(#T = n-1)(#T = n-1)9.9. returnreturn T; T;10.10. } }

Page 57: ThiếT Kế Và đáNh Giá ThuậT ToáN

5757

Phân tíchPhân tích

1.1. Đánh giá độ phức tạp tính toán của Đánh giá độ phức tạp tính toán của thuật toán Kruskalthuật toán Kruskal

2.2. Nếu đồ thị không liên thông, kết Nếu đồ thị không liên thông, kết quả sẽ thế nào ?quả sẽ thế nào ?

3.3. Một đồ thị có thể có nhiều cây bao Một đồ thị có thể có nhiều cây bao trùm nhỏ nhất. Cây nào được cho trùm nhỏ nhất. Cây nào được cho bởi thuật toán Kruskal ?bởi thuật toán Kruskal ?

Page 58: ThiếT Kế Và đáNh Giá ThuậT ToáN

5858

Thuật toán Prim (ý tưởng)Thuật toán Prim (ý tưởng)

- Lúc đầu T rỗng và cây B chứa một Lúc đầu T rỗng và cây B chứa một đỉnh bất kỳđỉnh bất kỳ

- Tại mỗi thời điểm, T là một cây bao Tại mỗi thời điểm, T là một cây bao trùm nhỏ nhất của B. Chọn một cạnh trùm nhỏ nhất của B. Chọn một cạnh (u,v) độ dài min sao cho u (u,v) độ dài min sao cho u ЄЄ V\B và v V\B và v ЄЄ B. Thêm u vào B và (u,v) vào T B. Thêm u vào B và (u,v) vào T

- Cuối cùng: B=V, và T là cây bao trùm Cuối cùng: B=V, và T là cây bao trùm nhỏ nhất của đồ thị G.nhỏ nhất của đồ thị G.

Page 59: ThiếT Kế Và đáNh Giá ThuậT ToáN

5959

Bài tậpBài tập

1.1. Chạy ví dụ t.t. Prim trong hình vẽ đã choChạy ví dụ t.t. Prim trong hình vẽ đã cho

2.2. Viết thuật toán PrimViết thuật toán Prim

3.3. Đánh giá độ phức tạp tính toán của t.t.Đánh giá độ phức tạp tính toán của t.t.

4.4. Chứng minh tính đúng đắn của t.t.Chứng minh tính đúng đắn của t.t.

5.5. Một đồ thị có thể có nhiều cây bao trùm Một đồ thị có thể có nhiều cây bao trùm nhỏ nhất. Cây nào được cho bởi thuật toán nhỏ nhất. Cây nào được cho bởi thuật toán Prim ?Prim ?

6.6. Nếu đồ thị không liên thông, kết quả sẽ Nếu đồ thị không liên thông, kết quả sẽ thế nào ?thế nào ?

Page 60: ThiếT Kế Và đáNh Giá ThuậT ToáN

6060

Đường đi ngắn nhấtĐường đi ngắn nhất

Bài toánBài toán: Cho đồ thị có hướng : Cho đồ thị có hướng G=(V,E). Mỗi cạnh e G=(V,E). Mỗi cạnh e ЄЄ E có độ dài E có độ dài l(e). Một đỉnh nguồn s. Tìm đường đi l(e). Một đỉnh nguồn s. Tìm đường đi ngắn nhất từ s đến các đỉnh khác của ngắn nhất từ s đến các đỉnh khác của G.G.

Page 61: ThiếT Kế Và đáNh Giá ThuậT ToáN

6161

Thuật toán Dijkstra (ý Thuật toán Dijkstra (ý tưởng)tưởng)

- Tập S gồm các đỉnh đã xác định Tập S gồm các đỉnh đã xác định đường ngắn nhất từ sđường ngắn nhất từ s

- Tập C gồm các đỉnh còn lạiTập C gồm các đỉnh còn lại- Lúc đầu S = {s}Lúc đầu S = {s}- Tại mỗi thời điểm, chọn trong C đỉnh Tại mỗi thời điểm, chọn trong C đỉnh

có khoảng cách từ s min, thêm vào Scó khoảng cách từ s min, thêm vào S- Cuối cùng S = VCuối cùng S = V

Page 62: ThiếT Kế Và đáNh Giá ThuậT ToáN

6262

Bổ đềBổ đề: (đường con của một đường : (đường con của một đường ngắn nhất cũng là đường ngắn nhất)ngắn nhất cũng là đường ngắn nhất)

Hệ quảHệ quả: Ta có thể xây dựng một cây : Ta có thể xây dựng một cây gốc s để đường duy nhất từ s đến gốc s để đường duy nhất từ s đến mỗi u là đường có khoảng cách minmỗi u là đường có khoảng cách min

Page 63: ThiếT Kế Và đáNh Giá ThuậT ToáN

6363

Khai triển ý tưởngKhai triển ý tưởng

- Bảng d: d[u]: khoảng cách min (tạm thời) Bảng d: d[u]: khoảng cách min (tạm thời) từ s đến utừ s đến u

- Bảng Adj: Adj[u] : các đỉnh liên hệ với uBảng Adj: Adj[u] : các đỉnh liên hệ với u- Bảng l: l[u,v]: độ dài cạnh (u,v) (nếu không Bảng l: l[u,v]: độ dài cạnh (u,v) (nếu không

có (u,v) thì l[u,v] = ∞có (u,v) thì l[u,v] = ∞- Bảng p: p[u] là “cha” của u trên đường từ s Bảng p: p[u] là “cha” của u trên đường từ s

đến uđến u- Kết quả là một cây gốc s, đường duy nhất Kết quả là một cây gốc s, đường duy nhất

từ s đến mỗi u là đường có khoảng cách từ s đến mỗi u là đường có khoảng cách minmin

Page 64: ThiếT Kế Và đáNh Giá ThuậT ToáN

6464

Thuật toán DijkstraThuật toán Dijkstra

Dijkstra(G,l,s){Dijkstra(G,l,s){1.1. S= {s}; C = V \ {s}; n= #V; d[s]=0;S= {s}; C = V \ {s}; n= #V; d[s]=0;2.2. forfor u u ЄЄ C C do do {d[u] = l[s,u]; p[u] = Null;}{d[u] = l[s,u]; p[u] = Null;}

3.3. whilewhile (C≠Ø) (C≠Ø) dodo { {4.4. chọn v chọn v ЄЄ C để d[v] min; C để d[v] min;5.5. C = C C = C \ {v}; S = S \ {v}; S = S U U {v};{v};6.6. forfor w w ЄЄ Adj[v] Adj[v] dodo { {7.7. if if d[w] > d[u]+l[u,v] d[w] > d[u]+l[u,v] thenthen { p[w]= v; { p[w]= v;8.8. d[w]= d[v]+l[v,w];}}d[w]= d[v]+l[v,w];}}

}}

Page 65: ThiếT Kế Và đáNh Giá ThuậT ToáN

6565

Ví dụ Ví dụ

1

5

2

4 3

1050

100

30

10

50

205

Page 66: ThiếT Kế Và đáNh Giá ThuậT ToáN

6666

Tính đúng đắn Tính đúng đắn

Chứng minh quy nạp rằng:Chứng minh quy nạp rằng:1.1. Nếu u Nếu u ЄЄ S: d[u] là khoảng cách min S: d[u] là khoảng cách min

từ s đến utừ s đến u2.2. Nếu Nếu u u ЄЄ C: d[u] là khoảng cách min C: d[u] là khoảng cách min

từ s đến u của các đường chỉ đi qua từ s đến u của các đường chỉ đi qua các đỉnh của Scác đỉnh của S

3.3. Cuối cùng S = V, d[u] là khoảng Cuối cùng S = V, d[u] là khoảng cách cần tìmcách cần tìm

Page 67: ThiếT Kế Và đáNh Giá ThuậT ToáN

6767

Phân tích thuật toánPhân tích thuật toán

Độ phức tạp: O(V^2)Độ phức tạp: O(V^2)

Nếu đồ thị ít cạnh: O(E lg V)Nếu đồ thị ít cạnh: O(E lg V)

Page 68: ThiếT Kế Và đáNh Giá ThuậT ToáN

6868

Sắp xếp lịch làm việcSắp xếp lịch làm việc

Bài toán 1Bài toán 1: : tối thiểu hóa thời gian chờ tối thiểu hóa thời gian chờ đợiđợi::

Một máy tính cần phục vụ khách Một máy tính cần phục vụ khách hàng.hàng.

Thời gian phục vụ khách hàng i la t[i]. Thời gian phục vụ khách hàng i la t[i].

Tìm cách xếp khách hàng để tối thiểu Tìm cách xếp khách hàng để tối thiểu hóa tổng thời gian chờ đợi.hóa tổng thời gian chờ đợi.

Page 69: ThiếT Kế Và đáNh Giá ThuậT ToáN

6969

Thuật toánThuật toán

Ý tưởngÝ tưởng: Sắp xếp theo trình tự t[i] tăng.: Sắp xếp theo trình tự t[i] tăng.

Vấn đềVấn đề: : 1.1. Chứng minh tính đúng đắn của thuật Chứng minh tính đúng đắn của thuật

toántoán2.2. Độ phức tạp của thuật toánĐộ phức tạp của thuật toán3.3. Nếu có s máy tính, thuật toán thay Nếu có s máy tính, thuật toán thay

đổi thế nào ?đổi thế nào ?

Page 70: ThiếT Kế Và đáNh Giá ThuậT ToáN

7070

Sắp xếp lịch làm việc có lợi Sắp xếp lịch làm việc có lợi nhuận nhuận

Bài toánBài toán: Cho một tập n việc phải : Cho một tập n việc phải làm, mỗi việc trong thời gian đơn vị. làm, mỗi việc trong thời gian đơn vị. Việc i sẽ đem lại lợi nhuận g[i] nếu Việc i sẽ đem lại lợi nhuận g[i] nếu được thực hiện trước hạn d[i].được thực hiện trước hạn d[i].

Tìm cách thực hiện các công việc để Tìm cách thực hiện các công việc để có lợi nhuận cao nhấtcó lợi nhuận cao nhất

Page 71: ThiếT Kế Và đáNh Giá ThuậT ToáN

7171

Ví dụVí dụ

Dữ kiệnDữ kiện i i 11 22 33 44

g[i]g[i] 5050 1010 1515 3030

d[i]d[i] 22 11 22 11

Các khả năngCác khả năng

Công việcCông việc 1,31,3 2,12,1 2,32,3 3,13,1 4,14,1 4,34,3

Lợi nhuậnLợi nhuận 6565 6060 2525 6565 8080 4545

Page 72: ThiếT Kế Và đáNh Giá ThuậT ToáN

7272

Ý tưởng thuật toánÝ tưởng thuật toán

Một tập hợp công việc là Một tập hợp công việc là tiềm năngtiềm năng nếu nếu có một dãy (tiềm năng) thực hiện mọi có một dãy (tiềm năng) thực hiện mọi công việc của tập này trước thời hạn.công việc của tập này trước thời hạn.

Thuật toánThuật toán: Từng bước một, thêm vào : Từng bước một, thêm vào tập công việc một công việc i chưa tập công việc một công việc i chưa được xét có g[i] max và tập mới vẫn là được xét có g[i] max và tập mới vẫn là tiềm năng.tiềm năng.

Page 73: ThiếT Kế Và đáNh Giá ThuậT ToáN

7373

Chạy thuật toán trên ví dụChạy thuật toán trên ví dụ

1.1. Chọn việc 1. Tập {1} là tiềm năngChọn việc 1. Tập {1} là tiềm năng2.2. Chọn việc 4. Tập {1, 4} là tiềm năngChọn việc 4. Tập {1, 4} là tiềm năng3.3. Chọn việc 3. Tập {1, 4, 3} không là Chọn việc 3. Tập {1, 4, 3} không là

tiềm năng. Bỏ việc 3 đitiềm năng. Bỏ việc 3 đi4.4. Chọn việc 2. Tập {1, 4, 2} không là Chọn việc 2. Tập {1, 4, 2} không là

tiềm năng. Bỏ việc 2 đitiềm năng. Bỏ việc 2 đi5.5. Kết quả tập {1, 4} được chọn. Thực Kết quả tập {1, 4} được chọn. Thực

hiện theo thứ tự 4, 1hiện theo thứ tự 4, 1

Page 74: ThiếT Kế Và đáNh Giá ThuậT ToáN

7474

Xác định tập tiềm năngXác định tập tiềm năng

Bổ đềBổ đề: Cho J là một tập công việc và : Cho J là một tập công việc và cho p= {s1,s2,…,sk} là một hoán vị cho p= {s1,s2,…,sk} là một hoán vị của các việc đó sao cho d[s1]≤d[s2] của các việc đó sao cho d[s1]≤d[s2] ≤… ≤d[sk].≤… ≤d[sk].

Tập J là tiềm năng ≈ dãy p là tiềm Tập J là tiềm năng ≈ dãy p là tiềm năng.năng.

Page 75: ThiếT Kế Và đáNh Giá ThuậT ToáN

7575

Tính đúng đắn của thuật Tính đúng đắn của thuật toántoán

Cho I là tập nhận được từ thuật toánCho I là tập nhận được từ thuật toán

Cho J là một tập tối ưu.Cho J là một tập tối ưu.

Chứng minh lợi nhuận của I và của J Chứng minh lợi nhuận của I và của J bằng nhau.bằng nhau.

Page 76: ThiếT Kế Và đáNh Giá ThuậT ToáN

7676

Quy ướcQuy ước

Ký hiệu:Ký hiệu:

n việc được xếp thứ tự 1,2,…,n để g n việc được xếp thứ tự 1,2,…,n để g giảmgiảm

Tập việc là một bảng jTập việc là một bảng j

n>0, d[i]>0n>0, d[i]>0

Biến chặn 0: d[0]=0; j[0]=0Biến chặn 0: d[0]=0; j[0]=0

Page 77: ThiếT Kế Và đáNh Giá ThuậT ToáN

7777

Thuật toánThuật toán

Săp_xếp(d)Săp_xếp(d){{d[0]=0; j[0]=0;d[0]=0; j[0]=0;j[1]=1; k=1;j[1]=1; k=1;for i=2 to n do{for i=2 to n do{ r=k;r=k;

while d[j[r]]>max(d[i],r) do r=r-1;while d[j[r]]>max(d[i],r) do r=r-1;if d[j[r]]≤d[i] and d[i]>r then {if d[j[r]]≤d[i] and d[i]>r then {

for (l=k,r+1,-1) do j[l+1]=j[l];for (l=k,r+1,-1) do j[l+1]=j[l];j[r+1]=i;j[r+1]=i;k=k+1;}}k=k+1;}}

return j;return j;}}

Page 78: ThiếT Kế Và đáNh Giá ThuậT ToáN

7878

Phân tích thuật toánPhân tích thuật toán

1.1. Kiểm tra thuật toánKiểm tra thuật toán

2.2. Tính độ phức tạp của thuật toánTính độ phức tạp của thuật toán

3.3. Cải tiến cách kiểm tra tập tiềm Cải tiến cách kiểm tra tập tiềm năng. Viết thuật toán mới với độ năng. Viết thuật toán mới với độ phức tạp O(n lg n)phức tạp O(n lg n)

Page 79: ThiếT Kế Và đáNh Giá ThuậT ToáN

7979

Thuật toán định hướngThuật toán định hướng

Với một số bài toán tối ưu, thuật toán Với một số bài toán tối ưu, thuật toán tìm nghiệm chính xác có độ phức tạp tìm nghiệm chính xác có độ phức tạp rất lớn.rất lớn.

Ta sử dụng các thuật toán đơn giản, tìm Ta sử dụng các thuật toán đơn giản, tìm nghiệm xấp xỉ.nghiệm xấp xỉ.

(chú ý rằng trong 1 số trường hợp, t.t.x.x (chú ý rằng trong 1 số trường hợp, t.t.x.x không cho kết quả tối ưu)không cho kết quả tối ưu)

Page 80: ThiếT Kế Và đáNh Giá ThuậT ToáN

8080

Tô màu đồ thịTô màu đồ thị

Bài toánBài toán: Cho một đồ thị vô hướng : Cho một đồ thị vô hướng G=(V,E). Tô màu G là tô màu các đỉnh G=(V,E). Tô màu G là tô màu các đỉnh sao cho hai đỉnh liên thuộc không cùng sao cho hai đỉnh liên thuộc không cùng màu.màu.Tìm cách tô màu sử dụng ít màu nhất.Tìm cách tô màu sử dụng ít màu nhất.

Kết quả đã biếtKết quả đã biết: các thuật oán tối ưu : các thuật oán tối ưu đã biết đều có độ phức tạp là hàm mũ.đã biết đều có độ phức tạp là hàm mũ.

Mục đíchMục đích: Tìm thuật toán xấp xỉ.: Tìm thuật toán xấp xỉ.

Page 81: ThiếT Kế Và đáNh Giá ThuậT ToáN

8181

Thuật toán xấp xỉThuật toán xấp xỉ

Thuật toán: Thuật toán:

1.1. chọn 1 màu và 1 đỉnh bất kì, tô màu chọn 1 màu và 1 đỉnh bất kì, tô màu đỉnh đó.đỉnh đó.

2.2. xét các đỉnh còn lại, đỉnh nào tô xét các đỉnh còn lại, đỉnh nào tô được màu vừa chọn thì tôđược màu vừa chọn thì tô

3.3. nếu còn lại một số đỉnh, quay lại nếu còn lại một số đỉnh, quay lại bước 1bước 1

Page 82: ThiếT Kế Và đáNh Giá ThuậT ToáN

8282

Đánh giáĐánh giá

Cho đồ thị G, p là một hoán vị các đỉnh của Cho đồ thị G, p là một hoán vị các đỉnh của G, c(p) là số màu nhận được bởi t.t.x.x, G, c(p) là số màu nhận được bởi t.t.x.x, c là số màu tối ưu. Ta cóc là số màu tối ưu. Ta có

1.1. Tồn tại một hoán vị p để c(p)=cTồn tại một hoán vị p để c(p)=c2.2. Với mọi a>0, tồn tị G, p để c/c(p) < aVới mọi a>0, tồn tị G, p để c/c(p) < a

Như vậy t.t.x.x có thể đạt tối ưu, và cũng có Như vậy t.t.x.x có thể đạt tối ưu, và cũng có thể “xấu” tùy ý.thể “xấu” tùy ý.

Page 83: ThiếT Kế Và đáNh Giá ThuậT ToáN

8383

Người đưa hàngNgười đưa hàng

Bài toánBài toán: Cho một đồ thị có hướng, : Cho một đồ thị có hướng, các cạnh có độ dài. Tìm một chu các cạnh có độ dài. Tìm một chu trình ngắn nhất bắt đầu và kết thúc trình ngắn nhất bắt đầu và kết thúc tại một đỉnh, và đi qua mỗi đỉnh còn tại một đỉnh, và đi qua mỗi đỉnh còn lại đúng một lần.lại đúng một lần.

G=(V,E), V={1,2,..,n}, L[i,j]: độ dài G=(V,E), V={1,2,..,n}, L[i,j]: độ dài cạnhcạnh

Page 84: ThiếT Kế Và đáNh Giá ThuậT ToáN

8484

Thuật toán xấp xỉThuật toán xấp xỉ

Ở mỗi bước, chọn một cạnh ngắn nhất Ở mỗi bước, chọn một cạnh ngắn nhất chưa được xét thỏa mãn:chưa được xét thỏa mãn: Không tạo nên một chu trình với các Không tạo nên một chu trình với các

cạnh đã chọn (trừ trường hợp cạnh cuối cạnh đã chọn (trừ trường hợp cạnh cuối cùng)cùng)

Không là cạnh thứ 3 liên hệ với cùng Không là cạnh thứ 3 liên hệ với cùng một đỉnh.một đỉnh.

Page 85: ThiếT Kế Và đáNh Giá ThuậT ToáN

8585

Ví dụVí dụ

đến j= 2 3 4 5 6đến j= 2 3 4 5 6Từ i= 1 Từ i= 1 3 10 11 7 25 3 10 11 7 25

2 6 12 8 262 6 12 8 26 3 9 4 203 9 4 20 4 5 154 5 15 5 185 18

Các cạnh được chọn là: 12, 35, 45, 23, 46, 16, tạo Các cạnh được chọn là: 12, 35, 45, 23, 46, 16, tạo chu trình (1,2,3,5,4,6,1), độ dài 58.chu trình (1,2,3,5,4,6,1), độ dài 58.

Kết quả này không tối ưu (56 là tối ưu)Kết quả này không tối ưu (56 là tối ưu)

Page 86: ThiếT Kế Và đáNh Giá ThuậT ToáN

8686

Chương 4: Phương pháp Chương 4: Phương pháp “chia để trị”“chia để trị”

I.I. Giới thiệu chungGiới thiệu chung

II.II. Xác định ngưỡngXác định ngưỡng

III.III. Phương pháp “phân đôi”Phương pháp “phân đôi”

IV.IV. Sắp xếp “xen kẽ”. Sắp xếp nhanh Sắp xếp “xen kẽ”. Sắp xếp nhanh

V.V. Số học các số nguyên lớnSố học các số nguyên lớn

VI.VI. Nhân ma trậnNhân ma trận

VII.VII. Giới thiệu về mật mãGiới thiệu về mật mã

Page 87: ThiếT Kế Và đáNh Giá ThuậT ToáN

8787

Giới thiệu chungGiới thiệu chung(divide and conquer (divide and conquer

algorithms)algorithms)Ý tưởngÝ tưởng: để giải quyết một bài toán, : để giải quyết một bài toán, 1.1. chia ra làm nhiều phần nhỏ hơn, chia ra làm nhiều phần nhỏ hơn, 2.2. giải quyết từng phần độc lập, giải quyết từng phần độc lập, 3.3. sau đó từ các kết quả này, xây dựng sau đó từ các kết quả này, xây dựng

kết quả của bài toán ban đầu.kết quả của bài toán ban đầu.

Viêc giải quyết các phần nhỏ hơn này Viêc giải quyết các phần nhỏ hơn này có thể thực hiên một cách đệ qui.có thể thực hiên một cách đệ qui.

Page 88: ThiếT Kế Và đáNh Giá ThuậT ToáN

8888

Thuật toán sinhThuật toán sinh

Thuật_toán DAC(x){Thuật_toán DAC(x){//t.t. này cho kết quả y ứng với đầu vào x//t.t. này cho kết quả y ứng với đầu vào xifif (x đủ nhỏ) (x đủ nhỏ) thenthen returnreturn base(x); base(x);chia x thành x_1, x_2, …, x_k;chia x thành x_1, x_2, …, x_k;forfor (i=1 (i=1 toto k) k) dodo y_i = DAC(x_i); y_i = DAC(x_i);hợp các y_i lại để tìm ra y;hợp các y_i lại để tìm ra y;returnreturn y; y;

} }

Page 89: ThiếT Kế Và đáNh Giá ThuậT ToáN

8989

Bài toán tìm kiếmBài toán tìm kiếm

Bài toánBài toán: Cho bảng T[1..n] các số được xếp : Cho bảng T[1..n] các số được xếp tăng dần. Cho số x. Tìm phần tử trong T có tăng dần. Cho số x. Tìm phần tử trong T có giá trị xgiá trị x

Thuật toán đơn giảnThuật toán đơn giản: :

whilewhile (T[i]≤x) (T[i]≤x) do ifdo if (T[i]=x) (T[i]=x) thenthen returnreturn i; i;

elseelse i=i+1; i=i+1;

Độ phức tạpĐộ phức tạp: O(n): O(n)

Page 90: ThiếT Kế Và đáNh Giá ThuậT ToáN

9090

Phương pháp “phân đôi”Phương pháp “phân đôi”

funtion dictofuntion dicto (T[i..j],x){ (T[i..j],x){if if (i=j) (i=j) thenthen { { ifif (T[i]=x) (T[i]=x) then returnthen return i; i;

else returnelse return “không có”; “không có”;elseelse { k=(i+j+1)/2; { k=(i+j+1)/2;

ifif (x < T[k]) (x < T[k]) then then returnreturn dictodicto(T[i..k-1],x);(T[i..k-1],x);

else returnelse return dictodicto(T[k..j],x);(T[k..j],x); }}}}

Độ phức tạp : ?Độ phức tạp : ?

Page 91: ThiếT Kế Và đáNh Giá ThuậT ToáN

9191

Sắp xếp xen kẽ (Merge sort)Sắp xếp xen kẽ (Merge sort)

Ý tưởng:Ý tưởng:Để xếp bảng T:Để xếp bảng T:

1.1. Chia T thành 2 bảng độ dài bằng nhauChia T thành 2 bảng độ dài bằng nhau2.2. Sắp xếp mỗi bảng con nàySắp xếp mỗi bảng con này3.3. Từ hai bảng con đã sắp, xếp xen kẽ lại để Từ hai bảng con đã sắp, xếp xen kẽ lại để

được bảng T sắp xếpđược bảng T sắp xếp

Chú ýChú ý: bước 2 được thực hiện đệ qui : bước 2 được thực hiện đệ qui

Page 92: ThiếT Kế Và đáNh Giá ThuậT ToáN

9292

Thuật toán Merge-sortThuật toán Merge-sort

Merge-Sort(A,p,r){Merge-Sort(A,p,r){

1.1. ifif p < r p < r thenthen { {

2.2. q = q = [(p+r-1)/2];[(p+r-1)/2];

3.3. Merge-Sort(A,p,q);Merge-Sort(A,p,q);

4.4. Merge-Sort(A,q+1,r);Merge-Sort(A,q+1,r);

5.5. Merge(A,p,q,r);Merge(A,p,q,r);

}}

}}

Page 93: ThiếT Kế Và đáNh Giá ThuậT ToáN

9393

Phân tích thuật toánPhân tích thuật toán

Đây là một thuật toán chia để trị.Đây là một thuật toán chia để trị.

ChiaChia:: bước 2: bước 2: θθ(1)(1)

TrịTrị:: bước 3 và 4:bước 3 và 4: 2T(n/2)2T(n/2)

Hợp lạiHợp lại:: bước 5:bước 5: θθ(n)(n)

Tổng kếtTổng kết::

T(n) = T(n) = θθ(1)(1) nếu n=1nếu n=1

2T(n/2) + 2T(n/2) + θθ(n)(n) nếu n >1nếu n >1

Page 94: ThiếT Kế Và đáNh Giá ThuậT ToáN

9494

Sắp xếp nhanh (quicksort)Sắp xếp nhanh (quicksort)

ChiaChia: Bảng T[p..r] được chia thành 2 : Bảng T[p..r] được chia thành 2 phần T[p..q] và T[q+1..r] sao cho phần T[p..q] và T[q+1..r] sao cho mọi phần tử trong bảng 1 nhỏ hơn mọi phần tử trong bảng 1 nhỏ hơn mọi phần tử bảng 2mọi phần tử bảng 2

TrịTrị:: Mỗi bảng con được sắp xếp đệ Mỗi bảng con được sắp xếp đệ quiqui

HợpHợp: Vì mỗi bảng đã đúng vị trí. Kết : Vì mỗi bảng đã đúng vị trí. Kết thúc.thúc.

Page 95: ThiếT Kế Và đáNh Giá ThuậT ToáN

9595

Thuật toán quicksortThuật toán quicksort

QuicksortQuicksort(A,p,r){(A,p,r){1.1. if (p<r) then {if (p<r) then {2.2. q=Partition(A,p,r);q=Partition(A,p,r);3.3. Quicksort(A,p,q);Quicksort(A,p,q);4.4. Quicksort(A,q+1,r);Quicksort(A,q+1,r);

}}}}

Page 96: ThiếT Kế Và đáNh Giá ThuậT ToáN

9696

Chia đôi bảng (Partition)Chia đôi bảng (Partition)

Ví dụ:Ví dụ:

5 3 2 6 4 1 3 75 3 2 6 4 1 3 7

55 3 2 6 4 1 3 2 6 4 1 33 7 7

33 3 2 6 4 1 3 2 6 4 1 55 7 7

3 3 2 3 3 2 66 4 4 11 5 7 5 7

3 3 2 1 3 3 2 1 44 66 5 7 5 7

Page 97: ThiếT Kế Và đáNh Giá ThuậT ToáN

9797

PartitionPartition

PartitionPartition(A,p,r){(A,p,r){1.1. x = A[p];x = A[p];2.2. i = p-1; j = r+1;i = p-1; j = r+1;3.3. whilewhile (i<j) (i<j) dodo { {4.4. repeatrepeat j = j-1 j = j-1 until until A[j] ≤ x;A[j] ≤ x;5.5. repeat repeat i = i+1 i = i+1 untiluntil A[i] ≥ x; A[i] ≥ x;6.6. ifif (i<j) (i<j) thenthen exchange (A[i], A[j]); exchange (A[i], A[j]);7.7. else returnelse return j; j;8.8. }}} }

Page 98: ThiếT Kế Và đáNh Giá ThuậT ToáN

9898

Phân tích thuật toánPhân tích thuật toán

1.1. Partition(A,p,r): O(r-p)Partition(A,p,r): O(r-p)

2.2. Trường hợp xấu nhấtTrường hợp xấu nhất: mỗi lần chia bảng ta : mỗi lần chia bảng ta được 1 bảng 1 phần tử, và một bảng tất cả phần được 1 bảng 1 phần tử, và một bảng tất cả phần tử còn lại: T(n) = T(n-1) + tử còn lại: T(n) = T(n-1) + θθ(n).(n). Như vậy: Như vậy: T(n) = T(n) = θθ(n^2)(n^2)

3.3. Trường hợp tốt nhấtTrường hợp tốt nhất: bảng luôn phân đôi đều:: bảng luôn phân đôi đều:T(n) = 2 T(n/2) + T(n) = 2 T(n/2) + θθ(n). Như vậy: T(n) = (n). Như vậy: T(n) = θθ(n lg n)(n lg n)

Câu hỏiCâu hỏi: Cho ví dụ về trường hợp xấu nhất, tốt nhất.: Cho ví dụ về trường hợp xấu nhất, tốt nhất.

Page 99: ThiếT Kế Và đáNh Giá ThuậT ToáN

9999

Độ phức tạp trung bìnhĐộ phức tạp trung bình

Page 100: ThiếT Kế Và đáNh Giá ThuậT ToáN

100100

Số học các số nguyên lớnSố học các số nguyên lớn

Phép nhân hai số nguyên cực lớn:Phép nhân hai số nguyên cực lớn:

Bài toán: Cho u và v là hai số nguyên Bài toán: Cho u và v là hai số nguyên lớn, giả sử mỗi số biểu diễn bởi n lớn, giả sử mỗi số biểu diễn bởi n chữ số.chữ số.

Tìm thuật toán nhân u và v hiệu quả.Tìm thuật toán nhân u và v hiệu quả.

Page 101: ThiếT Kế Và đáNh Giá ThuậT ToáN

101101

Phân tích vấn đềPhân tích vấn đề

a b

c d

n

n

u

v

u v = 10^{2s} ac + 10 ^s (ad+bc) + bd (s = n/2)

Page 102: ThiếT Kế Và đáNh Giá ThuậT ToáN

102102

Phân tích vấn đề (tiếp)Phân tích vấn đề (tiếp)

Nhận xét:Nhận xét:

r = (a+b)(c+d) = ac+(ad+bc)+bdr = (a+b)(c+d) = ac+(ad+bc)+bd

Thay vì tính 4 phép nhân ac, bd, ad, Thay vì tính 4 phép nhân ac, bd, ad, bc, bc,

Ta tính ac, bd, và rTa tính ac, bd, và r

Page 103: ThiếT Kế Và đáNh Giá ThuậT ToáN

103103

Thuật toán nhânThuật toán nhân

MultMult(u,v){(u,v){1.1. n= min(size(u), size(v));n= min(size(u), size(v));2.2. ifif (n bé) (n bé) then returnthen return uv; uv;3.3. elseelse { s = n/2; { s = n/2;4.4. a= u div (10^s), b= u mod 10^s;a= u div (10^s), b= u mod 10^s;5.5. c= v div (10^s), d= v mod 10^s;c= v div (10^s), d= v mod 10^s;6.6. r= Mult(a+b,c+d);r= Mult(a+b,c+d);7.7. p=Mult(a,c); q= Mult(b,d);p=Mult(a,c); q= Mult(b,d);8.8. t = r-p-q;t = r-p-q;9.9. returnreturn(p*10^{2s} + t*10^s+q);(p*10^{2s} + t*10^s+q);10.10. }}}}

Page 104: ThiếT Kế Và đáNh Giá ThuậT ToáN

104104

Độ phức tạp thuật toánĐộ phức tạp thuật toán

T(n) = 3 T(n/2)+ T(n) = 3 T(n/2)+ θθ(n)(n)T(n) = T(n) = θθ(n ^{lg 3}) ≈ (n ^{lg 3}) ≈ θθ(n^{1,59})(n^{1,59})

Bài tậpBài tập: Thay đổi thuật toán để làm : Thay đổi thuật toán để làm việc với các biểu diễn nhị phân và các việc với các biểu diễn nhị phân và các phép toán trong biểu diễn nhị phânphép toán trong biểu diễn nhị phân

Page 105: ThiếT Kế Và đáNh Giá ThuậT ToáN

105105

Nhân hai ma trậnNhân hai ma trận

Bài toán: Cho 2 ma trận A, và B, kích Bài toán: Cho 2 ma trận A, và B, kích cỡ n*n. Tìm ma trận tích C = A*B.cỡ n*n. Tìm ma trận tích C = A*B.

Thuật toán đơn giản: T(n) = Thuật toán đơn giản: T(n) = θθ(n^3)(n^3)

Page 106: ThiếT Kế Và đáNh Giá ThuậT ToáN

106106

Thuật toán StrassenThuật toán Strassen

Ý tưởng:Ý tưởng:

A = A = a1 a2

a3 a4

b1 b2

b3 b4

B =

m2+m3

m1+m2+m4+m5m1+m2+m4-m7

m1+m2+m5+m6

A*B =

Page 107: ThiếT Kế Và đáNh Giá ThuậT ToáN

107107

Tính m_iTính m_i

m1 = (a3+a4-a1)(b4-b2+b1)m1 = (a3+a4-a1)(b4-b2+b1)

m2 = a1 *b1m2 = a1 *b1

m3 = a2* b3m3 = a2* b3

m4= (a1-a3)(b4-b2)m4= (a1-a3)(b4-b2)

m5= (a3+a4)(b2-b1)m5= (a3+a4)(b2-b1)

m6 = (a2-a3+a1-a4)*b4m6 = (a2-a3+a1-a4)*b4

m7 = a4*(b1+b4-b2-b3)m7 = a4*(b1+b4-b2-b3)

Page 108: ThiếT Kế Và đáNh Giá ThuậT ToáN

108108

Độ phức tạp tính toánĐộ phức tạp tính toán

T(n) = 7 T(n/2) + T(n) = 7 T(n/2) + θθ(n^2) (n^2)

≈ ≈ θθ(n^{2,81}) (n^{2,81})

Page 109: ThiếT Kế Và đáNh Giá ThuậT ToáN

109109

Giới thiệu về mật mãGiới thiệu về mật mã

Vấn đềVấn đề: A và B muốn trao đổi thông tin sao cho C : A và B muốn trao đổi thông tin sao cho C đọc được nhưng không hiểu được.đọc được nhưng không hiểu được.

Giải quyết:Giải quyết: A, B chọn số nguyên tố lớn p và số g, 2 ≤ g ≤ p-1.A, B chọn số nguyên tố lớn p và số g, 2 ≤ g ≤ p-1.A chọn số A, B chọn số B ≤ p. A gửi số a, B gửi số b. A chọn số A, B chọn số B ≤ p. A gửi số a, B gửi số b. C biết đươc p,g,a,b. Nhưng không biết x.C biết đươc p,g,a,b. Nhưng không biết x.

A: a= g^A mod p B: g^b mod p

A: x= b^A mod p B: y = a^B mod p

a

b

=

Page 110: ThiếT Kế Và đáNh Giá ThuậT ToáN

110110

Thuật toán logarithm rời rạcThuật toán logarithm rời rạc

Muốn tìm x, C phải tìm A (hoặc B).Muốn tìm x, C phải tìm A (hoặc B).

Muốn tìm A, biết a, C phải tính logarithmMuốn tìm A, biết a, C phải tính logarithm

logDlogD(g,a,p){(g,a,p){

A=0; x=1;A=0; x=1;

dodo { A=A+1; x = xg;} { A=A+1; x = xg;}

while while ((a= x mod p) or (A=p))((a= x mod p) or (A=p))

returnreturn A; A;

}}

Page 111: ThiếT Kế Và đáNh Giá ThuậT ToáN

111111

Phân tích thuật toánPhân tích thuật toán

Trung bình: logD có p/2 vòng lặp while.Trung bình: logD có p/2 vòng lặp while.

Nếu p rất lớn (vài chục chữ số) thì t.t. Nếu p rất lớn (vài chục chữ số) thì t.t. chạy rất lâu.chạy rất lâu.

Chưa biết t.t. nào cải thiện hàm logDChưa biết t.t. nào cải thiện hàm logD

Page 112: ThiếT Kế Và đáNh Giá ThuậT ToáN

112112

Thuật toán Mũ Thuật toán Mũ (exponentiation)(exponentiation)

A phải tính g^A mod pA phải tính g^A mod p

Thuật toán đơn giản:Thuật toán đơn giản:

expD(g,A,p){expD(g,A,p){a=1;a=1;for (i=1 to A) do a = a*g mod p;for (i=1 to A) do a = a*g mod p;return a;return a;

}}

Page 113: ThiếT Kế Và đáNh Giá ThuậT ToáN

113113

Bài tậpBài tập: Viết thuật toán “chia để trị” : Viết thuật toán “chia để trị” để tính hàm mũ theo thời gian O(lg để tính hàm mũ theo thời gian O(lg p)p)

Page 114: ThiếT Kế Và đáNh Giá ThuậT ToáN

114114

Chương 5: Phương pháp Chương 5: Phương pháp qui hoạch độngqui hoạch động

I.I. Giới thiệu chungGiới thiệu chung

II.II. Nhân một dãy các ma trậnNhân một dãy các ma trận

III.III. Các đường đi ngắn nhấtCác đường đi ngắn nhất

IV.IV. Người đưa hàngNgười đưa hàng

Page 115: ThiếT Kế Và đáNh Giá ThuậT ToáN

115115

Giới thiệu chungGiới thiệu chung

So sánh với phương pháp “chia để trị”:So sánh với phương pháp “chia để trị”:- Chia thành các phần nhỏ hơnChia thành các phần nhỏ hơn- Thực hiện độc lập từng phầnThực hiện độc lập từng phần- Hợp các kết quả nhỏ lại.Hợp các kết quả nhỏ lại.

Vấn đềVấn đề: : - nếu có nhiều phần nhỏ giống nhau, liên nếu có nhiều phần nhỏ giống nhau, liên

quan đến nhauquan đến nhau - => sử dụng kết quả đã tính: lập bảng lưu => sử dụng kết quả đã tính: lập bảng lưu

trữ dần các kết quả của các phần contrữ dần các kết quả của các phần con

Page 116: ThiếT Kế Và đáNh Giá ThuậT ToáN

116116

Chia để trịChia để trị: : từ trên xuốngtừ trên xuống: nhìn ngay : nhìn ngay vào vấn đề lớn, chia nhỏ ra, trị phần vào vấn đề lớn, chia nhỏ ra, trị phần concon

Quy hoạch độngQuy hoạch động: : từ dưới lêntừ dưới lên: bắt đầu : bắt đầu từ các trường hợp đơn giản, nhỏ, xây từ các trường hợp đơn giản, nhỏ, xây dựng dần lên, đến bài toán tổng kết dựng dần lên, đến bài toán tổng kết cuối cùng.cuối cùng.

Page 117: ThiếT Kế Và đáNh Giá ThuậT ToáN

117117

Ví dụ nhỏ: phép tính tổ hợpVí dụ nhỏ: phép tính tổ hợp

Tính C(n,k) = n!/(n-k)!k!Tính C(n,k) = n!/(n-k)!k!

Thuật toán đơn giảnThuật toán đơn giản::

function C(n,k){function C(n,k){if if (k=0 (k=0 ou ou k=n) k=n) then returnthen return 1; 1;else returnelse return C(n-1,k-1)+C(n,k-1); C(n-1,k-1)+C(n,k-1);

}}

Câu hỏiCâu hỏi: tính độ phức tạp tính toán của thuật toán này: tính độ phức tạp tính toán của thuật toán này

Page 118: ThiếT Kế Và đáNh Giá ThuậT ToáN

118118

Ví dụ nhỏ: phép tính tổ hợp Ví dụ nhỏ: phép tính tổ hợp (tiếp)(tiếp)

Cải thiện thuật toánCải thiện thuật toán: dùng tam giác Pascal: dùng tam giác Pascal

0.0. 111.1. 11 1 12.2. 11 2 1 2 13.3. 1 3 3 11 3 3 14.4. 1 4 6 4 11 4 6 4 15.5. 1 5 10 10 5 11 5 10 10 5 1

Câu hỏiCâu hỏi: Viết thuật toán bằng cách dùng bảng lưu : Viết thuật toán bằng cách dùng bảng lưu trữ kết quả, tính độ phức tạp tính toán của t.t. đó.trữ kết quả, tính độ phức tạp tính toán của t.t. đó.

Page 119: ThiếT Kế Và đáNh Giá ThuậT ToáN

119119

Nhân một dãy các ma trậnNhân một dãy các ma trận

Vấn đềVấn đề: Ta muốn nhân một dãy các ma trận : Ta muốn nhân một dãy các ma trận M= M1xM2x…xMnM= M1xM2x…xMn

Có nhiều cách đặt các dấu ngoặc để nhân dần 2 ma trận. Có nhiều cách đặt các dấu ngoặc để nhân dần 2 ma trận. Chúng ảnh hưởng nhiều đến thời gian tính toán.Chúng ảnh hưởng nhiều đến thời gian tính toán.

Ví dụVí dụ: M=ABCD, A=(10,2); B=(2,100); : M=ABCD, A=(10,2); B=(2,100); C=(100,3); D=(3,20)C=(100,3); D=(3,20)

M=((AB)C)D: 10x2x100+2x100x3+10x3x20=3200 phép xM=((AB)C)D: 10x2x100+2x100x3+10x3x20=3200 phép xM=(AB)(CD): 10x2x100+100x3x20+10x100x20 = M=(AB)(CD): 10x2x100+100x3x20+10x100x20 = 2800028000M=(A(BC))D: 2x100x3 +10x2x3 +10x3x20 = 1260M=(A(BC))D: 2x100x3 +10x2x3 +10x3x20 = 1260M=A((BC)D): 2x100x3 +2x3x20 +10x2x20 = M=A((BC)D): 2x100x3 +2x3x20 +10x2x20 = 11201120M=A(B(CD)): 100x3x20+2x100x20 +10x2x20 = 10400M=A(B(CD)): 100x3x20+2x100x20 +10x2x20 = 10400

Page 120: ThiếT Kế Và đáNh Giá ThuậT ToáN

120120

Ý tưởng tìm cách tínhÝ tưởng tìm cách tính

Số các cách tính MSố các cách tính M (số Catalan): (số Catalan):C(n) = 1/n x C(2n-2,n-1) = C(n) = 1/n x C(2n-2,n-1) = ΩΩ (4^n/n^2) (4^n/n^2) Không thể xét tất cả các trường hợpKhông thể xét tất cả các trường hợp

Ý tưởng:Ý tưởng: Nếu để tính M, cắt khúc ở i là tối ưuNếu để tính M, cắt khúc ở i là tối ưuThì để tính M1x…xMi và M(i+1)x…xMn, ta Thì để tính M1x…xMi và M(i+1)x…xMn, ta

cũng tính cách tối ưu.cũng tính cách tối ưu.=> Lập bảng a[i,j] để lưu trữ số phép x tối => Lập bảng a[i,j] để lưu trữ số phép x tối

ưu khi tính Mix…xMjưu khi tính Mix…xMj

Page 121: ThiếT Kế Và đáNh Giá ThuậT ToáN

121121

Ý tưởng tìm cách tính (tiếp)Ý tưởng tìm cách tính (tiếp)

Chiều các ma trận: d[0..n], Mi=(d[i-1],d[i])Chiều các ma trận: d[0..n], Mi=(d[i-1],d[i])

Xây dựng a[i,j] theo từng đường chéoXây dựng a[i,j] theo từng đường chéo..Đường chéo sĐường chéo s: a[i,j]: j-i=s.: a[i,j]: j-i=s.

s=0: a[i,i]=0, i= 1,2..,ns=0: a[i,i]=0, i= 1,2..,ns=1: a[i,i+1]=d[i-1]d[i]d[i+1], i=1,2,..,n-1s=1: a[i,i+1]=d[i-1]d[i]d[i+1], i=1,2,..,n-11<s<n: i =1,2,..,n-s1<s<n: i =1,2,..,n-sa[i,i+s]=min (a[i,k]+a[k+1,i+s]+d[i-1]d[i]d[i+1])a[i,i+s]=min (a[i,k]+a[k+1,i+s]+d[i-1]d[i]d[i+1]) i≤k≤i+s-1 i≤k≤i+s-1

Page 122: ThiếT Kế Và đáNh Giá ThuậT ToáN

122122

Ý tưởng tìm cách tính: ví dụÝ tưởng tìm cách tính: ví dụ

M=ABCD, A=(10,2); B=(2,100); M=ABCD, A=(10,2); B=(2,100); C=(100,3); D=(3,20).C=(100,3); D=(3,20).

s=1:a[12]=2000,a[23]=600,a[34]=18000 s=1:a[12]=2000,a[23]=600,a[34]=18000 ……

j = 1j = 1 22 33 44i=1i=1 0 2000 ? ? 0 2000 ? ? 22 00 600 ?600 ? 3 3 00 1800018000 44 00

Page 123: ThiếT Kế Và đáNh Giá ThuậT ToáN

123123

Bài tậpBài tập

1.1. Viết thuật toán tính bảng aViết thuật toán tính bảng a

2.2. Tính độ phức tạp tính toánTính độ phức tạp tính toán

3.3. Thay đổi thuật toán thế nào để Thay đổi thuật toán thế nào để nhận được không chỉ a[1,n] mà còn nhận được không chỉ a[1,n] mà còn cả cách tính tích M tối ưu nhất.cả cách tính tích M tối ưu nhất.

Page 124: ThiếT Kế Và đáNh Giá ThuậT ToáN

124124

Các đường đi ngắn nhấtCác đường đi ngắn nhất

Bài toánBài toán: Cho đồ thị có hướng G=(V,E). : Cho đồ thị có hướng G=(V,E). Mỗi cạnh e Mỗi cạnh e ЄЄ E có độ dài l(e). Tìm E có độ dài l(e). Tìm đường đi ngắn nhất giữa các cặp đỉnh đường đi ngắn nhất giữa các cặp đỉnh của G.của G.

Ký hiệuKý hiệu: V={1,2,…,n}: V={1,2,…,n}

L[i,i] = 0, L[i,j] = l(e) nếu e=(i,j)L[i,i] = 0, L[i,j] = l(e) nếu e=(i,j)

L[i,j] = ∞ nếu không có cạnh (i,j) .L[i,j] = ∞ nếu không có cạnh (i,j) .

Page 125: ThiếT Kế Và đáNh Giá ThuậT ToáN

125125

Ý tưởng thuật toánÝ tưởng thuật toán

1.1. Nếu k nằm trên 1 đường đi ngắn nhất Nếu k nằm trên 1 đường đi ngắn nhất từ i đến j thì đoạn từ i đến k và từ k từ i đến j thì đoạn từ i đến k và từ k đến j cũng là những đường đi ngắn đến j cũng là những đường đi ngắn nhất.nhất.

2.2. Xây dựng D[i,j] độ dài min từ i đến j:Xây dựng D[i,j] độ dài min từ i đến j:1.1. Lúc đầu: D=LLúc đầu: D=L

2.2. Sau bước thứ k, D[i,j] là độ dài min từ i đến Sau bước thứ k, D[i,j] là độ dài min từ i đến j (mà chỉ đi qua các đỉnh 1,2,..,k)j (mà chỉ đi qua các đỉnh 1,2,..,k)

3.3. Sau n bước, D[i,j] là độ dài min từ i đến j.Sau n bước, D[i,j] là độ dài min từ i đến j.

Page 126: ThiếT Kế Và đáNh Giá ThuậT ToáN

126126

Ví dụVí dụ

0 5 ∞ ∞0 5 ∞ ∞D0=L= 50 0 15 5D0=L= 50 0 15 5 30 ∞ 0 1530 ∞ 0 15 15 ∞ 5 015 ∞ 5 0 0 5 ∞ ∞0 5 ∞ ∞D1= 50 0 15 5D1= 50 0 15 5 30 35 0 1530 35 0 15 15 20 5 015 20 5 0

0 5 20 10 0 5 20 10 0 5 15 100 5 20 10 0 5 20 10 0 5 15 10D2= 50 0 15 5 D3= 50 0 15 5 D4= 20 0 10 5 D2= 50 0 15 5 D3= 50 0 15 5 D4= 20 0 10 5 30 35 0 15 30 35 0 15 30 35 0 1530 35 0 15 30 35 0 15 30 35 0 15 15 20 5 0 15 20 5 0 15 20 5 015 20 5 0 15 20 5 0 15 20 5 0

1

2 3

415

5 50

5

30

15 5

15

Page 127: ThiếT Kế Và đáNh Giá ThuậT ToáN

127127

Thuật toán FloydThuật toán Floyd

FloydFloyd(L){(L){array D = L;array D = L;forfor (k=1 (k=1 toto n) n) dodo

for for (i=1 (i=1 toto n) n) do do forfor (j=1 (j=1 toto n) n) dodo

D[i,j]= min(D[i,j],D[i,k]+D[k,j]);D[i,j]= min(D[i,j],D[i,k]+D[k,j]);returnreturn D; D;

}}

Page 128: ThiếT Kế Và đáNh Giá ThuậT ToáN

128128

Bài tậpBài tập

1.1. Tìm độ phức tạp của thuật toán FloydTìm độ phức tạp của thuật toán Floyd2.2. Chứng minh tính đúng đắn của thuật Chứng minh tính đúng đắn của thuật

toántoán3.3. Nếu muốn biết không chỉ độ dài mà Nếu muốn biết không chỉ độ dài mà

cả đường đi ngắn nhất, phải thêm gì cả đường đi ngắn nhất, phải thêm gì vào thuật toán ?vào thuật toán ?

4.4. Viết thuật toán xác định xem có Viết thuật toán xác định xem có đường đi giữa các cặp đỉnh của G.đường đi giữa các cặp đỉnh của G.

Page 129: ThiếT Kế Và đáNh Giá ThuậT ToáN

129129

Người đưa hàngNgười đưa hàng

Bài toánBài toán: Cho một đồ thị có hướng, : Cho một đồ thị có hướng, các cạnh có độ dài. Tìm một chu các cạnh có độ dài. Tìm một chu trình ngắn nhất bắt đầu và kết thúc trình ngắn nhất bắt đầu và kết thúc tại một đỉnh, và đi qua mỗi đỉnh còn tại một đỉnh, và đi qua mỗi đỉnh còn lại đúng một lần.lại đúng một lần.

G=(V,E), V={1,2,..,n}, L[i,j]: độ dài G=(V,E), V={1,2,..,n}, L[i,j]: độ dài cạnh.cạnh.

Page 130: ThiếT Kế Và đáNh Giá ThuậT ToáN

130130

Ý tưởng thuật toánÝ tưởng thuật toán

1.1. Chu trình bắt đầu từ đỉnh 1.Chu trình bắt đầu từ đỉnh 1.Min chu trình bắt đầu từ 1Min chu trình bắt đầu từ 1

= min (L[1,j]+ min đường từ j đến 1) = min (L[1,j]+ min đường từ j đến 1) 2.2. Cho S tập con của VCho S tập con của V\{1}, i \{1}, i ЄЄ V\S: V\S:

g(i,S)=min (đường từ i đến 1 qua S đúng 1 lần)g(i,S)=min (đường từ i đến 1 qua S đúng 1 lần)3.3. Min chu trình = g(1, V\{1})Min chu trình = g(1, V\{1})

= min(L[1,j]+g(j,V\{1,j}))= min(L[1,j]+g(j,V\{1,j})) 2≤j≤n2≤j≤n

4.4. g(i,S)= min (L[i,j] + g(j,S\{j}))g(i,S)= min (L[i,j] + g(j,S\{j})) jjЄЄSS

5.5. g(i,Ø)=L[i,1], i=2,3,..,ng(i,Ø)=L[i,1], i=2,3,..,n

Page 131: ThiếT Kế Và đáNh Giá ThuậT ToáN

131131

Ví dụVí dụ

0 10 15 200 10 15 20 5 0 9 105 0 9 10

L = 6 13 0 12L = 6 13 0 12 8 8 9 08 8 9 0

1.1. Tính g(j,Tính g(j,Ø); j= 2,3,4Ø); j= 2,3,42.2. Tính g(j,S) với |S|=1;j=2,3,4Tính g(j,S) với |S|=1;j=2,3,43.3. Tính g(j,S) với |S|=2;j=2,3,4Tính g(j,S) với |S|=2;j=2,3,44.4. Tính g(1,{2,3,4})Tính g(1,{2,3,4})

4 3

1 210

5

20 8 913

12

9

810

6 15

Page 132: ThiếT Kế Và đáNh Giá ThuậT ToáN

132132

Bài tậpBài tập

1.1. Viết thuật toán tính chu trình ngắn nhất Viết thuật toán tính chu trình ngắn nhất theo ý tưởng đã trình bày.theo ý tưởng đã trình bày.

2.2. Tính toán độ phức tạp và bộ nhớ cần cho Tính toán độ phức tạp và bộ nhớ cần cho t.t.t.t.

3.3. Tính xem thực chất có bao nhiêu giá trị Tính xem thực chất có bao nhiêu giá trị g(i,S) cần phải tính ?g(i,S) cần phải tính ?

4.4. Có thể cải thiện t.t. trên để tiết kiệm số Có thể cải thiện t.t. trên để tiết kiệm số lần tính g(i,S) không (mỗi giá trị tính lần tính g(i,S) không (mỗi giá trị tính đúng 1 lần) ?đúng 1 lần) ?

Page 133: ThiếT Kế Và đáNh Giá ThuậT ToáN

133133

Hàm nhớHàm nhớ

Thuật toán đơn giản tính g(i,S)Thuật toán đơn giản tính g(i,S)

function g(i,S){function g(i,S){if (S=if (S=Ø) then return L[i,1];Ø) then return L[i,1];min = ∞;min = ∞;for (jfor (jЄЄS) do {S) do { d=L[i,j]+g(j,S\{j});d=L[i,j]+g(j,S\{j});

if (d<min) then min =d;}if (d<min) then min =d;}return min;return min;

}}

Số lần gọi các hàm g là Số lần gọi các hàm g là ΩΩ((n-1)!), nhiều giá trị được tính lại ((n-1)!), nhiều giá trị được tính lại nhiều lầnnhiều lần

Page 134: ThiếT Kế Và đáNh Giá ThuậT ToáN

134134

Hàm nhớ (tiếp)Hàm nhớ (tiếp)

1.1. Lập một bảng gtab[.,.] để nhớ những giá trị g[i,S] đã được Lập một bảng gtab[.,.] để nhớ những giá trị g[i,S] đã được tính. tính.

2.2. Khi gọi hàm g(i,S), sẽ kiểm tra xem g(i,S) đã được tính Khi gọi hàm g(i,S), sẽ kiểm tra xem g(i,S) đã được tính chưachưa

3.3. Lúc đầu gtab[i,S] = -1 với mọi i, S.Lúc đầu gtab[i,S] = -1 với mọi i, S.

function g(i,S){function g(i,S){if (S=if (S=Ø) then return L[i,1];Ø) then return L[i,1];if (gtab[i,S]≥0) then return gtab[i,S];if (gtab[i,S]≥0) then return gtab[i,S];min = ∞;min = ∞;for (jfor (jЄЄS) do {S) do { d=L[i,j]+g(j,S\{j});d=L[i,j]+g(j,S\{j});

if (d<min) then min =d;}if (d<min) then min =d;}gtab[i,S]= min; return min;gtab[i,S]= min; return min;

}}

Page 135: ThiếT Kế Và đáNh Giá ThuậT ToáN

135135

So sánhSo sánh

1.1. Thời gian t.t. đơn giản: n!Thời gian t.t. đơn giản: n!2.2. Thời gian t.t. cải tiến: n^2 2^nThời gian t.t. cải tiến: n^2 2^n3.3. Bộ nhớ t.t. cải tiến: n 2^nBộ nhớ t.t. cải tiến: n 2^n

nn n!n! n^2 2^nn^2 2^n n 2^nn 2^n55 120120 800800 1601601010 36288003628800 102400102400 10240102401515 1,3 x 10^121,3 x 10^12 73728007372800 4915204915202020 2,4 x 10^182,4 x 10^18 419430400419430400

29715202971520

Page 136: ThiếT Kế Và đáNh Giá ThuậT ToáN

136136

Chương 6: Thuật toán trên đồ Chương 6: Thuật toán trên đồ thịthị

I.I. Giới thiệu chungGiới thiệu chung

II.II. Khám phá cây Khám phá cây

III.III. Khám phá theo chiều rộngKhám phá theo chiều rộng

IV.IV. Khám phá theo chiều sâuKhám phá theo chiều sâu

V.V. ““Branch and bound”Branch and bound”

Page 137: ThiếT Kế Và đáNh Giá ThuậT ToáN

137137

Giới thiệu chungGiới thiệu chung

1.1. Đồ thị biểu diễn nhiều vấn đề:Đồ thị biểu diễn nhiều vấn đề:1.1. Mạng, trò chơi, sơ đồ,…Mạng, trò chơi, sơ đồ,…2.2. Cấu trúc dữ liệu: đỉnh là một số bit bộ Cấu trúc dữ liệu: đỉnh là một số bit bộ

nhớ, cạnh là các con trỏ,…nhớ, cạnh là các con trỏ,…

2.2. Biểu diễn đồ thị, có nhiều cách:Biểu diễn đồ thị, có nhiều cách:1.1. Ma trận: a[i,j]=1 nếu có cạnh (i,j), =0 Ma trận: a[i,j]=1 nếu có cạnh (i,j), =0

nếu khôngnếu không2.2. Dãy liên hệ: Adj[i] là một dãy các cạnh Dãy liên hệ: Adj[i] là một dãy các cạnh

được nối với i, i là các đỉnh của đồ thị.được nối với i, i là các đỉnh của đồ thị.

Page 138: ThiếT Kế Và đáNh Giá ThuậT ToáN

138138

Khám phá cây Khám phá cây

Xét các cây nhị phân, có 3 cách khám phá:Xét các cây nhị phân, có 3 cách khám phá:1.1. Thứ tự trước (prefix)Thứ tự trước (prefix)2.2. Thứ tự giữa (infix)Thứ tự giữa (infix)3.3. Thứ tự sau (suffix)Thứ tự sau (suffix)

Visit_prefix Visit_prefix (r){ //r là gốc của cây(r){ //r là gốc của cây print (r.value);print (r.value);

if (r.left<>Null) then visit_prefix(r.left);if (r.left<>Null) then visit_prefix(r.left);if (r.right<>Null) then visit_prefix(r.right);if (r.right<>Null) then visit_prefix(r.right);}}

Chứng minh độ phức tạp tính toán của t.t. là O(n)Chứng minh độ phức tạp tính toán của t.t. là O(n)

Page 139: ThiếT Kế Và đáNh Giá ThuậT ToáN

139139

Khám phá theo chiều rộng Khám phá theo chiều rộng (Breadth-first search)(Breadth-first search)

1.1. Chọn một đỉnh nguồn s, và thăm các đỉnh Chọn một đỉnh nguồn s, và thăm các đỉnh khác theo thứ tự từ gần đến xa skhác theo thứ tự từ gần đến xa s

2.2. Thăm u: thăm tất cả các lân cận của u, sau Thăm u: thăm tất cả các lân cận của u, sau đó mới thăm lân cận của các đỉnh nàyđó mới thăm lân cận của các đỉnh này

3.3. Xây dựng cây có gốc s.Xây dựng cây có gốc s.4.4. Tô màu các đỉnh:Tô màu các đỉnh:

1.1. Lúc đầu tất cả màu trắngLúc đầu tất cả màu trắng2.2. Bắt đầu thăm u, tô u màu vàngBắt đầu thăm u, tô u màu vàng3.3. Nếu đã thăm mọi lân cận của u, tô u màu đỏNếu đã thăm mọi lân cận của u, tô u màu đỏ

5.5. Một xâu nhớ (FIFO) Q lưu trữ các đỉnh vàng Một xâu nhớ (FIFO) Q lưu trữ các đỉnh vàng

Page 140: ThiếT Kế Và đáNh Giá ThuậT ToáN

140140

Ví dụVí dụ

Page 141: ThiếT Kế Và đáNh Giá ThuậT ToáN

141141

Thuật toánThuật toán

BFS (G,s){BFS (G,s){for for (u (u ЄЄ V\{s}) V\{s}) dodo { {

color[u]= T ; d[u]=∞; p[u]=Null;}color[u]= T ; d[u]=∞; p[u]=Null;}color[s]= V ; d[s]=0; p[s]=Null; Q={s};color[s]= V ; d[s]=0; p[s]=Null; Q={s};whilewhile (Q<>Ø) (Q<>Ø) do do {{

u=head(Q);u=head(Q);for for (v (v ЄЄ Adj[u]) Adj[u]) dodo{ {

ifif (color[v]=T) (color[v]=T) thenthen { {color[v]=V; d[v]=d[u]+1; color[v]=V; d[v]=d[u]+1; p[v]=u; p[v]=u; addadd(Q,v);}}(Q,v);}}

supsup(Q);(Q);color[u]=Đ;}color[u]=Đ;}

}}

Page 142: ThiếT Kế Và đáNh Giá ThuậT ToáN

142142

Phân tíchPhân tích

11 Định lýĐịnh lý: Nếu đồ thị liên thông. Sau : Nếu đồ thị liên thông. Sau BFS, ta nhận được cây gốc s và BFS, ta nhận được cây gốc s và đường đi từ s đến u là 1 đường đi đường đi từ s đến u là 1 đường đi ngắn nhất từ s đến u trong G.ngắn nhất từ s đến u trong G.

22 Tính độ phức tạp và bộ nhớ cho t.t. Tính độ phức tạp và bộ nhớ cho t.t. BFSBFS

Page 143: ThiếT Kế Và đáNh Giá ThuậT ToáN

143143

Khám phá theo chiều sâuKhám phá theo chiều sâu(Deep-first search)(Deep-first search)

1.1. Thăm u, rồi thăm 1 lân cận v của u, rồi Thăm u, rồi thăm 1 lân cận v của u, rồi thăm 1 lân cận của v, …thăm 1 lân cận của v, …

2.2. Hàm thăm này được gọi đệ qui.Hàm thăm này được gọi đệ qui.

3.3. Sau mỗi lệnh thăm v lân cận của u, nếu u Sau mỗi lệnh thăm v lân cận của u, nếu u còn lân cận nào, thì lại thăm,…còn lân cận nào, thì lại thăm,…

4.4. Nếu bắt đầu từ s, sau khi thăm s, còn các Nếu bắt đầu từ s, sau khi thăm s, còn các đỉnh, ta lại chọn một đỉnh mới để thăm.đỉnh, ta lại chọn một đỉnh mới để thăm.

5.5. Xây dựng được một rừng.Xây dựng được một rừng.

Page 144: ThiếT Kế Và đáNh Giá ThuậT ToáN

144144

Ký hiệuKý hiệu

1.1. d[u]: thời điểm bắt đầu thăm ud[u]: thời điểm bắt đầu thăm u

2.2. f[u]: t.đ. Kết thúc thăm uf[u]: t.đ. Kết thúc thăm u

3.3. p[u]: cha của up[u]: cha của u

4.4. color[u] =T trước d[u], color[u] =T trước d[u],

= V đang thăm u= V đang thăm u

= Đ sau f[u]= Đ sau f[u]

Page 145: ThiếT Kế Và đáNh Giá ThuậT ToáN

145145

Ví dụVí dụ

Page 146: ThiếT Kế Và đáNh Giá ThuậT ToáN

146146

Thuật toánThuật toán

DFS(G){DFS(G){for (u for (u ЄЄ V) do { color[u]=T; V) do { color[u]=T; p[u]=Null;}p[u]=Null;}

time=0;time=0;

for (u for (u ЄЄ V) do V) do

if (color[u]=T) then DFS-visit(u);if (color[u]=T) then DFS-visit(u);

}}

Page 147: ThiếT Kế Và đáNh Giá ThuậT ToáN

147147

Thuật toán (tiếp)Thuật toán (tiếp)

DFS-visitDFS-visit(u){(u){color[u]=V; d[u]=time=time+1;color[u]=V; d[u]=time=time+1;for (vfor (vЄЄAdj[u]) do {Adj[u]) do {

if (color[v]=T) then { if (color[v]=T) then { p[v]=u; DFS-visit(v);}p[v]=u; DFS-visit(v);}

}}color[u]=Đ;color[u]=Đ;f[u]=time=time+1;f[u]=time=time+1;

}}

Page 148: ThiếT Kế Và đáNh Giá ThuậT ToáN

148148

Phân tíchPhân tích

1.1. Tính độ phức tạp và bộ nhớ cần cho Tính độ phức tạp và bộ nhớ cần cho DFSDFS

2.2. Định lýĐịnh lý: Các ngoặc (d[u],f[u]) lập : Các ngoặc (d[u],f[u]) lập thành một bộ ngoặc đơn tốt (hai thành một bộ ngoặc đơn tốt (hai ngoặc hoặc là trong nhau hoặc là ngoặc hoặc là trong nhau hoặc là rời nhau)rời nhau)

Page 149: ThiếT Kế Và đáNh Giá ThuậT ToáN

149149

Sắp xếp topologySắp xếp topology

Bài toánBài toán: Cho G là đồ thị có hướng, không chu : Cho G là đồ thị có hướng, không chu trình. Một trình. Một sắp xếp topologysắp xếp topology của G của G là một là một cách xếp tuyến tính các đỉnh của G sao cho cách xếp tuyến tính các đỉnh của G sao cho i trước j nếu (i,j) là cạnh.i trước j nếu (i,j) là cạnh.

Ứng dụngỨng dụng::- Sắp xếp các công việc thỏa mãn một số thứ Sắp xếp các công việc thỏa mãn một số thứ

tự.tự.- Biểu diễn tập có thứ tự bộ phậnBiểu diễn tập có thứ tự bộ phận

Page 150: ThiếT Kế Và đáNh Giá ThuậT ToáN

150150

Thuật toán sắp xếp Thuật toán sắp xếp topologytopology

Topological-Sort(G){Topological-Sort(G){DFS(G);DFS(G);

Xếp vào theo thứ tự f[u] giảmXếp vào theo thứ tự f[u] giảm

}}

Vấn đềVấn đề: chứng minh tính đúng đắn : chứng minh tính đúng đắn của t.t. và tính độ phức tạp.của t.t. và tính độ phức tạp.

Page 151: ThiếT Kế Và đáNh Giá ThuậT ToáN

151151

Ví dụVí dụ

Page 152: ThiếT Kế Và đáNh Giá ThuậT ToáN

152152

Thành phần liên thông Thành phần liên thông mạnhmạnh

Định nghĩaĐịnh nghĩa: Đồ thị có hướng là : Đồ thị có hướng là liên liên thông mạnhthông mạnh nếu giữa hai đỉnh luôn có nếu giữa hai đỉnh luôn có đường đi.đường đi.

Một đồ thị có hướng bất kỳ được phân Một đồ thị có hướng bất kỳ được phân thành cácthành các t.p.l.t.m.t.p.l.t.m., mỗi t.p. là một đồ , mỗi t.p. là một đồ thị con lớn nhất liên thông mạnh.thị con lớn nhất liên thông mạnh.

Bài toánBài toán: phân tích G thành các t.p.l.t.m.: phân tích G thành các t.p.l.t.m.

Page 153: ThiếT Kế Và đáNh Giá ThuậT ToáN

153153

Thuật toán tính các t.p.l.t.mThuật toán tính các t.p.l.t.m

Tpltm (G){Tpltm (G){1.1. DFS(G) để tính f[u];DFS(G) để tính f[u];2.2. Tính G’Tính G’3.3. DFG(G’), các đỉnh của G’ được xếp theo f giảmDFG(G’), các đỉnh của G’ được xếp theo f giảm4.4. Mỗi cây trong rừng từ bước 3 là một t.p.l.t.mMỗi cây trong rừng từ bước 3 là một t.p.l.t.m}}

G’=(V,E’); E’={(u,v): (v,u) G’=(V,E’); E’={(u,v): (v,u) ЄЄ E} E}

Vấn đềVấn đề: chứng minh tính đúng đắn của t.t. và tính : chứng minh tính đúng đắn của t.t. và tính độ phức tạp của nó.độ phức tạp của nó.

Page 154: ThiếT Kế Và đáNh Giá ThuậT ToáN

154154

Ví dụVí dụ

Page 155: ThiếT Kế Và đáNh Giá ThuậT ToáN

155155

Branch and boundBranch and bound

So sánh các cách tìm kiếm trong đồ thị:So sánh các cách tìm kiếm trong đồ thị:1.1. Theo chiều rộng: thăm hết các lân cận + Theo chiều rộng: thăm hết các lân cận +

một FIFO chứa các đỉnh đang thăm một FIFO chứa các đỉnh đang thăm 2.2. Theo chiều sâu: thăm hết các con đường Theo chiều sâu: thăm hết các con đường

+ một FILO chứa các đỉnh đang thăm + một FILO chứa các đỉnh đang thăm 3.3. B.A.B.: thăm các đỉnh hứa hẹn nhất + B.A.B.: thăm các đỉnh hứa hẹn nhất +

một dãy chứa các đỉnh đang thăm một dãy chứa các đỉnh đang thăm

Page 156: ThiếT Kế Và đáNh Giá ThuậT ToáN

156156

B.A.B: người đưa hàngB.A.B: người đưa hàng

Bài toánBài toán: Cho một đồ thị có hướng, : Cho một đồ thị có hướng, các cạnh có độ dài. Tìm một chu các cạnh có độ dài. Tìm một chu trình ngắn nhất bắt đầu và kết thúc trình ngắn nhất bắt đầu và kết thúc tại một đỉnh, và đi qua mỗi đỉnh còn tại một đỉnh, và đi qua mỗi đỉnh còn lại đúng một lần.lại đúng một lần.

G=(V,E), V={1,2,..,n}, L[i,j]: độ dài G=(V,E), V={1,2,..,n}, L[i,j]: độ dài cạnh.cạnh.

Page 157: ThiếT Kế Và đáNh Giá ThuậT ToáN

157157

Ví dụ: ý tưởngVí dụ: ý tưởng

0 14 4 10 200 14 4 10 2014 0 7 8 714 0 7 8 7

L= L= 4 5 0 7 164 5 0 7 1611 7 9 0 211 7 9 0 2

18 7 17 4 0 18 7 17 4 0

1.1. Tìm chu trình đơn ngắn nhất từ đỉnh 1 đến đỉnh 1Tìm chu trình đơn ngắn nhất từ đỉnh 1 đến đỉnh 12.2. Xây dựng cây gốc (1). Xây dựng cây gốc (1). 3.3. Mỗi nốt là một đường từ 1: (1,3), (1,3,4),…Mỗi nốt là một đường từ 1: (1,3), (1,3,4),…4.4. Các con của mỗi nốt là các đường thêm vào một đỉnhCác con của mỗi nốt là các đường thêm vào một đỉnh5.5. Với mỗi nốt, tính cận dưới của chu trình đi qua đường Với mỗi nốt, tính cận dưới của chu trình đi qua đường

tương ứngtương ứng

Page 158: ThiếT Kế Và đáNh Giá ThuậT ToáN

158158

Ví dụ (tiếp): cách tính cận Ví dụ (tiếp): cách tính cận dướidưới

Tính cận dưới (inf):Tính cận dưới (inf):

1.1. Khoảng cách L[i,j] chia 2: một nửa Khoảng cách L[i,j] chia 2: một nửa đường từ i, một nửa đường đến jđường từ i, một nửa đường đến j

2.2. inf từ i = min của các đường từ iinf từ i = min của các đường từ i

3.3. inf qua i = min (từ i) + min (đến i)inf qua i = min (từ i) + min (đến i)

4.4. inf của nốt = tổng các inf để tạo ra inf của nốt = tổng các inf để tạo ra chu trình qua nốt chu trình qua nốt

Page 159: ThiếT Kế Và đáNh Giá ThuậT ToáN

159159

Ví dụ (tiếp): tính cụ thểVí dụ (tiếp): tính cụ thể

1.1. inf(1)=inf(từ 1) + inf(đến 1) + inf(1)=inf(từ 1) + inf(đến 1) +

inf(qua 2)+inf(qua 3)+inf(qua inf(qua 2)+inf(qua 3)+inf(qua 4)+inf(qua 5) = 2+2+6+4+3+3=204)+inf(qua 5) = 2+2+6+4+3+3=20

Page 160: ThiếT Kế Và đáNh Giá ThuậT ToáN

160160

Ví dụ (tiếp): xây dựng câyVí dụ (tiếp): xây dựng cây1

inf 20

1,2inf 31

1,3inf 24

1,4inf 29

1,5inf 41

1,3,2inf 24

1,3,4inf 30,5

1,3,5inf 40,5

1,3,2,4=1,3,2,4,5,1

value=37

1,4,2inf 40

1,4,3inf 41,5

1,4,5inf 29

1,3,2,5=1,3,2,5,4,1

value=31

1,4,5,2=1,4,5,2,3,1

value=30

1,4,5,3=1,4,5,3,2,1

value=48

Page 161: ThiếT Kế Và đáNh Giá ThuậT ToáN

161161

Chương 7: Giới thiệu về Chương 7: Giới thiệu về phương pháp xác suấtphương pháp xác suất

I.I. Giới thiệu chungGiới thiệu chung

II.II. Phân loại các thuật toán xác suấtPhân loại các thuật toán xác suất

III.III. Thuật toán xác suất sốThuật toán xác suất số

IV.IV. Thuật toán SherwoodThuật toán Sherwood

V.V. Thuật toán Las VegasThuật toán Las Vegas

VI.VI. Thuật toán Monte CarloThuật toán Monte Carlo

Page 162: ThiếT Kế Và đáNh Giá ThuậT ToáN

162162

Giới thiệu chungGiới thiệu chung

Khái niệmKhái niệm: Thuật toán xác xuất là : Thuật toán xác xuất là thuật toán sử dụng đầu vào là các số thuật toán sử dụng đầu vào là các số ngẫu nhiên.ngẫu nhiên.

Nhận xétNhận xét: :

- Đầu vào này phải hữu ích- Đầu vào này phải hữu ích

- Các số này là “giả ngẫu nhiên”- Các số này là “giả ngẫu nhiên”

Page 163: ThiếT Kế Và đáNh Giá ThuậT ToáN

163163

Ví dụVí dụ

Thuật toán sắp xếp Quicksort:Thuật toán sắp xếp Quicksort:- Phần tử so sánh được chọn ở đầu bảng:- Phần tử so sánh được chọn ở đầu bảng:- Độ phức tạp xấu nhất là 0(n^2)- Độ phức tạp xấu nhất là 0(n^2)- Độ phức tạp trung bình là 0(n lg n)- Độ phức tạp trung bình là 0(n lg n)

Vấn đềVấn đề: nếu bảng đã gần xếp đúng, không : nếu bảng đã gần xếp đúng, không hiệu quả.hiệu quả.

Giải quyếtGiải quyết: Chọn phần tử so sánh một cách : Chọn phần tử so sánh một cách ngẫu nhiên trong bảng.ngẫu nhiên trong bảng.

Page 164: ThiếT Kế Và đáNh Giá ThuậT ToáN

164164

Phân loại các thuật toán xác Phân loại các thuật toán xác suấtsuất

Thuật toán xác suất số:Thuật toán xác suất số:- Dùng trong việc tính toán xấp xỉ các bài Dùng trong việc tính toán xấp xỉ các bài

toán số.toán số.- Độ chính xác trung bình tỷ lệ với thời Độ chính xác trung bình tỷ lệ với thời

gian chạygian chạy

-- Dùng trong các ví dụ: tính toán thời gian Dùng trong các ví dụ: tính toán thời gian chay TB của một hệ phức tạp, cách tính chay TB của một hệ phức tạp, cách tính chính xác là rất phức tạp (hoặc không chính xác là rất phức tạp (hoặc không thể)thể)

Page 165: ThiếT Kế Và đáNh Giá ThuậT ToáN

165165

Phân loại các thuật toán xác Phân loại các thuật toán xác suất (tiếp)suất (tiếp)

Thuật toán Monte Carlo:Thuật toán Monte Carlo:

-- Có thể dùng trong các bài toán quyết Có thể dùng trong các bài toán quyết định: đúng/sai, phân tích thừa số ng. định: đúng/sai, phân tích thừa số ng. tố,…tố,…

- Luôn cho câu trả lời rõ ràng nhưng Luôn cho câu trả lời rõ ràng nhưng - Kết quả có thể không đúngKết quả có thể không đúng- Xác xuất thành công tỷ lệ với thời gian Xác xuất thành công tỷ lệ với thời gian

chạychạy

Page 166: ThiếT Kế Và đáNh Giá ThuậT ToáN

166166

Phân loại các thuật toán xác suất Phân loại các thuật toán xác suất (tiếp)(tiếp)

Thuật toán Las Vegas:Thuật toán Las Vegas:- Không bao giờ cho câu trả lời saiKhông bao giờ cho câu trả lời sai- Có thể không cho câu trả lờiCó thể không cho câu trả lời- Xác xuất thành công tỷ lệ với thời gian chạy Xác xuất thành công tỷ lệ với thời gian chạy - Dù vấn đề nào, xác xuất hỏng cũng có thể Dù vấn đề nào, xác xuất hỏng cũng có thể

nhỏ tùy ýnhỏ tùy ý

* Cho trả lời chính xác với độ phức tạp trung * Cho trả lời chính xác với độ phức tạp trung bình có giới hạnbình có giới hạn

Page 167: ThiếT Kế Và đáNh Giá ThuậT ToáN

167167

Phân loại các thuật toán xác suất Phân loại các thuật toán xác suất (tiếp)(tiếp)

Thuật toán Sherwood:Thuật toán Sherwood:

- Luôn cho câu trả lời, trả lời luôn đúng- Luôn cho câu trả lời, trả lời luôn đúng

- Dùng trong các bài toán đã có thuật - Dùng trong các bài toán đã có thuật toán, với ĐPTTB nhỏ và ĐPT xấu toán, với ĐPTTB nhỏ và ĐPT xấu nhất lớnnhất lớn

- Biễn ngẫu nhiên là để giảm sự khác - Biễn ngẫu nhiên là để giảm sự khác nhau giữa hai trường hợp nàynhau giữa hai trường hợp này

Page 168: ThiếT Kế Và đáNh Giá ThuậT ToáN

168168

Thuật toán Monte CarloThuật toán Monte Carlo

Bài toán ví dụ: Thử xem một số có Bài toán ví dụ: Thử xem một số có nguyên tố hay không.nguyên tố hay không.

Ý nghĩa: trong mật mã cần tìm các số Ý nghĩa: trong mật mã cần tìm các số nguyên tố lớn.nguyên tố lớn.

Page 169: ThiếT Kế Và đáNh Giá ThuậT ToáN

169169

Thuật toán đơn giảnThuật toán đơn giản

Tính nguyên tố (n) {Tính nguyên tố (n) {while (i< n) do {while (i< n) do {

if (n chia hết cho i) return sai;if (n chia hết cho i) return sai;i = i+1;i = i+1;

}}return đúng;return đúng;

}}

Nhận xét: cho I chạy đến sqrt(n)Nhận xét: cho I chạy đến sqrt(n)- Để thử tính chia hết: thời gian nhiều.- Để thử tính chia hết: thời gian nhiều.

Page 170: ThiếT Kế Và đáNh Giá ThuậT ToáN

170170

Phép thử Miller RabinPhép thử Miller Rabin

Nguyên tắc:Nguyên tắc:

a)a) n nguyên tố, a < n n nguyên tố, a < n

=> a^{n-1} = 1 (mod n)=> a^{n-1} = 1 (mod n)

b)b) n nguyên tố, a <n : n nguyên tố, a <n :

a^2 = 1 (mod n) =>a = 1, -1 (mod n)a^2 = 1 (mod n) =>a = 1, -1 (mod n)

Câu hỏi:Câu hỏi: viết thuật toán viết thuật toán test (n,a)test (n,a) thử hai thử hai điều kiên trên. Độ p.t.t.t = ?điều kiên trên. Độ p.t.t.t = ?

Page 171: ThiếT Kế Và đáNh Giá ThuậT ToáN

171171

Thuật toán Miller-Rabin Thuật toán Miller-Rabin

M-R(n) {M-R(n) {i=1; chọn a ngẫu nhiên < n;i=1; chọn a ngẫu nhiên < n;while (i<k and test (n,a)=false) do {while (i<k and test (n,a)=false) do {

chọn a ngẫu nhiên < n;chọn a ngẫu nhiên < n;i = i+1;}i = i+1;}

return test(n,a);return test(n,a);}}- Số lần chọn các số ngẫu nhiên a là k lần.Số lần chọn các số ngẫu nhiên a là k lần.- Tính độ p.t.t.tTính độ p.t.t.t

Page 172: ThiếT Kế Và đáNh Giá ThuậT ToáN

172172

Xác xuất của thuật toánXác xuất của thuật toán

Tính chất: Nếu n lẻ, thì có ít nhất ¾ số Tính chất: Nếu n lẻ, thì có ít nhất ¾ số a < n sẽ cho kết quả test(n,a)= true a < n sẽ cho kết quả test(n,a)= true nếu n không nguyên tố.nếu n không nguyên tố.

Như vậy sau k lần thì xác xuất không Như vậy sau k lần thì xác xuất không tìm thấy a cho test(n,a)=true là tìm thấy a cho test(n,a)=true là (1/4)^k. Và ta có thể cho xac suất (1/4)^k. Và ta có thể cho xac suất này nhỏ tùy ý.này nhỏ tùy ý.

Page 173: ThiếT Kế Và đáNh Giá ThuậT ToáN

173173

Thuật toán Las-VegasThuật toán Las-Vegas

Bài toán: Bầu một người chủ.Bài toán: Bầu một người chủ.

Có n người, cần chọn ra một người. Có n người, cần chọn ra một người.

Đòi hỏi: các lần chạy t.t. khác nhau, chọn ra Đòi hỏi: các lần chạy t.t. khác nhau, chọn ra những người khác nhau.những người khác nhau.

Ý nghĩa: Trong bài toán mạng, tránh tình Ý nghĩa: Trong bài toán mạng, tránh tình trạng tắc nghẽn khi các máy cùng đến một trạng tắc nghẽn khi các máy cùng đến một lúc.lúc.

Page 174: ThiếT Kế Và đáNh Giá ThuậT ToáN

174174

Thuật toánThuật toán

1.1. Mỗi người chọn một số ngẫu nhiên từ 1 Mỗi người chọn một số ngẫu nhiên từ 1 đến m (số người chọn)đến m (số người chọn)

2.2. Nếu không có ai chọn số 1, quay về bước Nếu không có ai chọn số 1, quay về bước 2.2.

3.3. Nếu có ít nhất 2 người chọn số 1, thì Nếu có ít nhất 2 người chọn số 1, thì những người này tiếp tục, quay về bước những người này tiếp tục, quay về bước 1.1.

4.4. Nếu chỉ có 1 người chọn số 1 thì người Nếu chỉ có 1 người chọn số 1 thì người này là chủ.này là chủ.

Page 175: ThiếT Kế Và đáNh Giá ThuậT ToáN

175175

Tính chất của thuật toánTính chất của thuật toán

- Thuật toán không chắc chắn là sẽ Thuật toán không chắc chắn là sẽ dừngdừng

- Nhưng nếu dừng nó luôn cho kết quả Nhưng nếu dừng nó luôn cho kết quả đúng.đúng.

Page 176: ThiếT Kế Và đáNh Giá ThuậT ToáN

176176

Phân tích thuật toánPhân tích thuật toán

Xác xuất để có k người vào vòng 2 là:Xác xuất để có k người vào vòng 2 là:

p(n,k) = C^k_n (1/n)^k (1-1/n)^(n-k)p(n,k) = C^k_n (1/n)^k (1-1/n)^(n-k)

P(n,0) = (1-1/n)^n.P(n,0) = (1-1/n)^n.

Xác xuất để vòng 1 lặp l lần là Xác xuất để vòng 1 lặp l lần là (1-1/n)^{nl}(1-1/n)^{nl}

Xác xuất để t.t. không dừng là = 0Xác xuất để t.t. không dừng là = 0

Page 177: ThiếT Kế Và đáNh Giá ThuậT ToáN

177177

Chương 8: Về độ phức tạp tính Chương 8: Về độ phức tạp tính toántoán

I.I. Cây quyết địnhCây quyết định

II.II. Qui dẫnQui dẫn

III.III. Giới thiệu về NP- đầy đủGiới thiệu về NP- đầy đủ1)1) Lớp P và NPLớp P và NP

2)2) Một số bài toán NP- đầy đủMột số bài toán NP- đầy đủ

3)3) Định lý CookĐịnh lý Cook

4)4) Một số qui dẫnMột số qui dẫn

Page 178: ThiếT Kế Và đáNh Giá ThuậT ToáN

178178

Cây quyết địnhCây quyết định

Vấn đềVấn đề: Có một bảng n phần tử cần : Có một bảng n phần tử cần được sắp xếp tăng dần. Cần tối thiểu được sắp xếp tăng dần. Cần tối thiểu bao nhiêu phép so sánhbao nhiêu phép so sánh để thực hiện để thực hiện thuật toán ?thuật toán ?

Chú ýChú ý: chỉ tính so sánh các phần tử, : chỉ tính so sánh các phần tử, không tính so sánh các chỉ số.không tính so sánh các chỉ số.

Page 179: ThiếT Kế Và đáNh Giá ThuậT ToáN

179179

Định nghĩa cây quyết địnhĐịnh nghĩa cây quyết định

Định nghĩaĐịnh nghĩa: : một cây quyết địnhmột cây quyết định là một cây nhị phân là một cây nhị phân có hướng và được dán nhãn,có hướng và được dán nhãn,

- mỗi đỉnh trong chứa một phép so sánh 2 phần tử mỗi đỉnh trong chứa một phép so sánh 2 phần tử cần được xếpcần được xếp

- Mỗi lá chứa một hoán vị các phần tửMỗi lá chứa một hoán vị các phần tử

Cho một thứ tự, một Cho một thứ tự, một đường đi trong câyđường đi trong cây bắt đầu từ bắt đầu từ gốc, và đặt các câu hỏi mà nó gặp: nếu trả lới gốc, và đặt các câu hỏi mà nó gặp: nếu trả lới “đúng” thì rẽ trái, nếu “không” thì rẽ phải. Đường “đúng” thì rẽ trái, nếu “không” thì rẽ phải. Đường kết thúc ở một lá. Lá này chứa kết quả ứng với kết thúc ở một lá. Lá này chứa kết quả ứng với thứ tự vào.thứ tự vào.

Page 180: ThiếT Kế Và đáNh Giá ThuậT ToáN

180180

Tính chấtTính chất

- Một cây quyết định là đúngMột cây quyết định là đúng để sắp để sắp xếp n phần tử nếu với mọi thứ tự vào xếp n phần tử nếu với mọi thứ tự vào đều cho ra kết quả đúng cới thứ tự đều cho ra kết quả đúng cới thứ tự đó.đó.

- Một cây quyết định là gọnMột cây quyết định là gọn nếu không nếu không có đường nào mâu thuẫn, tức là mọi có đường nào mâu thuẫn, tức là mọi lá đều nhận được từ gốc qua một dãy lá đều nhận được từ gốc qua một dãy các quyết định đúng.các quyết định đúng.

Page 181: ThiếT Kế Và đáNh Giá ThuậT ToáN

181181

Ví dụ cây quyết định sắp 3 Ví dụ cây quyết định sắp 3 sốsố

A<B

A<CA<C

B<CB<C

A < B < C

A < C ≤ B C ≤ A< B B ≤ A <C B < C < A

C ≤ B ≤ A

Page 182: ThiếT Kế Và đáNh Giá ThuậT ToáN

182182

Thuật toánThuật toán

Mọi cây quyết định đúng để sắp xếp n số sẽ Mọi cây quyết định đúng để sắp xếp n số sẽ cho một thuật toán tương ứng để sắp xếp cho một thuật toán tương ứng để sắp xếp n số đó.n số đó.

Bài tập: 1. Viết thuật toán tương ứng với cây Bài tập: 1. Viết thuật toán tương ứng với cây quyết định đã cho.quyết định đã cho.

2. Vẽ cây quyết định gọn tương ứng cho các 2. Vẽ cây quyết định gọn tương ứng cho các t.t. sắp xếp chèn vào, lựa chọn, xen kẽ với t.t. sắp xếp chèn vào, lựa chọn, xen kẽ với 3 số. 3 số.

Page 183: ThiếT Kế Và đáNh Giá ThuậT ToáN

183183

Nhận xétNhận xét

- Vẽ cây quyết định cho thuật toán sắp Vẽ cây quyết định cho thuật toán sắp xếp vun đống cho 3 số.xếp vun đống cho 3 số.

- Nhận xét gì về cây này: có bao nhiêu Nhận xét gì về cây này: có bao nhiêu lá ? Có các phép so sánh thừa hay lá ? Có các phép so sánh thừa hay không ? Cây có gọn không ?không ? Cây có gọn không ?

Page 184: ThiếT Kế Và đáNh Giá ThuậT ToáN

184184

- Nhận xét gì về độ cao của các cây Nhận xét gì về độ cao của các cây quyết định ?quyết định ?

- Độ dài lớn nhất từ đỉnh tới một lá nói Độ dài lớn nhất từ đỉnh tới một lá nói lên điều gì ?lên điều gì ?

Page 185: ThiếT Kế Và đáNh Giá ThuậT ToáN

185185

Thời gian tối đaThời gian tối đa

Bổ đề 1Bổ đề 1: Mọi cây nhị phân k lá có độ cao ít : Mọi cây nhị phân k lá có độ cao ít nhất là bằng [lg k]nhất là bằng [lg k]

Bổ đề 2Bổ đề 2: Mọi cây quyết định đúng để xếp n : Mọi cây quyết định đúng để xếp n số có ít nhất k! lásố có ít nhất k! lá

Định lýĐịnh lý: Mọi thuật toán để xếp n số bằng các : Mọi thuật toán để xếp n số bằng các phép so sánh sẽ mất thời gian là phép so sánh sẽ mất thời gian là ΩΩ(n lg n) (n lg n) trong trường hợp xấu nhấttrong trường hợp xấu nhất

Page 186: ThiếT Kế Và đáNh Giá ThuậT ToáN

186186

Thời gian trung bìnhThời gian trung bình

Định nghĩaĐịnh nghĩa: độ cao trung bình của cây nhị phân : độ cao trung bình của cây nhị phân A là tổng độ sâu của các lá chia cho số lá A là tổng độ sâu của các lá chia cho số lá

Bổ đề 3Bổ đề 3: Mọi cây nhị phân k lá có độ cao trung : Mọi cây nhị phân k lá có độ cao trung bình ít nhất là bằng [lg k]bình ít nhất là bằng [lg k]

Định lýĐịnh lý: Mọi thuật toán để xếp n số bằng các : Mọi thuật toán để xếp n số bằng các phép so sánh sẽ mất thời gian trung bình là phép so sánh sẽ mất thời gian trung bình là ΩΩ(n lg n).(n lg n).

Page 187: ThiếT Kế Và đáNh Giá ThuậT ToáN

187187

Bài tậpBài tập

1.1. Tìm công thức chính xác cho số các Tìm công thức chính xác cho số các phép so sánh trong trường hợp xấu phép so sánh trong trường hợp xấu nhất của t.t. xếp chèn vào và lựa nhất của t.t. xếp chèn vào và lựa chọn.chọn.

2.2. Tìm công thức chính xác cho số các Tìm công thức chính xác cho số các phép so sánh tính trung bình của phép so sánh tính trung bình của t.t. xếp chèn vào và lựa chọn.t.t. xếp chèn vào và lựa chọn.

3.3. So sánh hai kết quả này.So sánh hai kết quả này.

Page 188: ThiếT Kế Và đáNh Giá ThuậT ToáN

188188

Một ví dụ nhỏMột ví dụ nhỏ

function sort(T[1..n]){function sort(T[1..n]){i = min (T); j = max(T);i = min (T); j = max(T);table C[i..j]=0;table C[i..j]=0;for (k=1 to n) do C[T[k]]=C[T[k]]+1;for (k=1 to n) do C[T[k]]=C[T[k]]+1;k=1;k=1;for (p=i to j) do for (p=i to j) do

for (q=1 to C[p]) do {T[k]=p; for (q=1 to C[p]) do {T[k]=p; k=k+1;}k=k+1;}

}}

Page 189: ThiếT Kế Và đáNh Giá ThuậT ToáN

189189

Câu hỏiCâu hỏi

1.1. Chạy t.t. trên cho bảng T[1..10] = Chạy t.t. trên cho bảng T[1..10] = {3,1,4,1,5,9,2,6,5,3}{3,1,4,1,5,9,2,6,5,3}

2.2. Tính xem để xếp n số, t.t. này thực Tính xem để xếp n số, t.t. này thực hiện bao nhiêu phép so sánh giữa hiện bao nhiêu phép so sánh giữa các sốcác số

Page 190: ThiếT Kế Và đáNh Giá ThuậT ToáN

190190

Thời gian đa thức: Vấn đề trừu Thời gian đa thức: Vấn đề trừu tượngtượng

Vấn đề trừu tượng Q: là một quan hệ hai ngôi Vấn đề trừu tượng Q: là một quan hệ hai ngôi trên tập các trạng thái I và tập các lời giải S.trên tập các trạng thái I và tập các lời giải S.

Bài toán quyết định: là có một lời giải Co’/KhôngBài toán quyết định: là có một lời giải Co’/Không

Bài toán tối ưu: có một đại lượng cần cực tiểu Bài toán tối ưu: có một đại lượng cần cực tiểu (đại) hóa(đại) hóacó thể đưa về bài toán quyết định: đặt một giá có thể đưa về bài toán quyết định: đặt một giá trị biên.trị biên.

Page 191: ThiếT Kế Và đáNh Giá ThuậT ToáN

191191

Mã hóaMã hóa

- Một mã hóa của một tập S các đối Một mã hóa của một tập S các đối tượng trừu tượng là một ánh xạ e từ tượng trừu tượng là một ánh xạ e từ S vào các dãy nhị phân.S vào các dãy nhị phân.

- Một t.t. máy tính giải một vấn đề trừu Một t.t. máy tính giải một vấn đề trừu tượng sẽ nhận một mã hóa của một tượng sẽ nhận một mã hóa của một trạng thái như là đầu vào.trạng thái như là đầu vào.

- Vấn đề cụ thể: là vấn đề mà các Vấn đề cụ thể: là vấn đề mà các trạng thái là các dãy nhị phân. trạng thái là các dãy nhị phân.

Page 192: ThiếT Kế Và đáNh Giá ThuậT ToáN

192192

Thuật toán thời gian đa thứcThuật toán thời gian đa thức

Thuật toán giải một vấn đề cụ thể trong thời Thuật toán giải một vấn đề cụ thể trong thời gian O(T(n)) nếu: mỗi đầu vào i có độ dài n, gian O(T(n)) nếu: mỗi đầu vào i có độ dài n, t.t. cho kết quả trong thời gian = O(T(n)).t.t. cho kết quả trong thời gian = O(T(n)).

Một vấn đề cụ thể giải được trong thời gian đa Một vấn đề cụ thể giải được trong thời gian đa thức nếu tồn tại t.t. giải nó trong t.g. O(n^k), thức nếu tồn tại t.t. giải nó trong t.g. O(n^k), k hằng số.k hằng số.

Lớp P = {vấn đề cụ thể giải được trong t.g.đ.t.}Lớp P = {vấn đề cụ thể giải được trong t.g.đ.t.}

Page 193: ThiếT Kế Và đáNh Giá ThuậT ToáN

193193

Mã hóa chuẩnMã hóa chuẩn

- Một vấn đề trừu tượng có thể có nhiều Một vấn đề trừu tượng có thể có nhiều cách mã hóa thành vấn đề cụ thể.cách mã hóa thành vấn đề cụ thể.

- Mã hóa chuẩn: các số tự nhiên theo biểu Mã hóa chuẩn: các số tự nhiên theo biểu diễn (tương đương đa thức với) nhị phân.diễn (tương đương đa thức với) nhị phân.

- Một tập phần tử được mã theo dãy các mã Một tập phần tử được mã theo dãy các mã của các phần tử.của các phần tử.

- Đồ thị, công thức, … được mã tương tựĐồ thị, công thức, … được mã tương tự

* Ta có thể xét vấn đề trừu tượng như vấn * Ta có thể xét vấn đề trừu tượng như vấn đề cụ thểđề cụ thể

Page 194: ThiếT Kế Và đáNh Giá ThuậT ToáN

194194

Ngôn ngữNgôn ngữ

Bảng chữ cáiBảng chữ cái A: tập A: tập hữu hạn hữu hạn các ký tự.các ký tự.

TừTừ: 1 dãy các chữ cái của A.: 1 dãy các chữ cái của A.

Một Một ngôn ngữngôn ngữ L trên A: 1 tập các từ L trên A: 1 tập các từ trên A.trên A.

Từ rỗng: Từ rỗng: εε

Ngôn ngữ rỗng: Ngôn ngữ rỗng: ØØ

Ngôn ngữ gồm tất cả các từ trên A: Ngôn ngữ gồm tất cả các từ trên A: A*A*

Page 195: ThiếT Kế Và đáNh Giá ThuậT ToáN

195195

Các phép toán trên các ngôn Các phép toán trên các ngôn ngữngữ

- Hợp, giao, Hợp, giao, - phần bù phần bù Ḹ = A* \ LḸ = A* \ L- dán (concatenation): dán (concatenation):

L=L1.L2 = {xy: x L=L1.L2 = {xy: x ЄЄ L1, y L1, y ЄЄ L2} L2}- Bao đóng Kleene: Bao đóng Kleene:

L*={L*={εε} U L U L^2 U L^3 U …} U L U L^2 U L^3 U …

Page 196: ThiếT Kế Và đáNh Giá ThuậT ToáN

196196

Bài toán - ngôn ngữBài toán - ngôn ngữ

ΣΣ = {0,1}. = {0,1}.Bài toán quyết đinh Q Bài toán quyết đinh Q Ngôn ngữ L = {x Ngôn ngữ L = {x ЄЄ ΣΣ*: Q(x) = 1}*: Q(x) = 1}

Thuật toán A Thuật toán A chấp nhậnchấp nhận một từmột từ x x ЄЄ ΣΣ*: nếu với đầu vào x, *: nếu với đầu vào x, A cho kết quả A(x) = 1.A cho kết quả A(x) = 1.

A A loại bỏloại bỏ x nếu A(x) = 0 x nếu A(x) = 0Ngôn ngữ L được chấp nhận bởi A:L={x Ngôn ngữ L được chấp nhận bởi A:L={x ЄЄ ΣΣ*:A(x)=1}*:A(x)=1}L được chấp nhận bởi A L được chấp nhận bởi A trong t.g.đ.t.trong t.g.đ.t. nếu có hằng k: mọi nếu có hằng k: mọi

từ x độ dài n được A chấp nhận trong t.g O(n^k)từ x độ dài n được A chấp nhận trong t.g O(n^k)

- Chú ý:- Chú ý: nếu x |nếu x |ЄЄ L, A có thể không loai bỏ x, mà chạy L, A có thể không loai bỏ x, mà chạy không dừng.không dừng.

Page 197: ThiếT Kế Và đáNh Giá ThuậT ToáN

197197

Ngôn ngữ được quyết địnhNgôn ngữ được quyết định

Một ngôn ngữ L được quyết định bởi t.t. Một ngôn ngữ L được quyết định bởi t.t. A:A: nếu x thuộc L nếu x thuộc L A chấp nhận x A chấp nhận x

và x không thuộc L và x không thuộc L A loại bỏ x. A loại bỏ x.

L được quyết định bởi A L được quyết định bởi A trong t.g.đ.t.trong t.g.đ.t. nếu có hằng k: mọi từ x độ dài n nếu có hằng k: mọi từ x độ dài n được A quyết định trong t.g O(n^k)được A quyết định trong t.g O(n^k)

Page 198: ThiếT Kế Và đáNh Giá ThuậT ToáN

198198

Lớp PLớp P

P = {L ngôn ngữ trên P = {L ngôn ngữ trên ΣΣ: có t.t. A : có t.t. A quyết quyết đinhđinh L trong t.g.đ.t.} L trong t.g.đ.t.}

Định lý:Định lý:

P = {L ngôn ngữ trên P = {L ngôn ngữ trên ΣΣ: có t.t. A ch L : có t.t. A ch L chấp nhậnchấp nhận L trong t.g.đ.t.} L trong t.g.đ.t.}

Page 199: ThiếT Kế Và đáNh Giá ThuậT ToáN

199199

Thuật toán kiểm chứngThuật toán kiểm chứng

Thuật toán kiểm chứng: là một t.t. A hai Thuật toán kiểm chứng: là một t.t. A hai biến, một biến bình thướng là một xâu nhị biến, một biến bình thướng là một xâu nhị phân đàu vào x, và một biến là xâu nhị phân đàu vào x, và một biến là xâu nhị phân y (được gọi là xâu kiểm chứng).phân y (được gọi là xâu kiểm chứng).

T.t A kiểm chứng x nếu tồn tại xâu kiểm T.t A kiểm chứng x nếu tồn tại xâu kiểm chứng y để A(x,y) =1.chứng y để A(x,y) =1.

Ngôn ngữ L được kiểm chứng bởi A là:Ngôn ngữ L được kiểm chứng bởi A là:L = {x L = {x ЄЄ ΣΣ*: tồn tại y *: tồn tại y ЄЄ ΣΣ*: A(x,y)=1 }*: A(x,y)=1 }

Page 200: ThiếT Kế Và đáNh Giá ThuậT ToáN

200200

Lớp NPLớp NP

Lớp độ phức tạp tính toán NP là lớp các Lớp độ phức tạp tính toán NP là lớp các ngôn ngữ được kiểm chứng trong thời gian ngôn ngữ được kiểm chứng trong thời gian đa thức.đa thức.

L L ЄЄ NP NP tồn tại t.t. 2 biến t.g.đ.t. A và tồn tại t.t. 2 biến t.g.đ.t. A và hằng số c sao cho:hằng số c sao cho:

L= L= {x {x ЄЄ ΣΣ*: tồn tại y *: tồn tại y ЄЄ ΣΣ*, |y|=O(|x|^c): *, |y|=O(|x|^c): A(x,y)=1 }A(x,y)=1 }

Ta nói: A kiểm chứng L trong t.g.đ.t.Ta nói: A kiểm chứng L trong t.g.đ.t.

Page 201: ThiếT Kế Và đáNh Giá ThuậT ToáN

201201

Ví dụVí dụ

Bài toán: chu trình Hamilton: Bài toán: chu trình Hamilton:

HAM-CYCLE HAM-CYCLE ЄЄ NP NP

Page 202: ThiếT Kế Và đáNh Giá ThuậT ToáN

202202

Lớp co-NPLớp co-NP

- L L ЄЄ co-NP co-NP ΣΣ*\L *\L ЄЄ NP NP- 4 trường hợp có thể xảy ra:4 trường hợp có thể xảy ra:

Page 203: ThiếT Kế Và đáNh Giá ThuậT ToáN

203203

Phép qui dẫnPhép qui dẫn

Ngôn ngữ L1 qui dẫn được về ngôn Ngôn ngữ L1 qui dẫn được về ngôn ngữ L2 trong t.g.đ.t. (L1 ≤_P L2) nếu ngữ L2 trong t.g.đ.t. (L1 ≤_P L2) nếu tồn tại một hàm tính được trong tồn tại một hàm tính được trong t.g.đ.t.t.g.đ.t.

f: f: ΣΣ* -> * -> ΣΣ* sao cho x * sao cho x ЄЄ L1 L1 f(x) f(x) ЄЄ L2 L2

f: hàm qui dẫnf: hàm qui dẫn

T.t. F t.g.đ.t. tính f: t.t. qui dẫnT.t. F t.g.đ.t. tính f: t.t. qui dẫn

Page 204: ThiếT Kế Và đáNh Giá ThuậT ToáN

204204

Bài tậpBài tập

1.1. Chứng minh rằng quan hệ qui dẫn Chứng minh rằng quan hệ qui dẫn là một quan hệ thứ tự.là một quan hệ thứ tự.

2.2. Chứng minh bổ đề:Chứng minh bổ đề:

Bổ đề: Cho 2 ngôn ngữ L1, L2Bổ đề: Cho 2 ngôn ngữ L1, L2, nếu L1 , nếu L1 ≤ L2 thì ≤ L2 thì

L2 L2 ЄЄ P kéo theo L1 P kéo theo L1 ЄЄ P. P.

Page 205: ThiếT Kế Và đáNh Giá ThuậT ToáN

205205

Lớp NP- đầy đủLớp NP- đầy đủ

Ngôn ngữ L là NP-đầy đủ (NPC) nếu:Ngôn ngữ L là NP-đầy đủ (NPC) nếu:

1.1. L L ЄЄ NP, và NP, và

2.2. Với mọi L’ Với mọi L’ ЄЄ NP thì L’ NP thì L’ ≤≤_P L._P L.

Ngôn ngữ L là NP-khó nếu L thỏa mãn Ngôn ngữ L là NP-khó nếu L thỏa mãn đk 2 (nhưng không nhất thiết đk 1).đk 2 (nhưng không nhất thiết đk 1).

Page 206: ThiếT Kế Và đáNh Giá ThuậT ToáN

206206

P versus NPP versus NP

Định lý: Nếu có một bài toán NP-đầy Định lý: Nếu có một bài toán NP-đầy đủ nào giải được trong t.g.đ.t. thì P = đủ nào giải được trong t.g.đ.t. thì P = NP.NP.

Nếu có một bài toán trong NP nào mà Nếu có một bài toán trong NP nào mà không giải được trong t.g.đ.t. thì tất không giải được trong t.g.đ.t. thì tất cả các bài toán NP-đầy đủ đều không cả các bài toán NP-đầy đủ đều không giải được trong t.g.đ.t. giải được trong t.g.đ.t.

Page 207: ThiếT Kế Và đáNh Giá ThuậT ToáN

207207

Chứng minh tính NP-đầy đủChứng minh tính NP-đầy đủ

1. Bổ đề: Nếu L là một ngôn ngữ sao cho 1. Bổ đề: Nếu L là một ngôn ngữ sao cho L’ ≤_P L với L’ L’ ≤_P L với L’ ЄЄ NPC, thì L là NP-khó. Hơn NPC, thì L là NP-khó. Hơn nữa, nếu L nữa, nếu L ЄЄ NP thì L NP thì L ЄЄ NPC. NPC.

2. Để chứng minh L 2. Để chứng minh L ЄЄ NPC: NPC:- chứng minh L - chứng minh L ЄЄ NP NP- chọn một ngôn ngữ L’ - chọn một ngôn ngữ L’ ЄЄ NPC NPC- tìm một t.t. F tính hàm f chuyển mối trạng thái - tìm một t.t. F tính hàm f chuyển mối trạng thái của L’ về một trạng thái của Lcủa L’ về một trạng thái của L- chứng minh f thỏa mãn: x - chứng minh f thỏa mãn: x ЄЄ L’ L’ f(x) f(x) ЄЄ L với mọi L với mọi x x ЄЄ ΣΣ**- chứng minh t.t. F chạy trong t.g.đ.t.- chứng minh t.t. F chạy trong t.g.đ.t.

Page 208: ThiếT Kế Và đáNh Giá ThuậT ToáN

208208

Circuit satisfiabilityCircuit satisfiability

Combinational element: một dãy các phần Combinational element: một dãy các phần tử có môt số cố định các phần tử vào và ra tử có môt số cố định các phần tử vào và ra và hoàn thành tính toán một hàm.và hoàn thành tính toán một hàm.

Boolean combinational element: đầu vào và Boolean combinational element: đầu vào và ra là thuộc {0,1} (0: sai, 1: đúng)ra là thuộc {0,1} (0: sai, 1: đúng)

Một boolean combinational element dùng để Một boolean combinational element dùng để tính 1 hàm boolean đơn được gọi là một tính 1 hàm boolean đơn được gọi là một logic gate.logic gate.

Page 209: ThiếT Kế Và đáNh Giá ThuậT ToáN

209209

Boolean combinational circuit xây Boolean combinational circuit xây dựng từ các boolean combinational dựng từ các boolean combinational elements (được nối với nhau bằng elements (được nối với nhau bằng các dây(wire))các dây(wire))

Page 210: ThiếT Kế Và đáNh Giá ThuậT ToáN

210210

1. Circuit input (đầu vào): các dây không nối với 1. Circuit input (đầu vào): các dây không nối với một phần tử vào nàomột phần tử vào nào

Circuit output (đàu ra): các dây không nối với một Circuit output (đàu ra): các dây không nối với một phần tử ra nàophần tử ra nào

Ta xét các circuit chỉ có một đầu ra.Ta xét các circuit chỉ có một đầu ra.

2. Một phép gán giá trị của một circuit là một tập 2. Một phép gán giá trị của một circuit là một tập các giá trị đầu vào.các giá trị đầu vào.

3. Môt circuit là satisfiable (thỏa mãn) nếu có một 3. Môt circuit là satisfiable (thỏa mãn) nếu có một phép gán giá trị đầu vào sao cho đàu ra của phép gán giá trị đầu vào sao cho đàu ra của circuit là 1.circuit là 1.

Page 211: ThiếT Kế Và đáNh Giá ThuậT ToáN

211211

Ví dụVí dụ

Page 212: ThiếT Kế Và đáNh Giá ThuậT ToáN

212212

Bài toán Circuit satisfiabilityBài toán Circuit satisfiability

““Cho một boolean combinational circuit gồm Cho một boolean combinational circuit gồm các cổng AND, OR, NOT; nó có thỏa mãn các cổng AND, OR, NOT; nó có thỏa mãn hay không ?”hay không ?”

Độ dài của circuit: số các boolean Độ dài của circuit: số các boolean combinational elements + số các wirescombinational elements + số các wires

Ngôn ngữ:Ngôn ngữ:CIRCUIT-SAT={<C>: C là một satisfiable CIRCUIT-SAT={<C>: C là một satisfiable

boolean combinational circuit}boolean combinational circuit}

Page 213: ThiếT Kế Và đáNh Giá ThuậT ToáN

213213

CIRCUIT-SAT CIRCUIT-SAT ЄЄ NP-đầy đủ NP-đầy đủ

Bổ đề: CIRCUIT-SAT Bổ đề: CIRCUIT-SAT ЄЄ NP NP

Bổ đề: Bổ đề: CIRCUIT-SAT CIRCUIT-SAT là NP-khólà NP-khó

Định lý: Định lý: CIRCUIT-SAT CIRCUIT-SAT ЄЄ NP-đầy đủ NP-đầy đủ

Page 214: ThiếT Kế Và đáNh Giá ThuậT ToáN

214214

SATSAT

Một trạng thái của bài toán SAT là một công thức Một trạng thái của bài toán SAT là một công thức boolean boolean ΦΦ gồm: gồm:

1.1. Các biến boolean: x1, x2, …Các biến boolean: x1, x2, …2.2. Các liên kết boolean: các hàm boolean một hoặc hai Các liên kết boolean: các hàm boolean một hoặc hai

biến: AND, OR, NOT, ->, biến: AND, OR, NOT, ->, 3.3. Các dấu ngoặcCác dấu ngoặc

Một công thức Một công thức ΦΦ là satisfiable (thỏa mãn được )nếu là satisfiable (thỏa mãn được )nếu có một phép gán giá trị để giá trị ra của có một phép gán giá trị để giá trị ra của ΦΦ là 1. là 1.

SAT = {<SAT = {<ΦΦ>: >: ΦΦ là một công thức thỏa mãn được} là một công thức thỏa mãn được}

Page 215: ThiếT Kế Và đáNh Giá ThuậT ToáN

215215

SAT SAT ЄЄ NP-đầy đủ NP-đầy đủ

Đinh lý: SAT Đinh lý: SAT ЄЄ NP-đầy đủ NP-đầy đủ Chứng minh: Chứng minh:

- SAT - SAT ЄЄ NP NP

- Qui dẫn CIRCUIT-SAT về SAT.- Qui dẫn CIRCUIT-SAT về SAT.

Page 216: ThiếT Kế Và đáNh Giá ThuậT ToáN

216216

3-CNF SAT3-CNF SAT

1 literal trong một công thức boolean là một 1 literal trong một công thức boolean là một biến x hoặc biến x hoặc ¬x.¬x.

1 công thức boolean là có dạng hợp chuẩn 1 công thức boolean là có dạng hợp chuẩn (conjunctive normal form, CNF), nếu nó được (conjunctive normal form, CNF), nếu nó được biểu diễn như là một phép AND của các biểu diễn như là một phép AND của các clause, mỗi clause là một phép OR của các clause, mỗi clause là một phép OR của các literal.literal.

1 công thức boolean là một dạng 3-CNF nếu 1 công thức boolean là một dạng 3-CNF nếu mỗi clause của nó có đúng 3 literal khác mỗi clause của nó có đúng 3 literal khác nhau.nhau.

3-CNF-SAT={Ф Є 3-CNF và là công thức thoả 3-CNF-SAT={Ф Є 3-CNF và là công thức thoả mãn được}mãn được}

Page 217: ThiếT Kế Và đáNh Giá ThuậT ToáN

217217

Định lý: 3-CNF-SAT Định lý: 3-CNF-SAT Є NP-đầy đủЄ NP-đầy đủ

Chứng minh:Chứng minh:

- - 3-CNF-SAT 3-CNF-SAT Є NPЄ NP

- Qui dẫn SAT về 3-CNF-SAT- Qui dẫn SAT về 3-CNF-SAT

3-CNF-SAT 3-CNF-SAT Є NP-đầy đủЄ NP-đầy đủ

Page 218: ThiếT Kế Và đáNh Giá ThuậT ToáN

218218

3-CNF-SAT là NP-khó3-CNF-SAT là NP-khó

Ý tưởngÝ tưởng: chứng minh SAT ≤: chứng minh SAT ≤P P 3-CNF-SAT: 3-CNF-SAT: Với mỗi công thức boolean Với mỗi công thức boolean ΦΦ, ta tìm tương , ta tìm tương

ứng một công thức f(ứng một công thức f(ΦΦ) ) ЄЄ 3-CNF. 3-CNF. Xây dựng f(Xây dựng f(ΦΦ) theo 3 bước:) theo 3 bước:

1.1. ΦΦ’: là công thức gồm phép AND của các clause’: là công thức gồm phép AND của các clause2.2. ΦΦ’’: có dạng chuẩn CNF’’: có dạng chuẩn CNF3.3. ΦΦ’’’: có dạng chuẩn 3-CNF. f(’’’: có dạng chuẩn 3-CNF. f(ΦΦ)= )= ΦΦ’’’ ’’’

Chứng minh: Chứng minh: ΦΦ thỏa mãn được thỏa mãn được f( f(ΦΦ) thỏa mãn được) thỏa mãn được

Chứng minh f(Chứng minh f(ΦΦ) có độ dài đa thức và f có ) có độ dài đa thức và f có tgđttgđt

Page 219: ThiếT Kế Và đáNh Giá ThuậT ToáN

219219

Bước 1: Bước 1: ΦΦ -> -> ΦΦ’’

Page 220: ThiếT Kế Và đáNh Giá ThuậT ToáN

220220

Xây dựng cây nhị phân:Xây dựng cây nhị phân: Các lá là các literal của Các lá là các literal của ΦΦ Các nốt trong là các toán tử của Các nốt trong là các toán tử của ΦΦ Thêm một biến yThêm một biến yi i cho mỗi nốt trongcho mỗi nốt trong

ΦΦ’: là phép AND của gốc và các ’: là phép AND của gốc và các clause tương ứng với các nốt trong clause tương ứng với các nốt trong (mỗi clause có ≤ 3 literal)(mỗi clause có ≤ 3 literal)

Page 221: ThiếT Kế Và đáNh Giá ThuậT ToáN

221221

ΦΦ’ -> ’ -> ΦΦ’’’’

Với mỗi clause C của Với mỗi clause C của ΦΦ’:’: Viết bảng giá trị của C theo các biếnViết bảng giá trị của C theo các biến Hợp các giá trị 0 lại, được dạng chuẩn DNF của Hợp các giá trị 0 lại, được dạng chuẩn DNF của

¬C¬C Theo luật De Morgan, AND -> OR, OR ->AND: Theo luật De Morgan, AND -> OR, OR ->AND:

được dạng chuẩn CNF của C (C là AND của các được dạng chuẩn CNF của C (C là AND của các clause, mỗi clause là gồm các phép OR)clause, mỗi clause là gồm các phép OR)

ΦΦ’’: là AND của các tất cả clause ’’: là AND của các tất cả clause nhận được (mỗi clause có ≤ 3 literal)nhận được (mỗi clause có ≤ 3 literal)

Page 222: ThiếT Kế Và đáNh Giá ThuậT ToáN

222222

ΦΦ’’ -> ’’ -> ΦΦ’’’’’’

ΦΦ’’ = C’’ = C1 1 ٨٨ CC2 2 ٨٨ … … ٨٨ CCkk

Nếu CNếu Ci i có:có: 3 literal: để nguyên3 literal: để nguyên 2 literal C2 literal Ci i = x = x ٧٧ y = (x y = (x ٧٧ y y ٧٧ p) p) ٨٨ (x (x ٧٧ y y ٧٧

¬p) ¬p) 1 literal 1 literal CCi i = x = x = (x = (x ٧٧ p p ٧٧ q) q) ٨٨ (x (x ٧٧ p p ٧٧ ¬q) ¬q)

٨٨ (x (x ٧٧ ¬p ¬p ٧٧ q) q) ٨٨ (x (x ٧٧ ¬p ¬p ٧٧ ¬q) ¬q) ΦΦ’’’: nhận được ’’’: nhận được ЄЄ 3-CNF 3-CNF

Page 223: ThiếT Kế Và đáNh Giá ThuậT ToáN

223223

Chứng minh tính đúng đắnChứng minh tính đúng đắn

ΦΦ thỏa mẫn được thỏa mẫn được ΦΦ’’’ thỏa mãn ’’’ thỏa mãn đượcđược

ΦΦ’’’: độ dài đa thức’’’: độ dài đa thức Tính Tính ΦΦ’’’: trong thời gian đa thức’’’: trong thời gian đa thức

Page 224: ThiếT Kế Và đáNh Giá ThuậT ToáN

224224

Bài toán chu trình HamiltonBài toán chu trình Hamilton

Cho đồ thị G=(V,E) vô hướngCho đồ thị G=(V,E) vô hướng Một chu trình Hamilton trong G là một chu trình Một chu trình Hamilton trong G là một chu trình

đơn và đi qua tất cả các đỉnh của G (qua mỗi đỉnh đơn và đi qua tất cả các đỉnh của G (qua mỗi đỉnh đúng một lần, trừ đỉnh đầu trùng đỉnh cuối).đúng một lần, trừ đỉnh đầu trùng đỉnh cuối).

Đồ thị G được gọi là đồ thị Hamilton nếu nó có Đồ thị G được gọi là đồ thị Hamilton nếu nó có chu trình Hamilton, nếu không nó được gọi là đồ chu trình Hamilton, nếu không nó được gọi là đồ thi không phải Hamilton.thi không phải Hamilton.

Bài toán chu trình Hamilton: đồ thị G có chu trình Bài toán chu trình Hamilton: đồ thị G có chu trình Hamilton hay không ? Hamilton hay không ?

HAM-CYCLE = {<G>: G là đồ thị Hamilton}HAM-CYCLE = {<G>: G là đồ thị Hamilton}

Page 225: ThiếT Kế Và đáNh Giá ThuậT ToáN

225225

HAM-CYLCE HAM-CYLCE ЄЄ NP-đầy đủ NP-đầy đủ

HAM-CYCLE HAM-CYCLE ЄЄ NP NP 3-CNF-SAT ≤3-CNF-SAT ≤PP HAM-CYCLE: HAM-CYCLE:

Xây dựng hàm f: Xây dựng hàm f:

ΦΦ ЄЄ 3-CNF -> đồ thị G=(V,E) 3-CNF -> đồ thị G=(V,E)

Sao cho Sao cho ΦΦ thỏa mãn được thỏa mãn được G là đồ G là đồ thị Hamilton.thị Hamilton.

Page 226: ThiếT Kế Và đáNh Giá ThuậT ToáN

226226

Ý tưởngÝ tưởng

ΦΦ: các biến x: các biến x11, …, x, …, xnn; các clause: C; các clause: C11,…,C,…,Ckk

Đồ thị G gồm hai phần: trái, phải:Đồ thị G gồm hai phần: trái, phải:

1.1. Trái: mỗi CTrái: mỗi Cii: xây dựng một widget dạng B. : xây dựng một widget dạng B. Nối bNối bi4i4 với b với bi+1,1, i+1,1, i=1,2,…,k-1 i=1,2,…,k-1

2.2. Phải: mỗi xPhải: mỗi xmm: x’: x’m m và x’’và x’’m m nối bằng e nối bằng em m và và ¬e¬emm: e: emm ЄЄ h h x xm m = 1 = 1

3.3. Nối (bNối (b1111 , x , x11’) và (b’) và (bk4k4, x, xnn’’) ’’) 4.4. Nối các clause với các biến có liên quan Nối các clause với các biến có liên quan

bằng các widget dạng A.bằng các widget dạng A.

Page 227: ThiếT Kế Và đáNh Giá ThuậT ToáN

227227

Chứng minh tính đúng đắnChứng minh tính đúng đắn

G G ЄЄ HAM-CYCLE => HAM-CYCLE => ΦΦ ЄЄ 3-CNF-SAT: 3-CNF-SAT:

Chu trình h trong G: Chu trình h trong G:

1.1. (b(b1111 , x , x11’) và (b’) và (bk4k4, x, xnn’’) ’’) ЄЄ h h

2.2. Bên trái: đi qua các widget BBên trái: đi qua các widget B

3.3. Bên phải: qua hoặc eBên phải: qua hoặc emm hoặc ¬e hoặc ¬emm

Gán giá trị cho Gán giá trị cho ΦΦ như sau: như sau:

Nếu eNếu emm ЄЄ h: x h: xmm= 1, nếu ¬e= 1, nếu ¬emm ЄЄ h: x h: xmm = 0 = 0

Page 228: ThiếT Kế Và đáNh Giá ThuậT ToáN

228228

ΦΦ ЄЄ 3-CNF-SAT => 3-CNF-SAT => G G ЄЄ HAM-CYCLE HAM-CYCLE

Xây dựng h như sau:Xây dựng h như sau:

1.1. Nếu xNếu xmm= 1: e= 1: emm ЄЄ h, nếu x h, nếu xmm = 0: ¬e = 0: ¬emm ЄЄ h h

2.2. (b(bijij, b, bịj+1ịj+1) ) ЄЄ h h literal thứ j của C literal thứ j của Cii = = 00

Page 229: ThiếT Kế Và đáNh Giá ThuậT ToáN

229229

Thời gian đa thứcThời gian đa thức

Dễ thấy:Dễ thấy:

1.1. G độ dài đa thứcG độ dài đa thức

2.2. Tính G trong thời gian đa thứcTính G trong thời gian đa thức

Page 230: ThiếT Kế Và đáNh Giá ThuậT ToáN

230230

Bài toán Người đưa hàngBài toán Người đưa hàng

Bài toán: Cho đồ thị G đầy đủ và có Bài toán: Cho đồ thị G đầy đủ và có trong số c(i,j) cho mỗi cạnh (i,j). Tìm trong số c(i,j) cho mỗi cạnh (i,j). Tìm chu trình Hamilton có trọng số nhỏ chu trình Hamilton có trọng số nhỏ nhất.nhất.

Đưa về bài toán quyết định:Đưa về bài toán quyết định:

TSP={<G,c,k>: G=(V,E) đồ thị đầy đủ, c TSP={<G,c,k>: G=(V,E) đồ thị đầy đủ, c hàm số V*V -> Z, k hàm số V*V -> Z, k ЄЄ Z và G có chu Z và G có chu trình người đưa hàng có trọng số ≤ k} trình người đưa hàng có trọng số ≤ k}

Page 231: ThiếT Kế Và đáNh Giá ThuậT ToáN

231231

TSP TSP ЄЄ NP-đầy đủ NP-đầy đủ

1.1. TSP TSP ЄЄ NP: dễ chứng minh NP: dễ chứng minh2.2. Qui dẫn HAM-CYCLE về TSP:Qui dẫn HAM-CYCLE về TSP:

- Cho G=(V,E) - Cho G=(V,E) ЄЄ HAM-CYCLE, xây dựng HAM-CYCLE, xây dựng một trạng thái của TSP như sau:một trạng thái của TSP như sau:G’=(V,E’): E’=V*V; và c là:G’=(V,E’): E’=V*V; và c là:c(i,j) = 1 nếu (i,j) c(i,j) = 1 nếu (i,j) ЄЄ E, =0 nếu (i,j) ¬ E, =0 nếu (i,j) ¬ЄЄ E E<G’,c,0> <G’,c,0> ЄЄ TSP TSP <G> <G> ЄЄ HAM-CYCLE. HAM-CYCLE.- <G’,c,0> có độ dài đa thức và được tính - <G’,c,0> có độ dài đa thức và được tính trong tgđt. trong tgđt.