Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Trường ĐH Văn Lang
lượt xem 6
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 những kiến thức như: Giới thiệu bài toán tìm kiếm; 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ường ĐH Văn Lang
- KHOA CÔNG NGHỆ THÔNG TIN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT BÀI 2: GIẢI THUẬT TÌM KIẾM GVGD: 1. THS. TRẦN CÔNG THANH HỌC KỲ I – NĂM HỌC 2020-2021 KHÓA
- 01. Giới thiệu bài toán tìm kiếm 02.Tìm kiếm tuyến tính 03. Tìm kiếm nhị phân NỘI 04. Bài tập DUNG 05. 06.
- 1. Giới thiệu bài toán tìm kiếm ❖ Tìm kiếm là quá trình xác định một đối tượng nào đó trong một tập các đối tượng. Kết quả trả về: • Đối tượng tìm được (nếu có) • Chỉ số (nếu có) xác định vị trí của đối tượng trong tập đó. 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com ❖ Việc tìm kiếm dựa theo một trường nào đó của đối tượng, trường này là khóa (key) của việc tìm kiếm. Ví dụ: Tìm sinh viên có họ tên X trong DSSV. SV {MaSV, HoTen, DiaChi,…} Khoá? Kết quả trả về? 4 KHOA CÔNG NGHỆ THÔNG TIN
- 1. Giới thiệu bài toán tìm kiếm Bài toán được mô tả như sau: • Tập dữ liệu được lưu trữ là dãy 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]; • Khóa cần tìm là x: int x; 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com Tìm kiếm Tìm kiếm tuyến tính Tìm kiếm nhị phân Tập dữ Tập dữ liệu liệu đã bất kỳ được sắp xếp 5 KHOA CÔNG NGHỆ THÔNG TIN
- 1. Giới thiệu bài toán tìm kiếm • Ý tưởng: duyệt tuần tự từ phần tử đầu tiên, lần lượt so sánh khóa tìm kiếm với khoá tương ứng của các phần tử trong danh sách. Cho đến khi gặp phần tử cần tìm hoặc đến khi duyệt hết danh sách. i=0 • Các bước tiến hành như sau: 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com S i< Không tìm thấy n Đ Đ a[i] Tìm thấy =x S i=i +1 6 KHOA CÔNG NGHỆ THÔNG TIN
- 2. 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 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 7 KHOA CÔNG NGHỆ THÔNG TIN
- 2. Tìm kiếm tuyến tính • Ví dụ: Cho dãy số a, giá trị tìm X = 8: 12 2 5 8 1 6 4 X=8 Tìm thấy 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! 12 2 ibaotu.com 5 8 1 6 4 i=0 i=1 i=2 i=3 i=4 i=5 i=6 X=7 Không tìm thấy 12 2 5 8 1 6 4 i=0 i=1 i=2 i=3 i=4 i=5 i=6 8 KHOA CÔNG NGHỆ THÔNG TIN
- 2. Tìm kiếm tuyến tính Giải thuật Bước 1: i = 0; // 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 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com •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. 9 KHOA CÔNG NGHỆ THÔNG TIN
- 2. Tìm kiếm tuyến tính Thuật toán tìm kiếm tuyến tính /* Trả về: vị trí xuất hiện đầu tiên của x trong mảng a Trả về: -1 nếu x không có trong mảng a */ int Search(int a[], int n, int key) { 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com int i =0; while (i
- 2. Tìm kiếm tuyến tính Thuật toán tìm kiếm tuyến tính cải tiến int Search(int a[], int n, int key) { int i =0; a[n] =key; // thêm phần tử thứ n+1 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com while (key != a[i]) i++; if (i == n) return -1; // tìm hết mảng nhưng không có x return i; // tìm thấy x tại vị trí i } 11 KHOA CÔNG NGHỆ THÔNG TIN
- 2. Tìm kiếm tuyến tính ▪ Độ phức tạp tính toán cấp n: T(n)=O(n) ▪ Nhận xét: ✔ Giải thuật tìm kiếm tuyến tính không phụ thuộc vào thứ tự của các phần tử trong mảng, do vậy đây là 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com phương pháp tổng quát nhất để tìm kiếm trên một dãy bất kỳ ✔ Một thuật toán có thể được cài đặt theo nhiều cách khác nhau, kỹ thuật cài đặt ảnh hưởng nhiều đến tốc độ thực hiện. Ví dụ như thuật toán Search cải tiến sẽ chạy nhanh hơn thuật toán trước do vòng lặp while chỉ so sánh một điều kiện... 12 KHOA CÔNG NGHỆ THÔNG TIN
- 3. 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 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com 13 KHOA CÔNG NGHỆ THÔNG TIN
- 3. Tìm kiếm nhị phân (Binary Search) • Cho dãy số gồm 8 phần tử bên dưới và X = 8: 1 2 4 5 6 8 12 15 X=8 1 2 4 5 < 6 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! 8 12 15 ibaotu.com Left = 0 Mid = 3 Right = 7 Đoạn tìm kiếm X=8 = 1 2 4 5 6 8 12 15 Left = 4 Mid = 5 Right = 7 Đoạn tìm kiếm 14 KHOA CÔNG NGHỆ THÔNG TIN
- 3. Tìm kiếm nhị phân (Binary Search) 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 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com • 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
- 3. Tìm kiếm nhị phân (Binary Search) Thuật toán tìm kiếm nhị phân int BinarySearch(int a[], int n, int key){ int left = 0, right = n-1, mid; while (left
- 3. Tìm kiếm nhị phân (Binary Search) ▪ Độ phức tạp tính toán cấp n: T(n)=O(log 2n) ▪ Nhận xét: Thuật toán nhị phân dựa vào quan hệ giá trị của các phần tử trong mảng để định hướng trong quá trình tìm 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com kiếm, do vậy chỉ áp dụng được với dãy đã có thứ tự. Thuật toán nhị phân tìm kiếm nhanh hơn tìm kiếm tuyến tính. Tuy nhiên khi áp dụng thuật toán nhị phân thì cần phải quan tâm đến chi phí cho việc sắp xếp mảng. Vì khi mảng được sắp thứ tự rồi thì mới tìm kiếm nhị phân. 17 KHOA CÔNG NGHỆ THÔNG TIN
- 4. Bài tập lý thuyết Câu 1. Cho dãy số sau: 3 4 6 6 12 16 21 34 41 80 1 2 3 4 5 6 7 8 9 10 Cho biết vị trí tìm thấy và số lần so sánh để tìm được phần tử có giá trị x = 6 khi áp dụng giải thuật tìm kiếm: 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com tuyến tính và nhị phân. Câu 2. Xây dựng giải thuật tìm kiếm phần tử có giá trị nhỏ nhất trong dãy số: Dùng mã tự nhiên, mã giả và lưu đồ. 18 KHOA CÔNG NGHỆ THÔNG TIN
- 4. Bài tập lý thuyết - Hướng dẫn Câu 1: Tìm x = 6 3 4 6 6 12 16 21 34 41 80 1 2 3 4 5 6 7 8 9 10 Tìm x theo phương pháp tuyến tính 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com Vị trí So sánh với Kết quả x i=1 (a[i]=3) ≠ x Tăng vị trí i i=2 (a[i]=4) ≠ x Tăng vị trí i i=3 (a[i]=6) = x Dừng, trả về vị trí i (3) 19 KHOA CÔNG NGHỆ THÔNG TIN
- 4. Bài tập lý thuyết – Hướng dẫn Câu 1: Tìm x = 6 3 4 6 6 12 16 21 34 41 80 1 2 3 4 5 6 7 8 9 10 Tìm x theo phương pháp nhị phân 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! Xét đoạn Vị trí So sánh ibaotu.com Kết quả giữa đoạn với x l=1, r=10 m=(l+r)/2=5 (a[m]=12) ≠ x Cập nhật r=m-1=4 (a[m]>x 🡪 xét trái) l=1, r=4 m=(l+r)/2=2 (a[m]=4) ≠ x Cập nhật l=m+1=3 (a[m]
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 | 78 | 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 | 157 | 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 | 105 | 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 | 46 | 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