Algoritmos de varredura linear e busca de padrões
description
Transcript of Algoritmos de varredura linear e busca de padrões
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
Complexidade Tempo esperadoO(log(N)) 10-7 segundos
O(N) 10-6 segundosO(N.log2(N)) 10-5 segundos
O(N2 ) 10-4 segundosO(N6) 3 minutosO(2N) 1014 anosO(N!) 10142 anos
• Tempo aproximado para algoritmos com N=100
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 balanceadaspara 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 pontosextremos dos segmentos
– Usar árvore binária balanceadapara 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
• ABABABABAABABAA• ABABAA ?• _ABABAA ?• __ABABAA ?• ___ABABAA ?• ____ABABAA !• _____ABABAA ?• ______ABABAA ?• _______ABABAA ?• ________ABABAA ?• _________ABABAA !
– O(N*M)
Busca de padrões– Knuth-Morris-Pratt
• ABABABABAABABAA• ABABAA ?• ____ABABAA !• _________ABABAA !
– O(M+N)
Busca de padrões
– Trie• CERCARROCORAL
– "A", – "CARRO", – "CERCA", – “COR”,– "CORAL“
ϵ
A C
CA
CE
CO
CAR
CARR
CARRO
CER
CERC
CERCA
COR
CORA
CORAL
Busca de padrões
– Aho-Corasick• CERCARROCORAL
– "A", – "CARRO", – "CERCA", – “COR”,– "CORAL“
ϵ
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?