Thông tin tài liệu
Lớp 10A8 Kính chào quý thầy cô giáo đến dự giờ ! Kiểm tra bài cũ Kiểm tra bài cũ Nhắc lại ý tưởng của thuật toán tìm kiếm tuần tự? Trả lời Trả lời Bài toán tìm kiếm: • Input: Dãy A gồm N số hạng a 1 , a 2 , …, a N và khóa k Output: Vị trí của số hạng bằng k trong dãy A hoặc thông báo không tìm thấy • Ý tưởng: So sánh tuần tự a i với khóa k (với 1≤ i ≤ N), nếu a i = k thì đưa ra i hoặc thông báo không tìm thấy BÀI TOÁN TÌM KiẾM NHỊ PHÂN BÀI TOÁN TÌM KiẾM NHỊ PHÂN 2. 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 , a 2 , , a N và một số nguyên k • Output : – Chỉ số i mà a i = k hoặc thông báo không tìm thấy k trong dãy A Ý tưởng thuật toán tìm kiếm nhị phân: Ý tưởng thuật toán tìm kiếm nhị phân: thu thu hẹp phạm vi tìm kiếm bằng cách so sánh hẹp phạm vi tìm kiếm bằng cách so sánh k với số hạng ở giữa dãy k với số hạng ở giữa dãy a 1 , a 2 , …, a (N+1)/2 , … a N-1 , a N Nếu k < a (N+1)/2 Tìm kiếm trong phạm vi này Nếu k > a (N+1)/2 Tìm kiếm trong phạm vi này Nếu k = a [(N+1)/2] thì thông báo chỉ số (N+1)/2 < a (N+1)/2 > a (N+1)/2 Tiếp tục: Xác định lại vị trí đầu, giữa, cuối trong dãy mới: Dau = 6; Cuoi = 10 a Giua = a [(6+10)/2] = a 8 , Xác định vị trí ở giữa – gọi là a Giua , nếu a Giua > k thì tìm trong đoạn a 1 a Giua , ngược lại tìm trong đoạn a Giua a 10 Xác định a Giua như thế nào? a Giua = a [(1+10)/2] = a 5 Cho dãy A tăng a Cho dãy A tăng a 1 1 , a , a 2 2 , …, a , …, a 10 10 và k = 55 và k = 55 22 40 55 Làm thế nào để tìm ra vị trí của số hạng có giá trị bằng 55 nhanh nhất? a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a 10 Tiếp tục: Xác định lại vị trí đầu, giữa, cuối trong dãy mới: Dau = 9; Cuoi = 10; a Giua = a [(9+10)/2] = a 9 vì a 5 < k nên tìm k trong đoạn a 6 a 10 vì a 9 = k nên thông báo chỉ số Giua (=9), kết thúc. vì a8 < k nên tiếp tục tìm k trong đoạn a9, a10 A Giua > 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 Thuật Thuật toán toán Đưa ra 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 ] A Giua = K? Dau Giua + 1 Cuoi Giua -1 Thông báo K không có trong dãy số A, rồi kết thúc Dau>Cuoi? Sai Sai Đúng Đúng Sai Đúng Thông báo K không có trong dãy số A, rồi kết thúc Cuoi Giua -1 A Giua = K? Nhập N; dãy a1,. . . ,aN ; K Dau 1 ; Cuoi N Dau Giua + 1 Sai A Giua > K? Dau>Cuoi? Giua [ (Dau + Cuoi)/2 ] Đưa ra Giua rồi kết thúc Sai Đúng Đúng Sai Đúng N = 10 K = 21 Giua Cuoi 76 21 22 Giua = 6 Giua CuoiDau Dau CuoiDau 2221 30 31 33 76 8 9 10 76 8 9 10 54321i A 2221 30 31 3396542 Giua Thông báo K không có trong dãy số A, rồi kết thúc Cuoi Giua -1 A Giua = K? Nhập N; dãy a1,. . . ,aN ; K Dau 1 ; Cuoi N Dau Giua + 1 Sai A Giua > K? Dau>Cuoi? Giua [ (Dau + Cuoi)/2 ] Đưa ra Giua rồi kết thúc Sai Đúng Đúng Sai Đúng N = 10 K = 25 Giua Cuoi 76 21 22 Giua Cuoi Dau Dau CuoiDau 2221 30 31 33 76 8 9 10 76 8 9 10 54321i A 2221 30 31 3396542 Giua 7 22 Cuoi Dau Giua = 7 Dau = 8 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. 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 Trả lời : Dãy đã cho phải là một dãy có thứ tự. 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 ? 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 ? 3/ Cho dãy A = 3 6 7 9 11 14 18 20 CỦNG CỐ CỦNG CỐ 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 = 15 ?
Ngày đăng: 18/07/2014, 05:00
Xem thêm: Thuat toan tim kiem nhi phan, Thuat toan tim kiem nhi phan