Bài 4 Thuật toán

14 340 0
Bài 4 Thuật toán

Đ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

• 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 lớp 10 trên giá sách, cần tìm một học sinh trong danh sách 1 lớp học,… Nói một cách tổng quát là cần tìm một đối tượng cụ thể nào đó trong tập các đối tượng cho trước. • Dưới đây ta chỉ xét bài toán đơn giản sau: • Cho dãy A số N nguyên khác nhau: a 1 , a 2 ,… a N và một số nguyên k. Cần biết có hay không chỉ số i (1≤ i ≤ N) mà a i =k. Nếu có hãy cho biết chỉ số đó. • Số nguyên k được gọi là khoá tìm kiếm(gọi tắt là khoá). • Ví dụ, cho dãy A gồm các số 5,7,1,4,2,9,8,11,25,51. • Với khoá k=2, trong dãy trên có số hạng a 5 có giá trị bằng k. Vậy chỉ số cần tìm là i=5; • Với khoá k=6 thì không có số hạng nào của dãy A có giá trị bằng k. • Xác định bài toán: • Input: Dãy A gồm N số nguyên khác nhau a 1 ,a 2 … a N và số nguyên k; • Output: Chỉ số I mà a i =k hoặc thông báo không có số hạng nào của dãy A có giá trị bằng k. • Ý tưởng: Tìm kiếm tuần tự được thực hiện một cách ngẫu 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á. a) Cách liệt kê • Bước 1: Nhập N, các số hạng a 1 , a 2 ,…a N và khoá k; • Bước 2: i←1; • Bước 3: Nếu a i =k thì thông báo chỉ số i, rồi kết thúc • Bước 4: i ← i + 1 • Bước 5: 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; • Bước 6: Quay lại bước 3. • Ghi chú: Trong thuật toán trên, i là biến chỉ số và nhận giá trị nguyên lần lượt từ 1 đến N+1. b) Sơ đồ khối Nhập N và a 1 ,a 2 ,…a N ;k i← 1 a i = k Đưa ra i rồi kết thúc Đúng Sai i← i + 1 i> N ? Đúng 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 Sai A 5 7 1 4 2 9 8 1 1 2 5 5 1 i 1 2 3 4 5 - - - - - A 5 7 1 4 2 9 8 1 1 2 5 5 1 i 1 2 3 4 5 6 7 8 9 1 0 1 1 A 5 7 1 4 2 9 8 1 1 2 5 5 1 i 1 2 3 4 5 - - - - - Dưới đây là một số ví dụ mô phỏng việc thực hiện thao tác trên k=2 và N=10 Với i=5 thì a 5 =2 k=6 và N=10 Với mọi i từ 1 đến 10 không có a i có giá trị bằng 6 A 5 7 1 4 2 9 8 11 25 51 i 1 2 3 4 5 6 7 8 9 10 11 A 5 7 1 4 2 9 8 11 25 51 i 1 2 3 4 5 - - - - - • 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 có số hạng nào của dẵy A có giá trị bằng k. • Ý 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 với số hạng được chọn. Để làm điều đó, ta chọn số hạng a Giua ở “giữa dãy” để so sánh với k, trong đó Giua=[ (N+1)/2 ] • Khi đó, chỉ xảy ra 1 trong 3 trường hợp sau đây: • Nếu a Giua =k thì Giua là chỉ số a cần tìm. Việc tìm kiếm kết thúc. • Nếu a Giua <k thì do dãy A là dãy đã sắp xếp nên việc tìm kiếm tiếp theo chỉ xét trên dãy a 1 ,a 2 …, a Giua-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 a Giua <k thì thực hiện tìm kiếm trên dãy a Giua+1 , a Giua+2 , …, a N . • Quá trình trên sẽ được lặp đi lặp lại một số lần đế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 a) Cách liệt kê • Bước 1: Nhập N, các số hạng a 1 , a 2 ,…a N và khoá 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ì đặ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 bằng k, rồi kết thúc; • Bước 8: Quay lại bước 3. • Ghi chú: Tuỳ thuộc a Giua > k hoặc a Giua < 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ử dung các biến nguyên tương ứng Dau và Cuoi có giá trị khởi tạo Dau =1 và Cuoi+N b) Sơ đồ khối Nhập N và a 1 ,a 2 ,…a N ;k Dau← 1;Cuoi ←N a Giua = k ? Đưa ra Giua rồi kết thúc Đúng Sai Cuoi← Giua - 1 a Giua >k Đúng 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 Sai Giua← [(Dau + Cuoi)/2] Dau← Giua + 1 Dau> Cuoi Sai Đúng [...]... hiện thuật toán trên A 5 7 1 4 2 9 k=21 và N=10 A 8 1 2 5 1 5 1 i 1 2 3 4 5 6 7 i 1 2 3 4 5 - - - - A i 2 4 5 6 9 21 22 Dau 1 6 6 5 7 1 4 2 9 8 1 2 5 1 5 1 8 9 10 1 3 33 30 231 4 5 6 7 8 9 1 1 0 1 Cuoi 10 10 7 A Giua 7 1 5 28 9 6 1 5 4 8 1 aGiua 9 30 21 2 5 5 1 1 2 3 1 52 - 3 4 - - - i Lần duyệt Ở lần duyệt thứ 3 thì aGiua=k Vậy chỉ số cần tìm là i=Giua=6 Dưới đây là ví dụ mô phỏng việc thực hiện thuật. .. i=Giua=6 Dưới đây là ví dụ mô phỏng việc thực hiện thuật toán trên A 5 7 1 4 2 9 8 1 k=255 N=10 7 1 2 và A 5 1 5 1 i 1 2 3 4 5 6 7 8 i 1 2 3 4 25 - - 5 - 6 - 9 - 21 22 30 A 4 i 1 2 3 Dau 1 6 6 7 8 Cuoi 10 10 7 7 4 2 9 8 1 2 5 1 5 1 9 10 31 6 4 5 33 7 8 9 1 1 0 1 7 A Giua7 1 45 2 8 8 61 7 5 5 9 2 1 5 aGiua 9 30 21 22 1 Lần duyệt i 1 2 3 4 5 1 2 3 4 5 - - - - - Tại lần duyệt thứ 5 Dau> Cuoi nên kết luận . A 5 7 1 4 2 9 8 1 1 2 5 5 1 i 1 2 3 4 5 - - - - - A 5 7 1 4 2 9 8 1 1 2 5 5 1 i 1 2 3 4 5 6 7 8 9 1 0 1 1 A 5 7 1 4 2 9 8 1 1 2 5 5 1 i 1 2 3 4 5 - - -. giá trị bằng 6 A 5 7 1 4 2 9 8 11 25 51 i 1 2 3 4 5 6 7 8 9 10 11 A 5 7 1 4 2 9 8 11 25 51 i 1 2 3 4 5 - - - - - • Xác định bài toán: • Input: Dãy A là

Ngày đăng: 25/06/2013, 01:25

Từ khóa liên quan

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

Tài liệu liên quan