27
Giới thiệu Các thuật toán tìm kiếm 1

Giới thiệu Các thuật toán tìm kiếmChỉ giải quyết trong tình huống vùng tìm kiếm bé Đệ quy cho các vùng tìm kiếm lớn Sử dụng trạng thái, có

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Giới thiệu

Các thuật toán tìm kiếm

1

Nội dung trình bày

• Bài toán tìm kiếm• Tìm kiếm tuần tự, tìm kiếm nhị phân

� Tìm kiếm tuần tự� Tìm kiếm nhị phân

• Một số tiếp cận khác• Một số tiếp cận khác� Tìm kiếm dựa trên quy hoạch động

� Tìm kiếm dựa trên đệ quy

� Tìm kiếm dựa trên phân vùng

2

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

• Tìm kiếm một phương án, đáp án theo yêu cầu đầu vào

• Ví dụ:� Cho một danh sách xác định vị trí xuất hiện của một

phần tử trong dãyphần tử trong dãy� Tìm kiếm giải pháp lựa chọn để đạt giá trị cực đại

trong bài toán cái túi

• Bài toán xảy ra trong hai tình huống� Dữ liệu xuất hiện được coi là ngẫu nhiên� Dữ liệu dữ liệu thỏa mãn một số ràng buộc nhất

định3

Tìm kiếm tuần tự

• Tìm kiếm với dữ liệu được không sắp xếp• Ý tưởng

� Bắt đầu duyệt từ phần tử 0 đến phần tử N-1• Nếu xuất hiện phần tử cần tìm kiếm ghi nhận vị trí xuất

hiệnhiện

� Thông tin trả về dựa theo tình trạng tìm thấy

4

Tìm kiếm tuần tự (t)

• Thuật toán• Input: A[0..N-1], x cần tìm kiếm vị trí• Output: Thông tin về vị trí

1. for(i=0->N-1)a. if(a[i]=x)a. if(a[i]=x)

break;

2. return i

5

Tìm kiếm tuần tự (t)

• Thực hiện

6

Tìm kiếm tuần tự (t)

• Đánh giá độ phức tạp� Số phép toán so sánh: n� Độ phức tạp thuật toán: O(n)

7

Tìm kiếm nhị phân

• Tìm kiếm trên dữ liệu đã được sắp xếp• Ý tưởng

� Thay vì tìm kiếm tuần tự sẽ tim kiếm dựa trên giá trị ở giữa dãy

• Nếu chỉ số phải bé hơn chỉ số trái kết thúc• Nếu chỉ số phải bé hơn chỉ số trái kết thúc• Nếu giá trị tìm kiếm trùng với giá trị ở giữa kết thúc• Nếu bé hơn thì tìm kiếm từ đầu đến phần tử trước phần

tử hiển tại• Nếu lớn hơn phần tử ở giữa thì tìm kiếm từ phần tử sau

phần tử ở giữa đến cuối dãy

8

Tìm kiếm nhị phân (t)

• Thuật toán• Input: A[0..N-1], x cần tìm kiếm• Output: thông tin về vị trí1. vt=-1;2. l=0;2. l=0;3. r=N-1;2. while(l<=r)

a. k=(l+r)/2;b. if (a[k]=x)

vt=k;break; 9

Tìm kiếm nhị phân (t)

c. elseif(a[k]<x)

l=k+1;else

r=k-1;r=k-1;

10

Tìm kiếm nhị phân (t)

• Thử nghiệm

x=1

vt i j k 0 1 2 3 4 5 6

-1 0 6 3 1 2 3 6 7 8 9

-1 0 2 1 1 2 3

11

-1 0 2 1 1 2 3

0 0 0 0 1

x=4

-1 0 6 3 1 2 3

-1 0 2 1

-1 2 2 2 3

-1 3 2

Tìm kiếm nhị phân (t)

• Đánh giá độ phức tạp� Số phép so sánh: 2*log(n)� Số phép gán chỉ số: 2*log(n)� Độ phức tạp thuật toán: O(log(n))

• Thuật toán này thực hiện dựa trên giả thiết là • Thuật toán này thực hiện dựa trên giả thiết là dữ liệu đã được sắp xếp� Nếu cần sắp xếp trước khi tìm kiếm thì độ phức tạp

