Output: Chỉ số mà ai=k hoặc thông báo không có số hạng nào của A có giá trị bằng k... 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á cho đến khi hoặc gặp một
Trang 1Chào mừng các em đến với bài học ngày hôm nay
Trang 2Tìm kiếm là gì?
Tìm kiếm là việc thường xảy ra trong cuộc sống, chẳng hạn cần tìm cuốn sách giáo khoa Tin học 10 trên giá sách, cần tìm một học sinh trong danh sách một lớp học,
Trang 32.Bài toán tìm kiếm
Cho dãy số A gồm các số: 5, 7, 1, 4, 2, 9, 8, 11, 25, 51
Với k=2 trong dãy trên số hạng thứ mấy có giá trị bằng k? Chỉ số i cần tìm là bao nhiêu?
Với k=6 trong dãy trên số hạng thứ mấy có giá trị bằng k? Chỉ số i cần tìm là bao nhiêu?
Trang 4Thuật toán tìm kiếm tuần tự
Trang 53.Thuật toán tìm kiếm tuần tự
Cho dãy A gồm N số nguyên khác nhau a1,a2, ,aN và một số nguyên k Cần biết
có hay không chỉ số i (1≤ i≤ N) mà ai=k Nếu có hãy cho biết chỉ số đó.
Các em hãy xác định Input và Output của bài toán Input:Dãy số A gồm N số nguyên khác nhau a1, a2, , aN và số nguyên k
Output: Chỉ số mà ai=k hoặc thông báo không có số hạng nào của A có giá trị bằng k
Trang 63.Thuật toán tìm kiếm tuần tự
Ý tưởng:
Tìm kiếm tuần tự được thực hiện một cách tự nhiên 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á cho đến khi hoặc gặp một số hạng bằng khoá hoặc dãy đã được xét hết và không có giá trị nào bằng khoá
Trong trường hợp thứ hai dãy A không có số hạng nào bằng khoá
Trang 73.Thuật toán tìm kiếm tuần tự
Cách liệt kê
B1: Nhập N, các số hạng a1, a2, , aN và khoá k;
B2: i 1;
B3: Nếu ai=k thì thông báo chỉ số i, rồi kết thúc;
B4: i i+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
Trang 8Thuật toán sẽ dừng khi nào?
Thuật toán dừng khi tìm thấy số hạng bằng khoá hoặc khi xét hết dãy mà không có phần tử nào bằng khoá.
Trang 93.Thuật toán tìm kiếm tuần tự
Sơ đồ khối
Trang 10VD: Cho dãy số 7, 8, 3, 5, 6, 2.
Sử dụng thuật toán tuần tự kiểm tra xem số 3 có ở trong dãy không và nằm ở vị trí nào?
Trang 11Có 2 dãy sau:
Dãy A: 5, 7, 9, 3, 1, 10 Và
Dãy B: 1, 3, 5, 7, 9, 10 Các em cho biết sự khác nhau của 2 dãy trên?
Dãy B đã được sắp xếp theo thứ tự tăng dần
Dãy B đã được sắp xếp thì cô nên làm như thế nào để tìm số 9 nhanh nhất?
Trang 12Thuật toán tìm kiếm nhị phân
Trang 134 Thuật toán tìm kiếm nhị phân
Cho dãy A sắp xếp tăng dần gồm N số nguyên khác nhau a1,a2, ,aN và một số nguyên k Cần biết có hay không chỉ số i (1≤ i≤ N) mà ai=k Nếu có hãy cho biết chỉ số đó.
Các em hãy xác định Input và Output của bài toán Input:Dãy số A sắp xếp tang dần gồm N số nguyên khác nhau a1, a2, , aN và số nguyên k
Output: Chỉ số mà ai=k hoặc thông báo không có số hạng nào của A có giá trị bằng k
Trang 14Ý tưởng:
Sử dụng tính chất dãy A là dãy tăng, ta tìm cách thu hẹp nhanh phạm vi tìm kiếm sau mỗi lần so sánh khoá với số hạng được chọn Để làm điều đó, ta chọn số hạng aGiua ở "giữa dãy" để so sánh với k, trong đó Giua= (N+1)/2
Khi đó, chỉ xảy ra một trong ba trường hợp sau:
- Nếu aGiua = k thì Giua là chỉ số cần tìm Việc tìm kiếm kết thúc
- Nếu aGiua > k thì do dãy A là dãy đã được sắp xếp nên việc tìm kiếm tiếp theo chỉ xét trên dãy a1, a2, , aGiua–1 (phạm vi tìm kiếm mới bằng khoảng một nửa phạm vi tìm kiếm trước đó).
- Nếu aGiua < k thì thực hiện tìm kiếm trên dãy aGiua+1, aGiua+2, , aN.
Quá trình trên sẽ được lặp lại một số lần cho đến khi hoặc đã tìm thấy khoá k trong dãy A hoặc phạm vi tìm kiếm bằng rỗng
4 Thuật toán tìm kiếm nhị phân
Trang 15Cách liệt kê
Bước 1 Nhập N, các số hạng a1, a2, , aN và khoá k;
Bước 2 Dau ¬ 1, Cuoi ¬ N;
Bước 3 Giua ¬ (Dau+Cuoi)/2;
Bước 4 Nếu aGiua = k thì thông báo chỉ số Giua, rồi kết thúc;
Bước 5 Nếu aGiua > k thì đặt Cuoi = Giua – 1 rồi chuyển đến bước 7;
Bước 6 Dau ¬ Giua + 1;
Bước 7 Nếu Dau > Cuoi 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
4 Thuật toán tìm kiếm nhị phân
Trang 16Ghi chú: Tuỳ thuộc aGiua > k hoặc aGiua < k mà chỉ số đầu hoặc chỉ số cuối của dãy ở bước tìm kiếm tiếp theo sẽ thay đổi Để thực hiện điều đó, trong thuật toán chỉ sử dụng các biến nguyên tương ứng Dau và Cuoi có giá trị khởi tạo Dau = 1 và Cuoi = N.
4 Thuật toán tìm kiếm nhị phân
Trang 18VD: Cho dãy số 1, 3, 5, 7, 9, 10.
Sử dụng thuật toán tìm kiếm nhị phân kiểm tra xem số 9 có ở trong dãy không và nằm ở vị trí
nào?
Trang 19Bài về nhà
Làm bài 7 sách giáo khoa trang 44 và đọc trước thuật toán tìm kiếm nhị phân
Trang 20Thank you