我正在编写一本关于计算机科学主题的相当长的专着。但是,我通常发现自己处于不得不用数学术语写一些计算机科学概念的位置,这对我来说很难。例如,假设我想编写for循环或void函数。我大部分时间都去我的Knuth或Cormen或Sedgewick,但现在还不够。是否有“手册”或一些文本我可以将计算机科学转化为数学?
让我更具体一点(谢谢,Uri)。我的意思是:例如,我有一个无效的函数,它返回一个长度为n的随机字符串。这引起了我的好奇心,我甚至不知道如何在数学中表示虚函数......但是,这只是一个例子。
答案 0 :(得分:3)
求和或产品符号可能会替换一些for循环。其他人可能被表达为逻辑量词(“存在i,使得[i]具有某些属性” 或者“a [i]为所有我拥有一些财产”。 (对不起,我不知道如何呈现这些 在Markdown ...希望你明白这一点。)
“Void functions”......嗯,也许是状态前置条件的一些方便的逻辑表示法 和后置条件,因为这些功能只对它们的副作用有用吗?
但我认为大多数数学家对算法的描述已经足够熟悉,可以理解任何中途合理的伪代码约定。试着远离 在某些特定节目中需要“语言 - 律师”技能水平的任何事物 语言。
答案 1 :(得分:2)
我认为你必须更加具体。你在谈论翻译算法吗?将代码编写为伪代码?
还有更多的“数学”形式,其中许多用于程序的形式验证。 它们通常基于离散数学。
根据您的尝试,Hoare Logic是表示算法步骤的好方法,恕我直言。
您还可以使用Z notation正式指定一些架构和协议。
答案 2 :(得分:1)
解决你的具体问题:在数学中,如果它不带参数并返回一个长度为n的随机字符串,它可能根本不是一个函数!也就是说,如果f()不等于f()(例如,使用f()= rand()),那么根据定义,f()不是函数。你可以用不同的方式解决这个问题,具体取决于你的偏好:你可以传递state参数并让它返回修改后的状态参数,或者你可以使它成为一个多值函数并返回所有可能的值,或者你可以使用两个函数: f(n,state)给出下一个长度为n的随机字符串,而g(n,state)在生成f(n,state)后给出新状态。
答案 3 :(得分:1)
您可以通过Alexander Stepanov和Paul McJones来了解Elements of Programming:
本书采用演绎法 通过附属计划进行编程 用抽象的数学 使他们能够工作的理论。 这些理论的规范, 根据这些算法编写的算法 理论,定理和引理 描述他们的属性是 一起呈现。实施 真实的算法 编程语言是其中的核心 书。而规格,其中 应该是针对人类的 甚至必须,结合严谨 适当的非正式性,代码, 这是发给电脑的, 必须绝对准确,即使在 一般。