Tải bản đầy đủ (.ppt) (18 trang)

tim kiem

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.48 MB, 18 trang )

1
TIẾT 13+14: THUẬT TOÁN TÌM KIẾM
TUẦN TỰ VÀ TÌM KIẾM NHỊ PHÂN
2
Tớ là một chú cá . Hãy tìm tớ trong
Tớ là một chú cá . Hãy tìm tớ trong
đám bạn này nhé!!
đám bạn này nhé!!
1 2 3 4 5
Không phải
rồi!
Ồ! Không phải nữa rồi!
Ồ! Lại sai nữa
rồi!
Hi! Hi! Chưa đúng đâu nghen!
A! Ha! Tìm ra rồi!
3
XÁC ĐỊNH BÀI TOÁN
XÁC ĐỊNH BÀI TOÁN
OUPUT
INPUT
Dãy A gồm N số nguyên khác nhau a
1
,a
2
,…,a
N
và số
nguyên k
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ÌM KIẾM TUẦN TỰ
TÌM KIẾM TUẦN TỰ
(Sequential Search)
(Sequential Search)
4
TÌM KIẾM TUẦN TỰ
TÌM KIẾM TUẦN TỰ
(Sequential Search)
(Sequential Search)

Ý tưởng:
Lần lượt từ số hạng thứ nhất, ta so
sánh giá trị số hạng đó với khóa cho
đến khi gặp một số hạng bằng khóa thì
số hạng đó là số hạng cần tìm.
Trong trường hợp thứ hai, dãy không
có số hạng nào bằng khóa.
5
TÌM KIẾM TUẦN TỰ
TÌM KIẾM TUẦN TỰ
Ví dụ:
Dãy A gồm các số
1 4 2 9 8 115 7
a
1
a
2
a

3
a
4
a
5
a
6
a
7
a
8
N=8
K=9
9
||
k
≠ ≠ ≠ ≠
≠ ||
Tìm thấy
, có a
6
=k, vậy chỉ số cần tìm là i=6
K=6
, không có giá trị nào
6
||
k
≠ ≠≠
Không tìm
thấy

6
Ví dụ thuật toán tìm kiếm tuần tự
Ví dụ thuật toán tìm kiếm tuần tự
9
a
5
4
a
6
2
a
3
8
a
7
7
a
1
3
a
2
6
a
4
4
k
i
123456
7
n

SAI ĐÚNG
4
k
VẬY
i = 6
7
Thuật toán tìm kiếm tuần tự
Thuật toán tìm kiếm tuần tự
SƠ ĐỒ KHỐI
B1. Nhập N, a
1
,a
2
,…a
N
,
khóa k;
B2. i 1;
B3. Nếu a
i
=k thì thông
báo chỉ số i rồi kết
thúc;
B4. i i+1;
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.
LIỆT KÊ

Nhập N, a
1
,a
2
….,a
N
,k
i1
a
i
=k
Đưa ra i rồi
kết thúc
ii+1
i>N?
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
Đúng
Sai
Đúng
Sai
8
Nhập N, a
1
,…,a
N
,k
a
i
= k

i > N
Đưa ra i rồi kềt thúc
SAI
ĐÚNG
i  i + 1
i  1
5 7 1 2 9 8
i = 2 i = 3 i = 4i = 1
SAI
V

i

i

=

4

t
h
ì

a
4

=

2
THUẬT TOÁN TÌM KIẾM TUẦN TỰ

(Sequentinal Search)
N = 6; k = 2
a
1
= 5
i = 2 < N
a
2
= 7
i = 3 < N
a
3
= 1
i = 4 < N
a
4
= 2
a
1
a
2
a
3
a
4
a
5
a
6
Ví dụ

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
9
Em có suy nhận xét gì sau khi xem
Em có suy nhận xét gì sau khi xem
xong?
xong?

Người đọc sách muốn tìm trang 30 của quyển
sách.

Người ấy bắt đầu mở chính giữa quyển sách

Số trang vừa mở được là trang 44.(chưa tìm đúng
số trang cần tìm)

Như vậy người ấy chỉ tìm trong phạm vi từ số
trang từ đầu cho đến trang 44 (không cần tìm phần
sau trang 44 )

Tiếp tục phân đôi số trang từ trang đầu cho đến
trang 44. Trang tìm được là trang 22, cứ tiếp tục
như vậy cho đến khi tìm được trang 30.
10
Thuật toán tìm kiếm nhị phân
Thuật toán tìm kiếm nhị phân
(dãy A tăng)
(dãy A tăng)
OUPUT
INPUT

Dãy A tăng gồm N số nguyên khác nhau a
1
,a
2
,…,a
N

số nguyên k
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
Xác định bài toán
11
Ý tưởng
Ý tưởng
a
Giữa
=k
a
Giữa
<k
Chọn a
Giữa
ở giữa dãy để so
sánh với k, trong đó Giữa=
Giữa là chỉ số cần
tìm. Kết thúc
Tìm kiến trên dãy
a

Giữa+1
,,,a
N






+
2
1N
a
Giữa
>k
Việc tìm kiếm
chỉ xét trên dãy
a
1
,…,a
Giữa-1
Quá trình lặp lại cho đến khi hoặc tìm thấy k hoặc vi phạm tìm kiếm bằng rỗng
12
15084
6
75
9
8
7
54321i

