BÀI 15. THUẬT TOÁN TÌM KIẾM NHỊ PHÂN

A. TÓM TẮT LÍ THUYẾT

Ta giả sử danh sách (dãy) đã được sắp xếp theo thứ tự từ nhỏ đến lớn và gọi vùng tìm kiếm là danh sách mà thuật toán cần tìm kiếm trên đó. Ban đầu, vùng tìm kiếm là toàn bộ danh sách. Thuật toán tìm kiếm nhị phân:

• Bước 1. Nếu vùng tìm kiếm không có phần tử nào thì kết luận không tìm thấy và thuật toán kết thúc

• Bước 2. Xác định vị trí giữa vùng tim kiếm. Vị trí này chia vùng tìm kiếm thành hai nửa nửa trước và nửa sau vị trí giữa

• Bước 3. Nếu giá trị cần tim bằng giá trị của vị trí giữa thì kết luận giá trị cắt Minh xuất hiện tại vị với giữa và kết thúc.

Bước 4: Nếu giá trị cần tinh nhỏ hơn giá trị của vị trí giữa thì vùng tim viền mới được thu hẹp lại, chỉ còn nửa trước của dãy. Ngược lại tiêu giá trị cần tiến lớn hơn giá trị của vị trí giữa) thì vùng tìm kiếm mới được thu hẹp lại, chỉ còn nửa sau của đấy.

• Bước 5. Lập lại từ bước 1 đến Bước 4 cho đến khi tìm thấy giá trị cần tìm (Bước 3) hoặc vùng tìm kiếm không còn phần tử nào (Bước 1).

B. BÀI TẬP VÀ THỰC HÀNH

15.1 Thuật toán tìm kiếm nhị phân được sử dụng trong trường hợp nào?

A. Tin một phần tử trong danh sách bất kì.

B. Tiến trước phần tử trong danh sách đã được sắp xếp,

 => Đáp án: B. Tiến trước phần tử trong danh sách đã được sắp xếp

15.2. Điều gì xảy ra khi thuật toán tìm kiếm nhị phần không tìm thấy giá trị cần tim trong danh sách

A. Tiếp tục tìm kiếm và không bao giờ kết thúc

B. Thông báo Tìm thấy và tiến tiếp xem còn phần tử nào khác nữa không.

C. Thông báo Tìm thấy và kết thúc

D. Thông báo "Không tìm thấy và kết thúc

 => Đáp án: D. Thông báo "Không tìm thấy và kết thúc

15.3. Chọn câu diễn đạt đúng hoạt động của thuật toán tìm kiếm nhị phân

A. Tim trên danh sách đã sắp xếp, bắt đầu từ đầu danh sách, chứng nào chưa tìm thấy hoặc chưa tìm hết thị còn tìm tiếp.

B. Tiến trên danh sách đã sắp xếp, bắt đầu từ giữa danh sách, chừng nào chưa tìm thấy hoặc chưa tìm hết thì còn tin tiếp.

C. Tìm trên danh sách bất kì, bắt đầu từ giữa danh sách, chừng nào chưa tìm thấy hoặc chưa tím hết thì còn tim tiếp.

D. Tiến trên danh sách bất kì, bắt đầu từ đầu danh sách, chứng nào chưa tìm thấy hoặc chưa tim hết thì còn tìm tiếp

=> Đáp án: B. Tiến trên danh sách đã sắp xếp, bắt đầu từ giữa danh sách, chừng nào chưa tìm thấy hoặc chưa tìm hết thì còn tin tiếp.

15.4. Thuật toán tìm kiếm nhị phân cần bao nhiêu bước để tìm thấy “Mai” trong danh sách [Hoa", "Lan”, ”Ly”, ”Mai”, ”Phong”, ”Vi”]?

A. 1.

B.2.

C. 3.

D. 4.

 => Đáp án: C. 3.

15.5. Thuật toán tìm kiếm nhị phân cần thực hiện bao nhiêu bước lặp để thông báo không tìm thấy số 15 trong danh sách [3, 5, 7, 11, 12, 25]?

A. 2.                     B. 3.                     C. 4.                      D. 5.

=> Đáp án: C. 4. 

15.6. Thực hiện thuật toán tìm kiếm nhị phân để tìm số 10 trong danh sách [2, 4 ,6, 8, 10, 12]. Đầu ra của thuật toán là?

A. Thông báo “Không tìm thấy”.

B. Thông báo “Tìm thấy”.

