2010-07-29 115 views
4

我正在写一篇关于计算机科学主题的相当长的专着。但是,我通常发现自己处于不得不用数学术语写出一些计算机科学概念的位置,这对我来说很困难。比如说,我想写一个for-loop或者一个void函数。我大部分时间都去了Knuth或Cormen或Sedgewick,但现在还不够。有没有一个“手册”或一些我可以用来将计算机科学转化为数学的例子?在数学科学中讲计算机科学

编辑:让我更具体(谢谢,Uri)。我的意思是:例如,我有一个无效的函数,它返回一个长度为n的随机字符串。这引起了我的好奇心,我甚至不知道如何在数学中表示空白函数......但是,这只是一个例子。我受到这些问题的困扰。 谢谢。

+0

讨厌这么说,但这三个可能是最有数学的CS书。如果你用尽了这些,我认为你可能必须成为这个话题的先驱。 :) – 2010-07-29 01:40:32

+0

@sheep::)我希望我是...我想我只是在一个比纯粹置换或链接列表更适用的话题上工作,并且更多地谈论概率论,这些书根本不要碰。 – 2010-07-29 01:46:33

+0

也许我可以帮你脱机,如果你给我一个手稿和具体问题。在进入软件开发之前,我是数学教授。 http://www.johndcook.com/contact.html – 2010-07-29 01:52:55

回答

2

我认为你必须更具体。你在谈论翻译算法吗?将代码编写为伪代码?

还有更多的“数学”形式,其中很多都用于程序的正式验证。 他们通常基于离散数学。

根据你想要做什么,Hoare Logic是表示算法步骤的好方法,恕我直言。

您还可以使用Z notation正式指定某些体系结构和协议。

+0

我所看到的构造的每一个形式化符号都是离散数学的一种形式 - 通常是数学逻辑,集合论,组合和代数。形式规范语言,如Z,很大程度上基于离散数学的构造。 – 2010-07-29 01:38:50

1

为了解决您的具体问题:在数学中,如果它不带任何参数并返回一个长度为n的随机字符串,它可能根本不是一个函数!也就是说,如果f()不等于f()(例如,用f()= rand()),那么根据定义f()不是一个函数。您可以根据您的偏好以不同的方式解决这个问题:您可以将状态参数传递给它,并让它返回修改后的状态参数,也可以使其成为多值函数并返回所有可能的值,或者可以使用两个函数: f(n,state)给出下一个长度为n的随机字符串,而g(n,state)在生成f(n,state)后给出新的状态。

1

你可以看看Elements of Programming亚历山大·斯捷潘诺夫和保罗McJones:

这本书通过建立联盟关系计划 与抽象的数学理论 ,使他们的工作演绎法 适用于编程。 这些理论的说明, 这些理论编写的算法,以及描述它们的性质的定理和引理 一起提出 。 编程语言中算法的实现 是本书的核心。虽然规范, 是针对人类,应该 甚至必须与 适当不拘,代码, 将发往计算机结合严谨, 必须是偶数,而 是一般的绝对精确。

+0

我喜欢这本书,但大多数实际算法等以C++方言表达,其中“数学”符号保留用于定义概念和属性(甚至它们经常分解为C++的片段)。如果以数学符号表示程序,我认为它不会很好,本书中的程序使用C++,甚至不使用伪代码。 – 2010-07-29 03:39:31

+0

是的,这应该是一个很大的免责声明。尽管如此,我认为数学概念和真正的编程语言结构之间的映射可能对OP有用。 – anno 2010-07-29 13:26:21