1. Trang chủ
  2. » Công Nghệ Thông Tin

Phân tích & Thiết kế Giải thuật nâng cao

79 682 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 79
Dung lượng 5,08 MB

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

Nội dung

– Giải thuật là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các phép toán, hoặc hành động cần thực hiện .... Tính chất của thuật toán  Input: Mỗi thuật toán đều có một tập các gi

Trang 1

Phân tích & Thiết kế Giải

thuật nâng cao

Advanced Algorithm Analysis and Design

TS TRẦN CAO ĐỆ Đại Học Cần Thơ 2012

Bài giảng cho Thạc sĩ Ngành HTTT

Trang 2

Phần 1:

KT phân tích và thiết kế giải thuật

TS TRẦN CAO ĐỆ Đại Học Cần Thơ 2012

Trang 3

Chương 1:

KỸ THUẬT PHÂN TÍCH GIẢI THUẬT

TS TRẦN CAO ĐỆ Đại Học Cần Thơ 2012

Trang 4

Thuật toán

 Giải thuật / Thuật toán (algorithm)

– Xuất phát từ nhà toán học Arập Al-Khowarizmi (khoảng năm 825)

– Giải thuật là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các phép toán, hoặc hành động cần thực hiện để cho ta lời giải của bài toán.

Ví dụ thuật toán Euclid

– Input: m, n nguyên dương

– Output: g (ước chung lớn nhất của m và n)

Trang 5

Tính chất của thuật toán

 Input: Mỗi thuật toán đều có một tập các giá trị đầu vào (có thể rỗng)

 Output: Mỗi thuật toán có một tập dữ liệu ra đầu ra (output), tương ứng với input.

 Tính xác định: các bước của thuật toán phải xác định (các thao tác phải rõ ràng, không gây nên sự nhập nhằng).

 Tính chính xác: Thuật toán phải tạo ra các giá trị đầu ra chính xác tương ứng với giá trị đầu vào Trong cùng một điều kiện hai bộ xử lý cùng thực hiện một thuật toán phải cho cùng một kết quả như nhau.

 Tính hữu hạn: Với mọi bộ dữ liệu vào (hợp lệ), thuật toán phải dừng lại sau một số hữu hạn bước thực hiện.

 Tính khả thi: Các phép toán có mặt trong thuật toán phải đủ đơn giản, có thể thực hiện được trong một lượng thời gian hữu hạn (có thể thực hiện bởi con người với giấy, bút trong một khoảng thời gian hữu hạn)

 Tính tổng quát: phải áp dụng được cho một lớp bài toán.

Trang 6

Vấn đề giải được & không giải được

 Một bài toán:

– Có một hoặc nhiều thuật toán giải

 Giải được  Lựa chọn thuật toán

– Không tồn tại thuật toán để giải

 gọi là vấn đề không giải được (bằng thuật toán).

Trang 8

 Tiếp cận 2: theo số phép toán cơ bản mà chương trình phải thực hiện

 Trường hợp xấu nhất

 Trường hợp tốt nhất

 Trường hợp ngẫu nhiên

Trang 9

Độ phức tạp thời gian của giải thuật

 Độ phức tạp thời gian của giải

thuật là một hàm theo kích thước của input, T(n)

Trang 11

– nếu f(n)= Θ (g(n)) ta nói f(n) có tỷ suất tăng là g(n).

– nếu f(n) biễu diễn cho một hàm thời gian thực hiện chương trình và f(n)= Θ (g(n)), ta nói f(n) có độ phức tạp (thời gian) là g(n)

Θ (1), Ω (1), O(1) biểu diễn cho hằng số.

Trang 12

log(n!) = Θ (nlogn)

Trang 13

Tính chất của các tiệm cận

 Phản xạ

f(n) = Θ(f(n)) f(n) = Ω(f(n)f(n) = O(f(n)

 Đối xứng

f(n)= Θ(g(n)) ⇔ g(n)= Θ(f(n)

 Bắc cầu

f(n) = Θ(g(n)) ∧ g(n) = Θ(h(n)) ⇒ f(n)= Θ(h(n))f(n) = Ω(g(n)) ∧ g(n) = Ω(h(n)) ⇒ f(n)= Ω(h(n))f(n) = O(g(n)) ∧ g(n) = O(h(n)) ⇒ f(n)= O(h(n))

Trang 14

O(2n)

O(n!)

Hằng Logarit Tuyến tính gần tuyến tính Bình phương Lập phương Mũ

Giai thừa

Các độ phức tạp thời gian

Trang 15

 Giải thuật đệ qui

– Thiết lập công thức truy hồiT(n) = aT(n/b) + c(n)

- Giải công thức truy hồi (phương trình đệ qui)

 Ví dụ: tính độ phức tạp của quicksort

– T(1)=1

– T(n)=2T(n/2)+n

– Giải ra T(n)=O(nlogn)

Trang 16

Phương trình hồi quy

 T(1)=1

 T(n) = aT(n/b) + d(n), n>1

 Phương pháp giải

– Phương pháp thay thế (n bởi n/b)

– Phương pháp tổng quát với hàm nhân

– Phương pháp tổng quát (Master theorem)

16

Trang 17

= 4k + n (2k-1+…2+1)= n2 + n(2k-1) = n2 + n(n-1) Vậy T(n)=O(n2)

17

Trang 18

Phương pháp tổng quát với hàm nhân

Nghiệm riêng

Nếu d là hàm nhân, tức là d(m*n) = d(m)*d(n)

Thì ta có thể giải được nghiệm riêng dễ dàng

∑j=0k-1ajd(bk-j) = d(b)k ∑j=0k-1(a/d(b))j = (ak-d(b)k)/(a/d(b)-1)

Trang 19

Lời giải với d(n) là hàm nhân

 Nếu a>d(b): T(n)=O(nlog

Trang 20

ba)

 f(n) = Θ(nlog

balogkn), với k≥0 thì T(n) =

Trang 23

Tài liệu tham khảo

 R Sedgewick, Algorithms in Java, Addision-Wesley, 2004 Chapter 1.

 Aho, A V , J E Hopcroft, J D Ullman Data Structure and Algorihtms, 1983.

 Kenneth H Rosen, Discrete Mathematics and its applications,

4th edition, McGraw-Hill, 2000.

 R Sedgewick, Algorithms , 1987.

Trang 24

Chương 2:

KỸ THUẬT THIẾT KẾ GIẢI THUẬT

TS TRẦN CAO ĐỆ Đại Học Cần Thơ 2012

Trang 25

Chia để trị

Divide and conquer

 Giải một bài toán kích thước n,

– chia bài toán đã cho thành a số bài toán con có kích thưóc là b nhỏ hơn n

– Giải các bài toán con (chia để trị)

– Tổng hợp kết quả lại để được lời giải của bài toán ban đầu

 Ví dụ QuickSort: Sắp xếp một danh sách gồm n phần tử

 Tìm một giá trị chốt và phân hoạch danh sách đã cho thành hai danh sách con “bên trái” và “bên phải “

 Sắp xếp “bên trái” và “bên phải” thì ta được danh sách có thứ tự

 Quá trình phân chia sẽ dẫn đến các bài toán sắp xếp một danh sách chỉ gồm một phần tử hoặc gồm nhiều phần tử có khoá bằng nhau, đó chính là các bài toán cơ sở, vì bản thân chúng đã có thứ tự rồi

 Tổng hợp kết quả: hiển nhiên

Trang 26

 2 5 6 1 2 6 8 9

 2 1 2 5 6 6 8 9

 1 2 2 5 6 6 8 9

26

Trang 27

Ví dụ

#define null -1

int a[]

int findPivot_ind(int i, int j){

for (int k=i+1; (k<=j) && a[k]==a[i];

 QuickSort lấy O(nlogn) thời gian để sắp xếp n phần tử trong trường hợp tốt nhất và O(n 2 ) trong trường hợp xấu nhất

Trang 28

Nhân hai số nguyên lớn

 Phương pháp truyền thống

1234X

1112 - 2468 1234 12341234 -Kết quả

 Độ phức tạp

– T(1)=1

– T(n)= 4T(n/2) + cn

 T(n)=O(n2)

Trang 30

Nhân hai ma trận

 Bài toán: Z=Xmxn*Ynxk

Không mất tính tổng quát, giả sử m=n=k

 Giải thuật đơn giản

Trang 32

Xếp lịch thi đấu thể thao

 Bài toán

– Xếp lịch thi đấu vòng tròn 1 lượt cho n đấu thủ

– Mỗi đấu thủ đấu tối đa 1 trận/ ngày

– Số ngày thi đấu ngắn nhất

3 4

Trang 33

Cân bằng các bài toán con

 Để giải thuật chia để trị hiệu quả thì các bài toán con phải cân bằng

– chia bài toán đã cho thành a số bài toán con có kích thước là n/b

– Khi đó: T(n)=aT(n/b) + d(n)

Trang 34

– Mỗi phần tử X = (x1, x2, xn) D được gọi là một phương án ∈

– Cần tìm một phương án X D sao cho hàm f(X) đạt min/max ∈(Phương án tối ưu)

 Phương pháp “vét cạn”: xét tất các phương án trong tập D

(hữu hạn)  thời gian hàm mũ!

 Phương pháp Greedy:

– Chọn từng Xi cho đến khi đủ n thành phần X = (x1, x2, xn)

– Với mỗi Xi, ta sẽ chọn Xi tối ưu

 Cách làm trên không đảm bảo X là phương án tối ưu nhưng nó có thời gian đa thức!

Trang 35

– Giả sử các tờ bạc máy ATM cung cấp: 100.000, 50.000, 20.000, 10.000

– Greedy

 12 tờ 100.000

 1 tờ 50.000

 2 tờ 20.000

Trang 36

Bài toán người giao hàng

Đường đi ngắn nhất qua tất cả các đỉnh

Trang 37

 Greedy: lấy đồ quí trước!

– Tính đơn giá cho Oi

– Xét Oi theo thứ tự đơn giá giãm dần

– Lấy đồ vật Oi theo khả năng của ba lô cho phép

– Tính lại trọng luợng còn chứa được của ba lô, quay lại bước 3 cho đến khi

không còn lấy gì thêm nữa!

Trang 38

Chọn Giá trị ba lô W còn lại

Trang 39

– Bài toán con phải giải nhiều lần

 Ghi lại kết quả các bài toán con

}

Nếu k=1 hoặc k=n

Ngược lại

Trang 41

Quy hoạch động cho Comb

tam giác Pascal

C[i,0] = 1;

C[i,i] = 1;

for (j = 1; j < i; j++) C[i,j]=C[i-1,j-1]+C[i-1,j]; }

return C[n,k];

}

= O(n2

) 2

1) -

n(n (

i – 1 ) =

n

i=1

T(n) =

Trang 42

Quy hoạch động cho bài toán cái ba lô

 Gọi :

- X[k, V] số lượng đồ vật k được chọn.

- F[k, V] giá trị hiện tại của ba lô sau khi đã chọn k đồ vật.

- V sức chứa còn lại của ba lô V=0 W.

 Ta có công thức

X[1,V] = V / g1 và F[1,V] = X[1,V] * v1F[k,V] = Max (F[k-1,V-xk*gk] + xk*vk)

Trang 45

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0

1

9 8

7 6

5 4

3 2

1 0

V

k

k=1 g1=3 v1=4 F[1,V] = X[1,V] * 4 X[1, V]=V/3

X[1,0]=0/3=0F[1,0]=X[1,0] * 4=0*4=0

X[1,1]=1/3=0F[1,1]=X[1,1] * 4=0*4=0

Trang 46

10 1

9 0 8 1 5 1 5 0 4 0 0 0 0 0 0

2

3 12 2

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0

1

9 8

7 6

5 4

3 2

1 0

X[2,3]=0/4=0

x2=0F[2,3]=Max {F[1,(3-0*4)] + 0*5 =F[1,3] + 0=4} =4

X[2,7]=7/4=1

x2=0,1F[2,3]=Max {F[1,(7-0*4)] + 0*5 =F[1,7] + 0=8 + 0 = 8

F[1,(7-1*4)] + 1*5 = F[1,3] + 5=4 +5 = 9} = 9

Trang 47

5

4

0 12 0

10 0

9 0 8 1 6 0 5 0 4 0 0 0 0 0 0

3

0 12 2

10 1

9 0 8 1 5 1 5 0 4 0 0 0 0 0 0

2

3 12 2

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0

1

9 8

7 6

5 4

3 2

1 0

V

k

k=3 g3=5 v3=6 F[3,V] = Max{F[2,(V – x3*5)] + x3*6}

Trang 48

5

3 13 4

12 2

10 3

9 1 7 2 6 0 4 1 3 0 0 0 0

4

0 12 0

10 0

9 0 8 1 6 0 5 0 4 0 0 0 0 0 0

3

0 12 2

10 1

9 0 8 1 5 1 5 0 4 0 0 0 0 0 0

2

3 12 2

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0

1

9 8

7 6

5 4

3 2

1 0

V

k

k=4 g4=2 v4=3 F[4,V] = Max{F[3,(V – x4*2)] + x4*3}

Trang 49

0 13 0

12 0

10 0

9 0 7 0 6 0 4 0 3 1 1 0 0

5

3 13 4

12 2

10 3

9 1 7 2 6 0 4 1 3 0 0 0 0

4

0 12 0

10 0

9 0 8 1 6 0 5 0 4 0 0 0 0 0 0

3

0 12 2

10 1

9 0 8 1 5 1 5 0 4 0 0 0 0 0 0

2

3 12 2

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0

1

9 8

7 6

5 4

3 2

1 0

V

k

k=5 g5=1 v5=1 F[5,V] = Max{F[4,(V – x5*1)] + x5*1}

Trang 50

Bảng đã xây dựng xong

0 13 0

12 0

10 0

9 0 7 0 6 0 4 0 3 1 1 0 0

5

3 13 4

12 2

10 3

9 1 7 2 6 0 4 1 3 0 0 0 0

4

0 12 0

10 0

9 0 8 1 6 0 5 0 4 0 0 0 0 0 0

3

0 12 2

10 1

9 0 8 1 5 1 5 0 4 0 0 0 0 0 0

2

3 12 2

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0

1

9 8

7 6

5 4

3 2

1 0

V

k

Trang 52

0 13 0

12 0

10 0

9 0 7 0 6 0 4 0 3 1 1 0 0 5

3 13 4

12 2

10 3

9 1 7 2 6 0 4 1 3 0 0 0 0 4

0 12 0

10 0

9 0 8 1 6 0 5 0 4 0 0 0 0 0 0 3

0 12 2

10 1

9 0 8 1 5 1 5 0 4 0 0 0 0 0 0 2

3 12 2

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0 1

9 8

7 6

5 4

3 2

1 0

V

k

Ban đầu V=W=9 k=5 X[5, 9]=0 chọn 0 đồ vật 5

k=4 X[4, 9]=3 chọn 3 đồ vật 4V=V-gk*X[k, V]=9-2*3=3

Trang 53

0 13 0

12 0

10 0

9 0 7 0 6 0 4 0 3 1 1 0 0 5

3 13 4

12 2

10 3

9 1 7 2 6 0 4 1 3 0 0 0 0 4

0 12 0

10 0

9 0 8 1 6 0 5 0 4 0 0 0 0 0 0 3

0 12 2

10 1

9 0 8 1 5 1 5 0 4 0 0 0 0 0 0 2

3 12 2

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0 1

9 8

7 6

5 4

3 2

1 0

V

k

Với V=3 k=3 X[3, 3]=0 chọn 0 đồ vật 3

k=2 X[2, 3]=0 chọn 0 đồ vật 2k=1 X[1, 3]=1 chọn 1 đồ vật 1

Trang 54

Cuối cùng: chọn 3 đồ vật 4 và 1 đồ vật 1

trọng lượng tổng cộng : 3*2 + 1*3 = 9 giá trị : 3*3 + 1*4 = 13

0 13 0

12 0

10 0

9 0 7 0 6 0 4 0 3 1 1 0 0

5

3 13 4

12 2

10 3

9 1 7 2 6 0 4 1 3 0 0 0 0

4

0 12 0

10 0

9 0 8 1 6 0 5 0 4 0 0 0 0 0 0

3

0 12 2

10 1

9 0 8 1 5 1 5 0 4 0 0 0 0 0 0

2

3 12 2

8 2 8 2 8 1 4 1 4 1 4 0 0 0 0 0 0

1

9 8

7 6

5 4

3 2

1 0

V

k

Trang 56

void construction (List_Objets list, int n, int W, Table& F, Table& X){

yk = v/list[k].Weight;

for (xk=1; xk <= yk; xk++)

if (F[k-1][v-xk*list[k].Weight]+ xk*list[k].Value > FMax) {

FMax=F[k-1][v-xk *list[k].Weight]+ xk*list[k].Value; XMax= xk;

} F[k][v] = FMax;

X[k][v] = XMax;

} }

}

