Bài toán: Dãy A được xếp thứ tự gồm N số nguyên khác nhau từ a1 ... Nếu có hãy cho biết chỉ số đó... Nếucó hãy cho biết chỉ số đó... Nhận xét: Vỡ dãy A là dãy tăng nên sau mỗi lần so sá
Trang 1Thực hiện tháng 10 năm 2010
Trang 2VD1: Cho d·y sè A cã: 1, 2, 9, 4, 10, 5; k=4
VD2: Cho d·y sè B cã: 1, 2, 4, 5, 9, 12; k=5
Trang 3Bài toán: Dãy A được xếp thứ tự gồm N số nguyên khác
nhau từ a1 aN ; và số nguyên k Cần biết có hay không chỉ số i (1≤ i ≤ N) mà ai = k Nếu có hãy cho biết chỉ
số đó.
Bài toán trên có gỡ khác so với
bài toán tỡm kiếm theo thuật toán tỡm kiếm tuần tự?
B I TO N V THU T TO N À Á À Ậ Á
THUẬT TOÁN TèM KiẾM NHỊ PHÂN
Trang 4Bài toán: Cho dãy A gồm N số nguyên khác nhau và dãy
t ng có a ă 1 aN ; và số nguyên k.Cần biết có hay không chỉ số i (1≤ i ≤ N) mà ai = k Nếucó hãy cho biết chỉ số đó.
Xác định bài toán:
Input: Số nguyên dương N, dãy A được
sắp xếp tăng a1 aN ; số nguyên k Output: + Chỉ số i khi ai = k
+ Thông báo không có số nào trong dãy A bằng k
Hãy xác
định bài
toán trên?
B I TO N V THU T TO N À Á À Ậ Á
THUẬT TOÁN TèM KiẾM NHỊ PHÂN
Trang 5Nhận xét: Vỡ dãy A là dãy tăng nên sau mỗi lần so sánh với khóa k đã cho ta sẽ thu hẹp được phạm vi tỡm kiếm
+ Nếu aGiua = k thỡ giua là chỉ số cần tỡm rồi kết thúc thuật toán
+ Nếu aGiua > k việc tỡm kiếm chỉ thực hiện trên dãy
a1 , a2 , a… Giua -1
+ Nếu aGiua < k thỡ thực hiện tỡm kiếm trên dãy
aGiua + 1 , aGiua + 2 , a… N
ý tưởng:
+ Chọn số hạng ở giữa dãy aGiua so sánh với k, trong
đó Giua = [(N + 1)/2]
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 khóa k trong dãy A hoặc phạm vi tỡm kiếm bằng rỗng
B I TO N V THU T TO N À Á À Ậ Á
THUẬT TOÁN TèM KiẾM NHỊ PHÂN
Trang 6Lưu ý:
chỉ số i, Dau, Cuoi, Giua
đều có giá trị nguyên
B I TO N V THU T TO N À Á À Ậ Á
THUẬT TOÁN TèM KiẾM NHỊ PHÂN
Trang 7Diễn tả thuật toán theo cách liệt kê
- Bước 1: Nhập N, các số hạng a1 , a2 , , aN và khóa k
- Bước 2: Dau 1 , Cuoi N
- Bước 3: Giua [(Dau + Cuoi ) / 2]
- 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 thỡ thông báo dãy A không có số hạng nào
có giá trị bằng k, rồi kết thúc
- Bước 8: Quay lại bước 3
B I TO N V THU T TO N À Á À Ậ Á
THUẬT TOÁN TèM KiẾM NHỊ PHÂN
Trang 8Diễn tả thuật toán theo sơ đồ khối
Nhập N, dãy a1 aN , số k
Dau 1, Cuoi N
Giua [(Dau + Cuoi)/2]
aGiua = k ? sai aGiua > k ?
đúng
đưa ra Giua rồi kết thúc
Cuoi Giua - 1
Dau Giua + 1 Dau > Cuoi?
đúng
sai
đúng
Dãy A không có số hạng nào bằng k
rồi kết thúc
sai
Trang 9* M« pháng thuËt to¸n tìm kiÕm nhÞ ph©n
VÝ dô 1:
Cho N = 6 vµ d·y A s¾p xÕp tăng dÇn: 1, 2, 4, 5 , 9 , 12 ; sè k = 5
Dau
Cuoi
Giua
aGiua
LÇn duyÖt
KÕt luËn: ë lÇn duyÖt thø 3 th ì a Giua = k = 5
Trang 10* M« pháng thuËt to¸n tìm kiÕm nhÞ ph©n
VÝ dô 1:
Cho N = 6 vµ d·y A s¾p xÕp tăng dÇn: 1, 2, 4, 5 , 9 , 12 ; sè k = 10
Dau
Cuoi
Giua
aGiua
LÇn duyÖt
KÕt luËn: T¹i lÇn duyÖt thø 4 Dau > Cuoi nªn kÕt luËn
trong d·y A kh«ng cã sè h¹ng nµo cã gi¸ trÞ b»ng 10
Trang 11Củng cố và hướng dẫn về nhà
- Chú ý: dãy số sau khi sắp xếp thứ tự, ta dùng thuật toán tim kiếm
nhị phân
- Hoàn thành các bài tập ở Sgk và một số bài tập ở SBT để chuẩn bị cho giờ bài tập tiết sau
- Cho N = 6 và dãy A được sắp xếp giảm dần: 12, 9, 5, 4, 2, 1; số k = 4 Mô phỏng thuật toán nhị phân
Trang 12Thực hiện tháng 10 năm 2010