Tại sao không thể đánh giá thuật toán qua chương trình cài đặt thuật toán?
Biết cách phân tích, đánh giá độ phức tạp thuật toán là kĩ năng quan trọng của người thiết kế thuật toán và chương trình. Các quy tắc đơn giản tính độ phức tạp thời gian mang lại cho em điều gì khi đánh giá thuật toán?
Đánh giá được mức đơn giản của thuật toán, từ đó tìm ra được cách giải nhanh nhất.
Thảo luận về các tiêu chí đánh giá tính hiệu quả của thuật toán hay chương trình giải một bài toán.
1. Tiêu chí quan trọng nhất là thời gian chạy chương trình phải nhanh, không cần quan tâm đến không gian bộ nhớ sử dụng của chương trình.
2. Tiêu chí tiết kiệm bộ nhớ là quan trọng nhất, sau đó mới đến thời gian chạy chương trình.
3. Các tiêu chí 1 và 2 không quan trọng mà quan trọng là chương trình được viết một cách đơn giản, rõ ràng, dễ hiểu và áp dụng.
Các tiêu chí đánh giá tính hiệu quả của thuật toán hay chương trình giải một bài toán có thể khác nhau tùy vào mục đích và yêu cầu của dự án hoặc ứng dụng cụ thể. Dưới đây là một số thảo luận về các tiêu chí được đưa ra trong câu hỏi:
1. Tiêu chí thời gian chạy (runtime): Thời gian chạy của chương trình là một yếu tố quan trọng trong đánh giá tính hiệu quả của thuật toán hay chương trình. Nếu chương trình chạy nhanh, đáp ứng được yêu cầu về thời gian đối với ứng dụng cụ thể, thì đây là một tiêu chí quan trọng để đánh giá tính hiệu quả của chương trình.
2. Tiêu chí tiết kiệm bộ nhớ: Việc sử dụng bộ nhớ của chương trình cũng là một yếu tố quan trọng trong đánh giá tính hiệu quả của chương trình, đặc biệt là đối với các ứng dụng có yêu cầu về tài nguyên hạn chế. Nếu chương trình sử dụng ít bộ nhớ và đáp ứng được yêu cầu về tài nguyên, thì tiêu chí này cũng được coi là quan trọng.
3. Tiêu chí đơn giản, rõ ràng, dễ hiểu: Độ đơn giản, rõ ràng và dễ hiểu của chương trình cũng là một yếu tố quan trọng trong đánh giá tính hiệu quả của chương trình, đặc biệt là trong việc duy trì và phát triển sau này. Nếu chương trình được viết một cách đơn giản, rõ ràng và dễ hiểu, thì nó sẽ dễ dàng trong việc duy trì, nâng cấp, và áp dụng cho các tình huống khác nhau.
Theo em, thuật toán sắp xếp nổi bọt và thuật toán sắp xếp chèn, thuật toán nào đơn giản và để cài đặt hơn?
Cả hai thuật toán sắp xếp nổi bọt và sắp xếp chèn đều đơn giản và dễ cài đặt. Tuy nhiên, thuật toán sắp xếp chèn có thể được coi là đơn giản hơn vì nó sử dụng ít phép so sánh hơn so với thuật toán sắp xếp nổi bọt.
Thuật toán sắp xếp chèn thực hiện việc chèn một phần tử vào một mảng đã được sắp xếp trước đó. Với mỗi phần tử trong mảng, nó sẽ so sánh nó với các phần tử đã được sắp xếp trước đó, và chèn phần tử đó vào vị trí thích hợp trong mảng. Điều này đòi hỏi ít phép so sánh hơn so với thuật toán sắp xếp nổi bọt, do đó thuật toán sắp xếp chèn có hiệu suất tốt hơn khi sắp xếp một mảng lớn.
Trong khi đó, thuật toán sắp xếp nổi bọt cần thực hiện nhiều phép so sánh hơn và có thể không hiệu quả khi sắp xếp mảng lớn. Nó hoạt động bằng cách so sánh các cặp phần tử liên tiếp trong mảng và đổi chỗ chúng nếu chúng không được sắp xếp đúng thứ tự. Vì vậy, trong nhiều trường hợp, thuật toán sắp xếp chèn được ưa chuộng hơn do hiệu quả và tính đơn giản của nó.
Nếu tạo hai chương trình Scratch để thể hiện thuật toán của kịch bản ở Hình 1 và thể hiện thuật toán đó sau khi thay đổi thứ tự các bước, thì hai chương trình nhận được đề khác nhau không?
- Thay đổi thứ tự các bước trong thuật toán mô tả kịch bản ở Hình 1 để tạo ra một thuật toán khác.
Bước 1. Đặt nhân vật Mèo đứng bên trái căn phòng
Bước 2. Nhân vật Mèo kêu: “Lò sưởi ở đâu nhỉ?”
Bước 3. Nhân vật Mèo chạy một đoạn (10 bước)
Bước 4. Nhân vật Mèo kêu: “Không có cái nào!”
Bước 5. Nhân vật Mèo kêu: “Grừ, Grừ… lạnh quá!”
Phát biểu nào sau đây là sai?
A.Với mọi bài toán ta có thể viết được ngay chương trình mà không nhất thiết phải thực hiện theo ba bước: Xác định thuật toán; Mô tả thuật toán; Viết chương trình.
B.Trong tin học ta có thể hiểu bài toán là một công việc hay một nhiệm vụ nào đó mà ta muốn máy tính thực hiện.
C.Xác định bài toán là chỉ rõ các điều kiện cho trước và kết quả cần thu được.
D.Một dãy hữu hạn các thao tác nếu thực hiện rất nhiều lần nhưng không thu được kết quả cần thiết từ những điều kiện cho trước thì không được xem là một thuật toán.
Dựa vào dãy số gồm n số em hãy chỉ ra KẾT QUẢ CẦN ĐẠT ĐƯỢC của bài toán : Tính tổng của các phần tử lớn hơn 0 trong dãy n số cho trước
A.Số thứ tự của các số trong dãy gồm n số
B.Vị trí của số thứ n
C.Dãy gồm n số
D.Tổng các phần tử lớn hơn 0
Hãy tìm hiểu thuật toán sau đây, và cho biết khi thực hiện thuật toán, máy tính sẽ thực hiện bao nhiêu vòng lặp? Khi kết thúc, giá trị của S bằng bao nhiêu? Viết chương trình Pascal thể hiện các thuật toán đó?
a,Thuật toán 1
Bước 1: S:=10, X:=0.5.
Bước 2: Nếu S<=6.2, chuyển tới bước 4.
Bước 3: S:=S – X và quay lại bước 2.
Bước 4: Thông báo S và kết thúc thuật toán.
b,Thuật toán 2
B1: s:=10, n:=0
B2: nếu S >=10, chuyển tới bước 4
B3: n:=+3, s:= s-n và quay lại bước 2
B4: Thông báo S và KTTT
a. Thuật toán 1 :
Máy tính sẽ thực hiện 10 vòng lặp , khi kết thúc thuật toán giá trị của S = 5.0
Đoạn chương trình Pascal tương ứng:
Quảng cáo
S := 10; x := 0.5;
While S > 5.2 do
S := S – x;
Writeln(S);
b. Thuật toán 2 :
Máy tính sẽ không thực hiện vòng lặp nào do điều kiện không thỏa mãn, khi kết thúc thuật toán giá trị của S = 10
Đoạn chương trình Pascal tương ứng:
S := 10; n := 0;
While S < 10 do
Begin
n := n + 3;
S := S – n
End;
Writeln(S);
Hãy tìm hiểu các thuật toán sau đây và cho biết khi thực hiện thuật toán, máy tính sẽ thực hiện bao nhiêu vòng lặp? Khi kết thúc, giá trị của S bằng bao nhiêu? Viết chương trình Pascal thể hiện các thuật toán đó
b) Thuật toán 2
Bước 1. S ←10, n ← 0.
Bước 2. Nếu S ≥ 10, chuyển tới bước 4.
Bước 3. n ← n+3, S ← S-n và quay lại bước 2.
Bước 4. Thông báo S và kết thúc thuật toán.
May tính sẽ thực hiện 4 vòng lặp
Kết quả là 12
Trong các bài trước em đã học cách thiết kế thuật toán cho một số bài toán như bài toán tìm kiếm, bài toán sắp xếp và thiết lập chương trình thực hiện thuật toán đó. Một bài toán có nhiều thuật toán khác nhau và do đó có thể có nhiều chương trình khác nhau cùng giải quyết một bài toán. Hãy thảo luận và trả lời các câu hỏi sau:
Làm thế nào để biết trong các thuật toán giải cùng một bài toán thì thuật toán nào là tốt nhất?
Có những tiêu chí nào để đánh giá tính “tối ưu” của một thuật toán?
THAM KHẢO!
Dựa vào hai yếu tố là thời gian thực hiện thuật toán (còn gọi là độ phức tạp thuật toán) và dung lượng bộ nhớ cần thiết để lưu trữ dữ liệu.
Thuật toán tối ưu là sử dụng ít thời gian, ít bộ nhớ, ít phép toán, giải bài toán trên máy tính thường được tiến hành qua 5 bước xác định bài toán, lựa chọn hoặc thiết kế thuật toán, viết chương trình, hiệu chỉnh và viết tài liệu.
Dựa vào hai yếu tố là thời gian thực hiện thuật toán (còn gọi là độ phức tạp thuật toán) và dung lượng bộ nhớ cần thiết để lưu trữ dữ liệu.
Thuật toán tối ưu là sử dụng ít thời gian, ít bộ nhớ, ít phép toán, giải bài toán trên máy tính thường được tiến hành qua 5 bước xác định bài toán, lựa chọn hoặc thiết kế thuật toán, viết chương trình, hiệu chỉnh và viết tài liệu.
Bài tập 5. Hãy tìm hiểu thuật toán sau đây và cho biết khi thực hiện thuật toán máy tính sẽ thực hiện bao nhiêu vòng lặp ? Khi kết thúc, giá trị của S bằng bao nhiêu ? Viết chương trình pascal thể hiện thuật toán đó:
Bước 1: S:=0; i:=1;
Bước 2: Nếu S >= 5 thì chuyển tới bước 4
Bước 3: S:=S + i và quay lại bước 2
Bước 4: Thông báo S và kết thúc thuật toán.