Thuật toán Tìm kiếm nhị phân

22 2.3K 14
Thuật toán Tìm kiếm nhị phân

Đ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

TRƯỜNG THPT ĐỨC TRỌNG TỔ TIN HỌC Giáo viên thực Âu Trường Sơn Bài dạy: Tiết 14: Bài tốn & thuật tóan Thuật tóan tìm kiếm nhị phân (Tin học 10) Kiểm tra cũ Cho dãy số ngun A gồm N số ngun khác a1, …, aN số ngun k Hãy cho biết có hay khơng số i (1 ≤ i ≤ N) cho = k, có cho biết số • • • Xác định tốn Nêu ý tưởng thuật tóan tìm kiếm tuần tự? Viết thuật tóan dạng liệt kê theo ý tưởng Trả lời Bài tóan tìm kiếm: • Input: Dãy A gồm N số hạng khác a1, a2, …, aN khóa k Output: Thơng báo vị trí số hạng k dãy A thơng báo khơng tìm thấy • Ý tưởng: So sánh với khóa k (với 1≤ i ≤ N), = k đưa i thơng báo khơng tìm thấy Thuật tóan B1: Nhập số N, dãy A: a1  aN khóa k B2: i ← B3: Nếu = k thơng báo i kết thúc B4: i ← i + B5: Nếu i > N thơng báo dãy A khơng có số hạng có giá trị k kết thúc B6: Quay lại bước Bài tóan có dãy A dãy số bất kỳ, cho dãy A dãy xếp (tăng giảm) nên tìm kiếm cho nhanh? Ví dụ: Cho dãy khơng giảm a1, …, a1000 (a1Cuoi Dau=Cuoi khơng? Giải thích? Khơng thể được, xem: Cuối Đầu Nếu [đầu] = [cuối] số hạng phải so sánh với khố k Sơ đồ khối (SGK) Nhập vào a1, a2, , aN; k Dau Giua ← ← 1; Cuoi ← N [(Dau + Cuoi)/2] aGiua = k? Đúng Đưa Giua kết thúc Sai aGiua > k ? Đúng Cuoi ← Giua – Sai Dau ← Sai Giua + Dau>Cuoi? Đúng Thơng báo dãy A khơng có số hạng có giá trị k kết thúc • Hãy diễn đạt ý tưởng thuật tóan tìm kiếm nhị phân? • Ý tưởng có ý nghĩa thực tế khơng? Cho ví dụ? Bài tập nhóm Trong thuật tóan tìm kiếm nhị phân SGK: a) Có thể hóan vị B4 B5 khơng? Giải thích? b) Có thể thay phép gán B6 Dau←Giua khơng? Hãy giải thích? (gợi ý: Cho dãy cụ thể giá trị k>aN mơ lại thuật tóan để kiểm tra) Trả lời a Có thể hóan vị B4 B5 b Khơng thể thay phép gán B6 Dau←Giua được, khơng tạo vòng lặp vơ tận khơng có số hạng k Ví dụ: Cho dãy 0, 1, 2, 3, k = Có aGiua =2, cho Dau = Giua tìm kiếm tiếp đọan [2, 3, 5] aGiua = < k, tìm kiếm tiếp đọan [3, 5] Có aGiua = 3, lại tiếp tục tìm kiếm đọan [3, 5] Như tạo vòng lặp vơ hạn Cách giải quyết: thay Dau = Giua + BTVN • Học theo SGK • Bài tập 1.47, 1.48/SBT • Hướng dẫn 1.48: Nhập điểm TBM N học sinh Tính điểm TBM lớp = (tổng điểm TBM)/N Đếm học sinh có điểm TBM < TBM lớp HẾT [...]...Tiết 14: Bài toán & thuật tóan (t5) Thuật tóan tìm kiếm nhị phân Xét bài tóan : Cho dãy số A gồm N số nguyên tăng khác nhau a1, a2, …, aN và số nguyên k, nếu có ai = k (1 ≤ k ≤ N) thì thông báo chỉ số i Tiết 14: Bài toán & thuật tóan (t5) Thuật tóan tìm kiếm nhị phân • Xác định bài tóan: - Input: Dãy A là dãy tăng gồm N số nguyên đôi một... xét trên dãy a1, a2, , aGiua–1 (phạm vi tìm kiếm mới bằng khoảng một nửa phạm vi tìm kiếm trước đó)  Nếu aGiua < k thì thực hiện tìm kiếm trên dãy aGiua+1, aGiua+2, , aN 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 khoá k trong dãy A hoặc phạm vi tìm kiếm bằng rỗng Thuật toán tìm kiếm nhị phân (Cách liệt kê) B1: Nhập N, các số hạng a1, a2, , aN và khoá k; B2: Dau ← 1, Cuoi... rồi kết thúc • Hãy diễn đạt ý tưởng của thuật tóan tìm kiếm nhị phân? • Ý tưởng này có ý nghĩa thực tế không? Cho ví dụ? Bài tập nhóm Trong thuật tóan tìm kiếm nhị phân ở SGK: a) Có thể hóan vị B4 và B5 được không? Giải thích? b) Có thể thay phép gán ở B6 bằng Dau←Giua được không? Hãy giải thích? (gợi ý: Cho một dãy cụ thể và một giá trị k>aN rồi mô phỏng lại thuật tóan để kiểm tra) Trả lời a Có thể... ta tìm cách thu hẹp nhanh phạm vi tìm kiếm sau mỗi lần so sánh khoá với số hạng được chọn Để làm điều đó, ta chọn số hạng aGiua ở "giữa dãy" để so sánh với k; Khi đó, chỉ xảy ra một trong ba trường hợp sau:  Nếu aGiua = k thì Giua là chỉ số cần tìm Việc tìm kiếm kết thúc  Nếu aGiua > k thì do dãy A là dãy đã được sắp xếp nên việc tìm kiếm tiếp theo chỉ xét trên dãy a1, a2, , aGiua–1 (phạm vi tìm kiếm. .. được, nếu không sẽ tạo ra vòng lặp vô tận khi không có số hạng nào bằng k Ví dụ: Cho dãy 0, 1, 2, 3, 5 và k = 4 Có aGiua =2, nếu cho Dau = Giua thì tìm kiếm tiếp trên đọan [2, 3, 5] aGiua = 3 < k, tìm kiếm tiếp trên đọan [3, 5] Có aGiua = 3, lại tiếp tục tìm kiếm trên đọan [3, 5] Như vậy tạo ra vòng lặp vô hạn Cách giải quyết: thay Dau = Giua + 1 BTVN • Học theo SGK • Bài tập 1.47, 1.48/SBT • Hướng ... Giua (=9), kết thúc Ý tưởng gọi tìm kiếm nhị phân (hay chia để trị) giúp giảm bớt thao tác so sánh Tiết 14: Bài toán & thuật tóan (t5) Thuật tóan tìm kiếm nhị phân Xét tóan : Cho dãy số A gồm... cần tìm Việc tìm kiếm kết thúc  Nếu aGiua > k dãy A dãy xếp nên việc tìm kiếm xét dãy a1, a2, , aGiua–1 (phạm vi tìm kiếm khoảng nửa phạm vi tìm kiếm trước đó)  Nếu aGiua < k thực tìm kiếm. .. trị k kết thúc • Hãy diễn đạt ý tưởng thuật tóan tìm kiếm nhị phân? • Ý tưởng có ý nghĩa thực tế không? Cho ví dụ? Bài tập nhóm Trong thuật tóan tìm kiếm nhị phân SGK: a) Có thể hóan vị B4 B5 không?

Ngày đăng: 06/11/2015, 03:33

Từ khóa liên quan

Mục lục

  • TRƯỜNG THPT ĐỨC TRỌNG TỔ TIN HỌC

  • Slide 2

  • Kiểm tra bài cũ

  • Trả lời

  • Thuật tóan

  • Bài tóan trên có dãy A là một dãy số bất kỳ, vậy nếu cho dãy A là dãy đã sắp xếp (tăng hoặc giảm) thì nên tìm kiếm như thế nào cho nhanh?

  • Ví dụ: Cho dãy không giảm a1, …, a1000 (a1<a2<a3<a4<…<a1000) và khóa k = 5000. Giả sử a1000 = 5000

  • Ý tưởng: 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

  • Ý tưởng trên gọi là tìm kiếm nhị phân (hay chia để trị) giúp giảm bớt thao tác so sánh

  • Tiết 14: Bài toán & thuật tóan (t5) Thuật tóan tìm kiếm nhị phân

  • Slide 12

  • Slide 13

  • Thuật toán tìm kiếm nhị phân (Cách liệt kê)

  • ?

  • Không thể được, hãy xem:

  • Sơ đồ khối (SGK)

  • Slide 18

  • Bài tập nhóm

  • Slide 20

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

Tài liệu liên quan