組合數學在軟件領域的運用

摘要:組合數學,又稱爲離散數學,但有時人們也把組合數學和圖論加在一起算成是離散數學。組合數學是計算機出現以後迅速發展起來的一門數學分支。計算機科學就是算法的科學,而計算機所處理的對象是離散的數據,所以離散對象的處理就成了計算機科學的核心,而研究離散對象的科學恰恰就是組合數學。隨着計算機科學的發展,組合數學也在迅猛發展,而組合數學在理論方面的推進也促進計算機科學的發展。計算機軟件空前發展的今天要求有相應的數學基礎,組合數學作爲大多數計算機軟件設計的理論基礎,它的重要性也就不言而喻。

 

關鍵詞: 組合數學;計算機;軟件;算法

 

引言 就從目前我們在學習c++等語言進行編程解決問題看,組合數學的一些知識就能得到運用。例如Hannoi塔問題。用剛剛學的遞推關係分析,設h(n)爲n個盤子從a柱移到c柱所需移動的盤次。顯然,當n=1時,只需把a柱上的盤子直接移動到c柱就可以了,故h(1)=1。當n=2時,先將a柱上面的小盤子移動到b柱上去;然後將大盤子從a柱移到c柱;最後,將b柱上的小盤子移到c柱上,共計3個盤次,故h(2)=3。以此類推,當a柱上有n(n>=2)個盤子時,總是先借助c柱把上面的n-1個盤移動到b柱上,然後把a柱最下面的盤子移動到c柱上;再借助a柱把b柱上的n-1個盤子移動到c柱上;總共移動h(n-1)+1+h(n-1)個盤次。所以:h(n)=2h(n-1)+1 (邊界條件:h1=1)。而一旦得出了這個遞推關係式,就很容易運用遞歸算法來解決這樣一個問題,遞歸算法因爲是運用棧的方式進行加深與回溯,這個棧是系統給出的,故大大減少代碼量。因此利用組合數學中的知識很容易抽象出數學模型再用相應的編程技巧來解決問題。

 

1 數據結構-圖

圖是一種非常重要的數據存儲結構,而在圖的建立,遍歷,生成樹等問題的解決算法上基本都運用了組合數學中的知識。例如在最小生成樹算法中間需要判斷是否有環的問題,中間算法思想中就包含了歐拉圖判定定理,(1) 無向連通圖G是歐拉圖=>G不含奇數度的結點(即G的所有結點的度均爲偶數(0視爲偶數));(定理1)
(2) 非0平凡圖G有歐拉通路=>G最多有兩個奇數度的結點;(定理1的推論)
(3) 有向圖D是歐拉圖=>D連通且D的所有結點的入度等於出度。有向連通圖有歐拉通路=>除兩個結點外,其餘結點的出度均等於入度,且這兩點deg-(v)-deg+(v)=±1。 (定理2)

2 信息檢索

信息檢索是計算機科學中一個基本而又重要的問題。如何組織數據,使用什麼樣的查找方法,對檢索的效率有很大的影響。所熟知的在有序表結構上的二分搜索算法是一種很有效的方法,那麼二分搜索是最好的算法嗎?Yao利用Ramsey數對這一問題作了肯定的回答。

具體地講,假設一個表有n個不同的項,其元素取自鍵空間M={1,2,,, m } ,希望找到在表中存儲M的任意n元子集S的方法,使得容易回答下述詢問: X在S中嗎?如何存儲M的n元子集的規則稱爲一個表結構或( m , n)-表結構。最簡單的表結構是有序表結構,它是按上升序列出S中的元素。更一般的是按置換排序的表結構,其方法是固定{1,2,,, n}的一個置換,根據比置換的次序列出S中的元素。

信息檢索的計算複雜性依賴於表結構和搜索策略。複雜性的度量是最壞情形下確定x是否在S中所需要的詢問次數。例如,對有序表結構,如果用二分搜索,所需要的詢問次數是[log2( n+ 1) ]。複雜性f ( m , n )定義爲所有的( m , n)-表結構和搜索策略下的複雜性的最小值。關於f ( m , n ), Yao證明了:

定理1  對每個n ,存在數N ( n) 使得f ( m , n) = [log2 ( n +1 ) ]對所有m>=N ( n) 成立。 據此定理,對充分大的m ,就信息檢索來說,用有序表結構是最有效的方法。

利用下述兩個引理,立即可得此定理的證明。

