Có máy cách để mô tả thuật toán

Ví dụ, có phương trình bậc nhất có dạng: ax + b = 0, làm thế nào để giải phương trình này? Không thể thế từng giá trị x vào để tìm nghiệm. Cần phải có cách giải quyết khoa học hơn.

Đó là, ta có: phương trình bậc nhất: ax + b = 0, với a, b là các số thực. Vậy, đầu vào: a, b thuộc R, đầu ra: nghiệm phương trình ax + b = 0. Xét các trường hợp:

Nếu a = 0:

    • b = 0 thì phương trình có nghiệm bất kì.
    • b ≠ 0 thì phương trình vô nghiệm.

Nếu a ≠ 0: Phương trình có nghiệm duy nhất x = -b/a

Các bước xét nghiệm của phương trình như thế là ví dụ của thuật toán.

Thuật toán [algorithm] là tập hợp hữu hạn các thao tác được định nghĩa rõ ràng nhằm giải quyết một bài toán cụ thể nào đó.

Thuật toán phải đảm bảo 5 tính chất sau:

Các tính chất của thuật toán

Tính chính xác: quá trình tính toán hay các thao tác máy tính thực hiện là chính xác.

Tính rõ ràng: các câu lệnh minh bạch được sắp xếp theo thứ tự nhất định.

Tính khách quan: được viết bởi nhiều người trên máy tính nhưng kết quả phải như nhau.

Tính phổ dụng: có thể áp dụng cho một lớp các bài toán có đầu vào tương tự nhau.

Tính kết thúc: hữu hạn các bước tính toán.

Sử dụng ngôn ngữ giao tiếp hàng ngày để diễn đạt các bước thực hiện của thuật toán.

Ví dụ: Sử dụng ngôn ngữ tự nhiên để biểu diễn thuật toán tính tổng hai số nguyên a, b.

– Đầu vào: 2 số nguyên a, b

– Đẩu ra: Tổng của 2 số nguyên a, b.

– Thuật toán:

    • Bước 1: Nhập giá trị của a, b.
    • Bước 2: Tính Tổng = a + b.
    • Bước 3: Thông báo kết quả Tổng
    • Bước 4: Kết thúc.

Sinh viên thử dùng ngôn ngữ tự nhiên để biểu diễn thuật toán giải phương trình bậc nhất ax+b=0.

Lưu đồ được sử dụng để trình bày các bước giải quyết vấn đề qua các hình khối khác nhau.

Một số qui ước ký hiệu lưu đồ:

Quy ước ký hiệu lưu đồ

Chọn lựa điều kiện: sử dụng hình thoi, bên trong chứa biểu thức điều kiện. Sử dụng thêm các nhãn: Đ/Đúng,Y/Yes hoặc S/Sai,N/No.

Chọn lựa điều kiện của lưu đồ

Xử lý công việc: sử dụng hình chữ nhật, bên trong chứa nội dung xử lý.

Xử lý công việc của lưu đồ

Quá trình thực hiện các thao tác: dùng mũi tên để nối các thao tác.

Quá trình thực hiện của lưu đồ

Ví dụ 1: Sử dụng lưu đồ để biểu diễn thuật toán tính tổng hai số nguyên a, b.

Lưu đồ biểu diễn thuật toán cộng 2 số

Ví dụ 2: Sử dụng lưu đồ để biểu diễn thuật toán giải phương trình bậc nhất ax + b = 0 [a, b thuộc R]

Lưu đồ biểu diễn thuật toán giải phương trình bậc nhất

Mã giả là một ngôn ngữ hình thức giúp các lập trình viên phát triển thuật toán. Mã giả thường vay mượn cú pháp của một ngôn ngữ nào đó để biểu diễn thuật toán.

Chương trình mã giả thì không thực thi được trên máy tính. Chúng chỉ giúp bạn phát thảo ra một thuật toán và biểu diễn thuật toán đó một cách dễ hiểu trước khi viết nó bằng một ngôn ngữ lập trình nào đó.