Trang 57

void search(List_Objets list, int n, int W, Table F, Table X)

list[k].Quantity = X[k][v];

cout<<list[k].Quantity << endl;

v = v - X[k][v] * list[k].Weight;

} }

main(){

List_Objets l={{"0",3,4,0}, {"1",3,4,0}, {"2",4,5,0}, {"3",5,6,0}, {"4",2,3,0}, {"5",1,1,0},};

Trang 58

Kỹ thuật quay lui

backtracking

 Để giải bài toán A ta cần giải

các bài toán con A1, ,An

 Một số bài toán con Ai chưa giải

được ta phải đi giải các bài toán con Ai1, Ai2,…,Aik

 Sau đó quay lại giải Ai

 Trong quá trình giải:

– Giải tất cả các bài toán con  vét cạn

– một số bài toán con không cần giải ta bỏ qua cắt tỉa

Trang 62

} }

Trang 63

 Eval(-)

– Eval(+)

 EVAL(5)5

 EVAL(*)

– EVAL(2) 2

– EVAL(3) 3

Trang 64

Cây trò chơi

 Cây trò chơi

– Trò chơi đối kháng

– Mỗi người đến lượt có một số nước đi

 Biểu diễn các nước đi  cây trò chơi

 Vấn đề tìm nước đi tốt nhất

