3. Bài mới
Nội dung Hoạt động của thày và trò
Ví dụ 3: Bài toán tìm kiếm - Thuật toán tìm kiếm nhị phân (Binary Search) phân (Binary Search)
Xác định bài toán:
- Input: D y A là d y tăng gồm N số nguyên khác nhau aã ã 1, a2, … , aN và một số nguyên k.
- Output: Chỉ số i mà ai = k hoặc thông báo không có số hạng nào của d y A có giá rtị bằng k.ã
ý tởng:
Sử dụng tính chất d y A là d y tăng, ta tìm cách thu hẹpã ã
nhanh phạm vi tìm kiếm sau mỗi lần so sánh khoá với số hạng đợc chọn. Để làm điều đó, ta chọn số hạng agiua ở “giữa d y” để so sánh với k,ã
trong đó Giua = +2
1
N
. Khi đó, chỉ xảy ra một trong ba trờng hợp sau:
- Nếu aGiua = k thì Giua là chỉ số cần tìm. Việc tìm kiếm kết thúc.
- Nếu aGiua > k thì do d y A là d y đ đã ã ã ợc sắp xếp nên việc tìm kiếm tiếp theo chỉ xét trên d y aã 1, a2, … , aGiua.
- Nếu aGiua < k thì thực hiện tìm kiếm trên d y aã Giua+1, aGiua+2, …, aN.
Quá trình trên sẽ đợc lặp lại một số lần cho đến khi hoặc đ tìm thấy khoá k trong d y hoặc phạm vi tìm kiếmã ã
bằng rỗng.
Thuật toán:
a) Cách liệt kê:
ĐVĐ: Tìm kiếm là việc thờng xảy ra trong cuộc sống, chẳng hạn tìm số nhà trong d y phố, tìmã
ngời có mức lơng 2500000 trong bảng lơng … Vấn đề đặt ra là tìm nh thế nào cho nhanh chóng.
GV: H y xác định bài toán?ã
HS: Trả lời.
GV: H y nêu ý tã ởng về thuật toán? HS: Trả lời
GV: Hớng dẫn học sinh tìm hiểu ví dụ mô phỏng
Bớc 1. Nhập N, các số hạng a1, a2, … , aN và khóa k; Bớc 2. Đau ← 1, Cuoi ← N; Bớc 3. Giua ← +2 Cuoi Dau ;
Bớc 4. Nếu aGiua = k thì thông báo chỉ số Giua, rồi kết thúc;
Bớc 5. Nếu aGiua > k thì đặt Cuoi = Giua - 1, ròi chuyển đến bớc 7;
Bớc 6. Dau ← Giua + 1;
Bớc 7. Nếu Dau > Cuoi thi thông báo d y A không có sốã
hạng có giá trị bằng k, rồi kết thúc;
Bớc 8. Quay lại bớc 3 ; b) Sơ đồ khối.
việc thực hiện thuật toán
+ Tìm kiếm nhị phân trong d y A đ đã ã ợc sắp xếp: 2, 4, 5, 6, 9, 21, 22, 30, 31, 33 với khoá k = 21.
+ Tìm kiếm nhị phân trong d y A đ đã ã ợc sắp xếp: 2, 4, 5, 6, 9, 21, 22, 30, 31, 33 với khoá k = 25.
- Sau khi học sinh đ nắm đã ợc cách làm, GV yêu cầu các HS hoặc cùng với các HS liệt kê các bớc của thuật toán.
GV: Ta nhận thấy, nếu agiua > k thì phạm vi tìm kiếm là ở nửa đầu của d y A, nếu aã giua < k thì phạm vi tìm kiếm ở nửa sau của d y A.ã
GV: Trình bày bảng sơ đồ thuật toán, giải thích rõ từng thao tác.
GV: Sau khi trình bày song bảng sơ đồ thuật toán sẽ xoá một số hớng mũi tên của thao tác và yêu cầu HS điền lại cho thích hợp.
HS: Lên bảng điền lại các hớng mũi tên đ bịã
xoá
Iv. củng cố và bài tập.