Ví dụ: Sử dụng mã giả để biểu diễn thuật toán giải phương trình bậc nhất ax + b = 0 [a, b thuộc R].

Đầu vào: 2 số thực a, b Đầu ra: Nghiệm của phương trình bậc nhất ax + b = 0 If a = 0 Then Begin If b = 0 Then Xuất “Phương trình vô số nghiệm” Else Xuất “Phương trình vô nghiệm” End Else Xuất “Phương trình có nghiệm x = -b/a”

Vậy là thông thường, chúng ta có 3 cách biểu diễn thuật toán. Đây là những cách mà các bạn nên sử dụng để phát thảo ra một thuật toán khi trong đầu lóe lên những ý tưởng hay ho nhé!

Nên nhớ: Các phương pháp biểu diễn thuật toán chỉ tập trung thể hiện ý tưởng thuật toán, không quan trọng quá về cú pháp.

Thuật toán là một dãy hữu hạn các thao tác được sắp xếp theo một 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 được Output cần tìm.

1. Khái niệm bài toán

Bài toán là một việc nào đó mà con người muốn máy tính thực hiện.

- Các yếu tố của một bài toán:

   + Input: Thông tin đã biết, thông tin đưa vào máy tính.

   + Output: Thông tin cần tìm, thông tin lấy ra từ máy tính.

- Ví dụ: Bài toán tìm ước chung lớn nhất của 2 số nguyên dương, khi đó:

   + Input: hai số nguyên dương A, B.

   + Output: ước chung lớn nhất của A và B

2. Khái niệm thuật toán

a] Khái niệm

Thuật toán là 1 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 được Output cần tìm.

b] Biểu diễn thuật toán

- Sử dụng cách liệt kê: nêu ra tuần tự các thao tác cần tiến hành.

- Sử dụng sơ đồ khối để mô tả thuật toán. 

c] 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 1 số hữu hạn lần thực hiện các thao tác.

- Tính xác định: sau khi thực hiện 1 thao tác thì hoặc là thuật toán kết thúc hoặc là có đúng 1 thao tác xác định để được thực hiện 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 1 số nguyên dương

• Xác định bài toán

- Input: N là một số nguyên dương;

- Output: ″N là số nguyên tố″ hoặc ″N không là số nguyên tố″.

• Ý tưởng:

- Định nghĩa: ″Một số nguyên dương N là số nguyên tố nếu nó chỉ có đúng hai ước là 1 và N″

- Nếu N = 1 thì N không là số nguyên tố.

- Nếu 1 < N < 4 thì N là số nguyên tố.

- N ≥ 4: Tìm ước i đầu tiên > 1 của N.

+ Nếu i < N thì N không là số nguyên tố [vì N có ít nhất 3 ước 1, i, N].

+ Nếu i = N thì N là số nguyên tố.

• Xây dựng thuật toán

a] Cách liệt kê

   - Bước 1: Nhập số nguyên dương N;

   - Bước 2: Nếu N=1 thì thông báo ″N không là số nguyên tố″, kết thúc;

   - Bước 3: Nếu N= 4 và không có ước 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ố.

Ví dụ 2: Sắp xếp bằng cách tráo đổi

• Xác định bài toán

   - Input: Dãy A gồm N số nguyên a1, a2,…, an

   - Output: Dãy A được sắp xếp thành dãy không giảm.

• Ý tưởng

   - Với mỗi cặp số hạng đứng liền kề trong dãy, nếu số trước lớn hơn số sau ta đổi chỗ chúng cho nhau. [Các số lớn sẽ được đẩy dần về vị trí xác định cuối dãy].

   - Việc này lặp lại nhiều lượt, mỗi lượt tiến hành nhiều lần so sánh cho đến khi không có sự đổi chỗ nào xảy ra nữa.

