Viết mã giả giống như viết mã: Việc bạn tuân theo tiêu chuẩn nào không quan trọng, miễn là bạn (và những người bạn viết cùng) thực sự tuân theo một số tiêu chuẩn.
Nhưng đối với hồ sơ, đây là tiêu chuẩn bình dị mà tôi sử dụng trong các bài giảng, tài liệu nghiên cứu và cuốn sách sắp tới.
Sử dụng cú pháp mệnh lệnh chuẩn để truy cập luồng điều khiển và bộ nhớ - if, while, for, return, mảng [index], function (argument). Đánh vần "khác nếu".
- Nhưng sử dụng thay vì hoặcfi đ l d( r e c o r d)
record.field
record->field
Sử dụng ký hiệu toán học tiêu chuẩn cho toán học - Viết thay vì , thay vì , thay vì , thay vì , thay vì , thay vì , thay vì , v.v.x yx*y
một mod ba%b
¬ p √s ≤ ts <= t
¬ p!p
pi∞x--√sqrt(x)
πPI
∞MAX_INT
Nhưng sử dụng để gán, để tránh sự cố.x ← y==
Nhưng tránh ký hiệu (và mã giả!) Hoàn toàn nếu tiếng Anh rõ ràng hơn.
- Đối xứng, tránh tiếng Anh nếu ký hiệu rõ ràng hơn!
Giảm thiểu đường cú pháp - Chỉ ra cấu trúc khối bằng cách thụt đầu dòng nhất quán (à la Python). Bỏ qua các từ khóa có đường như "bắt đầu / kết thúc" hoặc "do / od" hoặc "fi". Bỏ qua số dòng. Đừng không nhấn mạnh các từ khóa như "cho" hoặc "trong khi" hoặc "nếu" bằng cách thiết lập chúng trong một khác nhau typeface
hoặc phong cách . Không bao giờ. Chỉ không.
Nhưng các tên và hằng số thuật toán sắp chữ trong \ textc {Small Caps}, tên biến in nghiêng và chuỗi ký tự bằng sans serif.
Nhưng thêm một lượng nhỏ không gian "thở" dọc ( \\[0.5ex]
) giữa các đoạn mã có ý nghĩa.
Đừng chỉ định chi tiết không quan trọng. Nếu việc bạn truy cập các đỉnh không quan trọng, chỉ cần nói "cho tất cả các đỉnh".
Ví dụ, đây là một công thức đệ quy của thuật toán cây bao trùm tối thiểu của Borůvka . Trước đây tôi đã xác định là đồ thị thu được từ bằng cách ký hợp đồng tất cả các cạnh trong tập và Flatten là một chương trình con loại bỏ các vòng lặp và các cạnh song song.G LG/LGL
Tôi sử dụng algorithm
môi trường LaTeX nhẹ của riêng tôi để gõ mã giả. (Đây chỉ là một tabbing
môi trường bên trong \fbox
.) Đây là mã nguồn của tôi cho thuật toán của Borůvka:
\begin{algorithm}
\textul{$\textsc{Borůvka}(G)$:}\+
\\ if $G$ has no edges\+
\\ return $\varnothing$\-
\\[0.5ex]
$L \gets \varnothing$
\\ for each vertex $v$ of $G$\+
\\ add the lightest edge incident to $v$ to $L$\-
\\[0.5ex]
return $L \cup \textsc{Borůvka}(\textsc{Flatten}(G / L))$
\end{algorithm}