TIẾT 13+14: THUẬT TOÁN TÌM KIẾM TUẦN TỰ VÀ TÌM KIẾM NHỊ PHÂN... TÌM KIẾM TUẦN TỰ Sequential Search 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ộ
Trang 1TIẾT 13+14: THUẬT TOÁN TÌM KIẾM TUẦN TỰ VÀ TÌM KIẾM NHỊ PHÂN
Trang 2Tớ là một chú cá Hãy tìm tớ trong
đám bạn này nhé!!
Không phả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!
Trang 3XÁ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Ự (Sequential Search)
Trang 4TÌM KIẾM TUẦN TỰ (Sequential Search)
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.
Trang 5TÌM KIẾM TUẦN TỰ
Ví dụ:
Dãy A gồm các số
a1 a2 a3 a4 a5 a6 a7 a8
N=8
K=9
9
||
k
Tìm thấy
K=6 , không có giá trị nào
6
||
k
Không tìm
thấy
Trang 6Ví dụ thuật toán tìm kiếm tuần tự
9
a5
4
a6
2
a3
8
a7 7
a1
3
a2
6
a4 4
k
i
n
4
i = 6
Trang 7Thuật toán tìm kiếm tuần tự
SƠ ĐỒ KHỐI
B1 Nhập N, a1,a2,…aN,
khóa k;
B2 i1;
B3 Nếu ai=k thì thông
báo chỉ số i rồi kết thúc;
B4 ii+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
i1
a i =k Đưa ra i rồi
kết thúc
ii+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
Trang 8Nhập N, a 1 ,…,a N ,k
ai = k
i > N
Đưa ra i rồi kềt thúc
SAI
ĐÚNG
i i + 1
i 1
i = 2 i = 3 i = 4
i = 1
SAI
Với i = 4 thì a 4 = 2
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
Trang 9Em có suy nhận xét gì sau khi xem
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
Trang 10Thuật toán tìm kiếm nhị phân
(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 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
Xác định bài toán
Trang 11Ý tưởng
aGiữa=k aGiữa<k
Chọn aGiữ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
aGiữa+1,,,aN
+
2
1
N
aGiữa>k
Việc tìm kiếm
chỉ xét trên dãy
a1,…,aGiữ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
Trang 12150 84
6
75
9 8
7 5
4 3
2 1
i
38 15
7 2
A
Biểu diễn thuật toán :
k = 150
vùng tìm kiếm thu hẹp trong phạm vi từ a6 a9
Cuoi = 9
151 90
Lượt thứ hai: aGiua là a7 = 90 < 150
vùng tìm kiếm thu hẹp trong phạm vi từ a8 a9
Dau = 8
a là a = 150 = k
Trang 1350
11 30
6
9
10 9
8 7
5 4
3 2
1
i
8 6
5 1
A
k = 14
vùng tìm kiếm thu hẹp trong phạm vi từ a6 a10
Lượt thứ hai: agiữa là a8 = 39; 39 > 14
vùng tìm kiếm thu hẹp trong phạm vi từ a6 a7;
vùng tìm kiếm thu hẹp chỉ còn a7;
Lượt thứ tư: agiữa là a 7 = 30 > 14
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.
Trang 14Thuật toán liệt kê
2
Cuoi Dau
k;
báo chỉ số Giữa rồi kết
thúc;
Cuoi=Giua-1, rồi
chuyển đến bước 7
thông báo dãy A
không có số hạng có
LIỆT KÊ
Chọn aGiữa ở giữa dãy để so sánh với k, trong đó Giữa=
+
2
1
N
aGiữa=k
Giữa là chỉ số cần tìm Kết thúc
aGiữa>k
Việc tìm kiếm chỉ xét trên dãy
a1,a2,…,aGiữa-1
aGiữa<k
Tìm kiến trên dãy
aGiữa+1,aGiữa+2,
…,aN
Trang 15SƠ ĐỒ KHỐI
Nhập N và a1,a2, ,aN;k
Dau1;Cuoi1
Giua[(Dau+Cuoi)]/2
aGiua=k?
Dua ra Giua roi
ket thuc
aGiua>k CuoiGiua-1
DauGiua+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
B1 Nhập N, a1,a2,…aN, khóa k;
B2 Dau1, CuoiN;
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 DauGiua+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
Trang 16Nhập N và a 1 ,a 2 , ,a N ;k
Dau1;CuoiN
Giua[(Dau+Cuoi)]/2
a Giua =k?
Dua ra Giua roi
ket thuc
a Giua >k CuoiGiua-1
DauGiua+1 Dau>Cuoi?
Đúng
Đúng
Đúng Sai
SƠ ĐỒ KHỐI
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
1 2 3
Trang 1717
Trang 18Kết thúc bài
học