Bài 4. Bài toán và thuật toán (nhị phân) tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả...
Trang 1TÌM KIẾM NHỊ PHÂN
TỔ 4
Trang 2TÌM KIẾM NHỊ PHÂN
@ 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
a1, a2,…,aN và 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á trị bằng k.
Trang 3TÌM KIẾM NHỊ PHÂN
@ Ý tưởng
Sử dụng tính chất dãy A đã sắp xếp tăng, ta tìm cách thu hẹp
nhanh phạm vi tìm kiếm bằng cách so sánh k với số hạng ở
giữa dãy ( agiua), khi đó chỉ xảy ra một trong ba trường hợp :
Quá trình trên được lặp đi lặp lại cho đến khi tìm được Output
* Nếu Giữa = k thì xuất Giữa
* Nếu Giữa > k thì k nằm trong khoảng Đầu Giữa
* Nếu Giữa < k thì k nằm trong khoảng Giữa Cuối
Trường hợp 1:
Giữa
Trường hợp 2:
Giữa
Giữa
Trường hợp 3:
Trang 4B1: Nhập N, các số hạng a1, a2,…, aN và giá trị khoá k;
B2: Đầu ← 1, Cuối ← N;
B3: Giữa ← [(Đầu +Cuối)\2] ;
Nếu agiữa = k thì thông báo chỉ số Giữa, rồi kết thúc;
Nếu agiữa > k thì đặt Cuối ← Giữa – 1, rồi chuyển đến B7; Nếu agiữa < k thì đặt Đầu ← Giữa +1;
@ THUẬT TOÁN
@ Liệt kê các bước
TÌM KIẾM NHỊ PHÂN
B7: Nếu Đầu > Cuối 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;
B8: Quay lại B3;
B4:
B5:
B6:
Trang 5* Nếu Giữa = k thì xuất Giữa
* Nếu Giữa > k thì k nằm trong khoảng Đầu Giữa
* Nếu Giữa < k thì k nằm trong khoảng Giữa Cuối
Trường hợp 1:
Giữa
Trường hợp 2:
Giữa
Trường hợp 3:
Trang 6@ SƠ ĐỒ KHỐI
TÌM KIẾM NHỊ PHÂN
Nhập N và a1, a2,…,an và số k
Đầu ← 1; Cuối ← N Giữa ← [(Đầu+cuối)/2]
aGiữa= k?
Đưa ra Giữa rồi kết thúc
aGiữa> k
Đầu ← Giữa +1
Cuối ← Giữa -1 Đầu > Cuối?
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
Đúng
Sai Sai
Đúng Đúng
Trang 710 9
8 7
5 4
3 2
1 i
33 31
30 22
21 9
6 5
4 2
A
Với k = 9 và dãy A gồm 10 số hạng như sau:
Lượt thứ nhất : agiua = [(1+10)/2] = 5.
@ MÔ PHỎNG THUẬT TOÁN
TÌM KIẾM NHỊ PHÂN
Ta có : a5 = 9 = k
Vậy chỉ số cần tìm là i = 5.
Ví dụ 1:
6
5
9
Trang 810 9
8 7
5 4
3 2
1 i
33 31
30 22
21 9
6 5
4 2
A
Với k = 21 và dãy A gồm 10 số hạng như sau:
Lượt thứ nhất : agiua là a5 = 9; 9 < 21
vùng tìm kiếm thu hẹp trong phạm vi từ a6 a10;
33 31
30 22
21
Lượt thứ hai : agiua là a8 = 30; 30 > 21
vùng tìm kiếm thu hẹp trong phạm vi từ a6 a7;
Lượt thứ ba : agiua là a6 = 21; 21= 21
Vậy số cần tìm là i = 6.
22
21
6
21
@ MÔ PHỎNG THUẬT TOÁN
TÌM KIẾM NHỊ PHÂN
Ví dụ 2: