Quão difícil é embaralhar uma string?


117

Um embaralhamento de duas strings é formado pela intercalação dos caracteres em uma nova string, mantendo os caracteres de cada string em ordem. Por exemplo, MISSISSIPPIé um embaralhamento de MISIPPe SSISI. Deixe-me chamar um quadrado de cadeia de caracteres, se for uma mistura de duas cadeias idênticas. Por exemplo, ABCABDCDé quadrado, porque é um embaralhamento de ABCDe ABCD, mas a sequência ABCDDCBAnão é quadrada.

Existe um algoritmo rápido para determinar se uma string é quadrada ou é NP-difícil? A abordagem óbvia de programação dinâmica parece não funcionar.

Até os seguintes casos especiais parecem difíceis: (1) cadeias nas quais cada caractere aparece no máximo quatro seis vezes e (2) cadeias com apenas dois caracteres distintos. Como aponta Por Austrin abaixo, o caso especial em que cada personagem ocorre no máximo quatro vezes pode ser reduzido para 2SAT.


Atualização: Esse problema possui outra formulação que pode facilitar a prova de dureza.

Considere um gráfico G cujos vértices são os inteiros de 1 a n; identifique cada aresta com o intervalo real entre seus pontos finais. Dizemos que duas arestas de G estão aninhadas se um intervalo contém adequadamente o outro. Por exemplo, as arestas (1,5) e (2,3) estão aninhadas, mas (1,3) e (5,6) não, e (1,5) e (2,8) não. Uma correspondência em G não é aninhada se nenhum par de arestas estiver aninhado. Existe um algoritmo rápido para determinar se G tem uma correspondência perfeita não aninhada ou esse problema é difícil de NP?

  • Desembaralhar uma sequência é equivalente a encontrar uma correspondência perfeita não aninhada em uma união separada de cliques (com arestas entre caracteres iguais). Em particular, desordenar uma sequência binária é equivalente a encontrar uma correspondência perfeita não aninhada em uma união disjunta de duas panelinhas. Mas nem sei se esse problema é difícil para gráficos gerais ou fácil para qualquer classe interessante de gráficos.

  • Existe um algoritmo de tempo polinomial fácil para encontrar combinações sem cruzamento perfeitas .


Atualização (24/06/2013): O problema está resolvido! Agora existem duas provas independentes de que a identificação de cadeias quadradas é NP-completa.

Há também uma prova mais simples de que encontrar combinações perfeitas não aninhadas é difícil para o NP, devido a Shuai Cheng Li e Ming Li em 2009. Consulte " Sobre dois problemas em aberto de padrões de 2 intervalos ", Theoretical Computer Science 410 (24–25 ): 2410-2323, 2009.


2
A sequência não é apenas A000984, o "número de valores possíveis de um número binário de 2 * n bits para os quais metade dos bits está ativada e a outra desativada"?
Travis Brown

5
@ Travis, a menos que eu esteja entendendo errado: para n = 4, 10000111 é um número binário de 2 * n bits para o qual metade dos bits está ativada e a outra desativada, mas que não é um quadrado, conforme definido. Seguindo essa lógica, como os quadrados são um subconjunto estrito do conjunto que gera A000984, os valores dos quadrados em um alfabeto binário devem ser mais baixos em índices iguais na sequência - não?
precisa saber é o seguinte

1
Observação: Usando o formalismo do gráfico, seja 2n o número de vértices em G. Seja G ′ um gráfico obtido do gráfico de linhas de G adicionando as arestas entre os vértices correspondentes às arestas aninhadas de G. O problema pergunta se G ′ tem um conjunto independente de tamanho n. Existem várias classes de gráficos em que um conjunto independente máximo pode ser computado no tempo polinomial. Se seguirmos esse caminho, a pergunta é: que propriedades agradáveis ​​G 'possui? (mais)
Tsuyoshi Ito

