Quantas palavras de comprimento

9

EDITADO PARA ADICIONAR : Esta questão agora está essencialmente respondida; consulte esta entrada do blog para obter mais detalhes. Obrigado a todos que postaram comentários e respostas aqui.


PERGUNTA ORIGINAL

Esta é uma versão esperançosamente mais inteligente e bem informada de uma pergunta que fiz no MathOverflow. Quando fiz essa pergunta, eu nem sabia o nome da área da matemática em que estava o meu problema. Agora, tenho certeza de que está na Combinatória Algorítmica de Palavras Parciais. (Livro recente sobre o assunto aqui .)

Quero fazer uma lista de palavras em l letras. Cada palavra tem comprimento exatamente k . O negócio é, se ajb está na lista, onde é um símbolo wildcard /-cuidado não tem, então, ajb pode nunca aparecem novamente na lista. (O mesmo vale se a=b , ou se j=0 e, portanto, a subpalavra proibida é ab .)

Exemplo onde k=4 e l=5 :

abcd
bdce
dcba <- proibida por causadc apareceu na linha acima
aeed <- proibida porquead apareceu na primeira linha

A literatura sobre "palavras parciais evitáveis" que encontrei foi infinita - eventualmente algum padrão de palavras é inevitável se o tamanho da palavra for grande o suficiente. Eu gostaria de encontrar versões financeiras de tais teoremas. Então, pergunta:

Dada uma palavra parcial da forma em um alfabeto de l letras, quantas palavras de comprimento k a evitam e podem ser explicitamente produzidas em tempo polinomial?ajblk

Não espero que a pergunta acima seja difícil e, a menos que exista uma sutileza, posso calcular ela mesma. A verdadeira razão pela qual estou postando neste site é porque preciso saber muito mais sobre as propriedades dessas listas de palavras para o meu aplicativo, por isso espero que alguém possa responder à pergunta a seguir:

Isso foi estudado em geral? Quais são alguns artigos que consideram, não apenas se uma palavra parcial é inevitável, mas "quanto tempo leva" antes de se tornar inevitável?

Obrigado.

Aaron Sterling
fonte
(1) Não consigo entender a correspondência entre sua primeira pergunta e o exemplo exposto anteriormente. Qual é a entrada no seu exemplo? (2) Na sua primeira pergunta, você está usando k para dois propósitos diferentes?
Tsuyoshi Ito
Em relação a (2), sim, cometi um erro, agora editado, obrigado.
Aaron Sterling
Em relação a (1), gostaria de saber "quanto espaço me resta" quando uma palavra parcial aparecer. Mas sim, a verdadeira questão é como produzir listas como a que aparece no exemplo (sem as palavras parciais proibidas). Assim, a entrada seriam os valores de e L , e um número desejado de palavras para produzir em uma lista, todas as quais tinham o "evitar anteriormente aparecem palavras parciais propriedade." kl
Aaron Sterling
2
@ Aaron, não sei qual é a sua aplicação final, mas as sequências de Davenport-Schinzel (e generalizações) perguntam sobre o comprimento máximo de uma string que não contém um padrão de repetição específico. É uma noção relacionada.
Suresh Venkat
11
Seth Pettie também estudou algumas generalizações muito bacanas para submatrizes proibidas.
Suresh Venkat

Respostas:

4

Aqui é um caso especial: o número de palavras binárias de comprimento de tal modo que não há dois uns aparecem consecutivamente é F ( k + 3 ) , em que M ( N ) é o n t h número de Fibonacci (começando com F ( 1 ) = 1 , F ( 2 ) = 1 ). A prova é através da representação Zeckendorf .kF(k+3)F(n)nthF(1)=1,F(2)=1

EDIT: Podemos estender esse caso especial inicial para o caso especial um pouco maior de . Considere cadeias de comprimento k sobre um alfabeto de tamanho l + 1 , para que a letra a não apareça duas vezes consecutivas. Seja f ( k ) o número de tais strings (que chamaremos de "válidos"). Afirmamos que: f ( k ) = l f ( k - 1 ) + l f ( k - 2 )a0akl+1af(k)

f(k)=lf(k1)+lf(k2)
O intuição é que podemos construir uma cadeia válida de comprimento k , alternativamente: a) adjacente qualquer das l letras que não são um a uma cadeia válida de comprimento k - 1 , ou b) ao lado da letra a e, em seguida, qualquer outra letra, exceto a, a uma sequência válida de comprimento k - 2 .
f(0)=1,f(1)=l+1
klak1aak2

Você pode verificar se o seguinte é um formulário fechado para a recorrência acima: onde entendemos quando .

