連載21:軟件體系設計新方向:數學抽象、設計模式、系統架構與方案設計(簡化版)(袁曉河著)

代數結構

 

線性序:

設集合X上有一全序關係,如果我們把這種關係用 ≤ 表述,則下列陳述對於 X 中的所有 a, b 和 c 成立:

ü 如果 a ≤ b 且 b ≤ a 則 a = b (反對稱性)

ü 如果 a ≤ b 且 b ≤ c 則 a ≤ c (傳遞性)

ü a ≤ b 或 b ≤ a (完全性)

配對了在其上相關的全序的集合叫做全序集合、線序集合、簡單序集合或鏈。

在數據結構中,單鏈表就是具有這樣的全序關係的集合,只是單鏈表是體現在數值是類結構對象上,而我們的接口(編程語言中特定化的接口)是最體現線性序的顯著特徵,其實本可以選擇其他的結構形態的,例如採用樹、hash表等等來表示,但是,選擇線性序是最爲簡單有效的處理方式,接口中不同的置換點通過一種最爲鬆耦合的方式結合在一起,不同的置換點是獨立的(無自反的關係、非對稱的雙邊關係),其關係僅爲相鄰(所以接口常常選擇函數指針類型的數組表示),由於採用這樣的最爲簡單構建方式,所以其實現處理也是簡單有效的,同時越是最特殊的結構,其特徵就最爲豐富,其變化也才最爲廣泛。

但是,對於一些結構化的非線性序的結構,其實我們也可以設置一些標誌,通過在訪問方面的過程,將這些結構進行線性序方式的訪問。例如在樹結構中我們可以使用先序、中序、後序的不同訪問方式,將樹進行了一個線性序的處理,這有助於轉換相關的問題來簡化我們的整個設計的複雜度。

 

羣:

任一集合A到自身的映射都叫做A的一個變換,如果A是有限集且變換是一一變換(雙射),那麼這個變換爲A的一個置換。有限集合A的若干個置換若作成羣,就叫做置換羣。

循環置換是置換的另一種表達形式,它以發生變化的文字的變化次序爲序,表 達成輪換的形式。每個循環置換都可視爲一個首尾相接的圓環。

兩個不相連的k—循環置換是可以交換的。

循環羣:設<G,*>爲羣,若在G存在一個元素a,使得G的任意元素都由a的冪組成,則稱該羣爲循環羣,元素a稱爲循環羣G的生成元。

一個質數階的羣必定是循環的,並且任一與幺元不同的元素都是生成元。

直積又叫笛卡爾(Descartes)乘積。設( G1,* )、( G2,· )是兩個羣,有各自的乘法 *、· 和各自的單位元e、l,分別從G1和G2中任取一個元素組成所有可能的有序對,組成的集合記作G1×G2,在上面定義一個運算◎,對於G1×G2中任意兩個元素(a1,B1)、(a2,B2),規定(a1,B1) (a2,B2)=(a1 * a2,B1 · B2),這叫做G1和G2的直積,記作{ G1×G2, ◎ },單位元是(e,l)。

G是交換羣的充分必要條件是G1與G2都是交換羣。

通過前面我們知道的三個羣,G1(值-地址置換、地址-值置換、賦值置換)、G2(抽象置換、繼承置換、類自反置換)、G3(泛化置換、特化置換、模板自反置換)其實都是3階的羣,然後根據置換的定義,這三個羣都是3階循環置換羣,其滿足了所有3階循環置換羣的所有特性。

通過將兩個羣進行直積,比如我們在面向對象的軟件設計中,我們所使用的正是上面的G1(值-地址置換、地址-值置換、賦值置換)和G2(抽象置換、繼承置換、類自反置換)的直積,當然,在這些對應的操作中可能存在有些置換操作是沒有的,因爲都作爲默認的處理,特別的這裏就存在接口來說,其由於沒有地址,所以無法進行地址和值的轉換操作,但是可以用於多態方式的賦值置換,同時其無法再進行抽象置換,只能夠進行繼承置換,所以其應該是<賦值置換,繼承置換>形成的置換對能夠滿足接口的置換動作。

自同構羣:

