Erros
Em primeiro lugar, nos comentários cometi alguns erros: tanto a reivindicação original que fiz sobre a intercalação como o comentário "corrigindo" (agora excluído) estavam erradas, e separadamente a minha alegação de que tentar todas as intercalações possíveis deve produzir uma solução ideal também estava errado (dou um contra-exemplo simples abaixo). Finalmente, minha sugestão para definir e iterar, ou usar a pesquisa por feixe, também não ajuda: qualquer resposta que possa ser produzida com isso e a aplicação do DP de Aryabhata nunca pode ser melhor do que usar o , pois tudo o que faz é reduzir o tamanho do conjunto de soluções a partir do qual o DP pode escolher. Desculpa! Esperamos que a versão melhorada abaixo não contenha mais problemas ...x+=zjx+
Também notei dois erros no DP de Aryabhata . Felizmente, ambos podem ser facilmente reparados (veja meus comentários nesse post).
Uma solução heurística usando intercalações aleatórias
Se você não precisar absolutamente da subsequência mais curta, poderá usar o fato de que, se uma string for uma subsequência de algum , também será uma subsequência de toda intercalação possível de todas as strings . Por outro lado, se não é uma subsequência de alguma intercalação particular de todas as cadeias , então não é uma subsequência de nenhum indivíduo .sx−ix−isx−ix−i
Portanto, você pode tentar muitas maneiras diferentes de intercalar aleatoriamente as seqüências em uma única string e, para cada intercalação , procure a subsequência mais curta de que evita ser uma subsequência de usando o bom DP de Aryabhata algoritmo para o caso de duas cordas e escolha o menor que seja o mais curto entre todas as intercalações que você tentou.nx−iyjzjx+yjzj
Advertência: Não há garantia de otimização, mesmo se tentarmos todas as intercalações
Surpreendentemente (pelo menos para mim), mesmo se você repetir o procedimento acima para todas as intercalações possíveis, não há garantia de encontrar a solução ideal: considere a instância em que , e . Então é uma solução ideal com comprimento 2, mas a solução mais curta encontrada ao tentar todas as intercalações de e é , com comprimento 3.x+=aaan=2x−1=x−2=aaax−1x−2aaa