首页 文章

在mathematicalese讲计算机科学

提问于
浏览
4

我正在编写一本关于计算机科学主题的相当长的专着 . 但是,我经常发现自己处于用数学术语编写计算机科学概念的位置,这对我来说很难 . 例如,假设我想编写for循环或void函数 . 我大部分时间都去我的Knuth或Cormen或Sedgewick,但现在还不够 . 是否有“手册”或一些文本我可以将计算机科学转化为数学?

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

4 回答

  • 1

    求和或产品符号可能会替换一些for循环 . 其他人可能被表达为逻辑量词(“存在i使得[i]具有某些属性”或“a [i]具有所有i的某些属性”) . (对不起,我不知道如何在Markdown中呈现这些...希望你明白这一点 . )

    “无效函数”...嗯,也许是一些方便的逻辑符号来表示前置条件和后置条件,因为这些函数只对它们的副作用有用吗?

    但我认为大多数数学家都会熟悉算法的描述,以理解任何中途合理的伪代码约定 . 试着远离任何需要某种特定编程语言的“语言 - 律师”技能水平的东西 .

  • 3

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

    还有更多的“数学”形式,其中许多用于程序的形式验证 . 它们通常基于离散数学 .

    根据你想要做的事情,Hoare Logic是表示算法步骤的好方法,恕我直言 .

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

  • 2

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

  • 1

    您可以通过Alexander Stepanov和Paul McJones来研究Elements of Programming

    本书将演绎方法应用于编程,通过将程序与使他们能够工作的抽象数学理论联系起来 . 这些理论的规范,根据这些理论编写的算法,以及描述其属性的定理和引理一起呈现 . 在真正的编程语言中实现算法是本书的核心 . 虽然针对人类的规范应该甚至必须将严谨性与适当的非正式性相结合,但是针对计算机的代码必须绝对精确,即使在一般情况下也是如此 .

相关问题