381572
A
Biểu diễn thuật toán :
Biểu diễn thuật toán :
k = 150
Lượt thứ nhất
:
:
a
a
Giữa
Giữa
là a
là a
5
5
= 75; 75 < 150
= 75; 75 < 150


vùng tìm kiếm thu hẹp trong phạm vi từ a
vùng tìm kiếm thu hẹp trong phạm vi từ a
6
6


a
a
9
9

Cuoi = 9
Dau =1Dau =6
Cuoi = 9
15190
Lượt thứ hai:
a
Giua
là a
7
= 90 < 150




vùng tìm kiếm thu hẹp trong phạm vi từ a
vùng tìm kiếm thu hẹp trong phạm vi từ a
8
8


a
a
9
9
Dau = 8
Lượt thứ ba
:
:
a
Giua

là a
8
= 150 = k




Vậy số hạng cần tìm là số hạng thứ i = 8
Vậy số hạng cần tìm là số hạng thứ i = 8
13
5039 7511 30
6
9
1098754321i
865
1
A
k = 14
Lượt thứ nhất
:
:
a
a
giữa
giữa
là a
là a
5
5
= 9; 9 < 14

= 9; 9 < 14


vùng tìm kiếm thu hẹp trong phạm vi từ a
vùng tìm kiếm thu hẹp trong phạm vi từ a
6
6


a
a
10
10
Lượt thứ hai:
a
a
giữa
giữa
là a
là a
8
8
= 39; 39 > 14
= 39; 39 > 14


vùng tìm kiếm thu hẹp trong phạm vi từ a
vùng tìm kiếm thu hẹp trong phạm vi từ a
6
6



a
a
7
7
;
;
Lượt thứ ba:
a
a
giữa
giữa
là a
là a
6
6
= 11; 11 < 14
= 11; 11 < 14


vùng tìm kiếm thu hẹp chỉ còn a
vùng tìm kiếm thu hẹp chỉ còn a
7
7
;
;
Lượt thứ tư:
a
a

giữa
giữa
là a
là a
7
7
= 30 > 14
= 30 > 14


Cuối=Giửa - 1 = 6 > đầu = 7
Cuối=Giửa - 1 = 6 > đầu = 7




Thông báo không tìm thấy số hạng có giá trị bằng 14.
Thông báo không tìm thấy số hạng có giá trị bằng 14.
Dau = 1
Cuoi = 10
Dau = 6
Cuoi = 7
14
Thuật toán liệt kê
Thuật toán liệt kê







+
2
CuoiDau
B1. Nhập N, a
1
,a
2
,…a
N
, khóa
k;
B2. Dau 1, CuoiN;
B3. Giữa 
B4. Nếu a
Giữa
=k thì thông
báo chỉ số Giữa rồi kết
thúc;
B5.Nếu a
Giữa
>k thì đặt
Cuoi=Giua-1, rồi
chuyển đến bước 7
B6. Dau Giua+1;
B7. Nếu Dau>Cuoi thì
thông báo dãy A
không có số hạng có
gíá trị bằng k rồi kết
thúc

B8. Quay lại B3
LIỆT KÊ
Chọn a
Giữa
ở giữa dãy để so
sánh với k, trong đó Giữa=






+
2
1N
a
Giữa
=k
Giữa là chỉ số cần
tìm. Kết thúc
a
Giữa
>k
Việc tìm kiếm
chỉ xét trên dãy
a
1
,a
2
,…,a

Giữa-1
a
Giữa
<k
Tìm kiến trên dãy
a
Giữa+1
,a
Giữa+2
,
…,a
N
Quá trình lặp lại cho đến khi hoặc tìm thấy
k hoặc vi phạm tìm kiếm bằng rỗng
15
SƠ ĐỒ KHỐI
Nhập N và a1,a2, ,aN;k
Dau1;Cuoi1
Giua[(Dau+Cuoi)]/2
aGiua=k?
Dua ra Giua roi
ket thuc
aGiua>k Cuoi Giua-1
DauGiua+1
Dau>Cuoi?
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
Đúng
Đúng

Đúng
Sai
Sai
Sai
B1. Nhập N, a1,a2,…aN, khóa k;
B2. Dau1, Cuoi N;
B3. Giữa [(Dau+Cuoi)]/2
B4. Nếu aGiữa=k
thì thông báo chỉ
số Giữa rồi kết
thúc;
B5.Nếu aGiữa>k thì đặt Cuoi=Giua-1, rồi chuyển đến bước 7
B6. DauGiua+1;
B7. Nếu Dau>Cuoi thì
thông báo dãy A không
có số hạng có gíá trị
bằng k rồi kết thúc
B8. Quay lại B3
16
Nhập N và a
1
,a
2
, ,a
N
;k
Dau1;CuoiN
Giua[(Dau+Cuoi)]/2
a
Giua

=k?
Dua ra Giua roi
ket thuc
a
Giua
>k
Cuoi Giua-1
DauGiua+1
Dau>Cuoi?
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
Đúng
Đúng
Đúng
Sai
Sai
Sai
SƠ ĐỒ KHỐI
K=21, N=9
i 1 2 3 4 5 6 7 8 9
A 2 4 5 6 9 21 22 30 31
Dau
Cuoi
Giua
a
Giua
Lan
Duyet
1

9
5
9
6
7
9
22
6
6
6
21
Chỉ số cần tìm i=Giua=6
1 2 3
17
18
Kết thúc bài
học

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×