C. Thông báo “Tìm thấy”, giá trị cần tìm tại vị trí thứ 5 của danh sách.

D. Thông báo “Tìm thấy”, giá trị cần tìm tại vị trí thứ 6 của danh sách.

 => Đáp án:  C. Thông báo “Tìm thấy”, giá trị cần tìm tại vị trí thứ 5 của danh sách.

15.7. Hãy ghép mỗi nội dung ở cột A với những nội dung phù hợp ở cột B để xác định đầu vào và đầu ra của thuật toán tìm kiếm nhị phân. 

=> Đáp án:  1-c; 1-d; 2-a; 2-b.

15.8. Em hãy điền các cụm từ: giá trị cần tìm xuất hiện ở vị trí giữa, nửa sau, “Không tìm thấy”, nửa trước vào chỗ chấm (...) được đánh số trong các câu sau để được mô tả chính xác về thuật toán tìm kiếm nhị phân.

Bước 1: Bước 1. Nếu vùng tìm kiếm không có phần tử nào thì kết luận .... (1). .... và thuật toán kết thúc.

Bước 2. Xác định vị trí giữa vùng tìm kiếm. Vị trí này chia vùng tìm kiếm thành hai nửa: nửa trước và nửa sau vị trí giữa.

Bước 3. Nếu giá trị cần tìm bằng giá trị của vị trí giữa thì kết luận .....(2)...... và thuật toán kết thúc. 

Bước 4. Nếu giá trị cần tìm nhỏ hơn giá trị của vị trí giữa thì vùng tìm kiếm mới được thu hẹp lại, chỉ còn ...... .(3).................. của dãy. Ngược lại (nếu giá trị cần tìm lớn hơn giá trị của vị trí giữa) thì vùng tìm kiếm mới được thu hẹp lại, chỉ còn ........ (4)......... của dãy.

Bước 5. Lặp lại từ Bước 1 đến Bước 5 cho đến vùng tìm kiếm không khi còn phần tử nào (Bước 1) hoặc tìm thấy giá trị cần tìm (Bước 3).

 => Đáp án:  

(1) – “Không tìm thấy”;

(2) – giá trị cần tìm xuất hiện ở vị trí giữa;

(3) – nửa trước;

(4) – nửa sau. 

15.9. Cho bảng điểm môn Tin học của học sinh tổ một như sau:

a) Em hãy sắp xếp lại danh sách theo thứ tự tăng dần của Điểm.

b) Em hãy liệt kê các bước lặp thực hiện thuật toán tìm kiếm nhị phân để tìm học sinh được điểm 9,5 môn Tin học. Hãy cho biết tên học sinh đó.

=> Đáp án: 

a) Danh sách học sinh sắp xếp theo thứ tự tăng dần của Điểm là:

b) Các bước thực hiện thuật toán tìm kiếm nhị phân để tìm học sinh được điểm 9,5 môn Tin học Vùng tìm kiếm là dãy số:     7,5              8,0            8,5          9,0            9,5              10

Bước 1. Chọn phần tử ở giữa, đó là 8,5. So sánh ta có 9,5 > 8,5, do đó vùng tìm kiếm thu hẹp chỉ còn nửa sau của danh sách.

Bước 2. Chọn phần tử ở giữa, đó là 9,5. So sánh ta có 9,5 = 9,5, tìm thấy giả trị cần tìm nên thuật toán dừng lại. 

15.10. Thực hành: Em hãy tìm kiếm thông tin trên Internet để lập bảng danh sách khoảng 10 cuốn sách mà em yêu thích và đơn giá của mỗi cuốn sách. Sau đó thực hiện thuật toán tìm kiếm nhị phân để tìm cuốn sách mà em thích nhất trong danh sách vừa tìm được và cho biết đơn giá của cuốn sách đó.

=> Đáp án: 

Hướng dẫn:

  • Bước 1. Tìm kiếm thông tin trên Internet, lập bảng danh sách khoảng 10 cuốn sách và đơn giá của mỗi cuốn sách.
  • Bước 2. Sắp xếp tên sách theo thứ tự của bảng chữ cái.
  • Bước 3. Chỉ ra tên một cuốn sách mà em thích nhất.
  • Bước 4. Liệt kê các bước thực hiện thuật toán tìm kiếm nhị phân để tìm tên cuốn sách mà em thích nhất trong danh sách ở Bước 2.
  • Bước 5. Ghi ra đơn giá của cuốn sách tìm thấy ở Bước 4