Algoritmos de varredura linear e busca de padrões Davi Duarte, Luiz Afonso {ddp, lacbs}@cin.ufpe.br
A importância do estudo de algoritmos O que é algoritmo? Porque aprender algoritmos? Capacidade de generalização Aplicação a problemas reais Estimativa de tempo de execução
Análise de tempo de execução Tempo aproximado para algoritmos com N=100 Complexidade Tempo esperado O(log(N)) 10-7 segundos O(N) 10-6 segundos O(N.log2(N)) 10-5 segundos O(N2 ) 10-4 segundos O(N6) 3 minutos O(2N) 1014 anos O(N!) 10142 anos
Varredura Linear Utilizado para resolver problemas geométricos Linha conceitual “varre” o plano verticalmente Pode ser utilizada em conjunto com outros algoritmos Particularmente útil em problemas envolvendo distância Euclidiana e de Manhattan
Distância de Manhattan A distância de Manhattan entre os pontos (x1,y1) e (x2,y2) é dada por |x1 – x2| + |y1 – y2| É chamada distância de Manhattan por conta das ruas em forma de grade da cidade de Manhattan Formalmente conhecida como métrica L1
Par de pontos mais próximos Dado um conjunto de pontos encontrar o par de pontos mais próximo Ordenar os pontos pelo eixo X e varrer com uma linha vertical Utilizar árvores binárias balanceadas para guardar os pontos mais próximos Complexidade O(N Log N)
Interseção de segmentos de reta Encontrar interseção de segmentos de retas verticais e horizontais Utilizar linha de varredura para percorrer o plano horizontalmente Percorrer passando pelos pontos extremos dos segmentos Usar árvore binária balanceada para armazenar retas intersectan- tes em um ponto de varredura Complexidade O(N log N)
Área de união de retângulos Calcular a área da união de vários retângulos Utilizar linha de varredura para percorrer o plano horizontalmente Percorrer passando pelas arestas dos retângulos Utilizar árvore binária balanceada para armazenar número de retân- gulos em um ponto de varredura Complexidade O(N log N)
Fecho convexo de pontos 2D Encontrar menor polígono que cerca um conjunto de pontos no plano 2D Ordenar os pontos pelo eixo X Utilizar duas linhas de varredura percorrendo verticalmente o plano Gerar fecho superior e inferior Procedimento similar ao Graham scan para tratamento de triângulos Complexidade O(N log N)
Árvore de peso mínimo no espaço de Manhattan Encontrar a árvore geradora mínima em um conjunto de pontos considerando a distância de Manhattan Dividir o plano em octantes Ordenar os pontos pela soma das coordenadas Dividir o octante em metades e usar abordagem dividir para conquistar Problema reduzido a encontrar o vizinho mais próximo em um octante Complexidade O (N log N)
Busca de padrões DNA Banco de Dados Indexação
Busca de padrões Algoritmo ingênuo O(N*M) ABABABABAABABAA ABABAA ?
Busca de padrões Knuth-Morris-Pratt O(M+N) ABABABABAABABAA ABABAA ?
Busca de padrões Trie CERCARROCORAL "A", "CARRO", "CERCA", “COR”, ϵ A C C A C E C O CA R CAR R CARR O CE R CER C CERC A CO R COR A CORA L
Busca de padrões Aho-Corasick CERCARROCORAL "A", "CARRO", "CERCA", ϵ A C CA CE CO CAR CARR CARRO CER CERC CERCA COR CORA CORAL
Busca de padrões Árvove de sufixos Hashing Texto Polinômio limitado Número
Dúvidas?