Mét sè vÝ dô vÒ thuËt to¸n TiÕp ThuËt to¸n t×m kiÕm tuÇn tù Sequential Search ThuËt to¸n t×m kiÕm nhÞ ph©n Binary Search... Nếu không, tăng i lên một đơn vị và duyệt tiếp... Tổng kết:-
Trang 1Bµi 4
Bµi to¸n vµ thuËt to¸n
(tiÕt thø 5)
Trang 2Mét sè vÝ dô vÒ thuËt to¸n (TiÕp)
ThuËt to¸n t×m kiÕm tuÇn tù (Sequential Search)
ThuËt to¸n t×m kiÕm nhÞ
ph©n (Binary Search)
Trang 3Bµi to¸n 1: Cho d·y A gåm N sè nguyªn kh¸c nhau a1,a2,… aN vµ
sè nguyªn k T×m chØ sè i (nÕu cã) mµ ai = k
Trang 41 Xác định các yếu tố của bài toán:
Input: ?
N, a1, a2,….aN, k
Output: ?
Chỉ số i mà ai = k
Trang 52 Nêu ý tưởng giải bài toán:
Xét bài toán trong trường hợp:
N=5, k= 9
Kết quả ???
Vị trí thứ 2 (i = 2)
Suy nghĩ thế nào để được kết quả đó?? Nếu N = 1000 thì sao nhỉ?????
? ? ?
? ? ?
Trang 66 9 15 17 29
N= 5, k = 9
Duyệt từng phần tử từ a 1 đến a N
Vậy cần những biến nào? Khởi tạo ra sao? ý tư ởng thế nào?
Cần 1 biến:
- Biến chạy i (i có giá trị từ 1 đến 5).
Trang 7ý tưởng:
Duyệt phần tử thứ i, bắt đầu từ a 1 Nếu a i = k thì đưa ra i rồi kết thúc Nếu không, tăng i lên một đơn vị và duyệt tiếp.
Khi nào thì bài toán kết thúc?
Khi có i thỏa mãn hoặc khi đã duyệt hết các phần tử (i > N)
i = 1
a1
N
Trang 8N, a 1 , a 2 ,….a N , k
i 1
i >N
a i = k
i i + 1
Kh«ng
cã phÇn
tö nµo cã
gt = k
+
6 9 15 17 29
a 1 a 2 a 3 a 4 a 5
§a ra i råi kÕt thóc
k = 9
5, 6, 9,15,17,29,9
i 1
1 >5 ?
6 = 9 ?
i 1 + 1
2 >5 ?
Trang 96 9 15 17 29
a 1 a 2 a 3 a 4 a 5
N=5, k= 9
Trang 10Bài toán 2: Cho 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 Tìm chỉ số
i (nếu có) mà ai = k
1 Xác định các yếu tố của bài toán:
Input: ?
N, a1, a2,….aN, k
Output: ?
Vị trí số có giá trị bằng k (vị trí i)
Trang 112 Nêu ý tưởng giải bài toán:
Xét bài toán trong trường hợp:
N=5, k= 17
Kết quả ???
Số ở vị trí thứ 4
Nhưng nếu N = 1.000.000.000 số thì sao?
a 1 a 2 a 3 a 4 a 5
Trang 126 9 15 17 29
N= 5, k = 17
Cách 1: Dùng thuật tìm kiếm tuần tự!!!!
Cách 2: Dùng thuật nhị phân (…chia để trị…).
Nhận xét:
-Dãy tăng nên nếu có phần tử a i = k thì phần tử đó là duy nhất.
Nếu chọn mốc là a 3 thì có nhận định gì?
Trang 13ý tưởng:
a giua > k a i
nếu có thì nằm
ở phía nào
lập dãy mới
ntn ?.
a giua = k Vị trí cần tìm
a giua < k a i nếu có thì nằm
ở phía nào
lập dãy mới ntn?.
Cuoi = Giua - 1 Dau = Giua + 1
Giua = [(Dau+Cuoi)/2]
aGiua
Trang 14Chúng ta cần mấy biến? ?????????
- Biến Dau, Cuoi để chỉ vị trí đầu tiên và cuối
cùng của dãy (mỗi lần kiểm tra phải lập một dãy mới do đó phải có 2 biến này)
- Biến Giua = [(Dau + Cuoi)/2] (phần nguyên)
Khởi tạo biến thế nào?
- Dau = 1, Cuoi = N (xét dãy A đầu tiên).
Trang 15N, d·y A, k
Dau1; CuoiN
Giua[(Dau+Cuoi)/2]
a giua = k
Giua
a giua > k Cuoi Giua … 1
Dau Giua +1
Dau>Cuoi
Kh«ng cã
+
-+
-+
-6 9 15 17 29
a 1 a 2 a 3 a 4 a 5
So thu 4
5,6,9,15,17,29,17
Dau1; Cuoi5
Giua[(1+5)/2] = 3
Dau 3+1
4>5?
Giua[(4+5)/2] = 4
17=17?
k = 17
Trang 16LÇn 1 Giua = 3 Dau = 4 Cuoi = 5
N=5, k= 17
a 1 a 2 a 3 a 4 a 5
Trang 17Tổng kết:
- Phân biệt 2 thuật toán: tìm kiếm tuần tự và tìm kiếm nhị phân
- Tính ưu việt của từng thuật toán
- Bài tập về nhà:
1: 1.42 – 1.48/21 SBT
2: Dùng thuật toán tìm kiếm tuần tự để giải quyết bài toán sau: Cho dãy A gồm N số nguyên
a1, a2,….,aN Tìm số các số dương trong dãy
Trang 18Hướng dẫn:
-Cần 2 biến: Biến i để duyệt lần lượt các
phần tử.
Biến t để đếm các phần tử >0
-Khởi tạo biến: i = 1, t = 0
lên 1 đơn vị (t = t+1) sau đó tăng i lên 1 đơn
vị để duyệt phần tử tiếp theo Bài toán kết
thúc khi i>N.
Trang 19C¶m ¬n c¸c thÇy – c« gi¸o!! c¶m ¬n c¸c con häc sinh th©n yªu!