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[r]
(1)1
(2)2
Tớ cá Hãy tìm tớ
Tớ cá Hãy tìm tớ
đám bạn nhé!!
đám bạn nhé!!
1 2 3 4 5
Không phải rồi!
Ồ! Không phải rồi!
Ồ! Lại sai rồi!
Hi! Hi! Chưa đâu nghen!
(3)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 a1,a2,…,aN số
nguyên k
Chỉ số i mà ai=k thơng báo khơng có số hạng của dãy A có giá trị k
TÌM KIẾM TUẦN TỰ
TÌM KIẾM TUẦN TỰ
(Sequential Search)
(4)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 gặp số hạng khóa số hạng số hạng cần tìm.
(5)5 TÌM KIẾM TUẦN TỰ
TÌM KIẾM TUẦN TỰ
Ví dụ:
Dãy A gồm số
1 4 2 9 8 11
5 7
a1 a2 a3 a4 a5 a6 a7 a8
N=8
K=9
9
|| k
≠ ≠ ≠ ≠ ≠ ||
Tìm thấy
, có a6=k, số cần tìm i=6
K=6 , khơng có giá trị
6
|| k
≠ ≠ ≠
(6)6
Ví dụ thuật tốn tìm kiếm tuần tự
Ví dụ thuật tố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
123456 7
n
SAI ĐÚNG
4
k VẬY
(7)7
Thuật tốn tìm kiếm tuần tự
Thuật tố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ơng
báo số i kết thúc;
B4 ii+1;
B5.Nếu i>N thơng báo dãy A khơng có số hạng có giá trị bằng k, kết thúc;
B6 Quay lại bước 3.
LIỆT KÊ
Nhập N, a1,a2….,aN,k
i1
ai=k Đưa i
kết thúc ii+1
i>N?
Thông báo dãy A khơng có số hạng có giá trị k kết thúc
Đúng Sai
(8)8
Nhập N, a1,…,aN,k
ai = k
i > N
Đưa i kềt thúc
SAI
ĐÚNG
i i + 1
i 1
5 7 1 2 9 8
i = 2 i = 3 i = 4 i = 1
SAI
Với i = thì a4 = 2
THUẬT TỐN TÌM KIẾM TUẦN TỰ (Sequentinal Search)
N = 6; k = 2
a1 = 5
i = < N
a2 = 7
i = < N
a3 = 1
i = < N
a4 = 2
a1 a2 a3 a4 a5 a6
Ví dụ
(9)9
Em có suy nhận xét sau xem
Em có suy nhận xét sau xem
xong?
xong?
• Người đọc sách muốn tìm trang 30 sách.
• Người bắt đầu mở sách
• Số trang vừa mở trang 44.(chưa tìm số
trang cần tìm)
• Như người tìm phạm vi từ số trang
từ đầu 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 trang
(10)10
Thuật tốn tìm kiếm nhị phân
Thuật tố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 a1,a2,…,aN
số nguyên k
Chỉ số i mà ai=k thơng báo khơng có số hạng của dãy A có giá trị k
(11)11 Ý tưởng
Ý tưởng
aGiữa=k aGiữa<k
Chọn aGiữa dãy để so sánh với k, Giữa=
Giữa số cần tìm Kết thúc
Tìm kiến dãy aGiữa+1,,,aN
2 1
N
aGiữa>k
Việc tìm kiếm chỉ xét dãy
a1,…,aGiữa-1
(12)12 150 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 : Biểu diễn thuật toán :
k = 150
Lượt thứ nhất:: a aGiữaGiữa a a55 = 75; 75 < 150 = 75; 75 < 150
vùng tìm kiếm thu hẹp phạm vi từ a vùng tìm kiếm thu hẹp phạm vi từ a66 a a99
Cuoi = 9
Dau =1Dau =6 Cuoi = 9
151 90
Lượt thứ hai: aGiua a7 = 90 < 150
vùng tìm kiếm thu hẹp phạm vi từ avùng tìm kiếm thu hẹp phạm vi từ a88 a a99
Dau = 8
Lượt thứ ba:: aGiua a8= 150 = k
(13)13 50 39 75 11 30 6 9 10 9 8 7 5 4 3 2 1 i 8 6 5 1 A
k = 14
Lượt thứ nhất:: a agiữagiữa a a55 = 9; < 14 = 9; < 14
vùng tìm kiếm thu hẹp phạm vi từ a vùng tìm kiếm thu hẹp phạm vi từ a66 a a1010 Lượt thứ hai: a agiữagiữa a a88 = 39; 39 > 14 = 39; 39 > 14
vùng tìm kiếm thu hẹp phạm vi từ a vùng tìm kiếm thu hẹp phạm vi từ a66 a a77;;
Lượt thứ ba: a agiữagiữa a a6 6 = 11; 11 < 14 = 11; 11 < 14
vùng tìm kiếm thu hẹp cịn a vùng tìm kiếm thu hẹp a77;;
Lượt thứ tư: a agiữagiữa a a 7 7 = 30 > 14 = 30 > 14
Cuối=Giửa - = > đầu = Cuối=Giửa - = > đầu =
Thông báo khơng tìm thấy số hạng có giá trị 14. Thơng báo khơng tìm thấy số hạng có giá trị 14.
Dau = 1 Cuoi = 10
(14)14 Thuật toán liệt kê
Thuật toán liệt kê
Cuoi Dau
B1 Nhập N, a1,a2,…aN, khóa k;
B2 Dau1, CuoiN;
B3 Giữa
B4 Nếu aGiữa=k thơng
báo số Giữa kết thúc;
B5.Nếu aGiữa>k đặt
Cuoi=Giua-1, chuyển đến bước 7
B6 DauGiua+1;
B7 Nếu Dau>Cuoi thơng báo dãy A
khơng có số hạng có gíá trị k kết thúc
B8 Quay lại B3
LIỆT KÊ
Chọn aGiữa dãy để so sánh với k, Giữa=
2 1 N
aGiữa=k
Giữa số cần tìm Kết thúc
aGiữa>k
Việc tìm kiếm chỉ xét dãy
a1,a2,…,aGiữa-1
aGiữa<k
Tìm kiến dãy aGiữa+1,aGiữa+2,
…,aN
(15)15 SƠ ĐỒ KHỐI
Nhập N a1,a2, ,aN;k Dau1;Cuoi1
Giua[(Dau+Cuoi)]/2
aGiua=k?
Dua 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 có giá trị k
rồi kết thúc
Đúng
Đúng Đúng
Sai
Sai 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 số Giữa kết thúc;
B5.Nếu aGiữa>k đặt Cuoi=Giua-1, chuyển đến bước 7
B6 DauGiua+1;
B7 Nếu Dau>Cuoi thơng báo dãy A khơng có số hạng có gíá trị bằng k kết thúc
(16)16
Nhập N a1,a2, ,aN;k
Dau1;CuoiN
Giua[(Dau+Cuoi)]/2
aGiua=k?
Dua 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 có giá trị 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 aGiua Lan Duyet 1 9 5 9 6 7 9 22 6 6 6 21
Chỉ số cần tìm i=Giua=6
(17)(18)18