No algoritmo de correspondência string - BF algoritmo, RK algoritmo

esboço

RK algoritmo BF algoritmo eo algoritmo é único casamento de padrões. A-string único algoritmo padrão de correspondência chamada é popular por uma corda e um jogo de corda

algoritmos comuns única seqüência padrão de correspondência, bem como algoritmo BM algoritmo e KMP.

 

Em contraste é o algoritmo de correspondência multi-padrão, isto é, ao mesmo tempo olhar para várias cordas em uma corda, um AC comum e Trie autômatos árvore.

 

dois conceitos

 

cadeia padrão e corda principal

 

Nós olhamos para a cadeia Uma cadeia B, A cadeia que é a cadeia principal, a seqüência é a seqüência de modo B.

O comprimento da cadeia principal denotado n, referido como o comprimento da cadeia padrão m. Uma vez que estamos à procura de padrões na cadeia de corda principal, para n> m.

 

 

algoritmo BF

BF é um acrônimo para Brute Force, o chinês chamado o algoritmo violência correspondência, também conhecido como algoritmo de correspondência simples.

Este algoritmo cadeia correspondente maneira é muito "violento", a lógica é simples, fácil de entender, mas o desempenho correspondente não é alto.

 

algoritmo BF pensamento

Pensando algoritmo BF pode ser resumida em uma frase:

Nós corrente principal, as posições iniciais são verificadas 0,1,2 ... nm e um comprimento de m substrings de nm + 1, para ver se uma correspondência de string com o padrão.

Tais algoritmos e ideias, se em um caso extremo: se a cadeia principal é "aaaaaaaaaaaaa ......" (omitido numerosos A), cadeia padrão é "aaaaab".

Cada um dos nós de m caracteres do que para n-m + 1 vezes.

Portanto, o pior caso de tempo de complexidade deste algoritmo é O (N * m).

 

algoritmo BF cena Aplicável

Embora, em teoria, a complexidade do algoritmo é GC elevado, é O (N * m), mas na prática, é mais vulgarmente um algoritmo de cadeia correspondente.

Há duas razões principais:

  1. Na maioria dos casos, a cadeia padrão eo comprimento da corda principal não são muito longos. E cada vez que a principal cadeia padrão seqüência de substring correspondente, quando os personagens de encontro a meio caminho que não pode coincidir com o tempo, você pode parar, não precisa m personagens do que para olhar. Assim, apesar da complexidade teórica pior caso de tempo é O (N * m), mas, estatisticamente, na maioria dos casos, a eficiência de algoritmos é muito maior do que esta.
  2. ideia BF do algoritmo é simples, implementação de código é muito simples. meios Simplicidade menos propenso a erros, se houver, também é provável para expor e correções de bugs. No projeto, respeitando os requisitos de desempenho, é o preferido simplicidade. Esta é também a princípios de design que muitas vezes dizemos que o KISS (Keep it Simple e estúpido).

 

algoritmo RK

O nome completo do RK algoritmo chamado algoritmo de Rabin-Karp, com o nome de seu inventor Rabin e Karp de dois nomeado.

 

RK algoritmo é mais como uma versão atualizada do algoritmo BF.

Se o algoritmo modo BF é executado comprimento de m, comprimento da cadeia principal n, e que, na corrente principal, haverá n-m + 1 m de comprimento da sub-corda.

Nós só precisamos para compará-lo violentamente o modelo de cadeia de n-m + 1 ª corda e, você pode identificar a principal corda e sub-string padrão de correspondência.

No entanto, com cada verificação principais partidas corda subcadeia, cada carácter precisa de virar, a complexidade do algoritmo é relativamente alta BF é O (N * m).

BF algoritmo para algoritmo de hash ligeiramente modificado, a introdução, a complexidade de tempo será reduzida imediatamente.

 

algoritmo pensamento RK

cadeia principal de n-m subsequência de um valor hash, respectivamente, buscam + algoritmo de hash, em seguida, uma por comparação com o tamanho do padrão da sequência de valores de hash.

Se um valor de hash cadeia padrão subcadeia igual, isto mostra que o correspondente subsequência e a correspondência de padrões.

Porque o valor de hash é um número, a comparação é muito rápido para a igualdade entre digital, serial e eficiência do modelo substring comparação seria aumentado.

 

Mas quando o valor de hash é calculado pela substring algoritmo de hash, precisamos iterar sobre cada caractere na substring.

Embora a cadeia padrão e comparador substring eficiência é melhorada, mas a eficiência global do algoritmo não melhorou.

Nós precisamos ser eficientes valor substring de hash algoritmo de hash.

E calcular o valor de hash, ainda existem problemas de hash conflito. Assim, o núcleo do RK algoritmo ainda é o design da função hash.

Hash funcionar ao mesmo tempo simples e eficiente, e a necessidade de reduzir a probabilidade de uma colisão de hash.

 

Suponha que a cadeia contém um ~ z apenas as 26 letras do alfabeto. Por exemplo, cada uma correspondente das cartas de pequenas a grandes números primos, podemos para cada letra da corda

Números juntos, e, finalmente, obtido na forma de um valor de hash. A probabilidade de tal conflito um será diminuído um pouco.

 

Quando há um conflito de hash, embora possa haver uma sub valor de hash e cadeias padrão são os mesmos, mas os dois não combinam em si.

Este método é muito simples de resolver, o objeto pode ser comparado antes de comparar Bowen falar sobre o assunto (hashCode e equals).

 

Quando encontramos um valor de hash substring igual à cadeia padrão com um valor de hash, só precisamos de comparar todas em si um padrão súbita corda e corda muito bem.

Se os valores de cadeia padrão substring de hash valor hash não são iguais, então o correspondente substring cadeia padrão e certamente não corresponde, não há cordas necessidade ea própria substrings do que o padrão.

 

RK algoritmo é focar o design do algoritmo de hash:

Hash probabilidade algoritmo de colisão para ser controlado relativamente menor. Se houver um monte de conflito, ele vai levar a complexidade de tempo da eficiência da degradação algoritmo RK.

Em casos extremos, se uma grande quantidade de um conflito existe, então cada vez que a cadeia padrão e sub-corda si comparação, que será degenerar num tempo complexidade O (N * m).

Mas, em circunstâncias normais, design algoritmo de hash é razoável, então, o conflito não vai ser muitos, eficiência algoritmo RK é ainda maior do que o algoritmo BF.

 

 

 

Publicado 113 artigos originais · ganhou elogios 25 · vê 30000 +

Acho que você gosta

Origin blog.csdn.net/qq_42006733/article/details/105072014
Recomendado
Clasificación