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

Ngôn ngữ lập trình C++_Chuong13_GiaiThuatTimKiem_part pdf

15 214 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 15
Dung lượng 90,18 KB

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

Nội dung

Các nội dung chính1.

Trang 1

Phần 3: Cấu trúc dữ liệu

và Giải thuật

Ch ươ ng 13: Các gi i thu t tìm ki m ả ậ ế

1Chương 12: Các Giải thuật Tìm Kiếm

Trang 2

Các nội dung chính

1 Gi i thi u ớ ệ

2 Các gi i thu t tìm ki m ph n t ả ậ ế ầ ử

3 Các gi i thu t tìm ki m chu i con ả ậ ế ỗ

2Chương 12: Các Giải thuật Tìm Kiếm

Trang 3

1 Giới thiệu

• Bài h c này s trình b y m t s gi i ọ ẽ ầ ộ ố ả thu t tìm ki m cho hai bài toán tìm ậ ế

ki m c b n: ế ơ ả

– Th nh t, là bài toán tìm m t ph n t ứ ấ ộ ầ ử trong m t dãy ph n t cho tr ộ ầ ử ướ c theo m t ộ khoá tìm ki m ế

– Th hai, là tìm s xu t hi n c a m t chu i ứ ự ấ ệ ủ ộ ỗ con trong m t chu i cho tr ộ ỗ ướ c

3Chương 12: Các Giải thuật Tìm Kiếm

Trang 4

1 Giới thiệu

• V i bài toán th nh t, có hai chi n l ớ ứ ấ ế ượ c tìm

ki m là tìm ki m b ng cách so sánh hay tìm ế ế ằ

ki m tr c ti p d a vào giá tr khoá c n tìm ế ự ế ự ị ầ

• V i bài toán th hai cũng có nhi u gi i thu t ớ ứ ề ả ậ khác nhau, t gi i thu t tìm ki m đ n gi n ừ ả ậ ế ơ ả (còn g i là tìm ki m thô), cho đ n các gi i ọ ế ế ả thu t khá ph c t p nh c a Knuth-Morris- ậ ứ ạ ư ủ Pratt và c a Boyer-Moore ủ

Chương 12: Các Giải thuật Tìm Kiếm

4

Trang 5

2 Các giải thuật tìm kiếm phần tử

• Đ t bài toán: ặ

– Đ đ n gi n cho vi c trình b y ý t ể ơ ả ệ ầ ưở ng các gi i ả thu t, ta s ch n bài toán d ng đ n gi n nh t ậ ẽ ọ ở ạ ơ ả ấ

nh sau: Cho m t dãy N s A = (a0, a1,…, aN-1) và ư ộ ố giá tr c n tìm K (khoá tìm ki m) Yêu c u tìm v trí ị ầ ế ầ ị

m t ph n t có giá tr b ng K ộ ầ ử ị ằ

• Có 2 chi n l ế ượ c tìm ki m: ế

– Tìm ki m b ng cách so sánh ế ằ – Tìm ki m d a tr c ti p vào giá tr khóa ế ự ự ế ị

Chương 12: Các Giải thuật Tìm Kiếm

5

Trang 6

Tìm kiếm bằng so sánh

• Ý t ưở ng chung: t khóa tìm ki m K, ta ch a bi t ừ ế ư ế

đ ượ c v trí c a ph n t c n tìm, nên ti n hành so ị ủ ầ ử ầ ế sánh K v i l n l ớ ầ ượ t các ph n t trong dãy c n ầ ử ầ

tìm cho đ n khi ra k t qu (ho c tìm th y ho c ế ế ả ặ ấ ặ không tìm th y) ấ

• Có 2 lo i gi i thu t tìm ki m theo cách này: ạ ả ậ ế

– Tìm ki m tu n t (Sequential Search) ế ầ ự – Tìm ki m nh phân (Binary Search) ế ị

Chương 12: Các Giải thuật Tìm Kiếm

6

Trang 7

Tìm kiếm tuần tự

• Ý t ưở ng gi i thu t: ả ậ

– Đ tìm ph n t b ng K trong dãy N s A = ể ầ ử ằ ố (a0, a1,…, aN-1), ti n hành so sánh K v i ế ớ

l n l ầ ượ t các ph n t trong dãy, cho đ n khi: ầ ử ế

• Ho c tìm th y ph n t ai = K, thì tr v v trí i ặ ấ ầ ử ả ề ị

c n tìm ầ

• Ho c đã so sánh v i toàn b các ph n t c a ặ ớ ộ ầ ử ủ dãy nh ng v n không th y, thì tr v k t qu ư ẫ ấ ả ề ế ả không tìm th y ấ

Chương 12: Các Giải thuật Tìm Kiếm

7

Trang 8

Tìm kiếm tuần tự

• Cài đ t hàm ặ

Chương 12: Các Giải thuật Tìm Kiếm

8

int SequentialSearch(int A[], int N, int K)

{ int i=0;

while (i<N && A[i] != K) i++;

if (i<N) return i; //Tìm thấy

}

