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

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

12 2,1K 21
Tài liệu đã được kiểm tra trùng lặp

Đ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 12
Dung lượng 842,5 KB

Nội dung

Bài Toán Tìm Kiếm Nhị Phân Bài Toán Tìm Kiếm Nhị Phân... Kiểm Tra Bài Cũ  1/ Hãy trình bày ý tưởng của bài toán tìm kiếm tuần tự?. Trả lời : Lần lượt so sánh từng số hạng trong dãy A

Trang 1

Bài Toán Tìm Kiếm Nhị Phân

Bài Toán Tìm Kiếm Nhị Phân

Trang 2

KIỂM TRA BÀI CŨ

A Kiểm Tra Bài Cũ

1/ Hãy trình bày ý tưởng của bài toán tìm kiếm tuần tự?

Trả lời :

Lần lượt so sánh từng số hạng trong dãy A với khóa cần tìm cho đến khi hoặc tìm thấy một số hạng bằng khóa hoặc dãy đã xét hết và không có giá trị nào bằng khóa.

2/ Cho dãy A = 3 6 7 9 11 14 18 20 và k = 18

a) Hãy cho biết dãy A có tính chất gì?

Trả lời :

Dãy A là một dãy có thứ tự không giảm

b) Máy tính sẽ thực hiện đến lần thứ mấy thì sẽ

tìm thấy được k trong dãy A?

Trả lời :

Đến lần thứ 7 thì sẽ tìm được k trong dãy A

Trang 3

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

A Kiểm Tra Bài Cũ

B Mục Đích Yêu Cầu

MỤC ĐÍCH YÊU CẦU

- Biết một bài toán có thể được giải bằng nhiều thuật toán khác nhau

- Hiểu được ý tưởng của bài toán tìm kiếm nhị phân

- Biết trình bày thuật toán theo hai cách liệt kê và sơ đồ khối

Trang 4

1 2 3 4 5 6 7 8

A Kiểm Tra Bài Cũ

B Mục Đích Yêu Cầu

C Nội Dung

NỘI DUNG

1 Xét ví dụ :

1 Xét ví dụ :

- Giả sử, có một tấm bìa được kẽ các ô vuông bằng nhau trên cả hai mặt tấm bìa và được đánh số thứ tự trên một mặt Mặt còn lại tiến hành điền vào các giá trị số khác nhau theo thứ tự từ nhỏ đến

lớn,theo chiều từ trái sang phải.

- Có hai học sinh đố nhau Làm cách nào để cắt ra được một ô vuông

có giá trị bất kỳ, sao cho số lần cắt là ít nhất (với điều kiện là học sinh

cắt bìa không được nhìn thấy giá trị các số ghi trên mỗi ô vuông)

Mặt 1 : Mặt 2 :

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

- Giả sử cần cắt ra ô vuông có giá trị là : 15

Trang 5

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

1 2 3 4 5 6 7 8

A Kiểm Tra Bài Cũ

B Mục Đích Yêu Cầu

C Nội Dung

1 Xét ví dụ :

5 6 7 8

1 2 3 4

Học sinh 1 : Học sinh 2 :

5 6 7 8

Kiểm tra ô vuông có giá trị cần cắt

5 6 7 8

Học sinh 1 : Học sinh 2 :

Kiểm tra ô vuông có giá trị cần cắt

5 6

Đưa ra ô vuông có chứa giá trí cần cắt

Trang 6

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

A Kiểm Tra Bài Cũ

B Mục Đích Yêu Cầu

C Nội Dung

2 Xác định bài toán :

• Input :

• Output :

2 Xác định bài toán :

Input

Output

Dãy A là dãy tăng gồm N số nguyên khác nhau a1, a2, , aN và một số nguyên k

Chỉ số i mà ai = k hoặc thông báo không tìm thấy k trong dãy A

1 Xét ví dụ :

Trang 7

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

A Kiểm Tra Bài Cũ

B Mục Đích Yêu Cầu

C Nội Dung

3 Ý tưởng :

Sử dụng tính chất dãy A là dãy tăng, ta chia đôi dãy thành hai dãy con, phạm vi tìm kiếm sẽ được thu hẹp sau mỗi lần so sánh khóa với số hạng được chọn