引理1  若m >=2 n -1 , n >=2 ,對於按置換排序的表結構。無論採用何種策略,在最壞情形下要確定x 是否在S 中至少需要[log2 ( n +1 ) ]次檢查。

引理2  給定n ,存在數N ( n) 具有下述性質:若m >=N ( n) ,且給定一個( m , n) 2表結構,則存在有2 n -1個鍵的集合K ,使得對應於K 的n 元子集的表形成按置換排序的表結構。

對一個給定的( m , n )表結構和搜索策略以及mEN ( n) ,可找到滿足引理2的集合K ,再由引理1,即使限制在集合K上,在最壞情況下至少需要[log 2( n+ 1) ]檢查。因而f( m ,n)E[log2( n+ 1) ]。但有序表上的二分搜索的最壞情形複雜性是[log2( n+ 1) ] ,故有f ( m , n)=[log2( n+ 1) ],這就證明了定理1,從而知道二分搜索對大的鍵空間是最好的檢索方法。

總而言之,組合數學在計算機領域的應用是非常廣泛的,可以說兩者發展是相輔相成的。要成爲一名合格的計算機系學生,組合數學必慎待之。

 

 

3 Ramsey 數在計算機科學中的應用

衆所周知,若有 I + l 只鴿子同時飛進 I 個鴿巢中,則一定有某個鴿巢中至少飛進兩隻鴿,這就是有名的鴿 巢原理(也叫抽屜原理)。它非常簡單,其正確性也顯而易見,但卻有很廣泛的應用。鴿巢原理有如下重要的推 廣:

