Thuật toán tìm kiếm nhị phân Binary Search * Xác định bài toán.. Các em hãy nêu cách xác định bài toán ?.[r]
(1)Nguyễn Thị Hà Đặng Hữu Hoàng (2) Tiết 14 Nguyễn Thị Hà Đặng Hữu Hoàng (3) KIỂM TRA BÀI CŨ Trình bày thuật toán tìm kiếm * Dạng liệt kê: * Dạng SĐK: Nh Nhập N và a11, a22, …ann; k B1: Nhập N, các số hạng a1, a2 … an và khoá k ; i: =1 B2: i: = ; B3: Nếu = k thì thông báo có k dãy và đưa số i, kết thúc; aii = k ? B4: i: =i +1; i: = i + Đ S B5: Nếu i > N thì thông báo không có k dãy, kết thúc S i> N ? B6: Quay bước Đ Thông Thông báo báo không không có có kk dãy, kết thúc kết thúc Nguyễn Thị Hà Có Có kk trong dãy dãy và và đưa đưa ra chỉ số số i,i, rồi kết kết thúc thúc (4) KIỂM TRA BÀI CŨ Bài 1: Tính f(x) = x2 x ≥ 2x + x<0 * Mô tả thuật toán dạng SĐK: * Mô tả thuật toán dạng liệt kê: Nhập x B1: Nhập N; B2: Nếu x ≥ thì đưa f(x) = x2; B3: Nếu x < thì đưa f(x) = 2x + 1; f(x) = 2x + S x≥0 Đ B4: Kết thúc; f(x) = x2 KT Nguyễn Thị Hà (5) MỘT SỐ VÍ DỤ VỀ THUẬT TOÁN VD3: Bài toán tìm kiếm Cho dãy A gồm N số nguyên khác nhau: a1, a2, … aN và số nguyên k Cần biết có hay không số i (1≤ i ≤ N) mà = k Nếu có hãy cho biết số đó Thuật toán tìm kiếm nhị phân ( Binary Search) * Xác định bài toán Các em hãy nêu cách xác định bài toán ? - Input: Dãy A là dãy tăng gồm N số nguyên đôi khác a1, a2,…… cách xác định bài an và số nguyên k - Output: + Chỉ số i mà = k + Không có k dãy Nguyễn Thị Hà (6) MỘT SỐ VÍ DỤ VỀ THUẬT TOÁN VD3: Bài toán tìm kiếm Cho dãy A gồm N số nguyên khác nhau: a1, a2, … aN và số nguyên k Cần biết có hay không số i (1≤ i ≤ N) mà = k Nếu có hãy cho biết số đó Thuật toán tìm kiếm nhị phân ( Binary Search) * Ý tưởng Thế còn ý tưởng là cách thu hẹp phạm vi tìm kiếm Sử dụng tính chất dãy A làcủa dãythuật tăngtoán ta tim gì cácBằng em? cách chọn số hạng agiua So sánh k với số hạng chọn Với agiua = [(N + 1)/ 2] đó xảy ba trường hợp sau: + Nếu agiua > k thì ta xét việc tìm kiếm trên dãy a1, a2 … agiua-1 + Nếu agiua = k thì giua là số cần tìm Kết thúc quá trình tìm kiếm + Nếu agiua < k thì ta xét việc tìm kiếm trên dãy agiua+1, agiua + … aN Nguyễn Thị Hà (7) * Thuật toán Em nào nói giúp - Liệt kê cô có cách biểu diễn thuật B1: Nhập N, các số hạng a1,toán a2 … ? an và khoá k ; B2: dau: = 1; cuoi: = N; B3: giua: = [(dau + cuoi)/2]; B4: Nếu agiua = k thì thông báo dãy có k và số là giua, kết thúc; B5: Nếu agiua > k thì đặt cuoi: = giua – 1, chuyển đến B7; B6: dau: = giua + 1; B7: Nếu dau > cuoi thì thông báo dãy không có k, kết thúc B8: Quay lại B3; Nguyễn Thị Hà (8) * Thuật toán - Sơ đồ khối : Nhập N và a1, a2, …an; k dau := 1; cuoi := n giua := [(dau + cuoi)/2] agiua = k ? Đ Đưa giua kết thúc S agiua > k ? Đ cuoi := giua - S dau := giua + agiua > k ? S Đ Dãy A ko có số hạng nào có giá trị k Nguyễn Thị Hà (9) * Mô thuật toán tìm kiếm nhị phân Ta có dãy A 10 phần tử : 11 16 18 21 34 42 58 60 và khóa k = 21 i A 7 10 11 16 18 21 34 42 58 60 - Lượt thứ nhất: agiua là a5 = 18 < k Nên chúng ta tìm kiếm khoảng a6 đến a10 - Lượt thứ hai: agiua là a8 = 42 > k Nên chúng ta tìm kiếm khoảng a6 đến a7 - Lượt thứ ba: agiua là a6 = 21 = k Vậy số cần tìm là i = giua = Nguyễn Thị Hà (10) BÀI TẬP VỀ NHÀ Mô thuật toán tim kiếm nhị phân: với các phần tử và khóa k sau: 10 12 25 35 40 với k = Các em nhà làm các bài tập 4; 5; 6; SGK và các bài 1.42; 1.43; 1.44; 1.45; 1.48; SBT Nguyễn Thị Hà (11) Nguyễn Thị Hà (12)