我需要将一些python和java例程转换为我的硕士论文的伪代码,但却难以提出以下语法/风格:
你如何编写伪代码?有没有标准建议?
答案 0 :(得分:18)
我建议查看“算法简介”一书(Cormen,Leiserson和Rivest)。我总是发现其算法的伪代码描述非常清晰和一致。
一个例子:
DIJKSTRA(G, w, s)
1 INITIALIZE-SINGLE-SOURCE(G, s)
2 S ← Ø
3 Q ← V[G]
4 while Q ≠ Ø
5 do u ← EXTRACT-MIN(Q)
6 S ← S ∪{u}
7 for each vertex v ∈ Adj[u]
8 do RELAX(u, v, w)
答案 1 :(得分:7)
回答我自己的问题,我只想提请注意以下关于在LaTeX中排版伪代码的网页:http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms。他们描述了许多不同的风格,列出了优点和缺点。很可能,碰巧存在两个用于以Cormen的“Introductin to Algorithms”中使用的方式编写伪代码的样式表,如上所述:newalg和clrscode。后者是科尔曼自己写的。
答案 2 :(得分:5)
我建议你看看Fortress Programming Language。
这是实际的编程语言,而不是伪代码,但它被设计为尽可能接近可执行的伪代码。特别是,为了设计语法,他们阅读并分析了数百个的CS和数学论文,课程,书籍和期刊,以找到伪代码和其他计算/数学符号的常用用法模式。
您可以通过查看Fortress源代码并抽象出您不需要的内容来利用所有研究,因为您的目标受众是人类,而Fortress是编译器。
以下是从NAS (NASA Advanced Supercomputing) Conjugate Gradient Parallel Benchmark运行Fortress代码的实际示例。为了获得有趣的体验,请将基准测试的规范与Fortress中的实现进行比较,并注意几乎是1:1的对应关系。还要比较其他几种语言(如C或Fortran)的实现,并注意它们与规范完全无关(并且通常比规范长一个数量级)。
我必须强调:这不是伪代码,这是实际工作的Fortress代码!Fortress Code Example http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png
编辑:上面代码示例链接已死。可以在此处找到类似的示例:https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/
答案 3 :(得分:4)
如果代码是程序性的,那么普通的伪代码可能很容易(维基百科有一些例子)。
面向对象的伪代码可能更难。考虑:
答案 4 :(得分:3)
我不明白你对“不太接近某种具体编程语言”的要求。
Python通常被认为是编写伪代码的理想选择。也许稍微简化的python版本对你有用。
答案 5 :(得分:2)
Pascal在数学和技术领域一直是传统上与伪代码最相似的。我不知道为什么,它总是如此。
我有一些(哦,我不知道,10个可能是书架上的书,具体是这个理论)。
Python建议,可以是很好的代码,但它也是如此难以理解,它本身就是一个奇迹。较旧的语言难以理解 - 它们比现在的语言“更简单”(谨慎对待)。他们可能更难理解发生了什么,但更容易阅读(需要更少的语法/语言功能来理解程序的功能)。
答案 6 :(得分:0)
这篇文章很旧,但希望对其他人有帮助。
“算法简介”这本书(Cormen,Leiserson和Rivest撰写)是一本很好的书,介绍了算法,但是“伪代码”却很糟糕。当需要了解Q [1 ... n]的含义时,像Q [1 ... n]这样的事情就毫无意义了。必须在“伪代码”之外注明。而且,诸如“算法简介”之类的书喜欢使用数学语法,这违反了伪代码的一个目的。
伪代码应该做两件事。摘要远离语法,易于阅读。如果实际代码比伪代码更具描述性,而实际代码更具描述性,则它不是伪代码。
假设您正在编写一个简单的程序。
屏幕设计:
Row somecolumnname
1 %de /%a /%la /%les /%un /%une /%oi /%ke /%el /%para /%d /%pour /%for /%l /%en /
变量列表:
Welcome to the Consumer Discount Program!
Please enter the customers subtotal: 9999.99
The customer receives a 10 percent discount
The customer receives a 20 percent discount
The customer does not receive a discount
The customer's total is: 9999.99
伪代码:
TOTAL: double
SUB_TOTAL: double
DISCOUNT: double
请注意,这非常易于阅读,并且未引用任何语法。这支持了Bohm和Jacopini的所有三个控制结构。
序列:
DISCOUNT_PROGRAM
Print "Welcome to the Consumer Discount Program!"
Print "Please enter the customers subtotal:"
Input SUB_TOTAL
Select the case for SUB_TOTAL
SUB_TOTAL > 10000 AND SUB_TOTAL <= 50000
DISCOUNT = 0.1
Print "The customer receives a 10 percent discount"
SUB_TOTAL > 50000
DISCOUNT = 0.2
Print "The customer receives a 20 percent discount"
Otherwise
DISCOUNT = 0
Print "The customer does not a receive a discount"
TOTAL = SUB_TOTAL - (SUB_TOTAL * DISCOUNT)
Print "The customer's total is:", TOTAL
选择:
Print "Some stuff"
VALUE = 2 + 1
SOME_FUNCTION(SOME_VARIABLE)
重复:
if condition
Do one extra thing
if condition
do one extra thing
else
do one extra thing
if condition
do one extra thing
else if condition
do one extra thing
else
do one extra thing
Select the case for SYSTEM_NAME
condition 1
statement 1
condition 2
statement 2
condition 3
statement 3
otherwise
statement 4
将其与N个皇后区的“伪代码”(https://en.wikipedia.org/wiki/Eight_queens_puzzle)进行比较:
while condition
do stuff
for SOME_VALUE TO ANOTHER_VALUE
do stuff
如果您不能简单地解释它,则说明您不够了解。 -爱因斯坦(Albert Einstein)