您的位置:首页 > 运维架构 > 网站架构

连载21:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

2018-06-27 09:09 435 查看

代数结构 

线性序:

设集合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是顶点可迁的,因为自同构只能把一个顶点映射到一个与它有相同度的顶点,所以每个顶点可迁图是正规的。我们的可置换点形成的关系绝大多数都是以图的形式呈现,若非进行优化,其最初的形态绝大多数都是图,对于图的自同构来说,此为一种特殊的图,因为顶点是相似的,所以可以将此顶点对应的置换点进行归并处理,同样能够将此图进行规范,更容易的转化为线性链的结构。

半群:

在软件设计开发中,能够获得群的集合和运算比较少,但是能够形成半群则是一个非常广泛的概念,例如我们提到的G2(抽象置换、继承置换、类自反置换)中,独立出的继承置换形成的集合S2(继承置换)则具有半群的系列属性。

半群由于其要求并不太高,所以我们的很多操作都可能形成半群。而半群由于限制条件相对较少,所以可以将半群广泛应用到软件开发领域。


上面我们提及的最基本的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所示,都具有格的特征。

   图2-7

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