Tài liệu bai 4

15 403 0
Tài liệu bai 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

3. Một số ví dụ về thuật toán Ví dụ 3: Bài toán tìm kiếm a)Tìm kiếm tuần tự b)Tìm kiếm nhị phân ** Xác định bài toán : • Input : – Dãy A là dãy tăng gồm N số nguyên khác nhau a 1 , a 2 , ., a N và một số nguyên k • Output : – Chỉ số i mà a i = k hoặc thông báo không tìm thấy k trong dãy A ** ** Ý tưởng: Ý tưởng: thu hẹp phạm vi tìm kiếm bằng thu hẹp phạm vi tìm kiếm bằng cách so sánh k với số hạng ở giữa dãy cách so sánh k với số hạng ở giữa dãy a 1 , a 2 , …, a [(1+N)/2] , … a N-1 , a N Nếu k < a [(N+1)/2] Nếu k > a [(N+1)/2] Tìm kiếm trong phạm vi này Tìm kiếm trong phạm vi này < a [(1+N)/2] > a [(1+N)/2] Giua = [ (1 + N)/2] Nếu k = a Giua thì thông báo chỉ số Giua Túm li: Do dãy A là một dãy tăng dần nên khi ta so sánh k với phần tử ở Giữa dãy xảy ra một trong ba trư ờng hợp - Nếu a Giữa = k => tìm được chỉ số, kết thúc; - Nếu a Giữa > k => do dãy A đã được sắp xếp tăng nên việc tìm kiếm thu hẹp chỉ xét từ a 1 a Giữa - 1 ; - Nếu a Giữa < k => do dãy A đã được sắp xếp tăng nên việc tìm kiếm thu hẹp chỉ xét từ a Giữa + 1 a N . Quá trình trên được lặp đi lặp lại cho đến khi tìm được OUTPUT. Tiếp tục: Xác định lại vị trí đầu, giữa, cuối trong dãy mới: Dau = 6; Cuoi = 10 a Giua = a [(6+10)/2] = a 8 , Xác định vị trí ở giữa – gọi là a Giua . Nếu a Giua = k thì đưa ra Giua rồi kết thúc. Nếu a Giua > k thì tìm trong đoạn a 1  a Giua -1 Ngược lại tìm trong đoạn a Giua+1  a 10 Xác định a Giua như thế nào? a Giua = a [(1+10)/2] = a 5 22 55 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a 10 vì a 5 < k nên tìm k trong đoạn a 6  a 10 Cho dãy A gồm 10 phần tử a 1 , a 2 , …, a N và số k = 55 Ta thấy a 8 - = k = 55, đưa ra Giua = 8 (hay i = 8) Bước 1: Nhập N, các số hạng a 1 , a 2 , . , a N và khóa k Bước 2: Dau ← 1 , Cuoi ← N Bước 3: Giua ← [(Dau+ Cuoi)/2] Bước 4: Nếu a Giua = k thì thông báo chỉ số Giua, rồi kết thúc. Bước 5: Nếu a Giua > k thì 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 Thuật toán Thuật toán * Cách liệt kê [...]... Cuoi Giua - 1 S S Dau  Giua+1 Dau > Cuoi ? Đ 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 N = 10 Dau Nhập N; dãy a1, ,aN ; K K = 21 Cuoi Giua 1 Dau  1 ; Cuoi  N A 2 3 4 5 6 7 8 9 10 2 4 5 6 9 21 22 30 31 33 Giua  [ (Dau + Cuoi)/2 ] Đ Dau 21 6 AGiua = K? Đưa ra vò trí Giua rồi kết thúc S 22 7 30 8 Cuoi 31 9 Giua S AGiua >K? Giua Đ Dau 21 6 Cuoi  Giua -1 Dau  Giua + 1 Dau... 1: Cho d·y A gåm c¸c phÇn tư a1, a2, , aN ®­ỵc s¾p xÕp gi¶m dÇn H·y sưa ®ỉi tht to¸n t×m kiÕm nhÞ ph©n víi d·y t¨ng dÇn thµnh tht to¸n t×m kiÕm nhÞ ph©n víi d·y gi¶m dÇn 1/ Hãy cho biếtthời gian thực 14 18 20 thuật tốn 3/ 2/ Cho dãy A = điều kiện cần phải có để có thể sử so sánh 3 6 7 9 11 hiện giữa dụng thuật tốn tìm và tìm kiếm nhị phân tìm kiếm tuần tự kiếm nhị phân ? a) Hãy : phỏng việc thực hiện . Xác định a Giua như thế nào? a Giua = a [(1+10)/2] = a 5 22 55 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a 10 vì a 5 < k nên tìm k trong đoạn a 6  a 10 Cho. N và khóa k Bước 2: Dau ← 1 , Cuoi ← N Bước 3: Giua ← [(Dau+ Cuoi)/2] Bước 4: Nếu a Giua = k thì thông báo chỉ số Giua, rồi kết thúc. Bước 5: Nếu a Giua

Ngày đăng: 30/11/2013, 10:11

Tài liệu cùng người dùng

Tài liệu liên quan