2010-07-29 133 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