D’Gledson Pinto Rabelo Suffix Array
Suffix Array – O que é ? É uma estrutura de dado eficiente para strings. Possui funcionalidades similares à Suffix Tree mas é muito mais simples de construir e utilizar especialmente em um ambiente de programação competitiva. O sufixo i de uma string é um caso especial da substring que vai do caractere i até o final da string. Exemplo: O segundo sufixo de ‘PROGRAMA’ é ‘OGRAMA’ e o quarto é ‘RAMA’
Suffix Array – O que é ?
Suffix Array - Implementação
Suffix Array – strcmp e C++ sort – O(n²logn). N <= Suffix Array utilizando ranking pairs e C++ sort – O(nlog²n). N <= Suffix Array utilizando ranking pairs e Radix sort – O(nlogn). N <=
Suffix Array - Aplicações String matching O(m log n) Longest Common Prefix O(n) Longest Repeated Substring O(n) Longest Common Substring O(n)
Longest Common Prefix – Implementação Esta implementação é lenta, podendo aumentar o valor de L até O(n²) vezes. Uma idéia melhor é utilizando Permuted Longest Common Prefix O teorema de PLCP diz que o número total de operações de adição e subtração é no máximo O(n).
Permutated Longest Prefix - Implementação
Longest Repeated Substring Se nós tivermos compilado o Suffix Array e o LCP, podemos determinar o tamanho da LRS em O(n). O tamanho da LRS é apenas o maior número no vetor LCP.
Longest Common Substring Sem perda de generalidade, vamos considerar o caso com apenas duas strings. Primeiramente nós temos de concatenar ambas as strings utilizando um delimitador que não aparece em nenhuma das strings (neste caso foi utilizado um ponto). Depois computamos o Suffix Array e LCP da nova string. Strings do exemplo : T1 : GATAGACA T2 : CATA.
Longest Common Substring
Exercício : UvA DNA Sequencing
Solução