Ramsey 定理 設 gl,g2,…,gI;t 是正整數,且 gi!(t i = l,2,…,I),則存在最小的正整數 (r 記作 (r gl,g2, … gI;t)使得:對任意 m 元集合 S,若 m! r,當把 S 的所有 t 元子集放到 I 個盒子裏時,那麼存在某個 (i l" i" I) 和某 gi 個元素,它的所有 t 元子集都在第 i 個盒子裏。這是稱 (r gl,g2,… gI;t)爲 Ramsey 數。 上述定理是 Ramsey l930 年提出並給出證明。

當 t = l 時,Ramsey 定理就是加強形式的鴿巢原理,且容易求出

(r gl,g2,… gI;l)= # I i = l gi - I + l

Ramsey 定理是組合論中一個重要的存在性定理,它的發表推動了組合論等數理科學的發展,而且關於 Ramsey 定理和 Ramsey 數自身的研究目前已成爲組合學中一個重要的分支——— I + l———Ramsey 理論。但是,Ramsey 定理只保證了 Ramsey 數的存在性,並沒有給出計算 Ramsey 數的有效方法。目前,確定 Ramsey 數的問題仍是一 個尚未解決的大難題,要找到一個很小的 Ramsey 數是很困難的。雖然如此,由於其重要的理論價值和廣泛的應 用價值,確定 Ramsey 數是很有意義的。下面用兩個例子說明 Ramsey 數在信息檢索、分組交換網設計等計算機科學領域中的重要應用。

 

 

4 分組交換網的設計

網絡是當今計算機發展的一個特點,是進入信息社會的巨大推動力。分組交換網是採用分組交換技術的網 絡,它從終端或計算機接收報文,把報文分割成分組,並按某種策略選擇最佳路徑在網中傳輸,到達目的地後再 將分組合併成報文交給目的終端或計算機。分組交換技術在網絡設計中被廣泛採用S . Boyles 和 G . EXoo在一 個稱作 Bell System Singnaling Network(Bell 系統信令網絡的分組交換網設計中用到了 Ramsey 數。 用頂點表示通信設備、用邊表示通信鏈路,這樣得到一個圖。假定該圖是完全圖,即任意兩點間都有一條邊 相連。

在某些應用場合,頂點兩兩配合對作爲個整體。保證在某些鏈路出故障不能使用時,任兩對配對頂點 間都至少有一條鏈路暢通無阻,設頂點 xl,x2 組成一對,yl,y2 爲一對,zl,z2 爲一對,且故障 發生在諸如微波塔、中繼站等中間設施上。在此類設施上的故障 將影響所有共享該設施的鏈路。對共享同一個中間設施的鏈路, 用同一種顏色來標記它們,如圖 l 表示一個有 3 種中間設施的通 信網絡。在圖 l 中,若標記紅色的中間設施出了故障,那麼在頂點 對 xl,x2 和頂點 對 zl,z2 之 間 沒 有 可 用 的 鏈 路,而 這 對 於 下 列 事 實:4 條邊( xi,zi)構成一個單色的 C(4 4 個頂點的迴路)。一般來 說,設計一個網絡需決定中間設施的數量以及哪個鏈路使用哪個 設施。此外,在任何一箇中間設施損壞時,希望所設計的網絡中任 兩對配對頂點間有一個可使用的鏈路。根據上面的討論,應該避 免出現單色的 C4。

已證 Ramsey 數 (r C4,C4)= 6。因此,如果只有兩個中間設 施,那麼存在一個 5 個頂點的網絡使得可以安排一種不出現單色 C4 的連接方式。在文獻[3,6]中證明了 Ramsey 數 (r C4,C4,C4)= ll,所以存在一個 l0 個頂點的網絡,它使用 3 箇中間設施且沒有單色的 C4。 前面說過,設計一個網絡需要決定中間設施的數量以及哪個鏈路使用哪個設施。中間設施是很昂貴的,因 而希望使其數量儘可能地少。所以,人們自然要問:如果有一個 I 個頂點的網絡,在不出現單色 C4 條件下中 間設施的最少個數是多少?換句話說,滿足 (r C4,C4,…,C4)> I 的最小的 r 是多少比如對圖 l 有 I = 6,由於 (r C4,C4)= 6,(r C4,C4,C4)= ll,所以 r = 3,即需要 3 個間設施。Boyles 和 EXoo 指出,在他們使用的場合,利 用 Erdos的下述結果足以估計 r 的值:一個 I 頂點圖至少有 l 2 I3. 2 + l 4 I 條邊,則它總包含有 C4。若 I 頂點

 

5 組合數學在密碼學中的應用

隨着組合數學的應用,密碼領域開始出現新的變革,開始改變傳統 RAS 體制,這種新變革以冪剩餘函數爲和,對畢達哥斯進行加密和解密的變化,改變了傳統 RAS 體不能被直接破譯的現狀。 用組合函數進行論證表明,這種最新密碼體制以最大質子因素的合數的因子分解爲基礎,安全性較高,遠遠高於傳統的 RAS 機制的密碼機制。

總結

組合數學和離散數學還有計算機都是研究的都是同樣的一個東西,離散的對象。初學計算機會發現計算機是一個由各種“規則”組成的東西,你要去記住編程的模式,記住某些特定的算法,記住怎麼去寫遞歸,記住怎麼聽懂別人口裏陌生的名詞,記住怎麼把它們規範的說出來,然後形成經驗,你可能不知道它們的真正原理。但我們總是趨向於去描述事物的本質,所以會產生數學的這樣的東西。從本質出發,不僅能夠精準的解釋那些已有的“規則”,還說不定可以根據推論,有更多的發現。比如一個學完數據結構的同學,可以分分鐘寫出來dijkstra算法,但是他或許就不知道這個算法本質是動態規劃,可能連動態轉移方程都寫不出來。但是他也不需要知道這些,很多原理不去深究也不會妨礙你成爲一個偉大的人。但學些數學又是非常有趣的不是嗎,我們總有一顆究根結底的心。組合數學會告訴你很多東西的原理,比如遞歸,比如鴿籠原理和一大堆你可能想不到的推論,根據這些推論又可以產生一些新的算法。在最開始接觸樹這個概念的時候,我還很小,那時候我只知道怎麼去描述它,怎麼去用它,怎麼去構造它。後來我不止一次問自己,它說到底是什麼東西,怎麼用數學語言去解釋呢,怎麼用一個統一的框架去覆蓋它們,並且我能夠使用數學運算的方法去取代我的經驗法。所以這就是這兩種數學誕生的一個重要原因。組合數學和離散數學是兩個互相滲透,又互相分割的部分吧。都是由關聯性不是很強的部分組成(比如第一章學的不好並不會影響後面的學習),這些組成兩者有很多的交叉(比如學完離散再看組合發現很多東西都很眼熟)。這兩個感覺完全就是在一個成熟的體系中建立的。

 

 

參考文獻

[1] 陳家,楊光崇.組合數學在計算機科學中的應用[J].成都信息工程學院學報,2006(S1):94-9

[2] 楊策.探究軟件工程領域中組合數學的應用[J].通訊世界,2015(24):320-321.

[3] 郭燕莎. 組合算法的研究與實現[D].天津工業大學,2008.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章