f(k)=i=0k(k+1ii)lki
(ni)=0i>n

EDIÇÃO # 2: Vamos eliminar mais um caso - a . Chamaremos as strings sobre um alfabeto de elemento que não contém a subcadeia , "valid" e deixaremos denotar o conjunto de strings válidas de comprimento . Além disso, vamos definir ser o subconjunto de consistindo de cordas começando com e a ser aqueles que não comece por . Finalmente, deixe,,.0b,ablabSkkTkSkbUkbf(k)=|Sk|g(k)=|Tk|h(k)=|Uk|

Observa-se que e . Em seguida, inferimos as seguintes recorrências: O primeiro vem do fato de que adicionar ao início de qualquer elemento de produz um elemento de . O segundo vem da observação de que podemos construir um elemento de adicionando qualquer caractere, mas à frente de qualquer elemento de ou adicionando qualquer caractere, mas ou à frente de qualquer elemento em .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)
bSkTk+1Uk+1bUkabTk

Em seguida, reorganizamos as equações de recorrência para obter:

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)

Podemos obter uma solução de forma fechada bastante opaca para essa recorrência, mexendo um pouco com a geração de coisas funcionais ou, se tivermos preguiça, indo direto para o Wolfram Alpha . No entanto, com um pouco de pesquisa e pesquisa no OEIS , descobrimos que realmente temos: onde é o polinômio Chebyshev do segundo tipo (!) .

f(k)=Uk(l/2)
Ukkth
mhum
fonte
Isso é muito interessante, obrigado.
Aaron Sterling
2

Uma abordagem completamente diferente para a primeira pergunta reutiliza as respostas da pergunta recente sobre a geração de palavras em uma linguagem regular : basta aplicar esses algoritmos para o comprimento na linguagem regular , onde é o alfabeto.kΣaΣjbΣΣ

Sylvain
fonte
Obrigado. Fiquei me perguntando se poderia haver uma conexão, e sua resposta aqui me deu o impulso necessário para olhar para os documentos mencionados lá, e um deles definitivamente resolve um pedaço de um dos problemas que estou considerando.
Aaron Sterling
0

Atualizado: esta resposta está incorreta :

assumindo que é fixo, podemos contar o número de maneiras que um padrão pode ser correspondido: o primeiro que símbolo pode ser correspondido em alguma posição , e temos possibilidades antes desse ponto, entre e , e para o restante da corda, assim, um total de casos. Conforme observado por Tsuyoshi Ito nos comentários, essa contagem não é o número de palavras diferentes correspondentesjajba1ikj1li1ljablkji1

i=1kj1li1ljlkji1=(kj1)lk2
ajbuma vez que uma única palavra poderia corresponder ao mesmo padrão de maneiras diferentes. Por exemplo, é correspondido três vezes em , duas vezes em e duas vezes em . Podemos tentar contar o número de maneiras de combinar padrões várias vezes e exibir uma expressão de "inclusão-exclusão", mas a maneira como o padrão pode se sobrepor torna isso muito longo.aaaaaaababababaabb

Para a primeira pergunta, entendendo que não é fixo, ou seja, queremos evitar a incorporação da palavra :jab

  • quer primeiro símbolo nunca aparece, o que representa palavras possíveis,a(l1)k
  • ou aparece em primeiro lugar em alguma posição , então não pode utilizar no restante da palavra: existem escolhas para o factor de até , e opções para o restante, fornecendo um total de palavras possíveis. Se é irrelevante.a1ikb(l1)i1a(l1)kii=1k(l1)i1(l1)ki=k(l1)k1a=b

Para a segunda pergunta, não tenho muito o que sugerir; existe uma relação com a incorporação de palavras, mas os resultados que conheço sobre más sequências para o lema de Higman não se aplicam imediatamente.

Sylvain
fonte
Muito obrigado, Sylvain, embora eu não ache isso certo. Podemos usar posteriormente na palavra se aparecer. Nós apenas não pode usar se houver exatamente letras em entre e , se apareceu mais cedo. Talvez eu esteja entendendo mal o seu argumento. babjabajb
Aaron Sterling
Desculpe, eu não tinha certeza se foi corrigido ou não. Também editei a resposta com fixo . jj
19411 Sylvain
11
Eu não acho que o caso j fixo está correto. Por exemplo, se k = 4 ej = 1, a palavra aabb é subtraída duas vezes. Eu não li o caso não-fixo-j.
Tsuyoshi Ito
@ Tsuyoshi Ito: você está certo, não há correspondência única nesse caso.
21411 Sylvain
Por favor, marque uma resposta incorreta como tal.
Tsuyoshi Ito