第9章 群(Group)与半群(Semigroup)

9.1 再论二元运算(binary operation

我们知道,集合A上的二元运算是一个处处有定义的函数f:A×AAf:A×A\rarr A

满足以下性质

  • 二元运算必须为A的每个有序元素对而定义(对每个有序对都适用,满射
  • 每个有序对仅对应A中唯一的元素(单射

采用 * 号来表示二元运算

再添加以下性质

  • 运算* 下A是封闭的(closeda,bA那么abAa,b\in A 那么 a*b\in A
  • 若对于a,bA,ab=baa,b\in A,a*b=b*a,那么称A上的二元运算* 是交换的(commutative,如果构造一张运算表,那么可以看到值是关于主对角线对称的
  • 若对于a,b,cA,a(bc)=(ab)ca,b,c\in A,a*(b*c)=(a*b)*c,那么称A上的二元运算* 是结合的(associative
  • 若对于aA,aa=aa\in A,a*a=a,那么称A上的二元运算* 是幂等的(idempotent
  • A={x1,x2,...,xn}A=\{x_1,x_2,...,x_n\}含有n个元素,那么在AA上存在2n22^{n^2}个二元运算

9.2 半群(Semigroup

将一个非空集合SS,以及定义在SS上的可结合的二元运算*,构成以下结构

(S,)(S,*)

就表示半群

  • 可以把aba*b看成a和b的积
  • 如果* 是一个交换运算,就称半群(S,)(S,*)是一个交换半群
  • A={a1,a2,...,an}A=\{a_1,a_2,...,a_n\},有AA^*AA中元素的所有有限序列的集合,在AA^*上有二元运算$\cdot{} $,代表连接运算(看成字符串拼接就行),那么这个 \cdot 运算是结合的,所以半群(S,)(S,\cdot)是由A产生的自由半群(free semigroup generated by A


接下来是一些概念

单位元(identity element ee(S,)(S,*)中的一个元素,对所有aSa\in S都有

ea=ae=ae*a=a*e=a

称e为单位元,是唯一的


幺半群(monoid 有单位元的半群(S,)(S,*)



子半群(subsemigroup 有一半群(S,* ),若TTSS的一个子集,且TT在运算 * 下是封闭的,就称(T,)(T,* )(S,)(S,*)的子半群


子幺半群(submonoid 与子半群类似,有一幺半群(S,* ),若TTSS的一个子集,且TT在运算 * 下是封闭的,且TT也含有单位元e,就称(T,)(T,* )(S,)(S,*)的子幺半群




同构(Isomorphism

(S,)(S,*)(T,)(T,*^{'})两个半群,若函数 f:STf:S\rarr T 是从 SSTT 的一个一一对应,而且对所有a,bSa,b\in S都有 f(ab)=f(a)f(b)f(a*b)=f(a)*^{'}f(b) ,则称 f:STf:S\rarr T 是从 (S,)(S,*)(T,)(T,*^{'}) 的一个同构

说人话就是:

两个半群S和T,存在一个函数f,变量为S,结果为T,满足单射,满射,且f(a*b)=f(a) *’ f(b),那么f就是从S到T的一个同构

  • f1f^{-1}也是一个同构,从T到S
  • S和T是同构的,就记为S=T

证明半群(S,)(S,*),(T,)(T,*^{'})同构的一般步骤为

  • 先定义一个函数f:ST,Dom(f)=Sf:S\rarr T,Dom(f)=S,Dom表示f的前域
  • 证明 ff 是单射
  • 证明 ff 是满射
  • 证明 f(ab)=f(a)f(b)f(a*b)=f(a)*'f(b)

来道题就懂了

设T是所有偶数的集合,证明半群(Z,+)与(T,+)是同构的

定义 f:ZTf:Z\rarr T 满足f(a)=2a

先证明单射。假设f(a1)=f(a2),那么就有2a1=2a2,所以a1=a2,因此f就是单射

再证明满射。假设b是任意偶数,那么就有 b/2=aZb/2=a\in Z ,且f(a)=f(b/2)=2(b/2)=bf(a)=f(b/2)=2(b/2)=b,故f为满射

最后,f(a+b)=2a+2b=f(a)+f(b)

故他们是同构的



同态(homomorphism

在两个半群同构的条件下,去掉满足单射,满射的条件,即设(S,)(S,*)(T,)(T,*')是两个半群,如果一个处处有定义的函数 f:STf:S→T 对于 SS 中的所有a和b有 f(ab)=f(a)f(b)f(a*b)=f(a)*'f(b) ,则称ff是从 (S,)(S,*)(T,)(T,*') 的一个同态。如果 ff 还是满射,则称 TTSS同态象(homomorphic image)

同构与同态的差异就是同构必须单射和满射,相同之处就是都必须有积的象等于象的积


定理:(S,)(S, *)(T)(T, *')分别是有单位元eeee'的幺半群,f:STf:S→T是从(S,)(S,*)(T,)(T,*')的一个同态且是满射,那么f(e)=ef(e)=e'

定理:ff 是从半群(S,)(S,*)到半群(T,)(T,*')的一个同态,如果 SS'(S,)(S,*)的一个子半群,那么

f(S)={tTt=f(s),对sS}f(S')=\{t\in T|t=f(s),对s\in S'\}

即在 ffSS' 的象是 (T,)(T,*') 的一个子半群。


因此,f(S)f(S')在运算*'下是封闭的。因为结合性质在TT中成立,所以它在f(S)f(S')中也成立,因此,f(S)f(S')(T,)(T,*')的一个子半群。


**定理 :** 如果$f$是从交换半群$(S,*)$到半群$(T,*')$的一个同态且是满射,那么$(T,*')$也是交换半群。



9.3 半群的积与商(PRODUCTS AND QUOTIENTS OF SEMIGROUPS

看标题就知道,半群进行积与商的运算,将会从已有的半群产生新的半群,这一节就是阐述新半群与老半群的关系

定理: 如果(S,)(S,*)(T,)(T,*')是半群,那么(S×T,)(S×T,*'')是一个半群,其中*''(s1,t1)(s2,t2)=(s1s2,t1t2)(s_1,t_1)*''(s_2,t_2)=(s_1*s_2,t_1*'t_2)定义

也就是说,假设S和T是分别有单位元e1,e2的幺半群,那么S×T是有单位元(e1,e2)的幺半群



同余关系(congruence relation

如果 aRaaRa'bRbbRb' 能够推出(ab)R(ab)(a*b)R(a'*b'),那么这个在半群(S,)(S,*)上的等价关系 RR 称为一个同余关系

要证明R是某一半群(S,)(S,*)上的一个同余关系

先证明R是一个等价关系(自反,对称,传递)

再证明同余关系的aRaaRa'bRbbRb' 能够推出(ab)R(ab)(a*b)R(a'*b')




商半群 quotient semigroup(因子半群)factor semigroup

我们已经知道,半群上的等价关系决定半群的一个划分。

对半群(S,)(S,*)上的关系RR,设[a]=R(a)[a]=R(a)是包含a的等价类,S/RS/R表示所有等价类的集合。

定理:RR是半群(S,)(S,*)上的一个同余关系,我们可以考虑一个从S/R×S/RS/R×S/RS/RS/R的关系\circledast

  • \circledast是从S/R×S/RS/R×S/RS/RS/R的一个函数,用[a][b][a]\circledast [b]表示([a],[b])\circledast ([a],[b])。因此可以得出

    [a][b]=[ab][a]\circledast [b]=[a*b]

  • (S/R,)(S/R,\circledast)是一个半群,称为商半群因子半群


可以得出以下推论:

  • RR是幺半群(S,)(S,*)上的同余关系,若运算\circledast满足[a][b]=[ab][a]\circledast [b]=[a*b],那么(S/R,)(S/R,\circledast)也是一个幺半群

接下来说明的都是半群与商半群之间的关系

定理: 设R是半群(S,*)上的一个同余关系,(S/R,)(S/R,\circledast)是对应的商半群,那么由fR(a)=[a]定义的函数fR:SS/Rf_R(a)=[a]定义的函数f_R:S\rarr S/R是一个满射的同态,称其为自然同态


**同态基本定理:**设f:STf:S\rarr T是半群(S)(S,*)到半群(T,)(T,*')的一个同态,RRSS上的关系,且RR被定义为对于SS中的a和b,aRb当且仅当f(a)=f(b)f(a)=f(b)。那么有以下的结果:

  • RR是一个同余关系
  • (T,)(T,*')和商半群(S/R,)(S/R,\circledast)是同构的




9.4 群

幺半群的集合中所有元素都拥有逆元且逆元在该集合中,则称该幺半群为,表示为(G,)(G,*)

逆元(inverse 对于每个元素aGa\in G,都存在元素bGb\in G,使得ab=ba=ea*b=b*a=e,则aba,b互为逆元

也就是说一个普通的代数系统要成为群需要满足下面几个条件:

  • 代数系统中只有一个二元运算,G在*下一定是封闭的。

  • 该运算要满足结合律。

  • 该运算要有单位元e。

  • 集合每个元素都有逆元且逆元在集合中。

例如<C, +>, <R, +>, <Q, +>为群, 而<R, *>不再为群, 因为0没有逆元。


阿贝尔群(Abelian

对于群G中的所有元素a,b有

ab=baab=ba

那么群G就是阿贝尔群

  • 对幺半群ZnZ_n,[n-a]是[a]的逆,证明了ZnZ_n也是一个阿贝尔群

群的一些基本性质

  • 群G中的每个元素a在G中有且仅有一个逆元,记为a1a^{-1}

    那么上面那条逆元的定义式可以改成aa1=a1a=eaa^{-1}=a^{-1}a=e

  • (左/右消去性质)ab=ac 推出 b=c ,ba=ca 推出 b=c

  • aG,Ma:GGa \in G,M_a:G\rarr G满足Ma(g)=agM_a(g)=ag,那么MaM_a是单射

  • (a1)1=a(a^{-1})^{-1}=a

  • (ab)1=b1a1(ab)^{-1}=b^{-1}a^{-1}

  • a,bGa,b\in G,方程ax=b和ya=b在G中都只有唯一解


对称群(symmetric group

n个元素的所有置换的集合在合成运算下是一个阶为n!的群,称这个群为n个字母上的对称群,用SnS_n表示





子群(subgroup

HH是群GG的一个子集,若满足以下条件

  • G中的单位元ee属于HH(有单位元)
  • a,bH,abHa,b\in H,ab\in H(封闭性)
  • aH,a1Ha\in H,a^{-1}\in H(有逆元)

则称H为G的一个子群

有单位元,存在封闭性,说明H是G的子幺半群,所以一个子幺半群如果有逆元,那就是一个子群


以下是一些更深的定义

平凡子群(trivial subgroup

在群GG中,GGH={e}H=\{e\}GG的子群,称他们是GG的平凡子群


交错群(alternating group

这个的前置条件是偶置换,没学,不说了


定理:(G,)(G,*)(G,)(G',*')是两个群,f:GGf:G\rarr G'是从GGGG'的一个同态

  • eeGG的单位元,ee‘GG’的单位元,那么f(e)=ef(e)=e'
  • aGa\in G,那么f(a1)=(f(a))1f(a^{-1})=(f(a))^{-1}
  • HHGG的一个子群,那么 f(H)={f(h)hH}f(H)=\{f(h)|h\in H\}GG'的一个子群




9.5 群的积与商(PRODUCTS AND QUOTIENTS OF GROUPS

定理: 如果G1G_1G2G_2是群,那么G=G1×G2G=G_1×G_2是二元运算由(a1,b1)(a2,b2)=(a1a2,b1b2)(a_1,b_1)(a_2,b_2)=(a_1a_2,b_1b_2)定义的群,当然了,这个运算可以推广到GnG_n

定理:RR是群(G,)(G,*)上的一个同余关系,那么半群(G/R,)(G/R,\circledast)是一个群,运算\circledast定义在G/RG/R上且满足[a][b]=[ab][a]\circledast [b]=[a*b]


定理: 设R是群(G,*)上的一个同余关系,那么由fR(a)=[a]定义的函数fR:GG/Rf_R(a)=[a]定义的函数f_R:G\rarr G/R是群的同态


定理:f:GGf:G\rarr G'是群(G)(G,*)到群(G,)(G',*')的一个同态且是满射,RRGG上的关系,且RR被定义为对于GG中的a和b,aRb当且仅当f(a)=f(b)f(a)=f(b)。那么有以下的结果:

  • RR是一个同余关系
  • f([a])=f(a)\overline f([a])=f(a)给出的函数f:G/RG\overline f:G/R\rarr G'是从群(G/R,)(G/R,\circledast)(G,)(G',*')的一个同构且是满射

左培集与右陪集(left/right coset

群G有一子群H,aGa\in G,

aa决定的G中H的左陪集是集合

aH={ahhH}aH=\{ah|h\in H\}

aa决定的G中H的右陪集是集合

Ha={hahH}Ha=\{ha|h\in H\}

a称为陪集的代表元素

若对G中所有的a有aH=Ha,则称G的子群H是正规子群(normal subgroup

这其实是说明了对a定义的左陪集aH,其实就是a在G上的一个等价类[a]


  • 阿贝尔群的每个子群都是一个正规子群
  • RR是群G上的一个同余关系,H=[e],即包含单位元的等价类,那么H是G的一个正规子群,并且对每个aGa\in G,[a]=aH=Ha[a]=aH=Ha

定理: 设N是群G的一个正规子群,R是G上的关系,满足aRb当且仅当a1bNa^{-1}b\in N,那么有

  • R是G上的同余关系
  • N是关于R的等价类[e],其中e是G的单位元


从以上定理可以看到,如果G是任意一个群,那么G上的同余关系的等价类总是G的某个正规子群的陪集。反之,G的任意一个正规子群的陪集恰好是关于G上某个同余关系的等价类。所以,现在可以作如下解释:设ff是从群(G,)(G,*)到群(G,)(G',*')上的同态并且是满射,ff记做ker(f)ker( f ),定义为

ker(f)={aGf(a)=e}ker(f)=\{a\in G|f(a)=e'\}

那么

  • ker( f )是G的一个正规子群
  • 商群G/ker( f )与G’是同构的




特别地,令SS是一个非空集合,在它上面定义了两种二元运算*使得(S,+,)(S,+,*)是一个阿贝尔群,而* 对于+满足分配律。(这两种运算符号与人们最熟悉的实数运算结构相同。)

如果* 满足结合律,那么结构(S,+,)(S,+,*)称作一个

如果* 同时满足结合律和交换律,则称(S,+,)(S,+,*)交换环

如果(S)(S,*)是一个幺半群,则称(S,+,)(S,+,*)含幺环

*的单位元通常用1表示,+的单位元通常用0表示。





第11章 编码

11.1 编码

11.2 译码与纠错

一个满射函数d:BnBmd:B^n\rarr B^m称为与e有关的(n,m)译码函数。

设e是一个(m, n)编码函数,d是与e相关的一个(n, m)译码函数。如果无论x=e(b)是正确地传输还是有k个或更少的错误传输并且接收的是xtx_t,都有d(xt)=bd (x_t)=b,则称数据对(e, d)校正k个或更少的错误。因此,从xtx_t能够译出正确的报文b。


已知一个(m,n)编码函数e:BmBne:B^m→B^n,常常需要确定与e相关的一个(n, m)译码函数d:BnBmd:B^n→B^m。下面讨论一种方法,称作最大似然方法,它从一个已知e确定一个译码函数d。

  • 因为BmB^m2m2^m个元素,所以在BnB^n中存在2m2^m个代码字。首先以一种固定的次序列出代码字

    x(1),x(2),...,x(2m)x^{(1)},x^{(2)},...,x^{(2m)}\\

  • 假设我们通过e收到的字是xtx_t,我们要从这2m2^m个代码字里面,用xtx_t和每一个代码字(这里用ii表示第ii个,1i2m1\le i \le 2^m),计算汉明距离δ(x(i),xt)\delta (x^{(i)},x_t)

    汉明距离δ(x(i),xt)=x(i)xt\delta (x^{(i)},x_t)=|x^{(i)}\oplus x_t|

  • 按照汉明距离从小到大排列,选出距离最小且原始排序靠前的那一个代码字,也就是与xtx_t最接近的那一个代码字,记为x(s)x^{(s)}

  • 我们由上述操作求到了x(s)x^{(s)},又已知x(s)=e(b)x^{(s)}=e(b),那么我们可以通过用以下函数

d(xt)=b\\d(x_t)=b\\

来定义与e有关的最大似然译码函数 dd




定理: 已知e是一个(m,n)编码函数,d是与e有关的最大似然译码函数,那么(e,d)能纠正 k\ k个或更少的数,当且仅当e的最短距离至少是2k+12k+1

直接上题目好理解:e的最短距离假设为3,那么有32k+1,也就是k13\ge 2k+1,也就是k\le 1。也就说明了能纠正至多1个错误


接下来,我们要采用一种方法,来方(fu)便(za)地求出与e有关的最大似然译码函数 dd

我们需要一条定理: 如果K是群G的一个有限子群,那么G中K的每一个左陪集与K恰好有同样多的元素。


e:BmBne:B^m\rarr B^n是一个(m, n)编码函数并且是一个群码。
因此,BnB^n中的代码字集合NN是B的一个子群,它的阶是2m2^m,如N={x(1),x(2),...,x(2m)}N=\{x^{(1)},x^{(2)},...,x^{(2^m)}\}


从上面的分析,我们再次假设代码字$ x=e(b)被传输并且收到的字是被传输并且收到的字是x_tx_t$的左陪集是

xtN={ϵ1,ϵ2,...,ϵ2m},ϵi=xtx(i)x_t\oplus N=\{\epsilon_1,\epsilon_2,...,\epsilon_{2^m}\},\\ \epsilon_i=x_t\oplus x^{(i)}

xtx_t到代码字x(i)x^{(i)}的距离恰好是ϵi\epsilon_i的权ϵi|\epsilon_i|

因此,如果存在一个ϵj\epsilon_j,是陪集成员中的最小权,那么x(j)x^{(j)}一定是最接近xtx_t的代码字。

此时,x(j)=ϵjxtx^{(j)}=\epsilon_j\oplus x_t

我们称一个有最小权的ϵj\epsilon_j陪集首部(coset leader,它不是唯一的


接下来,我们开始进行求解过程

如果e:BmBne:B^m→B^n是一个群码,要求他的最大似然译码函数d,需要

  • 确定BnB^n中的所有左培集

  • 对每个陪集求陪集首部,也就是求其中具有最小权的字。


    我们可以采用列表法来确定BnB^nNN的所有陪集,已知N={x(1),x(2),...,x(2m)}N=\{x^{(1)},x^{(2)},...,x^{(2^m)}\},其中x(1)=0x^{(1)}=\overline 0


    第一行:从单位元 0\overline0 开始,列出 NN 中的所有元素

    0\overline0 x(2)x^{(2)}x(2m)x^{(2^m)}

    这其实是陪集[ 0\overline 0 ],0\overline 0 就是它的陪集首部,也就是ϵ1\epsilon_1


    现在选择未列在第一行里BnB^n中的任意字 yy。把陪集 yNy\oplus N 中的元素列作第二行,该陪集也有2"个元素。

    y0y\oplus\overline0 yx(2)y\oplus x^{(2)}yx(2m)y\oplus x^{(2^m)}

    在陪集yNy\oplus N中,选取一个最小权的元素作为陪集首部,用ϵ2\epsilon_2表示。万一最小权元素不止一个,则选取最小权中任意一个元素即可。


    依次类推,下一行选择没有在前两行的任意字,选出最小权元素作为陪集首部,最后得表

image-20221028114606931

  • 最后,我们将需要进行译码的 xtx_t 在表中找出,他所在的那一列的列头就是代码字x(i)x^{(i)},用 d(x(i))d(x^{(i)}) 回去找对应的 bb 即可。


如果我们知道(m, n)群码是eH:BmBne_H:B^m→B^n,其中HH是已知的奇偶校验矩阵。在这种情况下,可以简化上面的译码方法。

H=[h11h12h1rh21h22h2rhm1hm2hmr100010001]H=\begin{bmatrix} h_{11}&h_{12}&\cdots&h_{1r}\\ h_{21}&h_{22}&\cdots&h_{2r}\\ \vdots&\vdots&&\vdots\\ h_{m1}&h_{m2}&\cdots&h_{mr}\\ 1&0&\cdots&0\\ 0&1&\cdots&0\\ \vdots&\vdots&&\vdots\\ 0&0&\cdots&1\\ \end{bmatrix}

fH(x)=xHf_H(x)= x *H定义的函数fH:BnBrf_H:B^n→B^r是从群BnB^n到群BrB^r的一个同态。

定理: 如果m,n,r,Hm, n, r, H以及fHf_H如上定义,那么fHf_H是满射

可得,

g(xN)=fH(x)=xHg(xN)=f_H(x)=x*H

元素xHx*H就是 xx校验子(syndrome).

定理: 设x和y是BnB^n中的元素,那么x和y属于 BnB^nNN 的相同左陪集当且仅当fH(x)=fH(y)f_H(x)=f_H(y),即当且仅当它们有相同的校验子。


于是,我们得出了更简便求最大似然译码函数的方法:

  • 确定BnB^nN=eH(Bm)N=e_H(B^m)的所有左陪集
  • 对每个陪集,求陪集首部并且计算所有首部的校验子
  • 如果收到xtx_t,计算xtx_t的校验子并且求具有相同校验子的陪集首部ϵ\epsilon。那么xtϵ=xx_t\oplus \epsilon=x是代码字eH(b)e_H(b),所以d(xt)=bd(x_t)=b

对于上面这个过程,不需要保存一张陪集表,并且能够避免计算译码表的工作量。而只要简单地以任意顺序一次列出所有陪集,并且从每个陪集中选择一个陪集首部。然后保存这些陪集首部和它们的校验子的一张表。上面的步骤很容易用这张表实现。


来道例题说明:

考虑奇偶校验矩阵

H=[110101011100010001]H=\begin{bmatrix} 1&1&0\\ 1&0&1\\ 0&1&1\\ 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{bmatrix}

和(3,6)群eH:B3B6e_H:B^3\rarr B^6.

得到代码字

还记得代码字怎么求吗?

我们知道m和n,就能从BmB^m中的每个元素中构造内容为n的一个字

比如m=3,n=6

BmB^m有一个元素 010,

那么我们就构造一个字,个数为6,就是010x1x2x3010x_1x_2x_3

x1=b1h11+b2h21+b3h31=1x_1=b_1h_{11}+b_2h_{21}+b_3h_{31}=1

x2=b1h12+b2h22+b3h32=0x_2=b_1h_{12}+b_2h_{22}+b_3h_{32}=0

x3=b1h13+b2h23+b3h33=1x_3=b_1h_{13}+b_2h_{23}+b_3h_{33}=1

那么代码字就是010101

要注意算x1,x2,x3的时候,和式中只有含有奇数个1,结果才能为1

代码字{e(000)=000000e(001)=001011e(010)=010101e(011)=011110e(100)=100110e(101)=101101e(110)=110011e(111)=111000\begin{align*} \begin{split} 代码字 \left \{ \begin{array}{ll} e(000)=000000\\ e(001)=001011\\ e(010)=010101\\ e(011)=011110\\ e(100)=100110\\ e(101)=101101\\ e(110)=110011\\ e(111)=111000\\ \end{array} \right. \end{split} \end{align*}

因此N={000000,001011,010101,011110,100110,101101,110011,111000}N=\{000000,001011,010101,011110,100110,101101,110011,111000\}

检验子 陪集首部
000 000000
001 000001
010 000010
011 001000
100 000100
101 010000
110 100000
111 001100

计算xtHx_t*H,得到检验子=101,陪集首部ϵ\epsilon=010000,

那么再将xtϵx_t \oplus \epsilon,得到011110,

对应的e(011)=011110,则b=011

在进行xtHx_t*H的运算时,是xtx_t所在的这一横行分别乘以HH每一列的每个元素,再相加。特别要注意的是,最后相加时,等式中含有奇数个1,结果才是1,否则含有偶数个1的话,结果为0