自同構羣是重要的幾何變換羣。是幾何學分類的依據。

S是給定的空間,U是S上的一個圖形,若S到自身的一個變換g把U變到U自身,則稱g是關於U的自同構變換,簡稱關於U的自同構.S上關於U的自同構變換的全體構成一個變換羣,稱它爲關於U的自同構羣。在變換中保持不變的這個圖形U稱爲絕對形。

羣對於我們來說非常的重要,其所具有的特性讓軟件設計成爲了一種特殊的幾何或代數系統,而這裏需要明確的是,這裏不是所謂的幾何或代數的模型化,而是指其本身就是一種幾何和代數,這個結論對於我們進行深入分析非常必要的。

圖的自同構羣:

從圖G到其自身的一個同構稱爲是G的一個自同構,因爲映射的複合運算滿足結合律,恆等映射是一個自同構,一個自同構的逆任然是一個自同構,並且兩個自同構的複合也是一個自同構,所以圖G所有自同構的集合運算下構成一個羣,給羣稱爲是G的自同構羣。

因爲圖的每一個自同構都是頂點V(G)上的一個置換,所以用置換循環的術語可以更爲簡單地描述自同構。

對於圖G的頂點V,V通過G的自同構所映射到的頂點集合稱爲是G的一個軌跡。

由關係形成的不同等價類就是G的軌道,如果兩個頂點U和V屬於同一個軌道,則稱他們是相似的。

如果已知G中每個頂點的結構(軌道)信息,由於某些頂點的相似性,那麼就沒有必要去考慮G中所有的頂點,在此情形下,我們只需要考慮每個軌道的(任意)一個頂點,作爲該軌道的代表元,如果一個n階圖有n個不同軌道,那麼自同構羣僅僅由一個自同構組成,即恆等同構,另一方面,如果圖G僅有一個軌道,那麼G中任意兩個頂點都是相似的,此時我們稱G是頂點可遷的,因爲自同構只能把一個頂點映射到一個與它有相同度的頂點,所以每個頂點可遷圖是正規的。

我們的可置換點形成的關係絕大多數都是以圖的形式呈現,若非進行優化,其最初的形態絕大多數都是圖,對於圖的自同構來說,此爲一種特殊的圖,因爲頂點是相似的,所以可以將此頂點對應的置換點進行歸併處理,同樣能夠將此圖進行規範,更容易的轉化爲線性鏈的結構。

blob.png

在軟件設計開發中,能夠獲得羣的集合和運算比較少,但是能夠形成半羣則是一個非常廣泛的概念,例如我們提到的G2(抽象置換、繼承置換、類自反置換)中,獨立出的繼承置換形成的集合S2(繼承置換)則具有半羣的系列屬性。

半羣由於其要求並不太高,所以我們的很多操作都可能形成半羣。而半羣由於限制條件相對較少,所以可以將半羣廣泛應用到軟件開發領域。

blob.png

上面我們提及的最基本的G1(值-地址置換、地址-值置換、賦值置換)所具有的完備性,因此可以使用此置換來完整描述所有的基本功能。如果映射到實現中可以使用不同的方式來進行表示,而在實現中,爲什麼通過整數作爲基本的表達形式呢?

因爲,整數在數中是最爲簡單的數,所以整數完成的操作可以最爲簡單,所需的成本最小,同時整數在(加操作和乘操作上)具有環的特徵,但是在對於減操作卻不具有此特徵,因此,又引入了補碼的編碼方式,由此滿足了其數操作的完整性。

 

格:

格是一種特殊的偏序集,對其中任意兩個元素都可取最小上界()和最大下界()

L是格,a,b,c∈L,則:

交換律a∨b = b∨a , a∧b = b∧a

結合律(a∨b)∨c = a∨(b∨c) , (a∧b)∧c = a∧(b∧c)

冪等律a∨a = a , a∧a = a

如果針對具有菱形繼承關係是否是一個格呢?通過其定義我們可以看到,其具有同一個最抽象的父類(上界),和同一個所有繼承的子類(下界),其滿足上面提到的三個定律,所以其爲一個格,如圖2-7所示,都具有格的特徵。

blob.png 

2-7

 


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