Phương pháp tìm kiếm nhị phân
Phương pháp tìm kiếm nhị phân
Phương pháp tìm kiếm nhị phân được áp dụng trên dãy khóa đã sắp thứ tự. Tức là K[1] ≤ K[2] ≤ ... ≤ K[n]
Nội dung thuật toán
Giả sử cần tìm X trong đoạn K[L ... R] (L ≤ R), trước hết ta xét khóa nằm giữa đoạn K[Mid] với Mid = (L + R) div 2;
• Nếu K[Mid] < X nghĩa là đoạn K[L ... Mid] chứa toàn khóa < X, khi đó ta tiến hành tìm kiếm X trên đoạn K[Mid+1 ... R]
• Nếu K[Mid] > X nghĩa là đoạn K[L ... Mid] chứa toàn khóa > X, khi đó ta tiến hành tìm kiếm X trên đoạn K[L ... Mid - 1]
• Nếu K[Mid] = X thì tìm kiếm thành công (kết thúc quá trình tìm kiếm).
Quá trình tìm kiếm sẽ thất bại nếu một bước nào đó đoạn tìm kiếm là rỗng tức là L > R
Nội dung chương trình
Function TK_NhiPhan(X: Key): Longint;
Var L,R,Mid: Longint;
Begin
L := 1; R := N;
While (L <= R) do
Begin
Mid := (L + R) div 2;
if K[Mid] = X then exit(Mid);
if K[Mid] < X then L := Mid + 1
else R := Mid – 1;
End;
exit(0);
End;
Độ phức tạp thuật toán.
Người ta chứng minh được độ phức tạp tính toán của thuật toán tìm kiếm nhị phân trong trường hợp tốt nhất là O(1), trong trường hợp xấu nhất là O(logN). Tuy nhiên không nên quên rằng trước khi sử dụng phương pháp tìm kiếm nhị phân thì dãy khóa phải được sắp xếp, tức là thời gian chi phí cho việc sắp xếp phải được tính đến.
Tin khác:
- Tìm hiểu quy ước đặt tên thiết bị lưu trữ trong Linux
- Tìm hiểu cấu trúc i-node và cách đọc thông tin tệp tin trong Linux
- Xu hướng mới trong phân tích và thiết kế hệ thống thông tin
- MuZero – Thuật toán Trí tuệ nhân tạo có khả năng tự học mạnh mẽ
- Chủ đề OSCP (Port Redirection and SSH Tunneling) (tiếp theo)