Bài Toán Tìm Kiếm Nhị Phân Bài Toán Tìm Kiếm Nhị Phân... Kiểm Tra Bài Cũ 1/ Hãy trình bày ý tưởng của bài toán tìm kiếm tuần tự?. Trả lời : Lần lượt so sánh từng số hạng trong dãy A
Trang 1Bài Toán Tìm Kiếm Nhị Phân
Bài Toán Tìm Kiếm Nhị Phân
Trang 2KIỂM TRA BÀI CŨ
A Kiểm Tra Bài Cũ
1/ Hãy trình bày ý tưởng của bài toán tìm kiếm tuần tự?
Trả lời :
Lần lượt so sánh từng số hạng trong dãy A với khóa cần tìm cho đến khi hoặc tìm thấy một số hạng bằng khóa hoặc dãy đã xét hết và không có giá trị nào bằng khóa.
2/ Cho dãy A = 3 6 7 9 11 14 18 20 và k = 18
a) Hãy cho biết dãy A có tính chất gì?
Trả lời :
Dãy A là một dãy có thứ tự không giảm
b) Máy tính sẽ thực hiện đến lần thứ mấy thì sẽ
tìm thấy được k trong dãy A?
Trả lời :
Đến lần thứ 7 thì sẽ tìm được k trong dãy A
Trang 3BÀI TOÁN TÌM KIẾM NHỊ PHÂN
A Kiểm Tra Bài Cũ
B Mục Đích Yêu Cầu
MỤC ĐÍCH YÊU CẦU
- Biết một bài toán có thể được giải bằng nhiều thuật toán khác nhau
- Hiểu được ý tưởng của bài toán tìm kiếm nhị phân
- Biết trình bày thuật toán theo hai cách liệt kê và sơ đồ khối
Trang 41 2 3 4 5 6 7 8
A Kiểm Tra Bài Cũ
B Mục Đích Yêu Cầu
C Nội Dung
NỘI DUNG
1 Xét ví dụ :
1 Xét ví dụ :
- Giả sử, có một tấm bìa được kẽ các ô vuông bằng nhau trên cả hai mặt tấm bìa và được đánh số thứ tự trên một mặt Mặt còn lại tiến hành điền vào các giá trị số khác nhau theo thứ tự từ nhỏ đến
lớn,theo chiều từ trái sang phải.
- Có hai học sinh đố nhau Làm cách nào để cắt ra được một ô vuông
có giá trị bất kỳ, sao cho số lần cắt là ít nhất (với điều kiện là học sinh
cắt bìa không được nhìn thấy giá trị các số ghi trên mỗi ô vuông)
Mặt 1 : Mặt 2 :
BÀI TOÁN TÌM KIẾM NHỊ PHÂN
- Giả sử cần cắt ra ô vuông có giá trị là : 15
Trang 5BÀI TOÁN TÌM KIẾM NHỊ PHÂN
1 2 3 4 5 6 7 8
A Kiểm Tra Bài Cũ
B Mục Đích Yêu Cầu
C Nội Dung
1 Xét ví dụ :
5 6 7 8
1 2 3 4
Học sinh 1 : Học sinh 2 :
5 6 7 8
Kiểm tra ô vuông có giá trị cần cắt
5 6 7 8
Học sinh 1 : Học sinh 2 :
Kiểm tra ô vuông có giá trị cần cắt
5 6
Đưa ra ô vuông có chứa giá trí cần cắt
Trang 6BÀI TOÁN TÌM KIẾM NHỊ PHÂN
A Kiểm Tra Bài Cũ
B Mục Đích Yêu Cầu
C Nội Dung
2 Xác định bài toán :
• Input :
• Output :
2 Xác định bài toán :
Input
Output
Dãy A là dãy tăng gồm N số nguyên khác nhau a1, a2, , aN và một số nguyên k
Chỉ số i mà ai = k hoặc thông báo không tìm thấy k trong dãy A
1 Xét ví dụ :
Trang 7BÀI TOÁN TÌM KIẾM NHỊ PHÂN
A Kiểm Tra Bài Cũ
B Mục Đích Yêu Cầu
C Nội Dung
3 Ý tưởng :
Sử dụng tính chất dãy A là dãy tăng, ta chia đôi dãy thành hai dãy con, phạm vi tìm kiếm sẽ được thu hẹp sau mỗi lần so sánh khóa với số hạng được chọn
Ta chọn số hạng aGiữa để so sánh với k, trong đó:
2 Xác định bài toán :
Input
Output
- Nếu aGiữa = k
3 Ý tưởng : Giua = [(N + 1) / 2]
thì đưa ra Giua, rồi kết thúc
- Nếu aGiữa > k
- Nếu aGiữa > k thì phạm vi tìm kiếm được thu
hẹp lại trên nữa dãy đầu so với dãy ban đầu
- Nếu aGiữa < k
- Nếu aGiữa < k thì phạm vi tìm kiếm được thu
hẹp lại trên nữa dãy sau so với dãy ban đầu
1 Xét ví dụ :
Trang 8BÀI TOÁN TÌM KIẾM NHỊ PHÂN
A Kiểm Tra Bài Cũ
B Mục Đích Yêu Cầu
C Nội Dung
2 Xác định bài toán :
Input
Output
3 Ý tưởng :
1 Xét ví dụ :
4 Thuật toán :
4 Thuật toán :
a) Liệt kê :
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]Dau+Cuoi)/2])/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ì 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 có giá trị bằng k, rồi kết thúc
Bước 8 : Quay lại bước 3
Trang 9A Kiểm Tra Bài Cũ
B Mục Đích Yêu Cầu
C Nội Dung
2 Xác định bài toán :
Input
Output
3 Ý tưởng :
1 Xét ví dụ :
4 Thuật toán :
Liệt kê
Bước 1 : Nhập N, các số hạng
a 1 , a 2 , , a N và khóa k Bước 2 : Dau 1 , Cuoi N Bước 3 : Giua [(Dau+Cuoi)/2]
Bước 4 : Nếu a Giua = k thì thông báo
chỉ số Giua, rồi kết thúc.
Bước 5 : Nếu a Giua > k thì 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 có giá trị bằng k, rồi kết thúc
Bước 8 : Quay lại bước 3
Đưa ra vị trí Giua,
rồi kết thúc
Nhập N; dãy a 1 , ,a N ; K Dau 1 ; Cuoi N Giua [ (Dau + Cuoi)/2 ]Dau + Cuoi)/2 ]
A Giua = K?
A Giua >K?
Dau Giua + 1
Cuoi Giua -1
Thông báo K không có trong dãy số A ,
Dau >
Cuoi?
Bước 1 : Nhập N, các số hạng
a 1 , a 2 , , a N và khóa k Bước 2 : Dau 1 , Cuoi N Bước 3 : Giua [(Dau+Cuoi)/2]
Bước 4 : Nếu a Giua = k thì thông báo
chỉ số Giua, rồi kết thúc.
Đ
S
Bước 5 : Nếu a Giua > k thì Cuoi =
Giua-1, rồi chuyển đến bước 7
Đ S
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 có giá trị bằng k, rồi kết thúc
Đ
S
Bước 8 : Quay lại bước 3
b) Sơ đồ khối :
Sơ đồ khối
Mô phỏng
Trang 10Đưa ra vị
trí Giua rồi
kết thúc
Nhập N; dãy a 1 , ,a N ; K Dau 1 ; Cuoi N Giua [ (Dau + Cuoi)/2 ]Dau + Cuoi)/2 ]
A Giua = K?
A Giua >K?
Dau Giua + 1
Cuoi Giua -1
Dau >
Cuoi?
Đ
S
Đ S
S
22
9 6
5 4
2
7
5 4
3 2
1
Nhập N; dãy a 1 , ,a N ; K Dau 1 ; Cuoi N Giua [ (Dau + Cuoi)/2 ]Dau + Cuoi)/2 ]
A Giua = K?
K = 21
A Giua >K?
7
5 4
3 2
1
Dau Giua + 1
Dau
7
Dau Cuoi
Cuoi?
S
A Giua >K?
7
Cuoi Giua -1
Cuoi
S
Dau >
Cuoi?
7 6
Dau Cuoi
Giua [ (Dau + Cuoi)/2 ]Dau + Cuoi)/2 ]
Giua
A Giua = K?
22 21
Đưa ra vị
trí Giua rồi
kết thúc
Giua = 6
22
9 6
5 4
2
22
21
Trang 11CỦNG CỐ
1/ Hãy cho biết điều kiện cần phải có để có thể sử dụng thuật toán tìm kiếm nhị phân ?
Trả lời :
Dãy đã cho phải là một dãy có thứ tự.
2/ Hãy so sánh thời gian thực hiện giữa thuật toán tìm
kiếm tuần tự và tìm kiếm nhị phân a) Hãy mô phỏng việc thực hiện tìm kiếm nhị
phân, với khóa cần tìm k = 6 ?
b) Hãy mô phỏng việc thực hiện tìm kiếm nhị
phân, với khóa cần tìm k = 15 ?
A Kiểm Tra Bài Cũ
B Mục Đích Yêu Cầu
C Nội Dung
2 Xác định bài toán :
Input
Output
3 Ý tưởng :
1 Xét ví dụ :
4 Thuật toán :
Liệt kê
Sơ đồ khối
D Củng Cố
Mô phỏng
Trả lời :
Thời gian thực hiện tìm kiếm của thuật
toán nhị phân nhanh hơn thuật toán tuần tự,
hạn chế đáng kể số lượng phép toán so sánh trong thuật toán.
3/ Cho dãy A = 3 6 7 9 11 14 18 20
Trang 12Kính chúc sức khỏe quí thầy cô Các em học sinh học tập tiến bộ Kính chúc sức khỏe quí thầy cô Các em học sinh học tập tiến bộ