2
@ Radu: Eu não acho que a fração de quadrados para não quadrados (sobre alfabetos binários) converge para 1/3. Fiz algumas simulações de Monte Carlo que indicam uma lenta convergência para 1/2. Portanto, no limite, essencialmente todas as cadeias binárias com números pares de 0 e 1 são quadrados. Isso é surpreendente para mim e pode ser explorável em um algoritmo. Para alfabetos maiores, a fração de quadrados parece convergir rapidamente para 0.
Martin Berger

8
Como essa pergunta é mencionada na postagem de hoje, vamos ver se podemos obter um interesse renovado na solução desse problema. Faz um ano que essa pergunta foi apresentada, e conquistamos muitos novos usuários desde então. Eu coloquei uma recompensa de 100 representantes para a pergunta.
Alex10 Brink

Respostas:


66

Michael Soltys e eu conseguimos provar que o problema de determinar se uma string pode ser escrita como um shuffle quadrado é NP completo. Isso se aplica mesmo a um alfabeto finito com apenas símbolos distintos, embora nossa prova seja escrita para um alfabeto com 9 símbolos. Esta pergunta ainda está aberta para alfabetos menores, digamos com apenas 2 símbolos. Não analisamos o problema sob a restrição de que cada símbolo aparece apenas 6 vezes (ou, geralmente, um número constante de vezes); então essa pergunta ainda está aberta.7926

A prova usa uma redução de Partition. É muito longo para postar aqui, mas uma pré-impressão, "Descompactar uma string é NP -hard", está disponível em nossas páginas da web em:3NP

http://www.math.ucsd.edu/~sbuss/ResearchWeb/Shuffle/

e

http://www.cas.mcmaster.ca/~soltys/#Papers .

O artigo foi publicado no Journal of Computer System Sciences:

http://www.sciencedirect.com/science/article/pii/S002200001300189X


11
Impressionante!! (E, para meu imenso alívio, a sério não trivial.)
Jeffε

15
Obrigado. StackExchange foi a nossa fonte para esta pergunta. É um ótimo recurso!
Sam Buss

9
@SamBuss um pequeno pedido: enquanto você cita a pergunta de Jeff, você menciona apenas a solução de Per Austrin no texto. Se você olhar para as respostas, também há uma maneira de gerar uma citação formal (clique no botão compartilhar e clique no link 'citar'). Dessa forma, você também pode gerar uma citação adequada para a resposta de Per. Menciono isso apenas para que as pessoas que fazem contribuições formais no site também possam obter reconhecimento formal. Obrigado ! e parabéns por resolver este problema
Suresh Venkat

2
@SureshVenkat. Obrigado pela dica: isso é útil. Eu adicionei isso à versão online do artigo.
Sam Buss

O problema de reconhecer um shuffle quadrado agora mostrou-se difícil, mesmo em um alfabeto binário: sciencedirect.com/science/article/pii/S0304397519300258
a3nm

58

Para o caso especial que você menciona quando cada personagem aparece no máximo quatro vezes, há uma redução simples para 2-SAT (a menos que esteja faltando alguma coisa ...), da seguinte maneira:

O ponto crucial é que, para cada personagem, existem (no máximo) duas maneiras válidas de combinar as ocorrências do personagem (a terceira possibilidade será aninhada). Use uma variável booleana para representar qual das duas correspondências é escolhida. Agora, uma atribuição a essas variáveis ​​fornece um desarranjo válido da sequência iff para cada par de arestas aninhadas, nem as duas foram escolhidas. Essa condição pode ser descrita com precisão por uma disjunção das variáveis ​​(possivelmente negadas) correspondentes aos dois caracteres envolvidos.


