第2章 语言与字符串

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第2章 语言与字符串

这个理论中,我们要把问题交为更具体的问题,“给定字符串s 和语言L ,s 是否在

L 中?”进行形式化之前,要先定义几个术语。

字母表(alphabet )记为∑,是个有限集。∑的成员称为符号(symbols )或字符

(characters )。 2.1 字符串

字符串(string )是某个字母表∑中符号的有限序列。给定字母表∑,可以从∑构造的最

短字符串是空串,记为ε。字母表∑中的所有字符串集合记为∑*。这里采用Kleene 星号运算

符,定义如例2.1所示。

例2.1 字母表

字母表名称

字母表符号 例子字符串 英语字母表

{a, b, c, …, z} ε, aabbcg, aaaaa 二进制字母表

{0, 1} ε, 0, 001100 星号字母表

音乐字母表 {}

教材中直接数符号和字符串写成like this 。

2.1.1 字符串函数

字符串s 的长度(length )记为|s |,是s 中的字符个数。例如:

|ε| = 0

|1001101| = 7

对任意符号c 和字符串s ,函数#c (s )定义为s 中符号c 出现的次数,例如#a (abbaaa)=4。

接合(concatenation )字符串s 与t 写成s ||t 或st ,就是在s 后面添加t 。例如,如果x = good ,

y = bye ,则xy = goodbye 。因此|xy | = |x | + |y |。

空串ε在接合字符串时,字符串不变,因此∀x (x ε = εx = x )。

接合作为字符串函数是结合性的,因此∀s ,t ,w ((st )w = s (tw ))。

下面定义字符串复制(replication )。对每个字符串w 和自然数i ,w i 定义为

w 0 = ε

w i +1 = w i w

8第2章语言与字符串

例如:

a3 = aaa

(bye)2 = byebye

a0b3 = bbb

最后,我们定义字符串的逆(reversal)。对每个字符串w,字符串的逆写成W R,定义为如果|w| = 0,则W R = w = ε。

如果|w|≥1,则∃a∈∑ (∃u∈∑* (w = ua)),(即w最后一个字符为a。)

然后定义W R=au R。

定理2.1 字符串的接合与逆

定理:如果w与x为字符串,则(wx)R=x R w R。

例如,(nametag)R = (tag)R(name)R = gateman。

证明:我们对|x|进行了归纳:

基本case:|x| = 0。则x=ε,(wx)R = (wε)R= (w)R = εw R=εR w R=x R w R。

证明:∀n≥0 (((|x| = n)→ ((wx)R= x R w R))→((|x| = n+1) →((wx)R = x R w R)))。

对任意字符串x,其中|x| = n+1,则x=ua,其中a为字符,|u|=n。因此:

(wx)R = (w(ua))R将x写成ua

= ((wu)a)R接合的结合律

= a(wu) R逆的定义

= a(u R w R) 归纳假设

=(au)R w R接合的结合律

=(ua)R w R逆的定义

=x R w R将ua写成x

2.1.2 字符串的关系

字符串s为t的子串(substring)的充分必要条件为s在t中连续出现。例如:

aaa是 aaabbbaaa的子串

aaaaaa不是 aaabbbaaa的子串

字符串s为t的正子串(proper substring)的充分必要条件为s是t的子串,且s≠t。每个字符串是自己的子串,但不是其正子串。空串ε是任何字符串的子串。

字符串s是t的前缀(prefix)的充分必要条件为∃x∈∑*(t = sx)。字符串s是t的正前缀(proper prefix)的充分必要条件为s是t的前缀,且s≠t。每个字符串是自己的前缀,但不是其正前缀。空串ε是任何字符串的前缀。例如,abba的前缀为ε,a,ab,abb,abba。

字符串s是t的后缀(suffix)的充分必要条件为∃x∈∑* (t = xs)。字符串s是t的正后缀(proper suffix)的充分必要条件为s是t的后缀,且s≠t。每个字符串是自己的后缀,但不是其正后缀。空串ε是任何字符串的后缀。例如,abba的后缀为ε,a,ab,abb,abba。

2.2 语言 9

2.2 语言

语言(language)是有限字母表∑上的(有限或无限)字符串集。介绍多种语言时,可以用∑L表示语言L的字符串采用哪个字母表。

例2.2给定字母表定义语言

设∑ = {a,b}. ∑* = {ε,a,b,aa,ab,ba,bb,aaa,aab,...}.

∑上的语言例子包括:

Ø,{ε},{a,b},{ε,a,aa,aaa,aaaa,aaaaa},

{ε,a,aa,aaa,aaaa,aaaaa,...}

2.2.1 定义语言的方法

我们用各种方法定义语言。由于语言是集合,因此可以用任何时候集合定义方法定义。例如,可以指定特征函数,即对集合中每个元素为真而对其他元素为假的谓词。

例2.3所有a在所有b之前

设L={w{a

∈,b}*:,w中所有a在所有b之前},则字符串ε,a,aa,aaa,aabbb和bb属于L,而aba,ba与abc不属于L。注意有些字符串平凡满足L成员的要求。规则没有要求其中有a或b,只是说所有a在所有b之前(如果有)。如果没有a或没有b,则不会违反这个规则,因此字符串ε,a,aa与bb平凡满足L成员的要求。

例2.4字符串以a结尾

∈,b}*(x =ya)},则字符串a,aa,aaa,bbaa与ba属于L,而ε,bab 设L={x: ∃y{a

与bca不属于L。L中的所有字符串可以表示为{a,b}*中的字符串接合一个a到末尾。

例2.5用英语描述语言的问题

∈ 1, 2, 3, 4, 5, 6, 7, 8, 9}*,且x、y看成自然数的十进制表示时,设L={x#y:x,y{0,

square(x)=y}。字符串3#9和12#144属于L,而3#18、12与12#12#12不属于L。字符串#?是不是属于L?取决于怎么理解“x、y看成自然数的十进制表示”。ε是不是某个自然数的十进制表示?将字符串变成数字的算法可能将ε换算为0,则0是0的平方,因此#属于L。反过来,如果将字符串变成数字的算法认为ε是无效输入,则#不属于L。这个例子说明存在用英语描述语言的问题,即歧义性。我们只能使用无歧义的术语,下面将介绍其他避免这个问题的定义方法。

例2.6空语言

设L = {} = ∅,L是空语言,不包含任何字符串。

例2.7空语言不同于空串

L = {ε}是包含空串ε的语言,不同于空语言。

相关文档
最新文档