Essa pergunta foi solicitada por estruturas de dados eficientes para criar um verificador ortográfico rápido .
Dadas duas cordas , dizemos que eles estão perto de se sua distância Damerau – Levenshtein ¹ for pequena, ou seja, para um fixo . Informalmente, é o número mínimo de operações de exclusão, inserção, substituição e troca (vizinho) necessárias para transformar em . Pode ser calculado em por programação dinâmica. Observe que é uma métrica , especialmente simétrica.
A questão do interesse é:
Dado um conjunto de cadeias acima de com comprimentos no máximo , qual é a cardinalidade de
?
Como até duas cordas do mesmo comprimento têm números diferentes de cordas close², pode ser difícil (impossível?) Encontrar uma fórmula / abordagem geral. Portanto, podemos ter que calcular o número explicitamente para cada fornecido , levando-nos à pergunta principal:
Qual é a complexidade (de tempo) de encontrar a cardinalidade do conjunto para (arbitrário) ?
Observe que a quantidade desejada é exponencial em, portanto, a enumeração explícita não é desejável. Um algoritmo eficiente seria ótimo.
Se ajudar, pode-se supor que temos realmente um conjunto (grande) de , ou seja, resolvemos a primeira questão destacada.
- As variantes possíveis incluem o uso da distância de Levenshtein .
- Considere e . Os conjuntos de cadeias close sobre são (8 palavras) e (10 palavras), respectivamente.
Respostas:
Veja o artigo de Levenshtein . Ele contém limites nas seqüências numéricas obtidas da inserção e exclusão de uma sequência. E sen é o comprimento da string e a string é binária, então o número máximo de vizinhos mais próximos na distância de Levenshtein é Θ(n2) . É relativamente mais difícil dizer algo sobrek vizinhos mais próximos, mas pode-se obter limites. Eles devem fornecer uma estimativa da complexidade.
fonte
Se seuk é fixo e você tem permissão para fazer o pré-processamento, isso é algo que você pode tentar
Agora, você poderá usar a matriz final para responder a todas as perguntas. Se você pode armazenarM,M2,M4,M8… etc. Você pode responder por uma variedade maior de k em vez de fixo k , é claro que se pagará aqui com o custo da multiplicação da matriz.
fonte