ít nhất là O(n+k), O(d*n) hoặc O(nlog(n)� Áp dụng trong tình huống dãy đã sắp xếp sẵn

12

Bài toán tìm kiếm mở rộng

• Tìm kiếm trên quy hoạch động� Bài toán cái túi cơ bản

• Tìm kiếm bằng đệ quy� Sử dụng thuật toán đệ quy cho bài toán cái túi

• Tìm kiếm phân vùng tìm kiếm• Tìm kiếm phân vùng tìm kiếm� Phân tích quá trình chia vùng tìm kiếm với bài toán

cái túi

13

Bài toán cái túi

• Tìm kiếm phương án lấy đồ cho cái túi� Một tên trộm mang túi có thể mang được trụng

lượng là C� Đến một ngôi nhà có N vật, mỗi vật có trọng lượng

là là wi và có giá trị là pilà là wi và có giá trị là pi

� Tìm các đồ vật mà tên trộm có thể lấy được mà có tổng giá trị lớn nhất

14

Bài toán cái túi

• Tiếp cận quy hoạch động� Dựa trên mô tả về U(k,i) = max(U(k-wk)+pk,U(k-1,i))

• Tiếp cận tổ hợp� Sử dụng các phương án có thể, kiểm tra lấy giá trị

lớn nhất (sử dụng đệ quy)lớn nhất (sử dụng đệ quy)

15

Bài toán cái túi

• Thuật toán xây dựng phương án buildsolution• Input: T, w[N], p[N]• Output: Ma trận PA• for(i=T->w[0])

� PA[0,i]=p[0];� PA[0,i]=p[0];

• For(i=0->w[0]-1)� PA[0,i]=0;

16

Bài toán cái túi

• Thuật toán xây dựng phương án buildsolution (t)

• For(i=1->N-1)� For(j=T->w[i])

• PA[i,j]=max(PA[i-1,j], PA[i-1,j-w[i]]+p[i])• PA[i,j]=max(PA[i-1,j], PA[i-1,j-w[i]]+p[i])

� For(j=w[i]-1->0)• PA[i,j]=PA[i-1,j];

17

Bài toán cái túi

• Thuật toán xây dựng phương án getsolution• Input: PA[N,T], w[N], p[N]• Output: các vật cần lấy• i=N• j=T• j=T• While(i>0 &&j>0)

� If(PA[i,j]!PA[i-1,j])• Print(i)• J=j-w[i];

� i=i-1;

• If(PA[i,j]!=0) print(i)18

Bài toán cái túi

• Xây dựng bảng các phương án

T=19 wi pi1 3 7

19

1 3 72 4 103 5 204 7 195 6 136 9 40

Bài toán cái túi

• Xây dựng bảng các phương án

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19

1 0 0 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7

2 0 0 7 10 10 10 17 17 17 17 17 17 17 17 17 17 17 17

20

2 0 0 7 10 10 10 17 17 17 17 17 17 17 17 17 17 17 17

3 0 0 7 10 20 20 20 27 30 30 30 37 37 37 37 37 37 37

4 0 0 7 10 20 20 20 27 30 30 30 39 39 46 49 49 49 56

5 0 0 7 10 20 20 20 27 30 30 33 39 40 46 49 49 52 56

6 0 0 7 10 20 20 20 27 40 40 47 50 60 60 60 67 70 70

Bài toán cái túi

• Xây dựng bảng các phương án

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19

1 0 0 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7

2 0 0 7 10 10 10 17 17 17 17 17 17 17 17 17 17 17 17

21

2 0 0 7 10 10 10 17 17 17 17 17 17 17 17 17 17 17 17

3 0 0 7 10 20 20 20 27 30 30 30 37 37 37 37 37 37 37

4 0 0 7 10 20 20 20 27 30 30 30 39 39 46 49 49 49 56

5 0 0 7 10 20 20 20 27 30 30 33 39 40 46 49 49 52 56

6 0 0 7 10 20 20 20 27 40 40 47 50 60 60 60 67 70 70

Bài toán cái túi

• Tiếp cận đệ quy� Sinh tổ hợp để xét

22

Bài toán cái túi

• Phân tích xu hướng phân vùng để tìm kiếm với bài toán cái túi

23

Tìm kiếm đệ quy

• Dựa vào việc phân chia vùng tìm kiếm thành các vùng nhỏ� Chỉ giải quyết trong tình huống vùng tìm kiếm bé� Đệ quy cho các vùng tìm kiếm lớn� Sử dụng trạng thái, có thể lưu cả các giải pháp để � Sử dụng trạng thái, có thể lưu cả các giải pháp để

xác định kết quả

• Ví dụ� Tìm kiếm nhị phân� Tìm kiếm tương tự nhi phân cho trường hợp không

sắp xếp

24

Bài tập trên lớp

• Cho một mảng các phần tử� Tìm kiếm sự xuất hiện của phần tử x trong dãy

25

Bài tập trên lớp

• Cho một mảng tìm max bằng phương pháp đệ quy

26

Bài tập

- Cài đặt thuật toán trên ngôn ngữ lập trình và chạy thử

- Thử nghiệm các thuật toán sắp xếp để đạt được dãy không tăng với các bộ dữ liệu sau

- 5342 5435 7634 7632 3432 3232 3433 4534

- 5342 5342 5342 5342 5342 5342 5342 5342

27

- 5342 5342 5342 5342 5342 5342 5342 5342