BÀI MỚI NHẤT
Saturday, September 24, 2016

Tìm kiếm nhị phân

Cấu trúc dữ liệu và giải thuật - Đệ quy

Đề bài : Viết chương trình c tìm kiếm phần tử trong mảng 1 chiều bằng tìm kiếm nhị phân


Tìm kiếm nhị phân

*Lưu ý:

Tìm kiếm nhị phân (Binary Search) áp dụng cho các dãy phần tử đã được sắp xếp tăng dần hoặc giảm dần. Binary Search sử dụng nguyên lý nổi tiếng của “lý thuyết thông tin”(Information Theroy).

Ý tưởng:

ý tưởng

Vì dãy đã có trật tự (ví dụ thứ tự tăng) nên các phần tử trong dãy có quan hệ tuyến tính a1<a2<a3<…<an<an+1. Giả sử phải xác định xem khóa x (phần tử tìm kiếm) có trong dãy không. Cần giải quyết 2 tình huống:

  • X<a(i) thi chắc chắn x chỉ tồn tại trong đoan a[1,i]
  • X>a(i) thì chắc chắn x chỉ tồn tại trong đoạn a[i,n]

Trong 2 tình huống người ta gọi a(i) là mốc để so sánh

Các bước của thuật toán:

  1. Gián left=1; right=n;(left là phần tử đầu, right là phần tử cuối)
  2. Trong khi chưa xét hết các phần tử của dãy (tức là d<=c) thì làm các việc sau
  3. Tính điểm giữa: mid=(left+ right)/2
  4. So sánh khóa(phần tử cần tìm) với mid


    • Nếu x<a[mid] thì left = mid-1
    • Nếu x>a[mid] thì right = mid+1
    • Nếu a[mid] = x -> thông báo tìm thấy -> kết thúc
    • Nếu a[mid] khác x -> quay lại bước a -> thông báo không tìm thấy

Cài đặt:



Kết quả khi chạy chương trình:

kết quả

Độ phức tạp của thuật toán :

  • Tốt nhất: O(1)
  • Xấu nhất: O(log2n)
  • Ngẫu nhiên: O(log2(n/2))
Được viết bởi Đinh Quang Trưởng