Bài giảng Cấu trúc dữ liệu và giải thuật: Tìm kiếm tuần tự, tìm kiếm nhị phân trình bày các khái niệm về tìm kiếm, đánh giá thuật toán, tìm nhị phân, binary search. Đây là một tài liệu hữu ích dành cho các bạn sinh viên ngành Công nghệ thông tin và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.
Tìm kiếm Tìm kiếm nhị phân Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@fit.hcmus.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm kiếm - Searching Trình bày thuật tốn thơng dụng cho việc tìm kiếm (Tìm tuần tự, tìm nhị phân) Minh họa thuật toán Đánh giá thuật toán Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt Công dụng Tìm kiếm danh sách phần tử thao tác thường sử dụng máy tính Ví dụ: Cơ sở liệu (Database): tìm sinh viên, tìm tài khoản ngân hàng,… Internet: Yahoo!, Google,… Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt Các phương pháp phổ biến Tìm (Serial Search) Đơn giản Chi phí O(n) Tìm nhị phân Phải danh sách “đặc” Dữ liệu cần thứ tự Chi phí trung bình O(log2n) Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm (Serial Search) int SerialSearch(int a[], int n, int key) { for (int i=0; i < n; i++) if (a[i]==key) return i; // tìm thấy return –1; // khơng tìm thấy } Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt Serial Search Đánh giá thuật tốn Kích thước dãy: n Trường hợp tốt nhất: O(1), key==a[0] Trường hợp xấu nhất: O(n), key==a[n-1] khơng tìm thấy Trường hợp trung bình: O(n) Chính xác ? Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt Serial Search Trường hợp trung bình Giả sử: phần tử cần tìm key có dãy xác suất xuất vị trí dãy Chi phí trung bình: Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm nhị phân (Binary Search) Các phần tử n=8 key = 16 10 12 16 18 [0] [1] [2] [3] [4] [5] [6] [7] Xét phần tử m = n/2 Nếu (a[m]==key) Kết thúc ! Nếu (key < a[m]) Xét ½ dãy bên trái Nếu (key > a[m]) Xét ½ dãy bên phải Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm nhị phân (Binary Search) 10 12 16 18 [0] [1] [2] [3] [4] [5] [6] [7] [5] [6] [7] 10 12 16 18 [0] [1] [2] [3] [4] [5] [6] [7] Tìm thấy Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt Binary Search (Minh họa chương trình) int BinarySearch(int a[], int n, int key) { int Left = 0, Right = n-1; while (Left