1. Trang chủ
  2. » Tất cả

Cấu trúc dữ liệu giải thuật các thuật toán tìm kiếm searching (2)

10 17 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 287,68 KB

Nội dung

Các thuật toán tìm kiếm (Searching algorithms) Cấu trúc dữ liệu & Giải thuật (Data Structures and Algorithms) 09/2013 Nguyen Tri Tuan Khoa CNTT ĐH KHTN Tp HCM 1 Tìm kiếm Searching • Trình bày các thuậ[.]

Cấu trúc liệu & Giải thuật (Data Structures and Algorithms) Các thuật tốn tìm kiếm (Searching algorithms) 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 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 tốn • Đánh giá thuật toán 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 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,… 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 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) 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 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 } 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 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 ? 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 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:     n n(n  1) / (n  1)   n n 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM Tìm nhị phân (Binary Search) • Các phần tử – n=8 – key = 16 • Xét phần tử m = n/2 • Nếu (a[m]==key)  Kết thúc ! • Nếu (key < a[m]) 10 12 16 18 [0] [1] [2] [3] [4] [5] [6] [7] Xét ½ dóy bờn trỏi ã Nu (key > a[m]) Xột ẵ dãy bên phải 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 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 09/2013 Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 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

Ngày đăng: 25/03/2023, 08:37

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w