Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Trần Minh Thái (Trường Đại học Hồng Bàng )
lượt xem 3
download
Bài giảng "Cấu trúc dữ liệu và giải thuật - Chương 2: Giải thuật tìm kiếm" cung cấp cho người học các kiến thức: Nhu cầu tìm kiếm, sắp xếp dữ liệu trong một hệ thống thông tin, các giải thuật tìm kiếm nội, tìm kiếm tuyến tính, tìm kiếm nhị phân,... Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Trần Minh Thái (Trường Đại học Hồng Bàng )
- Chương 2.1. Giải thuật tìm kiếm Trần Minh Thái Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn 1
- 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 tuần tự 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
- 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 3
- Vấn đề tìm kiếm • Dựa vào một phần thông tin được gọi là khoá (key) tìm một mẫu tin (record) chứa các thông tin khác liên quan với khoá này • Có thể có nhiều mẫu tin hoặc không có mẫu tin nào chứa khoá cần tìm 4
- Đánh giá giải thuật tìm kiếm • Tìm kiếm thường là tác vụ tốn nhiều thời gian trong một chương trình Tổ chức cấu trúc dữ liệu và giải thuật cho việc tìm kiếm ảnh hưởng lớn đến hiệu suất hoạt động của chương trình • Thông số đo chủ yếu là số lần so sánh khoá cần tìm với các mẫu tin khác 5
- Phân loại • Tìm kiếm nội và tìm kiếm ngoại • Dữ liệu lưu trên thiết bị lưu trữ ngoài như đĩa hay băng từ: tìm kiếm ngoại • Dữ liệu được lưu trữ trên bộ nhớ chính: tìm kiếm nội 6
- Các giải thuật tìm kiếm • Có 2 giải thuật thường được áp dụng: tìm tuần tự 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; 7
- Tìm tuần tự (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 8
- Tìm tuần tự • 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 9
- 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. 10
- 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 11
- Cài đặt int LinearSearch(int a[], int N, int x) { int i=0; while ((i
- Vấn đề int LinearSearch(int a[], int N, int x) { Nếu có x thì không cần thiết int i=0; Có thể loại bỏ? while ((i
- 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 14
- 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) 15
- Q&A 16
- 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 17
- 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 18
- 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 19
- 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 174 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 79 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 57 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 158 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 106 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn