Bµi 4 Bµi to¸n vµ thuËt to¸n (tiÕt thø 5) 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) Bµi to¸n 1: Cho d·y A 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µ a i = k. 1. X¸c ®Þnh c¸c yÕu tè cña bµi to¸n: Input: ? N, a 1 , a 2 ,….a N , k Output: ? ChØ sè i mµ a i = k 2. 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ỉ????? ? ? ? ? ? ? 6 9 9 15 15 17 17 29 29 a 1 a a 2 2 a a 3 3 a a 4 4 a a 5 5 6 9 9 15 15 17 17 29 29 a 1 a a 2 2 a a 3 3 a a 4 4 a a 5 5 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). Khởi tạo: i = 1 ý 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) a 1 a N i = 1 1 2 3 a 1 N N, 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 9 15 15 17 17 29 29 a 1 a a 2 2 a a 3 3 a a 4 4 a a 5 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 ? 9 = 9 ? VÞ trÝ thø 2 6 9 9 15 15 17 17 29 29 a 1 a a 2 2 a a 3 3 a a 4 4 a a 5 5 LÇn duyÖt 1 LÇn duyÖt 1 i = 1 i = 1 Qua líi Qua líi Kh«ng tm Kh«ng tm LÇn duyÖt 2 LÇn duyÖt 2 i = 2 i = 2 Qua líi Qua líi Tháa m·n Tháa m·n N=5, k= 9 Bà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, a 1 , a 2 ,.a N , k Output: ? Vị trí số có giá trị bằng k (vị trí i) [...]... a3 a4 a5 N=5, k= 17 Lần 1 Giua = 3 Dau = 4 Lần 2 Giua = 4 Thỏa mãn Đ/K Cuoi = 5 Kết thúc Tổ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 Hướng dẫn: -Cần 2 biến: Biến i để...2 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 6 a1 9 a2 15 a3 17 a4 Kết quả ??? Số ở vị trí thứ 4 Nhưng nếu N = 1.000.000.000 số thì sao? 29 a5 6 a1 9 a2 15 a3 17 a4 29 a5 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ử ai = k thì... 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 -Tư tưởng: Duyệt từng ai, nếu ai>0 thì tăng t 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 Cảm ơn các thầy cô giáo!! cảm ơn các thân yêu! con học sinh ... ai nếu có thì nằm ở phía nào lập dãy mới ntn ? agiua= k Vị trí cần tìm agiua< k ai nếu có thì nằm ở phía nào lập dãy mới ntn? Chú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) 6 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. Bà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: