Sự khác biệt giữa mã giả và thuật toán?


17

Về mặt kỹ thuật, có sự khác biệt giữa hai từ này hay chúng ta có thể sử dụng chúng thay thế cho nhau? Cả hai ít nhiều mô tả trình tự logic của các bước tiếp theo trong việc giải quyết vấn đề. phải không Vậy tại sao chúng ta thực sự sử dụng hai từ như vậy nếu chúng có nghĩa là nói cùng?

Hoặc, trong trường hợp nếu chúng không đồng nghĩa với các từ, thì điều gì phân biệt chúng? Trong bối cảnh nào chúng ta phải sử dụng mã giả từ so với thuật toán từ?


4
Một thuật toán là quicksort. Mã giả là "Làm cho tôi một chiếc bánh sandwich, sau đó một khi nó được tạo ra, hãy mang nó đến cho tôi."
Neil

Xem câu trả lời này cho một câu hỏi khác. Ở đó tôi đã mô tả một mối quan hệ giữa một thuật toán và mã giả.
Goran Jovic

3
Phiên bản ngắn: 'Mã giả là một trong những cách để thể hiện thuật toán'
Goran Jovic

3
@Neil hoặc thậm chí SUDO làm cho tôi một chiếc bánh sandwich xkcd.com/149
StuperUser

Câu trả lời:


37

Định nghĩa của Wikipedia về một thuật toán:

Trong toán học và khoa học máy tính, thuật toán là một phương pháp hiệu quả được thể hiện dưới dạng một danh sách hữu hạn các hướng dẫn được xác định rõ để tính toán một hàm. Các thuật toán được sử dụng để tính toán, xử lý dữ liệu và suy luận tự động.

Các thuật toán có thể được mô tả theo nhiều cách khác nhau, từ các công thức toán học thuần túy đến các biểu đồ phức tạp, nhiều lần hơn không, không có mã giả.

Mã giả mô tả cách bạn sẽ thực hiện một thuật toán mà không đi vào chi tiết cú pháp.

Vì vậy, không, chúng không thực sự đồng nghĩa.


8

Một thuật toán là một ý tưởng về cách viết mã. Mã giả là văn bản bạn cần để truyền đạt ý tưởng đó.


Đẹp! Ngắn và thẳng. Nhưng tôi muốn nói "một văn bản bằng văn bản" hơn là "văn bản viết". Bạn nghĩ sao?
Luciano

6

"Pseudocode" là "thuật toán" là "tiếng Anh" là "trò đùa gõ cửa".

Một thuật toán là một cấu trúc chính thức cho một cái gì đó có thể được thể hiện bằng mã giả hoặc trong mã thực tế .

Trò đùa gõ cửa là một cấu trúc chính thức cho một cái gì đó có thể được thể hiện bằng tiếng Anh, hoặc bằng một số ngôn ngữ khác. (Các nền văn hóa khác có làm trò đùa gõ cửa không? Tôi thậm chí không biết.)


Tôi không nghĩ vậy. Ít nhất là không có gì tương tự trong tiếng Bồ Đào Nha về trò chơi gõ cửa đó. Vì vậy, tôi muốn nói rằng cũng không có các ngôn ngữ Lãng mạn khác như Tây Ban Nha và Ý. Tôi sẽ không bao gồm tiếng Pháp vì nó đã có một mối tình lâu dài với tiếng Anh ở các đảo của Anh từ nhiều thế kỷ trước và tôi không biết các ngôn ngữ Lãng mạn khác như tiếng Rumani và các ngôn ngữ khác.
Luciano

3

Chỉ có một thuật toán quicksort, đó là loại điều sẽ tồn tại trong thế giới ý tưởng thuần túy của Plato. Có thể có bất kỳ số lượng mô tả mã giả khác nhau về nó. Tôi nghĩ rằng tôi sẽ định nghĩa mã giả là văn bản trông gần giống mã máy tính và có thể được dịch bởi một lập trình viên có kinh nghiệm sang mã máy tính thực tế mà không cần phải thực hiện bất kỳ bước nhảy sáng tạo nào.

Vì vậy, không, tôi sẽ không sử dụng các thuật ngữ thay thế cho nhau.


2

Thuật toán là một cách tiếp cận logic có hệ thống được sử dụng để giải quyết các vấn đề trong máy tính trong khi Pseudocode là câu lệnh bằng tiếng Anh đơn giản có thể được dịch sau này sang ngôn ngữ lập trình (chương trình).


2

Một thuật toán là ngữ nghĩa trong khi mã giả chỉ là một cú pháp của giao tiếp về việc giải quyết vấn đề. Điều này có nghĩa là thuật toán là một cách thực tế giải quyết vấn đề trong khi mã giả chỉ là một cách thể hiện theo cách đó.

Một thuật toán có cùng ý nghĩa (ngữ nghĩa) nếu bạn diễn đạt nó theo bất kỳ cách nào (cú pháp) có thể là ngôn ngữ lập trình C, mã giả hoặc ngôn ngữ tiếng Anh.


1

Mã giả theo tôi hiểu là một trung gian giữa một thuật toán và chương trình được thực hiện. Bạn có thể căn cứ mã giả của mình vào một thuật toán. Điều này có chứa các bước chuyển nhượng để thực hiện.

Thuật toán mặt khác ngụ ý logic tổng thể. trong các bước tiếp theo để giải quyết một vấn đề. nếu nó được biểu diễn bằng sơ đồ thì nó được gọi là biểu đồ dòng chảy.