• Xây dựng thuật toán

a] Cách liệt kê

   - Bước 1: Nhập N, các số hạng a1, a2,…, an;

   - Bước 2: M ← N;

   - Bước 3: Nếu M < 2 thì đưa ra dãy A đã được sắp xếp, rồi kết thúc;

   - Bước 4: M ← M – 1, i ← 0;

   - Bước 5: i ← i + 1;

   - Bước 6: Nếu i > M thì quay lại bước 3;

   - Bước 7: Nếu ai > ai+1 thì tráo đổi ai và ai+1 cho nhau;

   - Bước 8: Quay lại bước 5;

b] Sơ đồ khối

Ví dụ 3: Bài toán tìm kiếm

• Xác định bài toán

- Input : Dãy A gồm N số nguyên khác nhau a1, a2,…, an và một số nguyên k [khóa]

   Ví dụ : A gồm các số nguyên ″ 5 7 1 4 2 9 8 11 25 51″ và k = 2 [k = 6].

- Output: Vị trí i mà ai = k hoặc thông báo không tìm thấy k trong dãy. Vị trí của 2 trong dãy là 5 [không tìm thấy 6]

• Ý tưởng

Tìm kiếm tuần tự được thực hiện một cách tự nhiên: Lần lượt đi từ số hạng thứ nhất, ta so sánh giá trị số hạng đang xét với khóa cho đến khi gặp một số hạng bằng khóa hoặc dãy đã được xét hết mà không tìm thấy giá trị của khóa trên dãy.

• Xây dựng thuật toán

a] Cách liệt kê

   - Bước 1: Nhập N, các số hạng a1, a2,…, aN và giá trị khoá k;

   - Bước 2: i ← 1;

   - Bước 3: Nếu ai = 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;

b] Sơ đồ khối

Ví dụ 4: 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 a1, a2,…, an và một số nguyên k.

Ví dụ: Dãy A gồm các số nguyên 2 4 5 6 9 21 22 30 31 33 và k = 21 [k = 25]

- Output : Vị trí i mà ai = k hoặc thông báo không tìm thấy k trong dãy. Vị trí của 21 trong dãy là 6 [không tìm thấy 25]

• Ý tưởng

Sử dụng tính chất dãy A đã sắp xếp tăng, ta tìm cách thu hẹp nhanh vùng tìm kiếm bằng cách so sánh k với số hạng ở giữa phạm vi tìm kiếm [agiữa], khi đó chỉ xảy ra một trong ba trường hợp:

   - Nếu agiữa= k thì tìm được chỉ số, kết thúc;

   - Nếu agiữa > k thì việc tìm kiếm thu hẹp chỉ xét từ adầu [phạm vi] → agiữa - 1;

   - Nếu agiữa < k việc tìm kiếm thu hẹp chỉ xét từ agiữa + 1→acuối [phạm vi].

Quá trình trên được lặp lại cho đến khi tìm thấy khóa k trên dãy A hoặc phạm vi tìm kiếm bằng rỗng.

• Xây dựng thuật toán

a] Cách liệt kê

   - Bước 1: Nhập N, các số hạng a1, a2,…, aN và giá trị khoá k;

   - Bước 2: Đầu ←1; Cuối ←N;

   - Bước 3: Giữa←[[Đầu+Cuối]/2];

   - Bước 4: Nếu agiữa = k thì thông báo chỉ số Giữa, rồi kết thúc;

   - Bước 5: Nếu agiữa > k thì đặt Cuối = Giữa - 1 rồi chuyển sang bước 7;

   - Bước 6: Đầu ←Giữa + 1;

   - Bước 7: Nếu Đầu > Cuối thì thông báo không tìm thấy khóa k trên dãy, rồi kết thúc;

   - Bước 8: Quay lại bước 3.

b] Sơ đồ khối

Loigiaihay.com

Video liên quan

Chủ Đề