是否可以构造一个具有k个状态的NFA,它们识别长度为< = k的所有字符串并拒绝所有长度大于k的字符串?
答案 0 :(得分:0)
没有。证据是k
上的数学归纳。
基本案例:对于k = 0
,具有零状态的NFA可能甚至不是有效对象,当然也不能说是接受任何东西。编辑:可能还值得添加k = 1
,因为k = 0
案例是异常的。对于k = 1
,状态不接受(在这种情况下接受的语言为空)或者它正在接受,在这种情况下它只识别空字符串(如果没有消耗输入的转换存在)或无限制许多字符串(如果有任何转换消耗输入)。
归纳假设:假设所有k
直到并包括n
,没有NFA k
或更少的州接受长度不超过k
的字符串,拒绝长度大于k
的字符串。
归纳步骤:我们必须证明,没有k+1
个或更少的NFA接受长度不超过k+1
的字符串,并拒绝长度大于k+1
的字符串。假设有这样的NFA。考虑一下这个NFA的接受状态。除了初始状态之外必须至少有一个,因为NFA接受有限多个字符串而不仅仅是空字符串(参见k = 1的基本情况)。此外,NFA中必须有一些状态可以达到其他一些接受状态,因为必须消耗一些输入才能到达它们。考虑通过消耗一个输入符号可以达到这些其他接受状态的状态集。考虑一个新的NFA,将其他接受状态替换为标记为接受的这组新状态。得到的NFA在不超过k个状态时接受长度不超过k的所有字符串(因为我们从一组k + 1个状态中移除了至少一个其他接受状态)。这与归纳假设相矛盾,因此不存在不超过k + 1个状态的NFA接受所有长度不超过k + 1的字符串。
答案 1 :(得分:0)
声明长度< ķ。
对于长度< = k,考虑长度为k的字符串w。沿着某条道路被接受。此路径访问k + 1个州。由于只有k个不同的状态,因此至少有一个状态被访问两次。所以路径中有一个循环。该循环可以进行任意次。因此,可以接受无限多的字符串,特别是也可以是长度超过k的字符串。