以代数方式表示代码

时间:2010-01-28 19:50:30

标签: math pseudocode notation

我想在一篇论文中写一些小算法。它们相对简短,简洁。然而,我不想用伪代码(àlaCormen甚至Knuth)编写它们,而是想写出它们的代数表示(更线性和更好的LaTeX渲染)。但是,如果有任何问题,我无法找到最佳符号的资源:例如:我该如何表示循环?如果?在列表中添加元组?

你们有没有遇到过这个问题,并以某种方式解决了它?

感谢。

编辑:谢谢,人们。我认为我在表达这个问题方面表现不佳。这里又说了一遍,希望我说得更清楚:在数学符号中讨论循环和if-then子句的常用符号是什么?例如,我可以使用$acc \leftarrow acc \cup \langle i,i+1 \rangle$来表示列表的“添加”方法。

8 个答案:

答案 0 :(得分:8)

不要这样做。当你阅读关于算法的论文时,你偏离了人们期望看到的东西。你应该遵循预期的做法;你的想法更有可能获得他们应得的关注。在罗马时,就像罗马人一样。

在LaTeXed纸张中格式化代码(或可能是伪代码)非常简单。例如,请参阅Formatting code in LaTeX

答案 1 :(得分:7)

我经常用数学符号看if-expressions。循环的通常情况是recurrence relation,或者等效地,递归定义的函数。

以下是维基百科上Ackermann function的定义方式,例如:

A(m, n) = n+1 if m=0; A(m-1, 1) if m>0 and n=0; and A(m-1, A(m, n-1)) if m>0 and n>0.

这张图片很不错,因为它感觉数学风格,但你可以用几乎完全按照书面形式输入并有一个实现。并非总能实现这一目标。

与循环对应的其他数学符号包括∑-notation for summationset-builder notation

我希望这能回答你的问题!但如果你的目的是描述某些事情是如何完成并让某人理解的话,我认为假设数学家更愿意看到方程式可能是错误的。我不认为它们是可互换的工具(尽管图灵等价)。如果您的算法涉及可变数据结构,那么程序代码可能会比解释它的方程更好。

答案 2 :(得分:2)

我要复制Knuth。很少有人知道如何在计算机科学环境中比他更好地沟通。

答案 3 :(得分:2)

一般循环的符号不存在;通常你会使用summation operator。 “if”使用implications表示,并且“将元组添加到列表”,您将使用union

然而,一般来说,一些冗长并不一定是坏事 - 有时,特别是对于复杂的算法,最好用简单的英语拼写出来,使用示例和图表。对于非编码员来说,这是双重的。

想一想:当你读到关于欧几里德GCD算法或Eratosthenes筛的数学教科书时,它是如何编写的?通常,算法本身就是散文,而算法的证明就是数学符号所在的位置。

答案 4 :(得分:1)

你可以看看Haskell。 Haskell在latex中格式很好,具有很好的代数语法,你甚至可以在其中编译带有Haskell的latex文件,前提是代码包含在\begin{code}\end{code}中。见这里:http://www.haskell.org/haskellwiki/Literate_programming。可能有其他语言的文字编程工具。

答案 5 :(得分:1)

Lisp最初是作为计算模型的数学符号,因此讲师将拥有比图灵机更好的工具。事实上,它可以在汇编中实现 - 因此lisp,编程语言诞生了。

但是我不认为这正是你正在寻找的,因为lisp描述的计算模型没有循环:反而使用递归。语法来源于代数,其中大括号表示评估 - 这个和替代结果。实际上,lisp的计算模型基本上是替代 - 代数本质上是什么。

事实上,像Lisp,Haskell和Erlang这样的大多数函数语言都源于数学。 Haskell实际上是证明lambda演算可用于实现类型系统的结果。因此,像Lisp一样,Haskell诞生于纯粹的数学。但同样,语法不是你可能会习惯的。

您当然可以向数学家解释Lisp和Haskell语法,他们会将其视为“游戏”。语言结构如循环,递归和条件可以通过游戏规则证明,而不是像其他语言一样盲目实现。这将引领你进入组合学领域,这是数学的另一个分支。实际上,在组合学中,甚至数字的概念也可以根据游戏规则构建,而不是语言的本地部分(谷歌教会数字)。

如果你愿意,可以看一下Lisp / Scheme,Erlang和Haskell。 Erlang尤其具有接近你想要的语法:

add(a,b) -> a + b

但我的建议是用C-like伪代码编写。它是编程语言中最低的共同点。具有相当容易理解和清晰的语法。函数语法甚至来自数学中的函数。还记得f(x)吗?

作为一个加号,数学家习惯写C,统计学家习惯写C(虽然一般他们更喜欢R),物理学家习惯写C,程序员习惯至少看C(我认识一些人)从未接触过C)。

实际上,抓一点。你提到你的目标受众是统计学家。写在R

答案 6 :(得分:0)

这样的website描述了什么?

答案 7 :(得分:-1)

APL?唯一的问题是很少有人可以阅读它。