Một số người có thể coi điều này là mã giả là một thuật ngữ phổ biến trong phát triển phần mềm kinh doanh nơi các nhà phát triển đối tượng Business phía khách hàng viết mã giả dựa trên các yêu cầu. Điều này được trao cho một lập trình viên / nhà phát triển để thực hiện.

Thuật toán bạn sẽ thấy phổ biến hơn trong thuật ngữ lập trình như lập trình hệ thống, tìm kiếm, sắp xếp, về cơ bản bất kỳ nơi nào có logic phức tạp sẽ được thực hiện.


1

Mặc dù mã giả có vẻ gần với mã hơn thuật toán, nhưng trên thực tế, mã giả ít trang trọng hơn và nó là một mô tả cấp cao hơn. Chẳng hạn, bạn có thể mô tả một máy tính chơi cờ như một mã giả như thế này:

  • đặt các mảnh ban đầu trong vị trí của họ
  • bảng hiển thị
  • trong khi trò chơi chưa kết thúc
    • di chuyển và hiển thị bảng
    • nhắc nhở người dùng di chuyển
    • làm cho người dùng di chuyển

Vâng, đây là mã giả, nó hữu ích như một điểm khởi đầu tốt nhưng làm nổi bật lên rất nhiều chi tiết. Nó không giải thích cho những khó khăn và biến thể thực hiện, nhưng lợi ích lớn nhất là nó cho phép bạn khái niệm hóa toàn bộ tình huống mà không phải giải quyết tất cả các chi tiết.

Bạn có thể sửa đổi nó, thêm một cấp độ như vậy:

  • đặt các mảnh ban đầu trong vị trí của họ
  • bảng hiển thị
  • trong khi hội đồng quản trị không phải là người chơi hoặc vẽ
    • lập danh sách các động thái hợp pháp của người da trắng
    • chọn tốt nhất theo một số tiêu chí
    • làm cho di chuyển và tính toán bảng kết quả
    • xem nếu checkmate hoặc bốc thăm đã xảy ra
    • bảng hiển thị
    • lập danh sách các động thái hợp pháp của người da đen
    • nhắc nhở người dùng di chuyển hợp pháp cho đầu vào
    • làm cho di chuyển và tính toán bảng kết quả
    • xem nếu checkmate hoặc bốc thăm đã xảy ra
    • bảng hiển thị

Bây giờ bạn có thể viết mã giả cho từng bước chính như "lập danh sách các động thái hợp pháp của người da đen", như vậy:

  • cho mỗi mảnh màu đen
    • cho loại mảnh ở một vị trí nhất định
      • lập danh sách các địa điểm có thể tiếp theo

Bây giờ bạn có thể thấy sức mạnh của mã giả thực sự nằm ở khả năng hiển thị toàn bộ tình huống trong một lần và sau đó cho phép bạn giải quyết chi tiết từng mảnh một. Điểm yếu là bất kỳ bước nào không phải là một bước đơn giản xác định.

Một thuật toán thường chọn một trong các bước này và chi tiết các cấu trúc dữ liệu khác nhau bằng ngôn ngữ tượng trưng để bạn có thể đáp ứng mục tiêu của bước một cách hiệu quả.

Ví dụ, get_legal_moves(board, color)xứng đáng với một thiết kế thuật toán:

get_legal_moves(board, color):
    for i,j in board_dimensions
        if piece_at i,j is of color
            if piece type is KNIGHT
                add the following to the next moves list:
                    location i+1 j+2, i-1 j+2... etc
            if piece type is rook
                add locations:....

Bạn có thể thấy rằng thuật toán phải rất chính xác để có ích.

Nó đảm bảo một số điều: các mục tiêu sẽ được đáp ứng mà không có lỗi, trước hết và quan trọng nhất. Các bước rất chi tiết và có thể thực hiện được theo cách cơ giới hóa và các bước đó đủ nhỏ để bạn có thể sắp xếp lại chúng để tăng hiệu quả (tốc độ) mà bạn hoàn thành nhiệm vụ.


Điều này dường như là phân tách thuật toán từ trên xuống được thể hiện bằng mã giả ở mỗi bước.
Nathan Tuggy

0

Theo kinh nghiệm của tôi, Mã giả luôn được viết bởi personell (những người sở hữu quy trình) như một cách để thể hiện các quy tắc kinh doanh áp dụng cho một quy trình, mô-đun hoặc hệ thống phụ.

Thuật toán là một tập hợp các câu lệnh logic khác nhau để giải quyết một nhiệm vụ cụ thể nhất có thể.


0

Thuật toán là một cái gì đó được thể hiện bằng thuật ngữ toán học. Nó bao gồm, phân tích, triển khai cơ bản (thậm chí được thể hiện bằng mã giả), các cân nhắc phức tạp (phân tích tốt nhất, trung bình và xấu nhất, v.v.).

Mã giả là một đại diện dễ đọc của con người của một chương trình. Thậm chí điều đó có thể được sử dụng để mô tả một thuật toán.


-2

Pseudo có nghĩa là mã đơn & mã có thể là một hướng dẫn..trong đó Mã giả có nghĩa là một câu lệnh được sử dụng để hiểu ngôn ngữ lập trình máy tính một cách dễ dàng ... nó giúp trong việc phân tích mã lập trình ... . trong đó thuật toán là một bước logic hữu hạn của các hướng dẫn để giải quyết vấn đề.


1
điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong 10 câu trả lời trước
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.