Answers:
为了保持该语句,即使使用一进制字母,f也必须按指数增长。
[编辑:版本2中的分析略有改进。]
这是一个证明草图。假定该语句成立,令f为一个函数,以使每个具有最多n个状态的NFA 都接受长度最大为f(n)的所有字符串,并接受所有字符串。我们将证明,对于每一个ç > 0且足够大ñ,我们有˚F(ñ)> 2 Ç ⋅√ ñ。
的素数定理意味着对于每ç <LG e和对于足够大的ķ,至少有Ç ⋅2 ķ / ķ范围素数[2 ķ,2 ķ 1 ]。我们取c = 1。对于这样的k,令N k = / 2 k / k⌉,并如下定义NFA M k。令p 1,…,p N k为[2 k,2 k +1]范围内的不同素数]。NFA M k具有S k = 1 + p 1 +…+ p N k个状态。除了初始状态之外,状态被划分为N k个周期,其中第i个周期的长度为p i。在每个周期中,除一个状态外,所有状态均为接受状态。初始状态有N k个输出边缘,每个边缘都进入每个周期中被拒绝状态之后的状态。最后,初始状态也被接受。
令P k为乘积p 1 … p N k。很容易看出,M k接受长度小于P k的所有字符串,但拒绝长度为P k的字符串。因此,˚F(小号ķ)≥ P ķ。
需要注意的是小号ķ ≤1 + Ñ ķ ⋅2 ķ 1 = O(2 2 ķ)和P ķ ≥(2 ķ)Ñ ķ ≥2 2 ķ。其余的是标准的。
好的,这几乎是我可以获得的最佳结构,看看是否有人提出了更好的想法。
定理。对于每个在带有字母上有一个状态NFA,使得不在中的最短字符串的长度为。(5 Ñ + 12 )中号&Sigma; | Σ | = 5 大号(中号)(2 ñ - 1 )(Ñ + 1 )+ 1
这将给我们。
构造与Shallit的构造几乎相同,除了我们直接构造NFA而不是首先使用正则表达式表示语言。让
。
对于每个,我们将构建NFA识别语言,其中是以下序列(以为例):Σ * - { 小号ñ } š Ñ Ñ = 3
。
我们的想法是,我们可以构建一个由五个部分组成的NFA。
请注意,我们确实希望接受而不是,因此,一旦发现输入序列违反上述行为之一,我们将立即接受该序列。否则步骤,NFA将处于唯一可能的拒绝状态。并且如果序列长于,NFA也接受。因此,任何满足以上五个条件的NFA都只会拒绝。{ s n } | s n | | s n | 小号ñ
直接检查下图而不是进行严格的证明可能很容易:
我们从左上方开始。第一部分是启动器,然后是计数器,然后是一致性检查器,终结器,最后是加一检查器。所有没有终端节点的圆弧都指向右下角状态,这是一个永远的接受体。由于缺少空间,某些边缘未标记,但可以轻松恢复。虚线表示具有边缘的个状态的序列。n − 2
我们可以(痛苦地)验证NFA 仅拒绝,因为它遵循上述所有五个规则。因此,构造了一个具有的状态NFA ,满足了定理的要求。(5 n + 12 )| Σ | = 5
如果结构中有任何不清楚/问题,请发表评论,我将尝试解释/解决。
Jeffrey O. Shallit等人已经研究了这个问题,实际上对于仍然有的最优值。(关于一元语言,请参阅Tsuyoshi答案中的注释)| Σ | > 1
在他关于普遍性的演讲的第46-51页中,他提供了一种结构,使得:
定理。对于对于足够大的,在二进制字母上存在一个状态NFA,使得对于不在中的最短字符串的长度为。。Ñ Ñ 中号大号(中号)Ω (2 ç Ñ)c ^ = 1 / 75
因此,的最佳值介于和。我不确定近年来Shallit的结果是否有所改善。2 n / 75 2 n