Từ điển trong mã giả


8

Cách tốt, phổ biến để diễn đạt từ điển (= maps) trong mã giả là gì? Các cơ sở dữ liệu về cơ bản cho phép lưu trữ các giá trị cho các khóa, lặp lại trên tất cả các cặp khóa / giá trị, kiểm tra để bao gồm một khóa đã cho, v.v. Tôi có một cái gì đó giống như sau (trong trường hợp này là vô nghĩa) Mã Python:

D = {}
D[1] = 2
for key, value in D.items():
    # do something with key and value
if key in D:
    # do something

Và tôi muốn thể hiện nó dưới dạng mã giả trong một ấn phẩm. Suy nghĩ về mặt toán học, từ điển là các chức năng là quan hệ là tập hợp của các cặp, vì vậy hãy viết một cái gì đó như

D ← ∅
D[1] ← 2
for all (k, v) ∈ D

sẽ thực sự có ý nghĩa. Nhưng nó có dễ hiểu không? Và để thử nghiệm, tôi sẽ sử dụng

if k ∈ keys(D)

Hoặc là nó tiết kiệm hơn theo nghĩa đen, vd

D ← empty dictionary
for all key-value pairs (k, v) in D

Có thực hành tốt hiện có / bất kỳ tài liệu tham khảo về cách viết mã giả thường hiểu?


Tôi nghĩ rằng điều này nên được chuyển đến Stackoverflow.
David Ketcheson

Nghĩ về Stack Overflow cũng vậy, nhưng nghi ngờ vì nó không phải là về lập trình thực tế mà chỉ là về cách trình bày nó, điều này chắc chắn có liên quan đến khoa học tính toán. Tuy nhiên, nếu bạn cảm thấy cần phải di chuyển, ai đó có thể làm điều đó cho tôi không? (Bản thân tôi không thể, tôi có thể không?)
Jan Pöschko

Tôi vừa bắt đầu một cuộc thảo luận về meta tại meta.scicomp.stackexchange.com/questions/205/ mẹo
Jan Pöschko

@DavidKetcheson: Trong tương lai, nếu bạn cảm thấy câu hỏi nên được di chuyển, vui lòng gắn cờ để di chuyển. Trong trường hợp này, Jan là đúng; Đây không phải là về lập trình thực tế, vì vậy nó không thuộc chủ đề cho Stack Overflow. Tuy nhiên, nó có thể là về chủ đề cho lập trình viên hoặc cstheory. Tôi phải nói chuyện với các mod cstheory về các chỉnh sửa mà họ muốn, vì một trong những mod của họ đã đề cập rằng câu hỏi sẽ cần phải được điều chỉnh cho trang web của họ.
Geoff Oxberry

Trong khi đó, liên kết này đến một câu hỏi về cstheory trong chuỗi meta (lịch sự của cstheory mod Kaveh) có thể được quan tâm đối với những người quan tâm đến câu hỏi này.
Geoff Oxberry

Câu trả lời:


7

Có vẻ như bạn đã sử dụng một số khái niệm từ Corwin, Leiserson, Rivest và Stein , mà tôi luôn xem là văn bản giới thiệu "mặc định" cho các thuật toán, khi viết mã giả của bạn. Tôi không nghĩ có thêm tài liệu tham khảo tiêu chuẩn nào cho mã giả.

Tuy nhiên, tôi sẽ lập luận rằng những gì tạo ra một mã giả tốt là phân tách vấn đề thành các hàm toán học và logic đại diện của nó. Những điều kiện phải là đúng để thực thi mã? Những nhánh nào tồn tại? Dữ liệu nào thực sự cần thiết trong việc xác định hành vi?

Ngoài ra, mục tiêu của mã giả tốt là nói cho người lập trình biết những gì cần phải thực hiện và không nhất thiết phải thực hiện nó như thế nào. Ví dụ, bạn có thể muốn làm phẳng một cái gì đó như các vòng lặp lồng nhau thành một câu lệnh:

For all elements x in 2-D array A
    x ← max(0, x)

có lẽ sẽ tốt hơn nói

For all i in 1:m
   For all j in 1:n
       A(i,j) ← max(0, A(i,j)

vì cái sau đã bắt đầu đưa ra một số giả định về ngôn ngữ đang được sử dụng (hàng chính so với cột chính, v.v.).


4

Tôi nghĩ rằng nó phụ thuộc vào bối cảnh của ấn phẩm, đối tượng dự định và mức độ "phổ biến" mà bạn cần "thường hiểu". Tôi nghĩ rằng lựa chọn cuối cùng của bạn có lẽ là an toàn nhất, nghĩa là bằng chữ / rõ ràng và càng gần với "tiếng Anh đơn giản" càng tốt. Nhưng nếu đối tượng dự định của bạn có sự quen thuộc với lý thuyết tập hợp, hoặc Python, hoặc Java, hoặc C #, hoặc JavaScript, v.v., thì một ký hiệu tương tự như một trong số đó có thể tốt hơn.

Tôi đưa ra gợi ý này khi một người thực hiện các cuộc phỏng vấn việc làm mà ứng viên dự kiến ​​sẽ viết mã hoặc mã giả. Hầu hết các ứng cử viên (cả tốt và xấu) có xu hướng trôi dạt về ngôn ngữ mà họ quen thuộc nhất để làm cho mã giả của họ dễ hiểu nhất có thể đối với họ và với tôi. Những người quen thuộc với Java viết Map<K,V>. Những người quen thuộc với Python viết các bộ dữ liệu hoặc một từ điển như bạn đã làm trong đoạn mã đầu tiên của mình. Những người quen thuộc với C viết mảng. Những người có ít nền tảng lập trình có xu hướng viết mã giả trông giống tiếng Anh đơn giản hơn - nhưng dù sao thì nó thường trông giống như Python. :-)

Rất tiếc, tôi không thể trả lời câu hỏi cuối cùng của bạn - Tôi không quen thuộc với bất kỳ tham chiếu hoặc đề xuất chung nào để viết mã giả.

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.