Agradável. A mesma idéia generaliza para cadeias em que cada caractere ocorre no máximo seis vezes, mas o resultado é uma instância de 5-SAT. :-(
Jeffε

2
Esta resposta é a favorita para ganhar a recompensa.
Jeffε

então isso parece provar que o problema é o NPC e por que precisamos de longas provas de conferência e diário?
T ....

@ Turbo Muito atrasado, mas isso não prova que o problema seja NPC porque o 2-SAT não é NPC; está em P.
Steven Stadnicki

Essa redução para 2-SAT funciona se o tamanho do alfabeto for ilimitado?
Mohammad Al-Turkistany

11

Aqui está um algoritmo que pode ter alguma chance de estar correto, embora pareça complicado de provar e eu não apostaria a casa nele ...

Digamos que seja eliminado se, para cada borda e , existir uma correspondência perfeita (possivelmente aninhada) de G que use e e não use nenhuma borda contida em ou contendo e .GeGee

É fácil testar se é purgado e se não encontra as arestas violadoras. Claramente, nenhuma dessas arestas violadoras pode ser usada em uma combinação perfeita sem aninhamento de G ; portanto, é seguro removê-las da consideração. Repetindo esse processo, obtemos um subgrafo limpo (exclusivo) de G que possui uma correspondência perfeita não aninhada se GGGGG tiver.

Agora vem o salto de fé, que pode ou não estar correto: a esperança é que, em um gráfico eliminado, se ainda houver vértices de grau , possamos fazer a escolha gananciosa e combinar o primeiro vértice com o primeiro vizinho. (ou equivalente, remova as bordas de todos os outros vizinhos).>1

Após a escolha gananciosa, limpamos o gráfico novamente, e assim por diante, e o processo termina quando o gráfico é (com sorte) uma correspondência perfeita sem aninhamento.

No começo, pensei que isso seria mais ou menos como ter uma pequena visão do algoritmo ganancioso e não realmente funcionar, mas achei surpreendentemente difícil criar um contra-exemplo.


Sou cético em relação à segunda fase gananciosa, mas limpar o gráfico parece útil. No contexto original da string, em que o gráfico é a união desmembrada de cliques, você pode dizer algo sobre a estrutura do gráfico limpo? Ainda é uma união desmembrada de panelinhas? (Em outras palavras, você pode particionar as ocorrências de cada caractere na seqüência de entrada para que os caracteres em diferentes partes não podem ser combinados?)
Jeffε

2
Para a segunda pergunta, considere a sequência 'aaaa'. A purga remove as bordas 1-4 e 2-3, dando um ciclo de 4. Duas variações da segunda etapa gananciosa que também seriam suficientes e que não encontrei nenhum contraexemplo são: 1) Um gráfico eliminado possui uma correspondência perfeita não aninhada se tiver uma correspondência perfeita (isso parece incomparável à etapa gananciosa) . 2) Em um gráfico eliminado com uma correspondência perfeita sem aninhamento, todas as arestas são usadas em alguma correspondência perfeita sem aninhamento (isso é mais forte do que a etapa gananciosa e o primeiro item, para que seja mais fácil refutar).
Por Austrin 29/08/10

11

A solução que Sam Buss e eu propusemos em novembro de 2012 (mostrando que a separação de um quadrado em NP-hard por uma redução de 3-Partition) agora é um artigo publicado no Journal of Computer System Sciences:

http://www.sciencedirect.com/science/article/pii/S002200001300189X


2
Isso realmente deveria ser uma edição da resposta anterior de Sam Buss, em vez de uma resposta separada. Você pode clicar em "editar" para sugerir uma edição para a resposta de outra pessoa, e sua edição será revisada por outros usuários do site.
DW

11

Romeo Rizzi e Stéphane Vialette provam que o reconhecimento de cadeias de caracteres quadradas é NP-completo em seu artigo de 2013 " Sobre o reconhecimento de palavras que são quadrados para o produto aleatório ", reduzindo o maior problema de subsequência binária. Eles afirmam que a complexidade de descodificar as seqüências binárias ainda está aberta.

Uma prova ainda mais simples de que encontrar a combinação perfeita não aninhada é NP-complete é dada por Shuai Cheng Li e Ming Li em seu artigo de 2009 " Sobre dois problemas abertos de padrões de 2 intervalos ". No entanto, eles usam terminologia herdada da bioinformática. Em vez de "correspondência perfeita não aninhada", eles chamam de "problema DIS-2-IP- {<,} ". A equivalência entre os dois problemas é descrita por Blin, Fertin e Vialette :

