intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2.1 - Trần Minh Thái

Chia sẻ: Năm Tháng Tĩnh Lặng | Ngày: | Loại File: PPTX | Số trang:32

59
lượt xem
6
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Mục tiêu của bài giảng này nhằm giúp người học xác định được vai trò của tìm kiếm và sắp xếp trong hệ thống thông tin, nắm vững và minh họa được giải thuật tìm kiếm tuyến tính và tìm kiếm nhị phân trên mảng một chiều, cài đặt được giải thuật tìm kiếm bằng ngôn ngữ C/C++. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2.1 - Trần Minh Thái

  1. Chương 2.1. Giải thuật tìm kiếm Trần Minh Thái Email: minhthai@itc.edu.vn Website: www.minhthai.edu.vn  1
  2. Mục tiêu • Xác định được vai trò của tìm kiếm và sắp xếp trong hệ thống thông tin • Nắm vững và minh họa được giải thuật tìm kiếm tuyến tính và tìm kiếm nhị phân trên mảng một chiều • Cài đặt được giải thuật tìm kiếm bằng ngôn ngữ C/C++ 2
  3. Suy nghĩ ? Tại sao hầu hết phần mềm phải có chức năng tìm kiếm và sắp xếp, mối quan hệ giữa tìm kiếm và sắp xếp? 3
  4. Nhu cầu tìm kiếm và sắp xếp • Tìm kiếm: Có trong hầu hết trong các hệ thống thông tin • Muốn tìm kiếm nhanh và hiệu quả  dữ liệu có thứ tự  sắp xếp 4
  5. 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. • Đặc tả: a1 • Tập a2 dữ liệua3 được a4 lưu trữa5 là dãy số a1, … a2, ... ,aN. an- aN 1 • Khai báo: int a[N]; • Khóa cần tìm: int x; 5
  6. Tìm kiếm tuyến tính (Linear Search) Ý tưởng Lần lượt so sánh x 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ần tìm, hoặc hết mảng 6
  7. Tìm kiếm tuyến tính • Minh họa tìm x =10 10 Đã tìm Chưa hết thấy mảng tại 7 5 12 41 10 32 13 9 15 3 vị trí 5 • 1 họa Minh 2 tìm 3x =254 5 6 7 8 9 10 25 Đã hết Chưa hết mảng mảng 7 5 12 41 10 32 13 9 15 3 1 2 3 4 5 6 7 8 9 10 7
  8. 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. 8
  9. Nguyên tắc cài đặt hàm tìm kiếm • Nếu có xuất hiện phần tử có giá trị x thì trả về vị trí tìm được • Ngược lại thì trả về -1 9
  10. Cài đặt int LinearSearch(int a[], int N, int x) { int i=0; while ((i
  11. Cải tiến Dùng lính canh giúp giảm bớt phép so sánh • Minh họa tìm x =10 10 7 5 12 41 10 32 13 9 15 3 10 • 1 họa Minh 2 tìm3x = 25 4 5 6 7 8 9 10 11 25 7 5 12 41 10 32 13 9 15 3 25 25 1 2 3 4 5 6 7 8 9 10 11 11
  12. Cài đặt int LinearSearch2(int a[],int N,int x) {  int i=0;  a[N] = x; // thêm phần tử x sau mảng  while (a[i]!=x ) i++;  if (i==N)   return -1; // tìm hết mảng  else  return i;  // tìm thấy x tại vị trí i  }  Độ phức tạp tính toán cấp n: T(n)=O(n) 12
  13. Q&A 13
  14. Tìm kiếm nhị phân (Binary Search) Ý tưởng • Áp dụng đối với dãy số đã có thứ tự • Mỗi bước tiến hành so sánh x với phần tử ở giữa của dãy hiện hành để quyết định phạm vi tìm kế tiếp 14
  15. Minh họa tìm x = 41 x x x 3 14 16 19 22 41 46 51 63 71 1 2 3 4 5 6 7 8 9 10 Tìm thấy x tại vị trí 6 l m m r m 15
  16. Minh 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 16
  17. Giải thuật Bước 1: left = 1; right = N; //tìm kiếm 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 tiếp x trong dãy con amid +1 .. aright left = mid + 1; Bước 3: Nếu left
  18. int BinarySearch(int a[],int N,int x ) { int left =0; right = N-1; int mid; while (left 
  19. Q&A 19
  20. Code minh họa #include #include #include #define MAX 1000 void TaoMang(int a[], int N); void XuatMang(int a[], int N); int LinearSearch(int a[], int N, int x); 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2