Thuat toan tim kiem nhi phan

11 838 0
Thuat toan tim kiem nhi phan

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

Từ khóa liên quan

Mục lục

  • Slide 1

  • Kiểm tra bài cũ

  • Trả lời

  • BÀI TOÁN TÌM KiẾM NHỊ PHÂN

  • Ý tưởng thuật toán tìm kiếm nhị phân: thu 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

  • Cho dãy A tăng a1, a2, …, a10 và k = 55

  • Thuật toán

  • Slide 8

  • Slide 9

  • CỦNG CỐ

  • H

Tài liệu cùng người dùng

Tài liệu liên quan