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

Cấu trúc dữ liệu và giải thuật chapter03 searching

50 5 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 50
Dung lượng 714,71 KB

Nội dung

CÁC THUẬT TOÁN TÌM KIẾM TRÊN MẢNG VÀ CHUỖI Bùi Tiến Lên 01/01/2017 Bài toán tìm kiếm I Tìm kiếm (search) là một công việc hàng ngày trong cuộc sống I Tìm kiếm là một trong những bài toán quan trọng tr[.]

CÁC THUẬT TỐN TÌM KIẾM TRÊN MẢNG VÀ CHUỖI Bùi Tiến Lên 01/01/2017 Bài tốn tìm kiếm I I I I Tìm kiếm (search) cơng việc hàng ngày sống Tìm kiếm toán quan trọng ứng dụng tin học Một số thuật tốn tìm kiếm phổ biến cấu trúc liệu mảng I Tìm kiếm I Tìm kiếm nhị phân Tìm kiếm chuỗi xem tốn tìm kiếm mảng Spring 2017 Data structure & Algorithm TÌM KIẾM TRÊN MẢNG Bài tốn Định nghĩa Cho dãy a có n phần tử Hãy tìm xem phần tử x có dãy a hay khơng? Bài tốn u cầu thêm thơng tin: Tìm vị trí phần tử x mảng, có bao nhiều phần tử x mảng Spring 2017 Data structure & Algorithm Tìm kiếm Ý tưởng Duyệt phần tử mảng a so sánh với phần tử x Spring 2017 Data structure & Algorithm Tìm kiếm (cont.) int LinearSearch (int a[], int n, int x) { for (int i = 0; i < n; i++) if (a[i] == x) return i; return -1; } Spring 2017 Data structure & Algorithm Đánh giá độ phức tạp I Đánh giá chi phí thực dựa tham số n (số phần tử) Trường hợp tốt trung bình xấu Spring 2017 Hàm ước lượng O(g(n)) Data structure & Algorithm Tìm kiếm nhị phân Ý tưởng Nếu phần tử dãy có quan hệ thứ tự; nghĩa so sánh bằng, lớn hơn, nhỏ giứa chúng Ta tổ chức lại dãy a để tìm kiếm hiệu Sắp xếp lại dãy a theo thứ tự tăng dần Xét dãy {a0 , a1 , , an−2 , an−1 }, so sánh phần tử amid với x 2.1 Nếu amid = x tìm thấy 2.2 Nếu amid < x tiếp tục tìm dãy {amid+1 , , an−1 } 2.3 Nếu amid > x tiếp tục tìm dãy {a0 , , amid−1 } Spring 2017 Data structure & Algorithm Tìm kiếm nhị phân (cont.) Chương trình 1: Hàm cài đặt tìm nhị phân với giả thiết dãy a thứ tự tăng dần 10 11 12 13 14 15 int BinarySearch (int a[], int n, int x) { int left = 0, right = n - 1, mid; { mid = (left + right) / 2; if (x == a[mid ]) return mid; else if (x < a[mid ]) right = mid - 1; else left = mid + 1; } while (left

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

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

TÀI LIỆU LIÊN QUAN

w