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

CAC THUAT TOAN TIM KIEM pdf

37 1,4K 10

Đ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 37
Dung lượng 0,95 MB

Nội dung

NỘI DUNG Khái niệm tìm kiếm  Các phương pháp tìm kiếm  Phương pháp tìm kiếm tuần tự  Phương pháp tìm kiếm nhị phân  Phương pháp tìm kiếm trên cây nhị phân tìm kiếm... KHÁI NIỆM TÌM

Trang 1

CHƯƠNG 6

CÁC THU T TOÁN TÌM KI M ẬT TOÁN TÌM KIẾM ẾM

Trang 2

NỘI DUNG

 Khái niệm tìm kiếm

 Các phương pháp tìm kiếm

 Phương pháp tìm kiếm tuần tự

 Phương pháp tìm kiếm nhị phân

 Phương pháp tìm kiếm trên cây nhị phân tìm kiếm

Trang 3

KHÁI NIỆM TÌM KIẾM

CỦA TA ĐÂU?

Trang 4

KHÁI NIỆM TÌM KIẾM

Khái niệm

 Tìm kiếm là việc kiểm tra xem có hay không

một đối tượng có một số thông tin cho trước

(đối tượng cần tìm) trong một tập các đối

tượng cho trước (không gian tìm kiếm)

Ví dụ: Tìm một chùm chìa khóa trong một gian

phòng

 Ta có hình ảnh của chùm chìa khóa

Trang 5

BÀI TOÁN TÌM KIẾM

- Dãy a, có n đối tượng, mỗi đối tượng có một

“khóa tìm kiếm”

- Khóa của đối tượng cần tìm (Key)

- Nếu tìm thấy đối tượng có khóa ‘Key’ trong

dãy a trả lại giá trị 1, ngược lại trả lại giá trị 0.

Trang 6

CÁC THUẬT TOÁN TÌM KIẾM

 Tìm kiếm tuần tự

 Tìm kiếm nhị phân

 Tìm kiếm trên cây nhị phân tìm kiếm

Trang 7

CÁC THUẬT TOÁN TÌM KIẾM

Tùy theo dữ liệu vào ta có thể phân chia bài

toán tìm kiếm thành hại loại

Tìm kiếm trên dãy chưa sắp: dãy tìm kiếm

chưa được sắp xếp theo thứ tự khóa tìm kiếm

Tìm kiếm trên dãy đã sắp: dãy tìm kiếm đã

sắp theo thứ tự tăng dần của khóa tìm kiếm

Trang 8

TÌM KIẾM TRÊN DÃY CHƯA SẮP

 Với một dãy chưa được sắp xếp thì cách tìm kiếm

đơn giản nhất là tìm kiếm tuần tự

 Tìm kiếm tuần tự là một phương pháp tìm kiếm khá

phổ biến và hết sức đơn giản

?

Trang 9

TÌM KIẾM TUẦN TỰ

Ý tưởng :

 So sánh khóa của đối tượng cần tìm với khóa của đối

tượng đầu tiên trong dãy

 Nếu bằng nhau, kết thúc tìm kiếm (thành công)

 Nếu không bằng, chuyển sang đối tượng kế tiếp

 Lặp lại công việc trên cho đến khi gặp một đối tượng

có khóa bằng với khóa cần tìm (thành công) hoặc đã hết các đối tượng trong dãy (không thành công)

Trang 11

TÌM KIẾM TUẦN TỰ

Việc tìm kiếm có thể minh họa như sau

 i=0; a0=5 <> x=6; i=i+1;

 i=1; a1=1 <> x=6; i=i+1;

 i=2; a2=6 = x; Tìm thấy x

Tìm kiếm kết thúc thành công

Chuyển sang đối tượng kế tiếp

Chuyển sang đối tượng kế tiếp

Trang 12

- Minh họa việc tìm số x1=42 và số x2=43 trong

dãy bằng phương pháp tìm kiếm tuần tự

a5 a6 a7

Ví dụ 2

a1

- Minh họa việc tìm số x1=42 và số x2=43 trong

dãy bằng phương pháp tìm kiếm tuần tự

Trang 15

TÌM KIẾM TUẦN TỰ CẢI TIẾN

 Nhận xét : mỗi lần so sánh đều phải kiểm tra xem

dãy đã hết chưa (i<n), nên tốn thêm thời gian

 Để tránh điều đó người ta thêm đối tượng x vào

cuối dãy a (gán a[n]=x)

Trang 17

TÌM KIẾM TUẦN TỰ CẢI TIẾN

int tktt2(int x, int a[], int n)

