主要内容
表达一个算法
我们可以用多种方法表达一个算法,包括自然语言、流海图、伪代码,当然还有实际编程语言。
自然语言是常见的选择,因为它对我们来说很自然,并且可以将算法的步骤传达给广大用户。 在开发算法时,我们经常与了解编程的人和不懂编程的人一起工作,但是他们都懂自然语言。
但是,自然语言有其缺点。它倾向于模糊不清,定义太模糊,因为没有强制的结构,这使其他人难以遵循算法,并对其正确性有信心。流程图和伪码是更加结构化的格式,可以更准确地表达算法,并且很受计算机科学家和程序员的欢迎。
让我们通过表达上一篇文章中的Pig Latin算法来尝试较结构化的格式。
流程图
表达算法的一个更正式的方式是 流程图,一个用箭头连接方框的图形。
为了更容易开始,这是一个 Pig Latin 算法的基本版本的流程图:
每个矩形代表序列中的一步,箭头从一步到下一步。
这下一个流程图是为了改进算法,使用菱形框来代表选择阶段:
最后,这个流程图可以显示带有迭代完整算法:
在流程图中表现算法,使我们能够在高级别上把算法可视化,同时迫使我们非常仔细地考虑顺序和选择。哪些箭头可以指向什么节点?有没有缺失的箭头?这些是算法转化为流程图时可能出现的宝贵问题。
伪代码
最终,大多数算法变成实际运行于计算机的代码。在此之前,程序员往往想要在 伪代码 中表达算法:使用编程语言的所有构造函数的代码,但不在任何地方实际运行。
这是以AP CSP 伪代码样式写出来的 Pig Latin算法:
FOR EACH word IN words
{
APPEND(word, "-")
letter ← FIRST_LETTER(word)
IF (IS_VOWEL(letter)) {
APPEND(word, "yay")
} ELSE {
APPEND(word, letter)
APPEND(word, "ay")
REMOVE_FIRST(word)
}
}
每个程序员写不同的伪代码,因为没有官方标准,所以您会读到看起来完全不同的伪代码。
用伪码表示算法帮助程序员熟悉术语,而不必担心语法和具体内容。它还使计算机科学家拥有一种独立于语言的方法来表达一种算法,从而使任何语言的程序员能够走到一起,阅读伪代码,并将其翻译成他们选择的语言。
一个算法可以翻译成任何一般用途编程语言。证明参见 RosettaCode.org,一个列出数百种算法翻译至700多种语言的维基。
软件以各种编程语言写成,取决于其做什么,以及谁编写的。可汗学院目前用于不同代码库的各个部分使用四种不同的语言。幸运的是,我们可以到处使用相同的算法!
🙋🏽🙋🏻♀️🙋🏿♂️您对此主题有任何疑问吗? 我们很乐意回答-只需在下面的问题区域中提问即可!