1. Trang chủ
  2. » Giáo án - Bài giảng

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

22 2,3K 14

Đ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

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 365,5 KB

Nội dung

Bài dạy:Tiết 14: Bài toán & thuật tóan Thuật tóan tìm kiếm nhị phân Tin học 10... Kiểm tra bài cũCho dãy số nguyên A gồm N số nguyên khác nhau a1, …, aN và một số nguyên k.. • Xác định b

Trang 1

TRƯỜNG THPT ĐỨC TRỌNG

TỔ TIN HỌC

Giáo viên thực hiện

Âu Trường Sơn

Trang 2

Bài dạy:

Tiết 14: Bài toán & thuật tóan

Thuật tóan tìm kiếm nhị phân

(Tin học 10)

Trang 3

Kiểm tra bài cũ

Cho dãy số nguyên A gồm N số nguyên khác nhau a1, …, aN và một số nguyên k Hãy cho biết

có hay không chỉ số i (1 ≤ i ≤ N) sao cho ai = k, nếu có cho biết chỉ số đó.

• Xác định bài toán

• Nêu ý tưởng của 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ên.

Trang 4

Trả lời

Bài tóan tìm kiếm:

• Input: Dãy A gồm N số hạng khác nhau a1,

a2, …, aN và khóa k

Output: Thông báo 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ự ai với khóa k

(với 1≤ i ≤ N), nếu ai = k thì đưa ra i hoặc thông báo không tìm thấy

Trang 5

B5: Nếu i > N thì thông báo dãy A không có

số hạng nào có giá trị bằng k rồi kết thúc

B6: Quay lại bước 3

Trang 6

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?

Trang 7

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

Câu hỏi:

• Với thuật tóan tìm kiếm tuần tự, phải thực hiện bao nhiêu phép so sánh mới xác định được vị trí số cần tìm?

• Có cách nào tìm kiếm nhanh hơn không? (lợi dụng tính không giảm của dãy số)

Trang 8

Ý 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

a1, a2, …, a(N+1)/2, … aN-1, aN

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

Trang 9

Cho dãy A tăng a1, a2, …, a10 và k = 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?

Xác định vị trí ở giữa – gọi là aGiua, nếu aGiua < k thì tìm trong

đọan a1  aGiua, ngược lại tìm trong đọan aGiua  a10

Xác định aGiua như thế nào?

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; aGiua = a[(9+10)/2] = a9

vì a5 < k nên tìm k trong đọan a6  a10

vì a9 = k nên thông báo chỉ số Giua (=9), kết thúc.

VÍ DỤ MINH HỌA Ý TƯỞNG

vì a8 < k nên tiếp tục tìm k trong đọan a9, a10

Trang 10

Ý 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

Trang 11

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

Trang 12

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 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 có số hạng nào của dãy A có giá trị

bằng k.

• Ý tưởng:

Trang 13

Ý tưởng : Sử dụng tính chất dãy A là dãy tăng, 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 a Giua ở "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 a Giua = k thì Giua là chỉ số cần tìm Việc tìm kiếm kết

thúc.

 Nếu a Giua > 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 a 1 , a 2 , , a Giua–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 a Giua < k thì thực hiện tìm kiếm trên dãy aGiua+1 , a Giua+2 , ,

a N

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.

Trang 14

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

Trang 15

• Ở bước 7 có thể thay Dau>Cuoi bằng Dau=Cuoi được không? Giải thích?

Trang 16

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

Nếu [đầu] = [cuối] thì vẫn còn một số hạng nữa

phải so sánh với khoá k

Trang 17

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

Giua [(Dau + Cuoi)/2]

Trang 18

• 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ụ?

Trang 19

(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).

Trang 20

Trả lời

a Có thể hóan vị B4 và B5

b Không thể thay phép gán ở B6 bằ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

trên đọan [2, 3, 5]

Trang 22

H Ế T

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

TỪ KHÓA LIÊN QUAN

w