{ int i=0; a[n]=x;

Trang 18

 Với một dãy đã sắp xếp theo theo thứ tự của khóa tìm kiếm thì việc tìm kiếm về cơ bản sẽ nhanh hơn

 Việc tìm kiếm có thể thực hiện bằng một trong hai phương pháp

 Tìm kiếm tuần tự hoặc

TÌM KIẾM TRÊN DÃY ĐÃ SẮP

Trang 19

 Việc tìm kiếm giống như tìm kiếm trên dãy chưa sắp

 Quá trình tìm kiếm kết thúc khi gặp một trong 3 điều kiện

 Gặp đối tượng có khóa bằng với khóa của đối tượng cần tìm (tìm kiếm thành công)

Gặp đối tượng có khóa “lớn hơn” khóa của đối tượng

cần tìm (tìm kiếm không thành)

 Đã duyệt hết dãy (tìm kiếm không thành)

TÌM KIẾM TUẦN TỰ TRÊN DÃY ĐÃ SẮP

Trang 20

TÌM KIẾM TUẦN TỰ TRÊN DÃY ĐÃ SẮP

Trang 22

TÌM KIẾM TUẦN TỰ TRÊN DÃY ĐÃ SẮP

int tktt3(int x, int a[], int n)

{ int i=0; a[n]=x;

while ( a[i]<x) i++;

if (i<n && a[i]==x) return 1;

return 0;

}

Độ phức tạp của thuật toán : O(n)

Trang 23

 Ý tưởng

 So sánh khóa cần tìm với khóa của đối tượng ở trung tâm của dãy đang xét m=(l+r)/2

 Tìm kiếm kết thúc thành công nếu a[m]==x

 Nếu a[m] > x, tìm kiếm được thực hiện với dãy trái a[l], , a[m-1]

 Nếu a[m] < x, tìm kiếm được thực hiện với dãy phải a[m+1], , a[r]

 Quá trình tìm kiếm tiếp tục cho đến khi gặp đối tượng mong muốn (thành công) hoặc dãy khóa đang xét trở nên rỗng

TÌM KIẾM NHỊ PHÂN

Trang 24

Ví dụ

TÌM KIẾM NHỊ PHÂN

1 2 5 6 8 a0 a1 a2 a4 a4

- Cho dãy số được sắp tăng

- Tìm số x=4 trong dãy

Quá trình tìm kiếm được minh họa như sau

Trang 26

Ví dụ 2

TÌM KIẾM NHỊ PHÂN

a0 a1 a2 a3 a4

- Cho dãy số a được sắp tăng dần

- Minh họa việc tìm số x1=11 và số x2=37 trong

dãy bằng phương pháp tìm kiếm nhị phân

a5 a6 a7

Trang 27

Giải thuật

TÌM KIẾM NHỊ PHÂN

begin

(r<l) m=(l+r)/2

a[m]==x a[m]>x

Trang 28

TÌM KIẾM NHỊ PHÂN

int tknp(int x, int a[], int n)

{ int l=0, r=n-1, m ; while (l<=r)

{ m= (l+r)/2 ;

if (a[m]==x) return 1;

if (a[m] > x) r=m-1;

else l=m+1 ; }

return 0;

Trang 29

}

Trang 30

TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM

Trang 31

TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM

33 48 11 36 25 23 42 7

- Cho dãy số

Ví dụ 1

bằng phương pháp tìm kiếm trên cây nhị phân tìm kiếm

Trang 32

TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM

 Cây nhị phân tìm kiếm tương ứng

• t->key<x, tìm trong cây B

• B->key>x, tìm trong cây C

• C->key<x, tìm trong cây D

• D->key=x, tìm thấy x, kết

thúc tìm kiếm

Trang 33

TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM

int tkcnp(int x, node *t )

{ while (t!=NULL) { if (t->key==x) return 1;

if (t->key>x) t= t->left ; else t=t->right ;

}

return 0;

Trang 34

TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM

int tkcnp2(int x, node *t )

Trang 35

Bài 1

Viết chương trình thực hiện các việc sau

 Nhập vào một mảng một chiều n số nguyên (0<n<100)

 Nhập số nguyên x

 Thông báo x có xuất hiện trong dãy không, nếu có thì

nó ở vị trí thứ bao nhiêu theo thuật toán tìm kiếm tuần

tự, tìm kiếm nhị phân

BÀI TẬP ÁP DỤNG

Trang 36

Bài 2

Viết chương trình thực hiện các yêu cầu sau

 Nhập vào cây nhị phân tìm kiếm n số nguyên (0<n<50)

 Nhập số nguyên x

 Thông báo x có trong cây hay không theo thuật toán tìm kiếm trên cây nhị phân tìm kiếm

BÀI TẬP ÁP DỤNG

Trang 37

Bài 3

Tự cho các dãy khóa nguyên (n>10), mô tả quá trình tìm kiếm khóa x trong dãy khóa theo các thuật toán tìm kiếm đã học

BÀI TẬP ÁP DỤNG

Ngày đăng: 12/07/2014, 16:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w