多少个字长


9

编辑:现在基本上可以回答这个问题了;请参阅此博客条目以了解更多详细信息。感谢所有在这里发表评论和回答的人。


原始问题

这是在MathOverflow上提出问题的一个希望更聪明,更明智的版本。当我问这个问题时,我什至不知道我的问题所在的数学领域的名称。现在,我很确定它位于部分词的算法组合中。(最近的一本书的主题在这里。)

我想列出一个单词列表 l字母。每个字的长度正好k。这笔交易是,如果ajb 在列表中 是通配符/无关符号,然后 ajb永远不会再出现在列表中。(如果a=b, 或者如果 j=0 因此,禁止的子词是 ab

例子在哪里 k=4l=5

abcd
bdce
dcba <-禁止,因为 dc 出现在上面的行中
aeed <-禁止,因为 ad 出现在第一行

我发现的有关“可避免的偏词”的文献都是不完整的-如果单词的大小足够大,最终将不可避免地出现某些单词模式。我想找到这些定理的最终版本。所以,问题:

给出部分形式 ajb 用...的字母 l 字母,多少个单词的长度 k 避免它,它们是否可以在多项式时间内显式生成?

我不希望上面的问题很难解决,除非我缺少一个微妙之处,否则我自己可以计算出来。我在此网站上发布的真正原因是因为我需要对我的应用程序中此类单词列表的属性有更多了解,所以我希望有人可以回答以下问题:

是否对此进行了一般性研究?有哪些论文需要考虑,不仅是部分单词最终是否不可避免,还需要“花多长时间”才能避免?

谢谢。


(1)我无法理解您的第一个问题和前面提到的例子之间的对应关系。您的示例中输入了什么?(2)在第一个问题中,您是否将k用于两个不同的目的?
伊藤刚(Tsuyoshi Ito)

关于(2),是的,我犯了一个错误,现在编辑,谢谢。
亚伦·斯特林

关于(1),一旦出现部分单词,我想知道“我还剩下多少空间”。但是,是的,真正的问题是如何生成类似于示例中出现的列表(没有禁止的部分单词)。所以输入将是kl,以及要在列表中产生的所需单词数,所有这些单词均具有“避免以前出现部分单词属性”。
亚伦·斯特林

2
@Aaron,我不知道您的最终应用程序是什么,但是Davenport-Schinzel序列(和通用化)询问的是不包含特定重复模式的字符串的最大长度。这是一个相关的概念。
Suresh Venkat

1
塞思·佩蒂(Seth Pettie)也一直在研究禁止子矩阵的一些非常漂亮的概括。
Suresh Venkat

Answers:


4

这是一种特殊情况:长度为二进制的单词数 k 这样就不会连续出现两个 F(k+3),在哪里 F(n) 是个 nth 斐波那契数(以 F(1)=1,F(2)=1)。证明是通过Zeckendorf表示

编辑:我们可以将此初始特殊情况扩展为稍大的特殊情况 a0a。考虑长度的字符串k 超过大小字母 l+1 这样的信 a没有连续出现两次。让f(k)是此类字符串的数量(我们将其称为“有效”)。我们声称:

f(k)=lf(k1)+lf(k2)
f(0)=1,f(1)=l+1
直觉是我们可以构造一个有效的长度字符串 k 通过以下方式之一:a)毗邻任何 l 不是的字母 a 到有效长度的字符串 k1或b)在字母旁 a 然后除了其他字母 a 到有效长度的字符串 k2

您可以验证以下是上述重复发生的不公开表格:

f(k)=i=0k(k+1ii)lki
我们了解的地方 (ni)=0 什么时候 i>n

编辑2:让我们再敲一个案例-一个 0b,ab。我们将通过l-不包含子字符串的元素字母 ab,“有效”并让 Sk 表示一组有效的长度的字符串 k。进一步,让我们定义Tk 成为...的子集 Sk 由以开头的字符串组成 bUk 成为那些不以...开头的人 b。最后,让f(k)=|Sk|g(k)=|Tk|h(k)=|Uk|

