V D V Thuật toán tìm kiếm Í DỤ VỀ Thuật toán tìm kiếm Ụ VỀ Thuật toán tìm kiếm Ề Thuật toán tìm kiếmHai bạn chó Bi và Bông chơi trốn tìm, Bông đã trốn vào một trong những chiếc mũ của ôn
Trang 1V D V Thuật toán tìm kiếm Í DỤ VỀ Thuật toán tìm kiếm Ụ VỀ Thuật toán tìm kiếm Ề Thuật toán tìm kiếm
Hai bạn chó (Bi và Bông) chơi trốn tìm, Bông đã trốn vào một trong những chiếc mũ của ông già Nôen trên Hãy chỉ ra các cách tìm chiếc mũ mà Bông đang trốn? Cho biết có những cách nào?
Bông trốn
đâu nhỉ ?
C1: Tìm kiếm tuần tự
( mở từng mũ)
C2: Do các mũ đã sắp xếp lớn
dần, hai mũ đầu nhỏ hơn
ng ời của Bông nên chỉ tìm hai
mũ sau thôi!
Trang 21 ThuËt to¸n t×m kiÕm tuÇn tù
Xét một bài toán tìm kiếm đơn giản sau :
Cho dãy A gồm N số nguyên khác nhau:
có hãy cho biết số đó.
Trang 3INPUT: Dãy A gồm N số nguyên a 1 , a 2 ,…, a, a N đôi
một khác nhau và 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.
1 Thuật toán tìm kiếm tuần tự
Xác định bài toán:
Trang 45 4
3 2
1 I
51 25
11 8
9 2
4 1
7 5
A
M« pháng thuËt to¸n t×m kiÕm tuÇn tù
Víi k = 2 vµ d·y A gåm 10 sè h¹ng nh sau:
T¹i vÞ trÝ i = 5 cã a 5 = 2 = k
Víi k = 6 vµ d·y A gåm 10 sè h¹ng nh sau:
Víi mäi i tõ 1 10 kh«ng cã a i cã gi¸ trÞ b»ng 6
5
Trang 5ý t ởng:
Lần l ợt từ số hạng thứ nhất, ta so sánh giá trị số hạng đang xét với khoá (k) cho đến khi có sự trùng nhau, nếu đã xét tới số hạng cuối cùng mà không có sự trùng nhau thì có nghĩa là dãy A không có số hạng nào có giá trị bằng k
Trang 6C¸ch 1: LiÖt kª c¸c b íc
B íc 1: NhËp N, c¸c sè h¹ng a 1 , a 2 , ,…, a…, a, a , a N
vµ gi¸ trÞ kho¸ k;
B íc 2: i 1;
B íc 3: NÕu a i = k th× th«ng b¸o chØ sè i, råi kÕt thóc;
B íc 4: i i+1;
B íc 5: 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;
B íc 6: Quay l¹i B3.
Trang 7Nhập N, a 1 , a 2 , , a N
và k
i 1
a i =
k ?
Đ a ra i rồi kết thúc
Đ
S
Đ
i i + 1
i >
N ?
Thông báo d y A không ãy A không
có số hạng có giá trị bằng k, rồi kết thúc
Vẽ sơ đồ khối
Trang 82 Thuật toán tìm kiếm nhị phân
ý t ởng:
Sử dụng tính chất dãy A đã sắp xếp tăng, ta tìm cách thu hẹp nhanh phạm vi tìm kiếm bằng cách
xảy ra một trong ba tr ờng hợp:
Quá trình trên đ ợc lặp đi lặp lại cho đến khi tìm đ ợc OUTPUT.
- Nếu a giữa = k => tìm đ ợc chỉ số i, kết thúc;
- Nếu a giữ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 a giữa - 1;
- Nếu a giữ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ừ a giữa + 1 a N
Trang 9Thuật toán tìm kiếm nhị phân
Xác định bài toán:
INPUT: Dãy A là dóy tăng gồm N số nguyên
a1, a2, …, a , aN đôI một khác nhau và m t số ột số nguyên k.
báo không có số hạng nào của dóy A cú giỏ
tr bằng k ị bằng k.
Trang 10Liệt kê các b ớc
B ớc 1: Nhập N, các số hạng a 1 , a 2 , ,…, a…, a, a , a N
và giá trị khoá k;
B ớc 2: Đầu 1, Cuối N;
B ớc 3: Giữa [(Đầu + Cuối)/2];
B ớc 4: Nếu a Giữa = k thì thông báo chỉ số Giữa
rồi kết thúc;
B ớc 5: Nếu a Giữa > k thì đặt Cuối = Giữa - 1 rồi
chuyển sang b ớc 7;
B ớc 6: Đầu Giữa + 1;
B ớc 7: Nếu Đầu >= Cuối 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 11SƠ ĐỒ KHỐI
Dau← 1;Cuoi ←N
aGiua = k ?
Đưa ra Giua
rồi kết thúc
Đúng
Sai
Cuoi← Giua - 1
aGiua>k
Đúng
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
Sai
Giua← [(Dau + Cuoi)/2]
Dau← Giua + 1 Dau> Cuoi
Sai
Đúng
Nhập N và a1,a2,
…aN;k
Trang 12M« pháng thuËt to¸n t×m kiÕm nhÞ ph©n
Víi k = vµ d·y A gåm 10 sè h¹ng nh sau:
L ît thø nhÊt : a gi÷a lµ a 5 = 9; 9 <
vïng t×m kiÕm thu hÑp trong ph¹m vi tõ a 6 a 10 ;
L ît thø hai: a gi÷a lµ a 8 = 30; 30 >
vïng t×m kiÕm thu hÑp trong ph¹m vi tõ a 6 a 7 ;
L ît thø ba: a gi÷a lµ a 6 = 21; 21= 21
VËy sè cÇn t×m lµ i = 6.
10 9
8 7
6 5
4 3
2 1
i
33 31
30 22
21 9
6 5
4 2
66
21 9
30
6 21
21
Trang 13M« pháng thuËt to¸n t×m kiÕm nhÞ ph©n
10 9
8 7
6 5
4 3
2 1
i
33 31
30 22
21 9
6 5
4 2
66 21
L ît thø tư
vïng t×m kiÕm thu hÑp trong ph¹m vi vïng t×m kiÕm thu hÑp trong ph¹m vi đầu =7,cuối=7 đầu =7,cuối=7 u =7,cu i=7 u =7,cu i=7 ối=7 ối=7
Kết luận trong dãy không có số hạng nào có giá trị là 25 cả.
u =8,cu i=7
đầu =7,cuối=7 u =8,cu i=7 ối=7
8
30 21
22
Trang 143 CỦNG CỐ VÀ DẶN DÒ
HS biết được thuật toán tìm kiếm :
+ Thuật toán tìm kiếm tuần tự
+ Thuật toán tìm kiếm nhị phân
.HS về nhà làm bài tập số 7 trang 44 sgk .Xem trước bài 5 : Ngôn ngữ lập trình.