Ta chọn số hạng aGiữa để so sánh với k, trong đó:

2 Xác định bài toán :

Input

Output

- Nếu aGiữa = k

3 Ý tưởng : Giua = [(N + 1) / 2]

thì đưa ra Giua, rồi kết thúc

- Nếu aGiữa > k

- Nếu aGiữa > k thì phạm vi tìm kiếm được thu

hẹp lại trên nữa dãy đầu so với dãy ban đầu

- Nếu aGiữa < k

- Nếu aGiữa < k thì phạm vi tìm kiếm được thu

hẹp lại trên nữa dãy sau so với dãy ban đầu

1 Xét ví dụ :

Trang 8

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

A Kiểm Tra Bài Cũ

B Mục Đích Yêu Cầu

C Nội Dung

2 Xác định bài toán :

Input

Output

3 Ý tưởng :

1 Xét ví dụ :

4 Thuật toán :

4 Thuật toán :

a) Liệt kê :

Liệt kê

Bước 1 : Nhập N, các số hạng a1, a2, , aN và khóa k

Bước 2 : Dau  1 , Cuoi  N

Bước 3 : Giua  [(Dau+Cuoi)/2]Dau+Cuoi)/2])/2]

Bước 4 : Nếu aGiua = k thì thông báo chỉ số Giua, rồi kết

thúc.

Bước 5 : Nếu aGiua > 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

Trang 9

A Kiểm Tra Bài Cũ

B Mục Đích Yêu Cầu

C Nội Dung

2 Xác định bài toán :

Input

Output

3 Ý tưởng :

1 Xét ví dụ :

4 Thuật toán :

Liệt 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

Đưa ra vị trí 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 ]Dau + Cuoi)/2 ]

A Giua = K?

A Giua >K?

Dau  Giua + 1

Cuoi  Giua -1

Thông báo K không có trong dãy số A ,

Dau >

Cuoi?

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.

Đ

S

Bước 5 : Nếu a Giua > k thì Cuoi =

Giua-1, rồi chuyển đến bước 7

Đ S

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

Đ

S

Bước 8 : Quay lại bước 3

b) Sơ đồ khối :

Sơ đồ khối

Mô phỏng

Trang 10

Đưa ra vị

trí 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 ]Dau + Cuoi)/2 ]

A Giua = K?

A Giua >K?

Dau  Giua + 1

Cuoi  Giua -1

Dau >

Cuoi?

Đ

S

Đ S

S

22

9 6

5 4

2

7

5 4

3 2

1

Nhập N; dãy a 1 , ,a N ; K Dau  1 ; Cuoi  N Giua  [ (Dau + Cuoi)/2 ]Dau + Cuoi)/2 ]

A Giua = K?

K = 21

A Giua >K?

7

5 4

3 2

1

Dau  Giua + 1

Dau

7

Dau Cuoi

Cuoi?

S

A Giua >K?

7

Cuoi  Giua -1

Cuoi

S

Dau >

Cuoi?

7 6

Dau Cuoi

Giua  [ (Dau + Cuoi)/2 ]Dau + Cuoi)/2 ]

Giua

A Giua = K?

22 21

Đưa ra vị

trí Giua rồi

kết thúc

Giua = 6

22

9 6

5 4

2

22

21

Trang 11

CỦNG CỐ

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 ?

Trả lời :

Dãy đã cho phải là một dãy có thứ tự.

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

b) 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 ?

A Kiểm Tra Bài Cũ

B Mục Đích Yêu Cầu

C Nội Dung

2 Xác định bài toán :

Input

Output

3 Ý tưởng :

1 Xét ví dụ :

4 Thuật toán :

Liệt kê

Sơ đồ khối

D Củng Cố

Mô phỏng

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.

3/ Cho dãy A = 3 6 7 9 11 14 18 20

Trang 12

Kính chúc sức khỏe quí thầy cô Các em học sinh học tập tiến bộ Kính chúc sức khỏe quí thầy cô Các em học sinh học tập tiến bộ

Ngày đăng: 05/07/2013, 01:25

TỪ KHÓA LIÊN QUAN

w