O problema 2-IP-DIS- {<,} tem uma formulação imediata em termos de correspondências restritas nos gráficos gerais: dado um gráfico G juntamente com uma ordem linear π dos vértices de G , o 2-IP-DIS- {<,} é equivalente a encontrar uma cardinalidade máxima correspondente a M em G com a propriedade que, para quaisquer duas arestas distintas {u,v} e {u,v} de M nemmin{π(u),π(v)}<min{π(u),π(v)} emax{π(u),π(v)<max{π(u),π(v)}nem min{π(u),π(v)}<min{π(u),π(v)} e max{π(u),π(v)}<max{π(u),π(v)} ocorrem.

Atualização (25 de fevereiro de 2019): Bulteau e Vialette mostraram que o problema de decisão de ordenar uma sequência binária é NP-completo em seu artigo, Reconhecer quadrados de reprodução aleatória binária é NP-difícil .


Não vejo a conexão e não vejo onde os autores alegam que a desarticulação de uma string é equivalente ao seu problema.
Suresh Venkat

2
Eles não dizem que é equivalente a embaralhar; é um problema mais geral.
Jeffε

@SureshVenkat Editei minha resposta, espero que seja mais clara. Basicamente, o que eles estão dizendo na nota de rodapé é que quaisquer duas arestas na correspondência ( ) são não aninhadas. M
Mohammad Al-Turkistany

Na versão publicada real, a equivalência é declarada na página 320. books.google.com/…
Mohammad Al-Turkistany

Editado para enterrar o lede .
Jeffε

9

7
Boa referência. É difícil ver como os resultados se aplicariam ao meu problema, mas talvez as técnicas ajudem. É fácil saber se uma determinada sequência X é uma reprodução aleatória de duas cópias de outra sequência Y. O artigo em anexo prova que é NP difícil decidir se uma determinada sequência X é uma reprodução aleatória de qualquer número de cópias de outra sequência Y. Eu quero saber se uma determinada seqüência de X é um arrastar de duas cópias de alguns Y. corda DESCONHECIDO
Jeffε

5

NUNCA MENTE, ESTA RESPOSTA ESTÁ ERRADA. Ele falha na entrada "AABAAB": combinar avidamente os dois primeiros As torna impossível combinar os símbolos restantes. Estou deixando para lá, em vez de excluí-lo, para ajudar outras pessoas a evitar o mesmo erro.

Parece-me que é sempre seguro associar cada caractere sucessivo do suposto quadrado avidamente a outro caractere igual que esteja na posição o mais cedo possível. Ou seja, acho que o seguinte algoritmo de tempo linear deve funcionar:

Faça um loop em cada posição i na sequência de entrada, i = 0, 1, 2, ... n. Para cada posição i, verifique se essa posição já foi correspondida com alguma posição anterior na sequência. Caso contrário, combine-o com um caractere igual que vem após a última posição já correspondida e, caso contrário, o mais cedo possível na sequência. Se uma correspondência não for encontrada para algum caractere, declare que a entrada não é um quadrado; caso contrário, é o conjunto de caracteres no primeiro par de cada partida.

Aqui está em Python:

def sqrt (S):
    corresponde = []
    i, j = 0, 0
    enquanto eu <len (S):
        se j <len (corresponde) e corresponde a [j] [1] == i:
            i + = 1
            j + = 1
            continuar
        se corresponde:
            k = corresponde a [-1] [1] + 1
        outro:
            k = 1
        enquanto k <len (S) e S [k]! = S [i]:
            k + = 1
        se k> = len (S):
            aumentar exceção ("Não é um quadrado")
        match.append ((i, k))
        i + = 1
    retornar "" .join (S [a] para a, b em correspondências)

imprimir sqrt ("ABCABDCD")

Aqui i é a variável principal do loop (a posição que estamos tentando corresponder), j é um ponteiro para a matriz de pares correspondentes que acelera a verificação da posição em que a correspondência já está correspondida ek é um índice usado para procurar o personagem que corresponde ao da posição i. É um tempo linear, porque i, j e k estão aumentando monotonicamente através da string e cada iteração do loop interno aumenta um deles.


4
Esteve lá. Fiz isso. :-)
Jeffε 17/08/2010