– Duyệt cây để định trị cho các nút

– Trạng thái 1 - người đi trước thắng

– Trạng thái -1 - người đi trước thua

– Trạng thái 0 – hòa

 Cây trò chơi còn gọi là cây Min-Max

Trang 67

Giải thuật quay lui (vét cạn) để định trị

float Search(NodeType n, ModeType mode) {

Trang 68

Cắt Alpha – beta

Vp ≤ VqMIN

MAX

Vp ≥ VqMAX

MIN

Trang 70

Giải thuật cắt alpha-beta

float cat_tia(NodeType Q, ModeType mode, float Vp) { NodeType C;

float Vq;

if (is_leaf(Q)) return Payoff(Q);

if (mode == MAX) Vq = - ∞ ; else Vq = ∞ ;

C= con trái nhất của Q;

While (C là con của Q) {

if (mode == MAX) {

Vq = max(Vq, Cat_tia(C, MIN, Vq));

if (Vp<=Vq) return Vq; //cắt

} else {

Vq = min(Vq, Cat_tia(C, MAX, Vq));

if (Vp >= Vq) return Vq; //cắt }

return Vq;

}

Trang 71

Phân nhánh tính cận

Branch and bound

 Giải bài toán tối ưu

 Chia bài toán thành một

số bài toán con

 Cây tìm kiếm hoặc cây quyết định

– Giải các bài toán con

 Ghi nhận kết quả tối ưu tìm thấy (tạm thời)

 Ước lượng lời giải của bài toán con (bound) và

so sánh nó với kết quả tối ưu tạm thời

 Cắt bỏ một số bài toán con nếu nhận thấy nó không thể chứa lời giải tối ưu

Trang 72

• Cận dưới = tổng độ dài tất cả các cạnh được chọn chia cho 2.

 Ví dụ:

 cận dưới của nút D (ab+ac+ba+be+ca+cb+de+d c+eb+ed)/2 = 41/2 = 20.5

Trang 73

Lời giải tạm thời Lời giải tạm thời Lời giải tạm thời

Trang 74

Bài toán cái ba lô

branch and bound

 Bài toán tìm max

 Xét theo thứ tự giảm của đơn giá

 Nút gốc: trạng thái ban đầu của ba lô

– W = W (của nút cha) - số đồ vật được chọn * trọng lượng mỗi vật

– CT = TGT + W * Ðơn giá của vật sẽ xét

kế tiếp.

Trang 75

Kĩ thuật tìm kiếm địa phương

Local search

 Giải các bài toán tìm

lời giải tối ưu:

– Xuất phát từ một phương án nào đó

– biến đổi lên phương án hiện hành  phương

án tốt hơn

– Lặp lại cho đến khi không còn có thể cải thiện được phương án nữa

Bài toán cây phủ tối thiểu

thông

cạnh nhỏ nhất

 Phương án ban đầu là một cây phủ nào

 Loại khỏi chu trình cạnh có độ dài lớn nhất

Trang 77

Bài toán đường đi

của người giao

hàng

đỉnh lại với nhau sao cho vẫn tạo ra một chu trình đủ

được phương án nữa

Phương án ban đầu, giá 25

Bỏ ae và cd, nối a với d và e với c

chu trình mới ( a b c e d a) giá = 23

Bỏ ce và ab nối a với c và b với e

chu trình mới (a c b e d a) giá = 19

Trang 78

Tài liệu tham khảo

 Aho, A V , J E Hopcroft, J D Ullman Data Structure and Algorihtms, 1983.

 R Sedgewick, Algorithms in Java, Addision-Wesley, 2004 Chapter 1.

 R Sedgewick, Algorithms , 1987.

 Goodrich, Tamassia, Algorithm Design, 2002.

 www.codeproject.com

Trang 79

Hết phần 1

Ngày đăng: 23/03/2015, 08:13

HÌNH ẢNH LIÊN QUAN

Bảng đã xây dựng xong - Phân tích & Thiết kế Giải thuật nâng cao
ng đã xây dựng xong (Trang 50)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm