定义
串的运算
一个串 a 的长度定义为它包含的字符个数,记为 ∣a∣。
连接运算
给定一符号集 S,我们可以定义 S 上串的连接运算,运算符记为 ×:若 a,b 是 S 上的串,那么 a×b 表示两个串顺次相连产生的新串。在不引起歧义时,连接运算的运算符也可以省略不写,如 ab。串的连接运算具有以下性质:
- 不满足乘法交换律,例如 abc×de=abcde,而 de×abc=deabc;
- 满足乘法结合律,例如 abc×(de×f)=abcdef,而 (abc×de)×f=abcdef;
- 对所有的串 a,都满足 εa=aε=a,其中 ε 是空字符串;
前缀和后缀
- 我们称串 a 是串 b 的前缀,如果存在串 c,使得 b=ac。我们用 a⊏b 来表示串 a 是串 b 的前缀这一关系。例如,hel 是 hello 的一个前缀。
- 我们称串 a 是串 b 的后缀,如果存在串 c,使得 b=ca。我们用 b⊐a 来表示串 a 是串 b 的后缀这一关系。例如,ello 是 hello 的一个后缀。
特别地,对于任一符号串 a,a 和 ϵ 都是 a 的前缀,也都是 a 的后缀。
唯一可译码
在一个非奇异码中,虽然我们规定消息集到语言的映射是单射,但还并不能保证计算机能对输入的符号进行正确的解码。这是因为,在一次输入会话中,我们将一个消息序列中的消息依次进行编码,然后将得到的符号串连接在一起作为一个整体输入,因而解码时对符号串的划分可能存在歧义。
对于一个非奇异码来说,如果其语言包含的串无论如何相互连接,得到的长串都仅能以一种方式分解为串的乘积,则称这个码为唯一可译码。形式化地,如果非奇异码 f:M→L 中 L 满足
p1p2⋯pn=q1q2⋯qm,pi∈L,qj∈L,∀i=1,⋯,n;j=1,⋯,m⇒n=m,pi=qi,∀i=1,⋯,n