5

Atualização: não faz sentido falar sobre a dificuldade de encontrar uma correspondência perfeita que não seja aninhada e não cruzada, quando os rótulos são de 1 a n, porque existe apenas um. (Sim, estou me chutando.) No entanto, faria sentido se houvesse uma faixa maior nos rótulos ... então ainda vejo alguma esperança, mas pode ser inútil, afinal. Eu certamente teria que acompanhar isso um pouco mais.


Posso pensar por que pode ser difícil encontrar uma correspondência que não seja aninhada e não seja cruzada. Deixe-me chamar essa correspondência de uma correspondência não- conjunta . Não sei até que ponto isso ajuda, mas deixe-me apresentar o raciocínio de qualquer maneira. (Devo salientar que meu argumento, como está aqui, não está completo, e os detalhes que deixo de fora são possivelmente cruciais. No entanto, imagino que possa ser um começo.)

Vou começar com um problema um pouco diferente. Dado um gráfico cujas arestas são coloridas com k cores e os vértices são rotulados de 1 a n , existe uma correspondência disjunta que contém exatamente uma aresta de cada cor? Esse problema parece ser NP-difícil (o argumento para isso é completo e direto - a menos que esteja faltando alguma coisa). A redução expele um gráfico que é uma união desmembrada de panelinhas.Gk1n

A redução é de fatores disjuntos , um problema completo de NP introduzido em [1]. Uma instância de fatores disjuntos é dada por uma string sobre um alfabeto de tamanho , e a questão é se existem k fatores disjuntos, em que um fator é uma subcadeia que começa e termina com a mesma letra; e dois fatores são disjuntos se não se sobrepõem à string (observe que 'aninhamento', em particular, também não é permitido).kk

Deixe-me por denotar , os elementos do k alfabeto -sized associado ao Disjoint Fatores instância.a1,,akk

Dada uma instância de fatores disjuntos, ou seja, digamos uma sequência de comprimento , crie um gráfico que tenha n vértices com rótulos de vértices de 1 a n . Adicione uma aresta entre os vértices u e v se as posições correspondentes tiverem a mesma letra (digamos a i ) e também pinte a aresta ( u , v ) com a cor i .nn1nuvai(u,v)i

A prova da redução segue essencialmente as definições. Dado fatores disjuntos, temos claramente uma correspondência colorida desdobrável k , apenas selecionamos as arestas conforme determinado pelos fatores disjuntos, e é fácil ver que a correspondência resultante é colorida e disjunta. Por outro lado, se houver uma correspondência colorida k-não- conjunta, temos k fatores disjuntos, um para cada letra, porque a correspondência é colorida (e, portanto, escolhe um fator por letra) e é desunida (portanto, os fatores correspondentes não se sobrepõem )kkk

Para se livrar das cores e fazer a correspondência perfeita, embora em uma faixa possivelmente maior , faça as seguintes modificações no gráfico assim criado:

UaaUaA(A2)Ua

Ua

[1] Sobre problemas sem núcleos polinomiais , Hans L. Bodlaender, Rodney G. Downey, Michael R. Fellows e Danny Hermelin, J. Comput. Syst. Sci.


3
Estou confuso. Não é (1,2), (3,4), (5,6), ..., (n-1, n) a ÚNICA correspondência perfeita perfeita?
Jeffε

Depois de passar para o cenário de 'correspondência perfeita', modifico a construção e adiciono muitos novos vértices (observe que adiciono | U_a | -2 novos vértices para cada a no alfabeto). Assim, n explodirá de acordo - aproximadamente para 2n-2k, para um alfabeto do tamanho k. Espero ter deixado claro que a redução é incompleta, pois não especifiquei quais números são atribuídos aos novos vértices, mas espero que possa ser estendido sem muita dificuldade. No entanto, certamente tenho que pensar um pouco antes de poder dizer mais alguma coisa.
Neeldhara

1
Penso que o objetivo do comentário de JeffE é que é fácil encontrar uma correspondência perfeita que não seja aninhada e não seja cruzada (ou relate a ausência dela) porque existe apenas uma possibilidade.
Tsuyoshi Ito

2
Não estou falando do conteúdo da sua ideia de prova, mas da primeira frase da sua resposta: "Posso pensar por que pode ser difícil encontrar uma correspondência perfeita que não seja aninhada e não seja cruzada". Essa tarefa é fácil pelo motivo que JeffE escreveu.
Tsuyoshi Ito

2
Sem a restrição de coloração imposta pelo problema do fator de disjunção (no máximo uma aresta de cada cor), também é fácil encontrar combinações disjuntas máximas.
Jeffε

1

A abordagem não funciona: decompor um quadrado embaralhado retirando duas letras correspondentes não resulta em quadrados embaralhados ... Veja os comentários de Radu abaixo.


Σ

S(XY)A(X,Y)(1)A(aX1,aX2Y1Y2)A(X1,Y1)A(X2,Y2)(2)A(ε,ε)ε(3)
aΣε

X1Y1Y1X2Y2Y1Y2X1X2

abcabdcd

S(abcabdcd)A(abc,abdcd)(by 1,X=abc,Y=abdcd)A(bc,bdcd)A(ε,ε)(by 2,X1=bc,Y1=bdcd,X2=Y2=ε)A(c,c)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(ε,ε)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(d,d)A(ε,ε)(by 3)A(d,d)A(ε,ε)(by 3)A(ε,ε)A(ε,ε)A(ε,ε)(by 2)3εi.e. success

0011

S(0011)A(0,011)A(ε,ε)A(1,1)A(1,1)ε

XY


ϵ

Acho que não.
Serge Gaspers

ϵ

Obrigado pelos retornos; Mudei um pouco a gramática e até tenho uma pequena intuição da qual ela pode funcionar.
26410 Sylvain

3
ϵ

1

Atualização: Como Tsuyoshi Ito aponta nos comentários, esse algoritmo tem tempo de execução exponencial.

Post original:

Aqui está como eu programaria isso no mundo real.

Nos é dada uma string S = (S [1], ..., S [n]). Para cada prefixo S_r = (S [1], ..., S [r]), existe um conjunto {(T_i, U_i)} de pares de cadeias, de forma que S_r seja um shuffle de (T_i, U_i), e T_i é um prefixo de U_i (ou seja, U_i 'começa com' T_i). O próprio S_r é um quadrado se e somente se este conjunto contiver um par (T_i, U_i) com T_i = U_i.

Agora, não precisamos gerar todos esses pares; só precisamos gerar o sufixo V_i de cada string U_i obtida removendo sua cópia de T_i. Isso eliminará um número (possivelmente exponencial) de duplicatas irrelevantes. Agora S_r é um quadrado se e somente se esse conjunto de sufixos contiver a sequência vazia. Então o algoritmo se torna:

Initialise: SuffixSet = {<empty string>} ; r = 0
Loop: while (r < n) {
  r = r + 1
  NextSuffixSet = {}
  for each V in SuffixSet {
    if (V[1] == S[r]) Add V[2...] to NextSuffixSet // Remove first character of V
    Add V||S[r] to NextSuffixSet // Append character S[r] to V
    }
  SuffixSet = NextSuffixSet
  }
Now S is a square if and only if SuffixSet contains the empty string.

Por exemplo, se S é AABAAB:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB, AABA}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA, AABAA}
r=6: S[r] = B; SuffixSet = {AA, BAAB, <empty string>, BB, ABAB, AABAAB}