我们观察到 g(0)=0,h(0)=1,f(0)=1g(1)=1,h(1)=l1,f(1)=l。接下来,我们推断以下重复发生:

g(k+1)=f(k)h(k+1)=(l1)h(k)+(l2)g(k)
首先来自以下事实: b 到任何元素的开头 Sk 产生一个元素 Tk+1。第二个是观察到我们可以构造一个元素Uk+1 通过添加除 b 在任何元素的前面 Uk 或添加除 a 要么 b 在任何元素的前面 Tk

接下来,我们重新排列递归方程以获得:

f(k+1)=g(k+1)+h(k+1)=f(k)+(l1)h(k)+(l2)g(k)=f(k)+(l1)f(k)g(k)=lf(k)f(k1)

我们可以通过生成函数的东西来弄乱代码,或者,如果我们很懒,直接去Wolfram Alpha,就可以得到一个相当不透明的封闭形式的解决方案。但是,通过在OEIS中进行一些谷歌搜索和查找,我们实际上发现:

f(k)=Uk(l/2)
哪里 Uk 是个 kth 第二种Chebyshev多项式(!)。

非常有趣,谢谢。
亚伦·斯特林

2

对于第一个问题,一种完全不同的方法是重用对最近的问题的答案,以生成常规语言的单词:只需将这些算法应用于长度即可k 用普通语言 ΣaΣjbΣ 哪里 Σ 是字母。


谢谢。我想知道是否可能存在连接,而您在这里的回答给了我推动我查看那里引用的论文的动力,而其中之一肯定可以解决我正在考虑的问题之一。
亚伦·斯特林

0

更新:此答案不正确

假设 j是固定的,我们可以指望的数量方面的模式ajb 可以匹配:第一个 a 符号可以在某些位置匹配 1ikj1,而我们有 li1 在那之前的可能性, lj 之间 ablkji1 对于字符串的其余部分,因此总计

i=1kj1li1ljlkji1=(kj1)lk2
案件。正如伊藤刚(Tsuyoshi Ito)在评论中指出的,此计数不是匹配的不同单词的数量ajb因为单个单词可能以不同的方式匹配相同的模式。例如aa 被匹配三次 aaaaab 两次 ababab 两次 aabb。我们可以尝试多次计算匹配模式的方式数,并表现出“ inclusion-exclusion”表达式,但是模式可能重叠的方式使时间太长。

对于第一个问题,在了解到 j 是不固定的,即我们要避免嵌入单词 ab

  • 要么 a 第一个符号永不出现,这占 (l1)k 可能的话
  • 要么 a 首先出现在某个位置 1ik,那么我们不能使用 b 剩下的就是: (l1)i1 高达以下因素的选择 a(l1)ki 其余的选择,总计 i=1k(l1)i1(l1)ki=k(l1)k1可能的话。是否a=b 是无关紧要的。

对于第二个问题,我没有太多建议。与词嵌入有关系,但是我知道的有关Higman引理的错误序列的结果并不立即适用。


非常感谢,Sylvain,尽管我认为那是不对的。我们可以用b 这个词的后面 a出现。我们只是不能使用b 如果确实有 j 中间的字母 ab如果 ajb出现较早。也许我误会了你的论点。
亚伦·斯特林

对不起,我不确定 j是否固定。我已经用固定方式编辑了答案j也一样
西尔万

1
我认为fixed-j情况不正确。例如,如果k = 4且j = 1,则单词aabb被减去两次。我还没有读过非固定式J案。
伊藤刚(Tsuyoshi Ito)

@Tsuyoshi Ito:是的,在那种情况下没有唯一的匹配。
西尔万

请这样标记错误答案。
伊藤刚(Tsuyoshi Ito)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.