Bài giảng Cấu trúc dữ liệu: Chương 2 - ThS. Võ Quang Hoàng Khang
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu: Chương 2 - ThS. Võ Quang Hoàng Khang Chương 2.1. Giải thuật tìm kiếmVõ Quang Hoàng KhangEmail: vqhkhang@gmail.com 1Mục tiêuXác định được vai trò của tìm kiếm và sắp xếp trong hệ thống thông tinNắ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ềuCài đặt được giải thuật tìm kiếm bằng ngôn ngữ C/C++ 2Suy nghĩ ? Tại sao hầu hết phần mềm phải có chứcnă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? 3Nhu cầu tìm kiếm và sắp xếpThao tác tìm kiếm được sử dụng nhiều nhất trong các hệ lưu trữ và quản lý dữ liệu.Do dữ liệu lớn nên tìm ra giải thuật tìm kiếm nhanh chóng là mối quan tâm hàng đầu. Để đạt được điều này dữ liệu phải được tổ chức theo một thứ tự nào đó thì việc tìm kiếm sẽ nhanh chóng và hiệu quả hơn, vì vậy nhu cầu sắp xếp dữ liệu cũng được lưu ý.Tóm lại, bên cạnh những giải thuật tìm kiếm thì các giải thuật sắp xếp dữ liệu không thể thiếu trong hệ quản lý thông tin trên máy tính. 4Các giải thuật tìm kiếmCó 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ả như sau: a1 a2 a3 a4 a5 … an-1 aN Tập dữ liệu được lưu trữ là dãy số a1, a2, ... ,aN. Giả sử chọn cấu trúc dữ liệu mảng để lưu trữ dãy số này trong bộ nhớ chính, có khai báo: int a[N]; Khoá cần tìm là x, được khai báo như sau: int x; 5Tìm kiếm tuyến tínhÝ 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 đã tìm hết mảng mà không thấy xMinh họa tìm x =10 10 Đã tìm Chưa thấyhếttại 7 5 12 41 10 32 13 9 15 3 vịmảng trí 5 1 2 3 4 5 6 7 8 9 10Minh họa tìm x =25 Chưa hết Đã hết 25 mảng mảng 7 5 12 41 10 32 13 9 15 3 1 2 3 4 5 6 7 8 9 10 6Giải thuậtBước 1: i = 1; // bắt đầu từ phần tử đầu tiên của dãyBước 2: So sánh a[i] với x, có 2 khả năng :a[i] = x : Tìm thấy. Dừnga[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. 7Nguyên tắc cài đặt hàm tìm kiếmNếu có xuất hiện phần tử có giá trị x thì trả về vị trí tìm đượcNgược lại thì trả về -1 8Cài đặtint TimTuyenTinh(int a[], int N, int x){ int i=0; while ((iCải tiếnDùng lính canh giúp giảm bớt phép so sánhMinh họa tìm x =10 10 7 5 12 41 10 32 13 9 15 3 10 1 2 3 4 5 6 7 8 9 10 11Minh họa tìm x = 25 25 7 5 12 41 10 32 13 9 15 3 25 25 1 2 3 4 5 6 7 8 9 10 11 10Cài đặtint TimTuyenTinh2(int a[],int N,int x)//cải tiến{ 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) 11Tìm kiếm nhị phânÝ tưởngÁp dụng đối với những dãy số đã có thứ tự.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 phạm vi tìm kiếm ở bước kế tiếp. 12Minh 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 13Minh 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 ...
Tìm kiếm theo từ khóa liên quan:
Cấu trúc dữ liệu Bài giảng Cấu trúc dữ liệu Giải thuật tìm kiếm Tìm kiếm tuyến tính Hàm tìm kiếm Tìm kiếm nhị phânGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 318 0 0 -
Giáo trình Lập trình cơ bản với C++ - Phan 2
69 trang 199 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 163 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 150 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 143 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 139 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 124 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 4: Một số giải thuật sắp xếp và tìm kiếm
29 trang 120 0 0 -
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 3 - Một số mô hình thuật toán
42 trang 74 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 74 0 0 -
Ứng dụng và cài đặt cấu trúc dữ liệu bằng C: Phần 1
338 trang 73 0 0 -
49 trang 72 0 0
-
Bài giảng Cơ sở dữ liệu: Chương 3 - ThS. Hoàng Mạnh Hà
67 trang 70 0 0 -
54 trang 70 0 0
-
10 trang 68 0 0
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Phần 1 - ThS. Hoàng Thế Phương
128 trang 67 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ngô Công Thắng
8 trang 66 0 0 -
Giáo trình Cấu trúc dữ liệu và giải thuật: Phần 2 - Lê Văn Vinh
67 trang 57 1 0 -
Giáo trình CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - Chương 1
5 trang 51 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - ThS. Trịnh Quốc Sơn (ĐH Công nghệ Thông tin)
20 trang 50 0 0