Podemos descartar todos os sufixos com mais da metade do comprimento da string de entrada, portanto, isso simplifica para:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA}
r=6: S[r] = B; SuffixSet = {AA, <empty string>, BB}

Programei isso em C ++ e funciona em todos os exemplos dados aqui. Posso postar o código, se alguém estiver interessado. A questão é: o tamanho do SuffixSet pode crescer mais rápido do que o polinômio?


3
Também tentei isso, mas experimentos mostram que o tamanho do SuffixSet parece crescer exponencialmente em n se a string original for (AB) ^ n.
Tsuyoshi Ito

1

EDIT: Esta é uma resposta incorreta.


Sylvain sugeriu um RCG que infelizmente não era apropriado para esses "quadrados aleatórios". No entanto, acho que existe um (EDIT: não um RCG, veja os comentários de Kurt abaixo!) , Que se parece com o seguinte:

S(Y)UMA(ϵ,Y)(1)UMA(X,ZY)UMA(XZ,Y)(2)UMA(umaX,umaY)UMA(X,Y) para cada umaΣ(3)UMA(ϵ,ϵ)ϵ(4)

umaumabbumabumab(1,2)(3)(2)

100110101010

S(100110101010)A(ϵ,100110101010)(1)A(1001,10101010)(2)A(01,101010)(3)A(011,01010)(2)A(1,010)(3)A(10,10)(2)A(ϵ,ϵ)(3)ϵ(4)

Não elaborei uma prova formal de que essa gramática de fato captura exatamente os "quadrados aleatórios", mas não deve ser muito difícil. Sylvain já mencionou que o problema de decisão dos RCGs é polinomial.


A(x,ϵ)23

5
@DaniCL, Pensando bem ... Os parâmetros no RHS das regras de produção precisam ser intervalos contíguos da entrada? Não vi isso explicitamente declarado na definição do artigo de Boullier, mas parece que é assim que está sendo usado. Na análise do tempo de execução do algoritmo de análise, diz que o número de argumentos possíveis para as cláusulas é O (n ^ 2h), em que h é a maxidade das cláusulas en é o comprimento da entrada. Na sua gramática, o XZ em geral não será contíguo na entrada original.
Kurt

3
@ Kurt, acho que você encontrou a falha. Em outro artigo ("Gramáticas de números chineses, MIX, Scrambling e Range Concatenation"), Boullier afirma explicitamente: "É claro que apenas intervalos consecutivos podem ser concatenados em novos intervalos. Em qualquer PRCG, terminais, variáveis ​​e argumentos em uma cláusula são deveria estar vinculado a intervalos por um mecanismo de substituição ". Provavelmente, isso significa que minha gramática não é um RCG válido, que a dúvida de Radu era razoável e que essa abordagem também não funciona.
DaniCL

2
@Kurt está correto. Sem a restrição de contiguidade, tenho certeza de que posso criar um conjunto de regras de produção que reconheçam a linguagem NP-complete UNARY 3PARTITION. Qualquer conjunto de números inteiros não negativos pode ser codificado em unário por uma sequência no idioma (1 * 0) ^ *. UNARY 3PARTITION é o conjunto de todas essas cadeias cujo conjunto codificado pode ser particionado em subconjuntos de 3 elementos, todos com a mesma soma. (Veja en.wikipedia.org/wiki/3-partition_problem .)
Jeffε

1
Gramática para 3PARTIÇÃO UNÁRIA: S (X0Y0Z) -> A (e, X0, Y0, Z); A (W, 1X, Y, Z), A (W, X, 1Y, Z), A (W, X, Y, 1Z) -> A (W1, X, Y, Z); A (W, 0X, 0Y, 0Z) -> B (W, XYZ); B (W, e) -> e; B (W, X0Y0Z) -> C (W, W, X0, Y0, Z); C (W, 1V, 1X, Y, Z), C (W, 1V, X, 1Y, Z), C (W, 1V, X, Y, 1Z) -> C (W, V, X, Y, Z); C (W, e, X, Y, Z) -> B (W, XYZ)
Radu GRIGore
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.