趣题:构造无穷长的字符串序列使每一项都不包含它前面的项

    如果删除字符串A中的若干字母可以得到字符串B,我们就说A包含B(熟悉相关概念的网友可能知道,有一个准确的说法叫做“B是A的子序列”,但为了避免和后面的“序列”混淆,我们不用这种说法)。例如,字符串“matrix”包含了“mix”,也包含“ati”,但不包含“it”。字符串序列aaaaa, ab, bbaa, baaaa, aa, bbacc, cbcacc, bb中的每个字符串都不包含它前面的任何一个字符串,我们称这样的字符串序列为“非生成序列”(我自己取的名字,意思是说任一字符串都不能由前面的项通过添加字母生成出来)。我们可以构造出任意长的非生成序列,例如字符串长度严格递减的序列,或者所有不同的长度为n的字符串。现在的问题是,你能构造出一个无穷长的非生成序列吗?当然,你不能使用无穷多种字母来达到这一点。


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    你被骗了!事实上,虽然我们能构造出任意长的非生成序列,但我们永远不能构造出无穷长的非生成序列。我们有一个很简单的证明。
    假设存在非生成序列,不妨找出所有非生成序列中最“小”的(位于前面的字符串尽可能短的)那一个。换句话说,在所有非生成序列中筛选出第一项最短的,再从中选择出那些第二项最短的,再在剩下的结果中选择序列第三项最短的……由此得到按各项字符串长度来看最靠前的那一个非生成序列。这个序列中有无数多个字符串,但所用到的字母却是有限的;考察所有字符串的首字母,必然有某一个字母出现了无穷多次。不妨设这个字母是“b”,且以b开头的字符串最早出现在第x项。把所有以字母b打头的字符串取出来形成一个临时序列(因此这个临时序列是一个无限长的、每个字符串都以b开头的序列)。删去临时序列中所有字符串的首字母。用这个临时序列替换掉原序列中第x项及其以后的部分。得到的新序列仍是一个无穷多项的非生成序列(倘若新序列中有字符串A可以生成字符串B,则B前面补回一个字母b,或者A和B前面都补上一个“b”,可知原序列中的A也能生成B),但按各项字符串长度来看,它的次序比原来更靠前,矛盾。

    有觉得这个证明有些别扭吗?这是因为,这个证明用到了选择公理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值