Trang 9

Tìm kiếm nhị phân

• Ý t ưở ng gi i thu t: ả ậ

– Đ tìm ph n t b ng K trong dãy N s A = (a0, a1,…, aN- ể ầ ử ằ ố 1), thì gi i thu t này có m t yêu c u là dãy A đã đ ả ậ ộ ầ ượ c s p ắ

x p, gi s là theo chi u tăng d n Các b ế ả ử ề ầ ướ c c a gi i ủ ả thu t đ quy này nh sau: ậ ệ ư

• So sánh K v i ph n t am gi a dãy (m=N/2) Có 3 kh năng ớ ầ ử ở ữ ả

x y ra:ả

– N u K = am thì tr v v trí tìm th y m ế ả ề ị ấ – N u K < am thì tìm K trong dãy (a0,a1,…,am-1) ế – Trái l i, thì tìm K trong dãy (am+1,am+2,…,aN-1) ạ

• Đi m d ng: khi tìm th y ho c khi dãy không còn ph n t nào ể ừ ấ ặ ầ ử thì tr v k t qu không tìm th y.ả ề ế ả ấ

Chương 12: Các Giải thuật Tìm Kiếm

9

Trang 10

Tìm kiếm nhị phân

• Cài đ t hàm ặ

Chương 12: Các Giải thuật Tìm Kiếm

10

int BSearch(int K, int A[], int b, int e) {

if (b>e) return -1; //Không tìm thấy int m= (b+e)/2;

if (K==A[m]) return m; //Tìm thấy else

if (K<A[m]) return BSearch(K, A, int b, m-1); else

return BSearch(K, A, m+1,e);

}

int BinarySearch(int K, int A[], int N){

return BSearch(K,A,0,N-1);

}

Trang 11

3 Tìm kiếm chuỗi con

• Gi i thi u bài toán ớ ệ

• Gi i thu t tìm ki m thô (brute-force) ả ậ ế

Chương 12: Các Giải thuật Tìm Kiếm

11

Trang 12

Giới thiệu bài toán

• Cho tr ướ c m t văn b n ộ ả V g m ồ n kí t (v0,v1,…,vn-1) và ự

m t chu i con ộ ỗ P (g i là m u) g m ọ ẫ ồ m kí t (p0,p1, ự

…,pm-1) Yêu c u tìm v trí xu t hi n đ u tiên c a P ầ ị ấ ệ ầ ủ trong V

• Bài toán này có nhi u gi i thu t Gi i thu t thô khá ề ả ậ ả ậ

đ n gi n nh ng có th i gian x lý t i nh t t l v i ơ ả ư ờ ử ồ ấ ỉ ệ ớ m x

n Gi i thu t KMP c n các thao tác ti n x lý trên ả ậ ầ ề ử chu i m u nên khá ph c t p, nh ng có th i gian t t ỗ ẫ ứ ạ ư ờ ố

h n nhi u, ch t l v i ơ ề ỉ ỉ ệ ớ m + n.

Chương 12: Các Giải thuật Tìm Kiếm

12

Trang 13

Giải thuật tìm kiếm thô

• Ý t ưở ng gi i thu t: ả ậ

– So sánh l n l ầ ượ t các ký t c a m u P v i các ự ủ ẫ ớ

kí t c a văn b n V b t đ u t v trí i (0 ự ủ ả ắ ầ ừ ị ≤ i ≤

n-m) cho đ n khi ho c kh p t t c các kí t ế ặ ớ ấ ả ự

c a P v i các kí t trong V thì i là v trí c n ủ ớ ự ị ầ tìm, ho c so đ n kí t cu i cùng trong V v n ặ ế ự ố ẫ không kh p thì k t lu n tìm ki m không ớ ế ậ ế

th y, ho c g p b t kì kí t nào không kh p ấ ặ ặ ấ ự ớ thì quay l i so sánh t đ u c a m u P v i ạ ừ ầ ủ ẫ ớ các kí t c a V b t đ u t v trí i+1 ự ủ ắ ầ ừ ị

Chương 12: Các Giải thuật Tìm Kiếm

13

Trang 14

Giải thuật tìm kiếm thô

• Cài đ t hàm ặ

Chương 12: Các Giải thuật Tìm Kiếm

14

int BFSearch(char V[], char P[] ) {

/*Ham tra ve vi tri tim thay dau tien, tra

ve -1 neu khong tim thay*/

int N = strlen(V);

int M = strlen(P);

int i, j, b;

i=0; j=0;

do { b=i; //Vi tri bat dau tim

while (i<N-1 && j<M-1 &&

V[i]==P[j]) { i++; j++;

}

if (i<N-1 && j<M-1 ) { i=b+1;

j=0;

} } while (i<N-1 && j<M-1) ;

if (j>=M-1) return b;

else return -1;

}

Trang 15

Xin cảm ơn!

Chương 12: Các Giải thuật Tìm Kiếm

15

Ngày đăng: 10/07/2014, 08:20

TỪ KHÓA LIÊN QUAN

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

w