Các giải thuật tìm kiếm pot

13 307 0
Các giải thuật tìm kiếm pot

Đ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

CÁC GIẢI THUẬT TÌM KIẾM 1 2. CÁC GIẢI THUẬT TÌM KIẾM  Có 2 giải thuật thường được áp dụng: Tìm tuyến tính và tìm nhị phân.  Để đơn giản cho việc minh họa, ta đặc tả như sau:   a 1 , a 2 , ,a N            !      " #$%&'()*#+",int a[N];  -"+./x')*#+"*,int x; 2 a 1 a 2 a 3 a 4 a 5 … a n-1 a N 0*1  3. Tìm kiếm tuyến tính  Ý tưởng Tiến hành so sánh x lần lượt với phần tử thứ nhất, thứ hai, của mảng a cho đến khi gặp được phần tử có khóa cần tìm, hoặc đã tìm hết mảng mà không thấy x.  Minh họa tìm x =10  Minh họa tìm x =25 3 7 5 12 41 10 32 13 9 15 3 2 3 4 5 6 7 8 9 : 2; 7 5 12 41 10 32 13 9 15 3 2 3 4 5 6 7 8 9 : 2; 2; 2; 36 0* 1  </ = >?&6 <1   Giải thuật Bước 1:  i=1;//bắtđầutừphầntửđầutiêncủadãy Bước 2: Sosánha[i]vớix, có2khảnăng:  a[i]=x:Tìmthấy.Dừng  a[i]!=x:SangBước3. Bước 3:  i=i+1;//xéttiếpphầntửkếtrongmảng  Nếui>N:Hếtmảng,khôngtìmthấy.Dừng Ngượclại:LặplạiBước2. 4 Cài đặt intLinearSearch(inta[],intN,intx) { inti=0; while((i<N)&&(a[i]!=x)) i++; if(i==N) return-1;//tìmhếtmảngnhưngkhôngcóx else returni;//a[i]làphầntửcókhoáx } 5 01@A &*B  #%$ C"+  Minh họa tìm x =10  Minh họa tìm x = 25 6 2; 7 5 12 41 10 32 13 9 15 3 2 3 4 5 6 7 8 9 : 2; 2; 2; 7 5 12 41 10 32 13 9 15 3 2 3 4 5 6 7 8 9 : 2; 36 22 36 36  Giải thuật Bước 1:  i=1; a[N+1]=1;//phầntử“línhcanh” Bước 2: Sosánha[i]vớix, có2khảnăng:  a[i]=x:sangbước3  a[i]!=x:i=i+1; Bước 3:  Nếui≤N:tìmthấyxtạivịtríi.  Ngượclại:khôngtìmthấyxtrongdãy. 7 Cài đặt int LinearSearch2(int a[],int N,int x) { inti=0; //mảnggồmNphầntửtừa[0] a[N-1] a[N]=x;//thêmphầntửthứN+1 while(a[i]!=x) i++; if(i==N) return-1; //tìmhếtmảngnhưngkhôngcóx else returni; //tìmthấyxtạivịtríi }  Ðánh giá giải thuật Độ phức tạp tính toán cấp n: T(n)=O(n) 8 4. Tìm kiếm nhị phân Ý tưởng  Áp dụng đối với những dãy số đã có thứ tự.  Giải thuật tìm cách giới hạn phạm vi tìm kiếm sau mỗi lần so sánh x với một phần tử trong dãy. Ý tưởng của giải thuật là tại mỗi bước tiến hành so sánh x với phần tử nằm ở vị trí giữa của dãy tìm kiếm hiện hành, dựa vào kết quả so sánh này để quyết định giới hạn dãy tìm kiếm ở bước kế tiếp là nửa trên hay nửa dưới của dãy tìm kiếm hiện hành. 9 Minh họa tìm x = 41 10 3 14 16 19 22 41 46 51 63 71 2 3 4 5 6 7 8 9 : 2; x m 3 14 16 19 22 41 46 51 63 71 2 3 4 5 6 7 8 9 : 2; l m x 3 14 16 19 22 41 46 51 63 71 2 3 4 5 6 7 8 9 : 2; r m x 3 14 16 19 22 41 46 51 63 71 2 3 4 5 6 7 8 9 : 2; Tìm thấy x tại vị trí 6 [...]... họa tìm x = 45 x x x x 3 14 16 19 22 41 46 51 63 71 1 2 3 4 5 6 7 8 9 10 l m m r l > r: Kết thúc: Không tìm thấy m m 11 Giải thuật Bước 1: left = 1; right = N; // tìm kiếm trên tất cả các phần tử Bước 2: mid = (left+right)/2; // lấy mốc so sánh So sánh a[mid] với x, có 3 khả năng :  a[mid] = x: Tìm thấy Dừng  a[mid] > x: / /tìm tiếp x trong dãy con aleft amid -1 right =mid - 1;  a[mid] < x: / /tìm. .. tử chưa xét tìm tiếp Lặp lại Bước 2 Ngược lại: Dừng //Ðã xét hết tất cả các phần tử 12   Cài đặt int BinarySearch(int a[],int N,int x ) { int left =0; right = N-1; int mid; do{ mid = (left + right)/2; if (x == a[mid]) return mid;//Thấy x tại mid else if (x < a[mid]) right = mid -1; else left = mid +1; }while (left . CÁC GIẢI THUẬT TÌM KIẾM 1 2. CÁC GIẢI THUẬT TÌM KIẾM  Có 2 giải thuật thường được áp dụng: Tìm tuyến tính và tìm nhị phân.  Để đơn giản cho việc minh. đối với những dãy số đã có thứ tự.  Giải thuật tìm cách giới hạn phạm vi tìm kiếm sau mỗi lần so sánh x với một phần tử trong dãy. Ý tưởng của giải thuật là tại mỗi bước tiến hành so sánh. giữa của dãy tìm kiếm hiện hành, dựa vào kết quả so sánh này để quyết định giới hạn dãy tìm kiếm ở bước kế tiếp là nửa trên hay nửa dưới của dãy tìm kiếm hiện hành. 9 Minh họa tìm x = 41 10 3

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

Từ khóa liên quan

Mục lục

  • CÁC GIẢI THUẬT TÌM KIẾM

  • 2. CÁC GIẢI THUẬT TÌM KIẾM

  • 3. Tìm kiếm tuyến tính

  • Slide 4

  • Slide 5

  • Cải tiến (dùng lính canh) giúp giảm bớt một phép so sánh

  • Slide 7

  • Slide 8

  • 4. Tìm kiếm nhị phân

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan