BÀI 4. BÀI TOÁN VÀ THUẬT TOÁN
Tóm Tắt
1. Khái niệm bài toán
– Bài toán là một việc nào đó ta muốn máy tính thực hiện. Ví dụ: Giải phương trình bậc 2, quản lý nhân viên…
– Các bài toán được cấu tạo bởi 2 thành phần cơ bản:
- Input: các thông tin đã có.
- Output: Các thông tin cần tìm từ Output.
2. Khái niệm thuật toán
– Thuật toán để giải một bài toán là một dãy hữu hạn các thao tác được sắp xếp theo 1 trình tự xác định sao cho sau khi thực hiện dãy thao tác ấy, từ Input của bài toán, ta nhận ra Output cần tìm.
Bạn đang đọc: Bài 4: Bài toán và thuật toán
– Ví dụ: Tìm giá trị lớn nhất của 1 dãy số nguyên.
=> Ta có 3 bước thực hiện như sau:
* Xác định BT
– Input : Số nguyên dương N và dãy N số nguyên a1, a2, …, aN .
– Output : Giá trị lớn nhất Max của dãy số .
* Ý tưởng
– Khởi tạo giá trị Max = a1 .
– Lần lượt với i từ 2 đến N so sánh ai với Max, nếu ai > Max thì Max = ai .
* Thuật toán:
Cách liệt kê:
- B1: Nhập N và dãy a1,…,aN;
- B2: Max \ ( \ leftarrow \ ) a1, i \ ( \ leftarrow \ ) 2;
- B3: nếu i>N thì đưa giá trị Max rồi kết thúc;
- B4: Nếu ai>Max thì Max \ ( \ leftarrow \ ) ai;
- B5: i \ ( \ leftarrow \ ) i+1 rồi quay lại bước 3;
Cách lập sơ đồ khối:
– Thuật toán còn được miêu tả bằng sơ đồ khối .
– Quy định :
- Hình ô van: các thao tác nhập, xuất dữ liệu.
- Hình thoi: Thao tác so sánh.
- Hình chữ nhật: Các phép toán.
- Mũi tên: trình tự thực hiện các thao tác.
Ví dụ : Mô phỏng việc triển khai thuật toán với N = 8 và dãy số : 5, 1, 4, 7, 6, 3, 15, 11
Ds |
5 |
1 |
4 |
7 |
6 |
3 |
15 |
11 |
i |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Max |
5 |
5 |
5 |
7 |
7 |
7 |
15 |
15 |
=> Các tính chất của thuật toán:
- Tính dừng: Thuật toán phải kết thúc sau một số hữu hạn lần thực hiện các thao tác.
- Tính xác định: Sau một số lần thực hiện thao tác, hoặc là kết thúc hoặc xác định để thực hiện bước tiếp theo.
- Tính đúng đắn: Sau khi thuật toán kết thúc, ta phải nhận được Output cần tìm.
3. Một số ví dụ về thuật toán
Ví dụ 1: Kiểm tra tính nguyên tố của một số nguyên dương.
– Xác định bài toán:
- Input: Số nguyên dương N.
- Output: “N là số nguyên tố” hoặc “N không là số nguyên tố”.
– Ý tưởng: Ta nhớ lại định nghĩa: Một số nguyên dương N là số nguyên tố nếu nó có đúng 2 ước số khác nhau là 1 và chính nó. Do đó ta có:
- Nếu N = 1 thì N không là nguyên tố.
- Nếu 1 < N < 4 thì N là số nguyên tố.
- Nếu N \ ( \ ge \ ) 4 và không có ước số trong phạm vi từ 2 đến phần nguyên căn bậc 2 của N thì N là số nguyên tố.
– Thuật toán :
- B1: Nhập số nguyên dương N.
- B2: Nếu N = 1 thì thông báo N không là số nguyên tố rồi kết thúc.
- B3: Nếu N < 4 thì thông báo N là số nguyên tố rồi kết thúc.
- B4: i \ ( \ leftarrow \ ) 2
- B5: Nếu N>[
\ ( \ sqrt { N } \ )
](*) thì thông báo N là số nguyên tố rồi kết thúc.
- B6: Nếu N chia hết cho i thì thông báo N là số không nguyên tố rồi kết thúc.
- B7: i \ ( \ leftarrow \ ) i + 1 rồi quay lại bước 5.
Ví dụ 2: Bài toán sắp xếp
Cho dãy A gồm N số nguyên a1, a2, a3, …,aN. Cần sắp xếp các số hạng để dãy A trở thành dãy không giảm (tức là số hạng trước không lớn hơn số hạng sau)
– Xác định bài toán:
- Input: Dãy A gồm N số nguyên
- Output: Dãy A được sắp xếp thành dãy không giảm.
Thuật toán sắp xếp bằng tráo đổi (Exchange Sort)
– Ý tưởng: Với 2 số liền kề, nếu số trước lớn hơn số sau ta đổi chổ cho nhau. Việc đó lặp lai, khi không còn sự đổi chổ nào nữa.
– Thuật toán
Cách liệt kê :
- B1: Nhập vào n và dãy số nguyên a1,. .. ,aN;
- B2: M \ ( \ leftarrow \ ) N;
- B3: Nếu M<2 thì in dãy đã sắp xếp rồi kết thúc;
- B4. M \ ( \ leftarrow \ ) M – 1; i \ ( \ leftarrow \ ) 0;
- B5: i \ ( \ leftarrow \ ) i + 1;
- B6: Nếu i > M thì quay lại bước 3;
- B7. Nếu ai > ai+1 thì tráo đổi cho nhau;
- B8: Quay lại bước 5;
Ví dụ 3: Bài toán tìm kiếm
Cho dãy A gồm N số nguyên khác nhau : a1 … aN. và 1 số ít nguyên k. Cần biết có hay không chỉ số i mà ai = k. Nếu có hãy cho biết chỉ số đó .
Thuật toán tìm kiếm tuần tự:
– Xác định bài toán
- Input: dãy A gồm N số nguyên khác nhau: a1…aN và số nguyên k.
- Output: chỉ số i mà ai=k hoặc thông báo không có số hạng nào của dãy A có giá trị là k.
– Ý tưởng : 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 1 số ít 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ứ 2 dãy A không có số hạng nào bằng khoá …
– Thuật toán
Liệt kê :
- B1: Nhập vào N, các số hạng a1,. .. ,aN và khóa k;
- B2: i\ ( \ leftarrow \ )1;
- B3: Nếu ai=k thì thông báo chỉ số i rồi kết thúc;
- B4. i \ ( \ leftarrow \ )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;
Dãy A có N = 7 khóa k = 10
Tìm chỉ số i để ai = k.
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
ai |
7 |
12 |
4 |
6 |
11 |
10 |
8 |
Ghi chú: k = 10 → i = 6
Xem thêm: Phân Vùng Ổ Cứng Win 8, Cách Chia Ổ Đĩa Win 8.1, Cách Chia Lại Phân Vùng Ổ Đĩa Trên Windows 8
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
Source: https://final-blade.com
Category : Kiến thức Internet