Thuật toán tìm kiếm nhị phân Ý tưởng: Sử dụng tính chất dãy A đã sắp xếp không giảm, ta tìm cách thu hẹp nhanh phạm vi tìm kiếm bằng cách so sánh k với số hạng ở giữa dãy agiưa, khi đó c[r]
Trang 1Bài cũ:
1.Nêu khái niệm bài toán, thuật toán?
2.Trình bày thuật toán bằng cách các bước liệt
kê bài toán giải phương trình bậc nhất :
ax + bx = 0 (a ≠ 0).
Trang 2LIỆT KÊ :
Bước 1 : Nhập a, b.
Bước 2 : Nếu a = 0 thì quay lại bước 1,
ngược lại thì qua bước 3.
Bước 3 : Gán cho x giá trị -b/a, rồi qua bước 4.
Bước 4 : Đưa ra kết quả x và kết thúc
Trang 3Tiết 11
THUẬT TOÁN (t2)
Trang 4MÔ TẢ CÁC THAO TÁC TRONG THUẬT TOÁN
Có 2 cách mô tả Liệt kê
Dùng sơ đồ khối
Nêu ra tuần tự các thao
tác cần tiến hành
Dùng một số biểu tượng
thể hiện các thao tác
Trang 5: Thể hiện các thao tác so sánh
DÙNG SƠ ĐỒ KHỐI
Quy ước: Trong sơ đồ khối, người ta dùng một số
biểu tượng thể hiện các thao tác như :
: Thể hiện các phép toán
: Quy định trình tự thực hiện các thao tác : Thể hiện các thao tác nhập, xuất
dữ liệu
Trang 6VD 1: Từ thuật toán gpt : ax + b = 0 theo cách liệt kê hãy
biểu diễn thuật toán bằng sơ đồ khối
Nhập a, b
a = 0
x = -b/a
Sai
đúng
a ra x, k t thúc
quay lại bước 1, ngược
lại thì qua bước 3.
giá trị -b/a, rồi qua bước
4.
quả x và kết thúc.
SƠ ĐỒ KHỐI LIỆT KÊ
Trang 7VD 2: Cho dãy số gồm N số sau (N = 6):
11 7 25 4 15 9 Tìm giá trị NHỎ NHẤT của dãy số trên ?
Hãy xác định bài toán?
Tìm ý tưởng?
Xây dựng thuật toán?
Trang 8Xác định bài toán
Input : Số nguyên dương N và dãy N số
a1, ,aN.
Output : Giá trị lớn nhất (Max) của dãy số.
Trang 9Tìm ý tưởng?
Gán Min bằng giá trị phần tử đầu tiên của dãy.
Lần lượt so sánh Min với các phần tử tiếp theo
trong dãy Tại mỗi vị trí so sánh :
+ Nếu Min bé thua giá trị phần tử cần so sánh
trong dãy thì lấy giá trị của phần tử đó gán lại cho
Min.
- Khi so sánh đến phần tử cuối cùng trong dãy số thì
Min sẽ mang giá trị nhỏ nhất của dãy.
Trang 10Thuật toán: Liệt kê
Bước 1 : Nhập N và dãy a1,…, aN.
Bước 2 : Đặt Min= a1, i=2;
Bước 3 : Nếu i<=N thì thực hiện bước 4, nếu
không thì chuyển đến bước 5.
Bước 4 :
4.1 Nếu Min < ai thì đặt Min =ai 4.2 Tăng i một đơn vị rồi quay về bước 3
Bước 5 : Đưa ra Min rồi kết thúc.
Trang 11SƠ ĐỒ KHỐI : Nhập N và dãy a1,…, aN
Min = a1 , i = 2
i <=N
Min > a i
Min = a i
i = i+1
Đưa ra Min rồi kết thúc
Sai đúng
úng
đ
Sai
Trang 12BÀI TẬP VỀ NHÀ
1.Trình bày thuật toán bằng 1 trong 2 cách đã học: tìm Max, giá trị lớn nhất của dãy số gồm
N số a1,…, aN
2 Bài 3, 4, 5
trang 44 (SGK)
Trang 13Bài cũ:
1.Trình bày thuật toán sắp xếp tráo đổi ?
2.Trình bày thuật toán tìm kiếm tuần tự?
Trang 14Tiết 14
THUẬT TOÁN (t5)
Trang 15Bài toán:
Cho dãy n số nguyên a1, ,an đã sắp
xếp không giảm, số nguyên k.
Hãy tìm và chỉ ra vị trí của k (nếu có) trong dãy.
Trang 16Trò chơi
Tìm số nguyên trong đoạn từ 1 100 Hãy chuẩn bị số bất kỳ, sau 7 câu
hỏi sẽ tìm được?
Trang 17Thuật toán tìm kiếm nhị phân
Ý tưởng:
Sử dụng tính chất dãy A đã sắp xếp không giảm, ta tìm cách thu hẹp nhanh phạm vi tìm kiếm bằng cách so sánh
k với số hạng ở giữa dãy (agiưa), khi đó chỉ xảy ra một trong ba trường hợp:
- Nếu agiưa= k => tìm được chỉ số, kết thúc;
- Nếu agiưa > k => do dãy A đã được sắp xếp không
giảm nên việc tìm kiếm thu hẹp chỉ xét từ a1 agiưa -1;
- Nếu agiưa < k => do dãy A đã được sắp xếp không giảm
nên việc tìm kiếm thu hẹp chỉ xét từ agiưa + 1 aN.
Trang 18Mô phỏng thuật toán tìm kiếm nhị phân
10 9
8 7
6 5
4 3
2 1
i
33 31
30 22
21 9
6 5
4 2
A
Với k = 21 và dãy A gồm 10 số hạng như sau:
Lượt thứ nhất : agiưa là a5 = 9; 9 < 21
vùng tìm kiếm thu hẹp trong phạm vi từ a6 a10;
33 31
30 22
21
Lượt thứ hai : agiưa là a8 = 30; 30 > 21
vùng tìm kiếm thu hẹp trong phạm vi từ a6 a7;
Lượt thứ ba : agiưa là a6 = 21; 21= 21
Vậy số cần tìm là i = 6.
22 21
6
21
Trang 19Thuật toán tìm kiếm nhị phân:
các bước liệt kê
Bước 1: Nhập N, các số hạng a1, a2,…, aN và giá trị khoá k;
Bước 4: Nếu aGiưa = k thì thông báo chỉ số Giưa rồi kết
thúc;
sang bước 7;
hạng có giá trị bằng k, rồi kết thúc;
Hãy trình bày thuật toán tìm kiếm nhị phân
bằng sơ đồ khối từ cách trình bày liệt kê?
Trang 20BÀI TẬP VỀ NHÀ
trang 27 – 28 (SGK)