170 likes | 354 Vues
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.
E N D
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
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 arestasdos retângulos • Utilizar árvore binária balanceadapara 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 Grahamscan 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 ovizinho 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 C A CA CE CO • Trie • CERCARROCORAL • "A", • "CARRO", • "CERCA", • “COR”, • "CORAL“ CAR CER COR CORA CARR CERC CARRO CERCA CORAL
ϵ Busca de padrões C A CA CE CO • Aho-Corasick • CERCARROCORAL • "A", • "CARRO", • "CERCA", • “COR”, • "CORAL“ CAR CER COR CORA CARR CERC CARRO CERCA CORAL
Busca de padrões • Árvove de sufixos • Hashing • Texto • Polinômio limitado • Número