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

Tài liệu bai 4

15 403 0
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

Tiêu đề Một Số Ví Dụ Về Thuật Toán
Trường học Trường Đại Học
Thể loại Bài Tập
Thành phố Hà Nội
Định dạng
Số trang 15
Dung lượng 415,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Một số ví dụ về thuật toánVí dụ 3: Bài toán tìm kiếm aTìm kiếm tuần tự bTìm kiếm nhị phân... Quá trình trên được lặp đi lặp lại cho đến khi tìm được OUTPUT... Hãy sửa đổi thuật toán tìm

Trang 3

3 Một số ví dụ về thuật toán

Ví dụ 3: Bài toán tìm kiếm

a)Tìm kiếm tuần tự b)Tìm kiếm nhị phân

Trang 5

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

• Input :

• 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

Trang 6

**Ý 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[(1+N)/2], … aN-1, aN

Nếu k < a[(N+1)/2] Nếu k > a[(N+1)/2]

Tìm kiếm trong phạm vi này Tìm kiếm trong phạm vi này

Giua = [ (1 + N)/2]

Trang 7

Túm lại: Do dãy A là một dãy tăng dần nên khi ta so sánh k với phần tử ở Giữa dãy xảy ra một trong ba trư ờng hợp

- Nếu aGiữa= k => tìm được chỉ số, kết thúc;

- Nếu aGiữa > k => do dãy A đã được sắp xếp tăng

nên việc tìm kiếm thu hẹp chỉ xét từ a1  aGiữa - 1;

- Nếu aGiữa < k => do dãy A đã được sắp xếp tăng

nên việc tìm kiếm thu hẹp chỉ xét từ aGiữa + 1  aN.

Quá trình trên được lặp đi lặp lại cho đến khi tìm

được OUTPUT.

Trang 8

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

aGiua = a[(6+10)/2] = a8,

Nếu a Giua > k thì tìm trong đoạn a 1  a Giua -1

a Giua = a [(1+10)/2] = a 5

a1 a2 a3 a4 a5 a6 a7 a8 a9 a10

a 5 < k nên tìm k trong đoạn a 6  a 10

Cho dãy A gồm 10 phần tử a1, a2, …, aN và số k = 55

Trang 10

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

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

thúc.

bước 7

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 toán

* Cách liệt kê

Trang 11

a Giua = k ?

Nhập n và a 1 , a 2 , , a N , k

Dau 1 ; Cuoi  n

Đưa ra Giua

rồi kết thúc

Giua  [(Dau + Cuoi ) /2]

Đ a Giua > K ?

Dau  Giua+1

Cuoi Giua - 1

Dau > Cuoi ?

S

Đ

S

Đ

S

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

Sơ đồ khối

Trang 12

Đư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 ]

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 , rồi kết thúc

Dau >

Cuoi?

Đ

S

Đ S

S

22

9 6

5 4

2

Nhập N; dãy a 1 , ,a N ; K Dau  1 ; Cuoi  N

Giua  [ (Dau + Cuoi)/2 ]

A Giua = K?

K = 21

A Giua >K?

Dau  Giua + 1

Dau

7

Dau >

Cuoi?

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

A Giua = K? 21 22 30 31 33

S

A Giua >K?

7

Cuoi  Giua -1

Cuoi

S

Dau >

Cuoi?

7 6

Giua  [ (Dau + Cuoi)/2 ]

Giua

A Giua = K?

22 21

Đưa ra vị

trí Giua rồi

kết thúc

Giua = 6

22

21

7

5 4

3 2

1

A

Trang 13

Bài 1: Cho dãy A gồm các phần tử a1, a2, , aN được sắp xếp giảm dần Hãy sửa đổi thuật toán tìm kiếm nhị phân với dãy tăng dần thành thuật toán tìm kiếm nhị phân với dãy giảm dần

Trang 14

Trả lời :

Thời gian thực hiện tìm kiếm của thuật toán nhị

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

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: 30/11/2013, 10:11

Xem thêm

HÌNH ẢNH LIÊN QUAN

Sơ đồ khối - Tài liệu bai 4
Sơ đồ kh ối (Trang 11)
w