• Nenhum resultado encontrado

Processamento de Texto Prof. Tiago Eugenio de Melo

N/A
N/A
Protected

Academic year: 2022

Share "Processamento de Texto Prof. Tiago Eugenio de Melo"

Copied!
215
0
0

Texto

(1)

Algoritmos e Estruturas de Dados II

Processamento de Texto

Prof. Tiago Eugenio de Melo [email protected]

www.tiagodemelo.info

(2)

Observações

As palavras com a fonte Courier indicam as palavras-reservadas da linguagem de

programação.

(3)

Referências

Projetos de Algoritmos – com

implementações em Pascal e C. Nivio Ziviani.

2a edição. Thomson, 2005.

(4)

INTRODUÇÃO

(5)

Introdução

(6)

Introdução

O que é casamento de padrões?

(7)

Introdução

O que é casamento de padrões?

Consiste em encontrar ocorrências de um certo padrão em uma sequência de elementos.

(8)

Introdução

(9)

Introdução

Uma cadeia de caracteres corresponde a uma sequência de elementos denominados

caracteres.

(10)

Introdução

Uma cadeia de caracteres corresponde a uma sequência de elementos denominados

caracteres.

Os caracteres são escolhidos de um conjunto denominado alfabeto.

(11)

Introdução

Uma cadeia de caracteres corresponde a uma sequência de elementos denominados

caracteres.

Os caracteres são escolhidos de um conjunto denominado alfabeto.

Por exemplo, em uma cadeia de bits, o alfabeto é [0, 1].

(12)

Introdução

Uma cadeia de caracteres corresponde a uma sequência de elementos denominados

caracteres.

Os caracteres são escolhidos de um conjunto denominado alfabeto.

Por exemplo, em uma cadeia de bits, o alfabeto é [0, 1].

O processamento em cadeias de caracteres é

(13)

Introdução

Uma cadeia de caracteres corresponde a uma

sequência de elementos denominados caracteres.

Os caracteres são escolhidos de um conjunto denominado alfabeto.

Por exemplo, em uma cadeia de bits, o alfabeto é [0, 1].

O processamento em cadeias de caracteres é um componente importante em diversos problemas computacionais:

(14)

Introdução

Uma cadeia de caracteres corresponde a uma

sequência de elementos denominados caracteres.

Os caracteres são escolhidos de um conjunto denominado alfabeto.

Por exemplo, em uma cadeia de bits, o alfabeto é [0, 1].

O processamento em cadeias de caracteres é um componente importante em diversos problemas computacionais:

(15)

Introdução

Uma cadeia de caracteres corresponde a uma

sequência de elementos denominados caracteres.

Os caracteres são escolhidos de um conjunto denominado alfabeto.

Por exemplo, em uma cadeia de bits, o alfabeto é [0, 1].

O processamento em cadeias de caracteres é um componente importante em diversos problemas computacionais:

Edição de texto.

(16)

Introdução

(17)

Introdução

Em programas editores de texto, o usuário

pode querer buscar todas as ocorrências de um determinado padrão (um termo em particular)

no texto que está sendo editado.

(18)

Introdução

Exemplo

(19)

Introdução

Exemplo

(20)

Introdução

(21)

Introdução

Esse problema é conhecido como casamento de cadeia de caracteres ou casamento de

padrão (pattern matching).

(22)

Introdução

Esse problema é conhecido como casamento de cadeia de caracteres ou casamento de

padrão (pattern matching).

O problema de casamento de cadeias ou

casamento de padrões pode ser formalizado.

(23)

Introdução

(24)

Introdução

O texto é um arranjo T[1..n] de tamanho n.

(25)

Introdução

O texto é um arranjo T[1..n] de tamanho n.

O padrão é um arranjo P[1..m] de tamanho m

<= n.

(26)

Introdução

O texto é um arranjo T[1..n] de tamanho n.

O padrão é um arranjo P[1..m] de tamanho m

<= n.

Os elementos de P e T são escolhidos de um alfabeto finito Σ de tamanho c.

(27)

Introdução

O texto é um arranjo T[1..n] de tamanho n.

O padrão é um arranjo P[1..m] de tamanho m

<= n.

Os elementos de P e T são escolhidos de um alfabeto finito Σ de tamanho c.

Exemplos de alfabeto:

(28)

Introdução

O texto é um arranjo T[1..n] de tamanho n.

O padrão é um arranjo P[1..m] de tamanho m

<= n.

Os elementos de P e T são escolhidos de um alfabeto finito Σ de tamanho c.

Exemplos de alfabeto:

Σ = {0,1} ou Σ = {a, b, .., z}}

(29)

Introdução

O texto é um arranjo T[1..n] de tamanho n.

O padrão é um arranjo P[1..m] de tamanho m <=

n.

Os elementos de P e T são escolhidos de um alfabeto finito Σ de tamanho c.

Exemplos de alfabeto:

Σ = {0,1} ou Σ = {a, b, .., z}}

Dadas duas cadeias P (padrão) de comprimento

(30)

Introdução

O texto é um arranjo T[1..n] de tamanho n.

O padrão é um arranjo P[1..m] de tamanho m <= n.

Os elementos de P e T são escolhidos de um alfabeto finito Σ de tamanho c.

Exemplos de alfabeto:

Σ = {0,1} ou Σ = {a, b, .., z}}

Dadas duas cadeias P (padrão) de comprimento

(31)

Introdução

(32)

Introdução

w é prefixo de x, se x = wy para alguma cadeia y. Isso é representado por w  x.

(33)

Introdução

w é prefixo de x, se x = wy para alguma cadeia y. Isso é representado por w  x.

Para representar o sufixo, teremos que w  x.

(34)

Introdução

(35)

Introdução

Considerando os dados de entrada como sendo o texto T e o padrão P, temos as seguintes categorias de algoritmos:

(36)

Introdução

Considerando os dados de entrada como sendo o texto T e o padrão P, temos as seguintes categorias de algoritmos:

Padrão e texto não são pré-processados.

(37)

Introdução

Considerando os dados de entrada como sendo o texto T e o padrão P, temos as seguintes categorias de algoritmos:

Padrão e texto não são pré-processados.

Padrão pré-processado.

(38)

Introdução

Considerando os dados de entrada como sendo o texto T e o padrão P, temos as seguintes categorias de algoritmos:

Padrão e texto não são pré-processados.

Padrão pré-processado.

Padrão e texto são pré-processados.

(39)

Introdução

(40)

Introdução

Padrão e texto não são pré-processados:

(41)

Introdução

Padrão e texto não são pré-processados:

Os algoritmos são do tipo sequencial, on-line e de tempo real, pois tanto o padrão quanto o texto não são conhecidos antecipadamente.

(42)

Introdução

Padrão e texto não são pré-processados:

Os algoritmos são do tipo sequencial, on-line e de tempo real, pois tanto o padrão quanto o texto não são conhecidos antecipadamente.

Estes algoritmos têm complexidade de tempo O(m.n) para o pior caso.

(43)

Introdução

Padrão e texto não são pré-processados:

Os algoritmos são do tipo sequencial, on-line e de tempo real, pois tanto o padrão quanto o texto não são conhecidos antecipadamente.

Estes algoritmos têm complexidade de tempo O(m.n) para o pior caso.

Um exemplo é o algoritmo força bruta.

(44)

Introdução

(45)

Introdução

Padrão pré-processado:

(46)

Introdução

Padrão pré-processado:

Os algoritmos são do tipo sequencial e o padrão é conhecido anteriormente, o que permite o seu pré- processamento.

(47)

Introdução

Padrão pré-processado:

Os algoritmos são do tipo sequencial e o padrão é conhecido anteriormente, o que permite o seu pré- processamento.

Estes algoritmos têm complexidade de tempo O(n) para o pior caso.

(48)

Introdução

Padrão pré-processado:

Os algoritmos são do tipo sequencial e o padrão é conhecido anteriormente, o que permite o seu pré- processamento.

Estes algoritmos têm complexidade de tempo O(n) para o pior caso.

Representantes típicos desta categoria são os programas para edição de textos.

(49)

Introdução

Padrão pré-processado:

Os algoritmos são do tipo sequencial e o padrão é conhecido anteriormente, o que permite o seu pré- processamento.

Estes algoritmos têm complexidade de tempo O(n) para o pior caso.

Representantes típicos desta categoria são os programas para edição de textos.

Os algoritmos mais conhecidos nesta categoria são Knuth-Morris e Pratt, o Boyer-Moore e o Shif-And.

(50)

Introdução

(51)

Introdução

Padrão e texto são pré-processados:

(52)

Introdução

Padrão e texto são pré-processados:

Os algoritmos constroem um índice para permitir uma complexidade de tempo O(log n) ou menos.

(53)

Introdução

Padrão e texto são pré-processados:

Os algoritmos constroem um índice para permitir uma complexidade de tempo O(log n) ou menos.

O tempo de pré-processamento do texto para obter o índice pode ser tão grande quanto O(n) ou

O(n.log n), mas esse tempo é compensado por muitas operações de pesquisa no texto.

(54)

Introdução

Padrão e texto são pré-processados:

Os algoritmos constroem um índice para permitir uma complexidade de tempo O(log n) ou menos.

O tempo de pré-processamento do texto para obter o índice pode ser tão grande quanto O(n) ou

O(n.log n), mas esse tempo é compensado por muitas operações de pesquisa no texto.

Vale a pena construir um índice quando a base de dados é grande e muda pouco.

(55)

Introdução

Padrão e texto são pré-processados:

Os algoritmos constroem um índice para permitir uma complexidade de tempo O(log n) ou menos.

O tempo de pré-processamento do texto para obter o índice pode ser tão grande quanto O(n) ou O(n.log n), mas esse tempo é compensado por muitas operações de pesquisa no texto.

Vale a pena construir um índice quando a base de dados é grande e muda pouco.

Os tipos de índice mais conhecidos são os arquivos invertidos, árvores Trie e Patrícia, e arranjos de sufixos.

(56)

CASAMENTO EXATO

(57)

Casamento Exato

(58)

Casamento Exato

No casamento de padrão, o problema mais elementar consiste em obter todas as

ocorrências exatas do padrão no texto.

(59)

Casamento Exato

No casamento de padrão, o problema mais elementar consiste em obter todas as

ocorrências exatas do padrão no texto.

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques:

(60)

Casamento Exato

No casamento de padrão, o problema mais elementar consiste em obter todas as

ocorrências exatas do padrão no texto.

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques:

O primeiro enfoque consiste em ler os caracteres do texto um a um e, a cada passo, algumas

variáveis são atualizadas de forma a identificar uma ocorrência possível.

(61)

Casamento Exato

No casamento de padrão, o problema mais elementar consiste em obter todas as

ocorrências exatas do padrão no texto.

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques:

O primeiro enfoque consiste em ler os caracteres do texto um a um e, a cada passo, algumas

variáveis são atualizadas de forma a identificar uma ocorrência possível.

(62)

Casamento Exato

No casamento de padrão, o problema mais elementar consiste em obter todas as

ocorrências exatas do padrão no texto.

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques:

O primeiro enfoque consiste em ler os caracteres do texto um a um e, a cada passo, algumas variáveis

são atualizadas de forma a identificar uma ocorrência possível.

(63)

Casamento Exato

No casamento de padrão, o problema mais

elementar consiste em obter todas as ocorrências exatas do padrão no texto.

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques:

O primeiro enfoque consiste em ler os caracteres do texto um a um e, a cada passo, algumas variáveis são atualizadas de forma a identificar uma ocorrência

possível.

Exemplos de algoritmos:

(64)

Casamento Exato

(65)

Casamento Exato

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques (cont.):

(66)

Casamento Exato

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques (cont.):

O segundo enfoque consiste em pesquisar o

padrão P em uma janela que desliza ao longo do texto T.

(67)

Casamento Exato

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques (cont.):

O segundo enfoque consiste em pesquisar o

padrão P em uma janela que desliza ao longo do texto T.

Para cada posição desta janela, o algoritmo faz uma pesquisa por um sufixo da janela que casa com um sufixo de P, mediante comparações

realizadas no sentido da direita para esquerda.

(68)

Casamento Exato

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques (cont.):

O segundo enfoque consiste em pesquisar o

padrão P em uma janela que desliza ao longo do texto T.

Para cada posição desta janela, o algoritmo faz uma pesquisa por um sufixo da janela que casa com um sufixo de P, mediante comparações

realizadas no sentido da direita para esquerda.

(69)

Casamento Exato

Os algoritmos para o casamento exato, em geral, funcionam em dois enfoques (cont.):

O segundo enfoque consiste em pesquisar o

padrão P em uma janela que desliza ao longo do texto T.

Para cada posição desta janela, o algoritmo faz uma pesquisa por um sufixo da janela que casa com um sufixo de P, mediante comparações

realizadas no sentido da direita para esquerda.

(70)

HISTÓRICO

(71)

Histórico

(72)

Histórico

Em 1970, S. Cook provou um resultado teórico sobre um tipo particular de autômato que

implicava na existência de um algoritmo de

casamento de padrão com tempo proporcional a M + N no pior caso.

(73)

Histórico

Em 1970, S. Cook provou um resultado teórico sobre um tipo particular de autômato que

implicava na existência de um algoritmo de

casamento de padrão com tempo proporcional a M + N no pior caso.

Knuth e Pratt, seguindo a construção que Cook usou na demonstração do seu teorema

obtiveram um algoritmo relativamente simples e prático.

(74)

Histórico

Em 1970, S. Cook provou um resultado teórico

sobre um tipo particular de autômato que implicava na existência de um algoritmo de casamento de

padrão com tempo proporcional a M + N no pior caso.

Knuth e Pratt, seguindo a construção que Cook usou na demonstração do seu teorema obtiveram um algoritmo relativamente simples e prático.

Ocorreu também que Morris descobriu

(75)

Histórico

Em 1970, S. Cook provou um resultado teórico sobre um tipo particular de autômato que implicava na

existência de um algoritmo de casamento de padrão com tempo proporcional a M + N no pior caso.

Knuth e Pratt, seguindo a construção que Cook usou na demonstração do seu teorema obtiveram um algoritmo relativamente simples e prático.

Ocorreu também que Morris descobriu praticamente o mesmo algoritmo como solução de um problema de edição de texto.

(76)

Histórico

(77)

Histórico

Nesse meio tempo, Boyer e Moore descobriram um algoritmo que é muito mais rápido em

muitas aplicações.

(78)

Histórico

Nesse meio tempo, Boyer e Moore descobriram um algoritmo que é muito mais rápido em

muitas aplicações.

Muitos editores de texto usam esse algoritmo para busca de cadeias.

(79)

Histórico

Nesse meio tempo, Boyer e Moore descobriram um algoritmo que é muito mais rápido em

muitas aplicações.

Muitos editores de texto usam esse algoritmo para busca de cadeias.

Em 1980, Rabin e Karp desenvolveram um algoritmo tão simples quanto o de força bruta que roda virtualmente sempre em tempo

proporcional a M + N.

(80)

Histórico

Nesse meio tempo, Boyer e Moore descobriram um algoritmo que é muito mais rápido em muitas

aplicações.

Muitos editores de texto usam esse algoritmo para busca de cadeias.

Em 1980, Rabin e Karp desenvolveram um algoritmo tão simples quanto o de força bruta que roda

virtualmente sempre em tempo proporcional a M + N.

Além disso, o algoritmo deles estende-se facilmente a

(81)

FORÇA BRUTA

(82)

Força Bruta

(83)

Força Bruta

O algoritmo de força bruta é o algoritmo mais simples para casamento de cadeias de

caracteres.

(84)

Força Bruta

O algoritmo de força bruta é o algoritmo mais simples para casamento de cadeias de

caracteres.

A ideia consiste em tentar casar qualquer

subcadeia no texto de comprimento m com o padrão.

(85)

Força Bruta

O algoritmo de força bruta é o algoritmo mais simples para casamento de cadeias de

caracteres.

A ideia consiste em tentar casar qualquer

subcadeia no texto de comprimento m com o padrão.

O pior caso do algoritmo de força bruta é:

(86)

Força Bruta

O algoritmo de força bruta é o algoritmo mais simples para casamento de cadeias de

caracteres.

A ideia consiste em tentar casar qualquer

subcadeia no texto de comprimento m com o padrão.

O pior caso do algoritmo de força bruta é:

Cn = m x n,

(87)

Força Bruta

O algoritmo de força bruta é o algoritmo mais simples para casamento de cadeias de

caracteres.

A ideia consiste em tentar casar qualquer

subcadeia no texto de comprimento m com o padrão.

O pior caso do algoritmo de força bruta é:

Cn = m x n,

(88)

Força Bruta

(89)

Força Bruta

O algoritmo executa dois laços de repetição

aninhados, sendo que o laço externo pesquisa todos os possíveis índices do padrão do texto, e o laço interno pesquisa cada caractere do

padrão, comparando-o a seu correspondente potencial no texto.

(90)

Força Bruta

O algoritmo executa dois laços de repetição

aninhados, sendo que o laço externo pesquisa todos os possíveis índices do padrão do texto, e o laço interno pesquisa cada caractere do

padrão, comparando-o a seu correspondente potencial no texto.

O pior caso de tempo de procura não é

razoável, pois para cada índice-candidato em T pode-se realizar até m comparações de

(91)

Força Bruta

(92)

Força Bruta

Objetivo: descobrir se a string P (padrão) está em T.

(93)

Força Bruta

Objetivo: descobrir se a string P (padrão) está em T.

Força bruta: percorre elemento a elemento da esquerda para a direita.

(94)

Força Bruta

Objetivo: descobrir se a string P (padrão) está em T.

Força bruta: percorre elemento a elemento da esquerda para a direita.

(95)

Força Bruta

Algoritmo

(96)

Força Bruta

Algoritmo

(97)

Força Bruta

Algoritmo

(98)

Força Bruta

(99)

Força Bruta

O grande problema desse algoritmo é que nenhuma informação é guardada para ser usada em comparações futuras.

(100)

Força Bruta

O grande problema desse algoritmo é que nenhuma informação é guardada para ser usada em comparações futuras.

Características

(101)

Força Bruta

O grande problema desse algoritmo é que nenhuma informação é guardada para ser usada em comparações futuras.

Características

Não existe fase de pré-processamento.

(102)

Força Bruta

O grande problema desse algoritmo é que nenhuma informação é guardada para ser usada em comparações futuras.

Características

Não existe fase de pré-processamento.

Sempre desloca a janela de uma posição para a direita.

(103)

Força Bruta

O grande problema desse algoritmo é que nenhuma informação é guardada para ser usada em comparações futuras.

Características

Não existe fase de pré-processamento.

Sempre desloca a janela de uma posição para a direita.

Comparação dos caracteres pode ser feita em qualquer ordem.

(104)

Força Bruta

O grande problema desse algoritmo é que nenhuma informação é guardada para ser usada em comparações futuras.

Características

Não existe fase de pré-processamento.

Sempre desloca a janela de uma posição para a direita.

Comparação dos caracteres pode ser feita em

(105)

Algoritmos Baseados em

Autômatos

(106)

Algoritmos baseados em Autômatos

(107)

Algoritmos baseados em Autômatos

Autômato é um modelo de computação

(máquina) cujo propósito principal é reconhecer linguagens.

(108)

Algoritmos baseados em Autômatos

Autômato é um modelo de computação

(máquina) cujo propósito principal é reconhecer linguagens.

Um autômato finito M é uma quíntupla (Q, q0, A, Σ, δ) onde:

(109)

Algoritmos baseados em Autômatos

Autômato é um modelo de computação

(máquina) cujo propósito principal é reconhecer linguagens.

Um autômato finito M é uma quíntupla (Q, q0, A, Σ, δ) onde:

Q é um conjunto finito de estados.

(110)

Algoritmos baseados em Autômatos

Autômato é um modelo de computação

(máquina) cujo propósito principal é reconhecer linguagens.

Um autômato finito M é uma quíntupla (Q, q0, A, Σ, δ) onde:

Q é um conjunto finito de estados.

q0 ϵ Q é o estado inicial.

(111)

Algoritmos baseados em Autômatos

Autômato é um modelo de computação

(máquina) cujo propósito principal é reconhecer linguagens.

Um autômato finito M é uma quíntupla (Q, q0, A, Σ, δ) onde:

Q é um conjunto finito de estados.

q0 ϵ Q é o estado inicial.

A ⫅ Q é o conjunto de estados finais.

(112)

Algoritmos baseados em Autômatos

Autômato é um modelo de computação

(máquina) cujo propósito principal é reconhecer linguagens.

Um autômato finito M é uma quíntupla (Q, q0, A, Σ, δ) onde:

Q é um conjunto finito de estados.

q0 ϵ Q é o estado inicial.

(113)

Algoritmos baseados em Autômatos

Autômato é um modelo de computação (máquina) cujo propósito principal é reconhecer linguagens.

Um autômato finito M é uma quíntupla (Q, q0, A, Σ, δ) onde:

Q é um conjunto finito de estados.

q0 ϵ Q é o estado inicial.

A ⫅ Q é o conjunto de estados finais.

Σ é um alfabeto de entrada finito.

(114)

Algoritmos baseados em Autômatos

Exemplo

(115)

Algoritmos baseados em Autômatos

Exemplo

(116)

Algoritmos baseados em Autômatos

Exemplo

(117)

Knuth-Morris-Pratt (KMP)

(118)

Knuth-Morris-Pratt (KMP)

(119)

Knuth-Morris-Pratt (KMP)

É o primeiro algoritmo cujo pior caso tem

complexidade de tempo linear no tamanho do texto.

(120)

Knuth-Morris-Pratt (KMP)

É o primeiro algoritmo cujo pior caso tem

complexidade de tempo linear no tamanho do texto.

É um dos algoritmos mais famosos para

resolver o problema de casamento de cadeias.

(121)

Knuth-Morris-Pratt (KMP)

É o primeiro algoritmo cujo pior caso tem

complexidade de tempo linear no tamanho do texto.

É um dos algoritmos mais famosos para

resolver o problema de casamento de cadeias.

O algoritmo foi inventado por Donald Knuth e Vaughan Pratt e, independentemente, por

James Morris em 1977.

(122)

Knuth-Morris-Pratt (KMP)

É o primeiro algoritmo cujo pior caso tem

complexidade de tempo linear no tamanho do texto.

É um dos algoritmos mais famosos para resolver o problema de casamento de cadeias.

O algoritmo foi inventado por Donald Knuth e

Vaughan Pratt e, independentemente, por James Morris em 1977.

Ele tem uma implementação complicada e, na

(123)

Knuth-Morris-Pratt (KMP)

(124)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

(125)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

Pouco código e muito eficiente.

(126)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

Pouco código e muito eficiente.

Complexidade de O(n) no pior caso [linear].

(127)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

Pouco código e muito eficiente.

Complexidade de O(n) no pior caso [linear].

A ideia geral do algoritmo:

(128)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

Pouco código e muito eficiente.

Complexidade de O(n) no pior caso [linear].

A ideia geral do algoritmo:

Quando aparece uma diferença (conflito), a palavra tem em si a informação necessária para determinar onde vai começar a próxima comparação.

(129)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

Pouco código e muito eficiente.

Complexidade de O(n) no pior caso [linear].

A ideia geral do algoritmo:

Quando aparece uma diferença (conflito), a palavra tem em si a informação necessária para determinar onde vai começar a próxima comparação.

Isso evita retroceder pelos caracteres já

(130)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

Pouco código e muito eficiente.

Complexidade de O(n) no pior caso [linear].

A ideia geral do algoritmo:

Quando aparece uma diferença (conflito), a palavra tem em si a informação necessária para determinar onde vai começar a próxima comparação.

Isso evita retroceder pelos caracteres já conhecidos.

(131)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

Pouco código e muito eficiente.

Complexidade de O(n) no pior caso [linear].

A ideia geral do algoritmo:

Quando aparece uma diferença (conflito), a palavra tem em si a informação necessária para determinar onde vai começar a próxima comparação.

Isso evita retroceder pelos caracteres já conhecidos.

Etapas:

(132)

Knuth-Morris-Pratt (KMP)

Procura um padrão em um texto.

Pouco código e muito eficiente.

Complexidade de O(n) no pior caso [linear].

A ideia geral do algoritmo:

Quando aparece uma diferença (conflito), a palavra tem em si a informação necessária para determinar onde vai

começar a próxima comparação.

Isso evita retroceder pelos caracteres já conhecidos.

Etapas:

(133)

Knuth-Morris-Pratt (KMP)

(134)

Knuth-Morris-Pratt (KMP)

Função prefixo

(135)

Knuth-Morris-Pratt (KMP)

Função prefixo

É feito um pré-processamento do padrão e construído um vetor auxiliar de tamanho m.

(136)

Knuth-Morris-Pratt (KMP)

Função prefixo

É feito um pré-processamento do padrão e construído um vetor auxiliar de tamanho m.

O pré-processamento analisa todos os prefixos do padrão procurando pelo maior sufixo destes

prefixos que também seja prefixo.

(137)

Knuth-Morris-Pratt (KMP)

Função prefixo

É feito um pré-processamento do padrão e construído um vetor auxiliar de tamanho m.

O pré-processamento analisa todos os prefixos do padrão procurando pelo maior sufixo destes

prefixos que também seja prefixo.

Desta maneira, evita que um caractere seja reexaminado.

(138)

Knuth-Morris-Pratt (KMP)

Função prefixo

É feito um pré-processamento do padrão e construído um vetor auxiliar de tamanho m.

O pré-processamento analisa todos os prefixos do padrão procurando pelo maior sufixo destes

prefixos que também seja prefixo.

Desta maneira, evita que um caractere seja reexaminado.

Ao final, teremos um vetor que conterá cada

(139)

Knuth-Morris-Pratt (KMP)

Função prefixo

É feito um pré-processamento do padrão e construído um vetor auxiliar de tamanho m.

O pré-processamento analisa todos os prefixos do padrão procurando pelo maior sufixo destes prefixos que também seja prefixo.

Desta maneira, evita que um caractere seja reexaminado.

Ao final, teremos um vetor que conterá cada posição que gera um prefixo para cada posição do padrão.

O pré-processamento é realizado no padrão para

(140)

Knuth-Morris-Pratt (KMP)

Função prefixo

(141)

Knuth-Morris-Pratt (KMP)

Exemplo

(142)

Algoritmo Boyer-Moore (BM)

(143)

Algoritmo BM

(144)

Algoritmo BM

O algoritmo é um dos mais eficientes algoritmos de busca em strings.

(145)

Algoritmo BM

O algoritmo é um dos mais eficientes algoritmos de busca em strings.

Ele foi desenvolvido em 1977 pelos professores Robert Stephen Boyer e J Strother Moore.

(146)

Algoritmo BM

O algoritmo é um dos mais eficientes algoritmos de busca em strings.

Ele foi desenvolvido em 1977 pelos professores Robert Stephen Boyer e J Strother Moore.

Também chamado de Boyer-Moore.

(147)

Algoritmo BM

O algoritmo é um dos mais eficientes algoritmos de busca em strings.

Ele foi desenvolvido em 1977 pelos professores Robert Stephen Boyer e J Strother Moore.

Também chamado de Boyer-Moore.

Pela simplicidade de implementação e

comprovada eficiência, o BM deve ser escolhido em aplicações de uso geral que necessitam

realizar casamento exato de cadeias.

(148)

Algoritmo BM

O algoritmo é um dos mais eficientes algoritmos de busca em strings.

Ele foi desenvolvido em 1977 pelos professores Robert Stephen Boyer e J Strother Moore.

Também chamado de Boyer-Moore.

Pela simplicidade de implementação e comprovada eficiência, o BM deve ser escolhido em aplicações de uso geral que necessitam realizar casamento exato de cadeias.

(149)

Algoritmo BM

O algoritmo é um dos mais eficientes algoritmos de busca em strings.

Ele foi desenvolvido em 1977 pelos professores Robert Stephen Boyer e J Strother Moore.

Também chamado de Boyer-Moore.

Pela simplicidade de implementação e comprovada

eficiência, o BM deve ser escolhido em aplicações de uso geral que necessitam realizar casamento exato de cadeias.

A ideia é pesquisar no padrão no sentido da direita para a esquerda, pois isto torna o algoritmo muito rápido.

(150)

Algoritmo BM

(151)

Algoritmo BM

Busca por Força Bruta:

(152)

Algoritmo BM

Busca por Força Bruta:

Considere a busca de LO em HELLO WORLD.

(153)

Algoritmo BM

Busca por Força Bruta:

Considere a busca de LO em HELLO WORLD.

(154)

Algoritmo BM

Busca por Força Bruta:

Considere a busca de LO em HELLO WORLD.

Qual seria é o melhor caso por força bruta?

(155)

Algoritmo BM

Busca por Força Bruta:

Considere a busca de LO em HELLO WORLD.

Qual seria é o melhor caso por força bruta?

O primeiro caractere do padrão não está presente no texto.

(156)

Algoritmo BM

Busca por Força Bruta:

Considere a busca de LO em HELLO WORLD.

Qual seria é o melhor caso por força bruta?

O primeiro caractere do padrão não está presente no texto.

Ex: P = “PAZ” e T = “PISTA DE CORRIDA”

(157)

Algoritmo BM

Busca por Força Bruta:

Considere a busca de LO em HELLO WORLD.

Qual seria é o melhor caso por força bruta?

O primeiro caractere do padrão não está presente no texto.

Ex: P = “PAZ” e T = “PISTA DE CORRIDA”

Neste caso, a complexidade seria O(n).

(158)

Algoritmo BM

(159)

Algoritmo BM

Busca por Força Bruta:

(160)

Algoritmo BM

Busca por Força Bruta:

Qual seria é o pior caso por força bruta?

(161)

Algoritmo BM

Busca por Força Bruta:

Qual seria é o pior caso por força bruta?

Quando o padrão e texto são os mesmos.

(162)

Algoritmo BM

Busca por Força Bruta:

Qual seria é o pior caso por força bruta?

Quando o padrão e texto são os mesmos.

Ex: P = “SSS” e T = “SSSSSSS”.

(163)

Algoritmo BM

Busca por Força Bruta:

Qual seria é o pior caso por força bruta?

Quando o padrão e texto são os mesmos.

Ex: P = “SSS” e T = “SSSSSSS”.

Neste caso, a complexidade seria O(m*(n-m+1)).

(164)

Algoritmo BM

(165)

Algoritmo BM

O enfoque do algoritmo BM consiste em pesquisar o padrão P em uma janela que desliza ao longo do texto T.

(166)

Algoritmo BM

O enfoque do algoritmo BM consiste em pesquisar o padrão P em uma janela que desliza ao longo do texto T.

Para cada posição desta janela, o algoritmo faz uma pesquisa por um sufixo da janela que casa com um sufixo de P por meio de comparações realizadas no sentido da direita para a

esquerda.

(167)

Algoritmo BM

O enfoque do algoritmo BM consiste em pesquisar o padrão P em uma janela que desliza ao longo do texto T.

Para cada posição desta janela, o algoritmo faz uma pesquisa por um sufixo da janela que casa com um sufixo de P por meio de comparações realizadas no sentido da direita para a

esquerda.

Se não ocorreu uma desigualdade, então uma

(168)

Algoritmo BM

O enfoque do algoritmo BM consiste em pesquisar o padrão P em uma janela que desliza ao longo do texto T.

Para cada posição desta janela, o algoritmo faz uma pesquisa por um sufixo da janela que casa com um sufixo de P por meio de comparações realizadas no sentido da direita para a esquerda.

Se não ocorreu uma desigualdade, então uma ocorrência de P em T foi encontrada.

(169)

Algoritmo BM

(170)

Algoritmo BM

O algoritmo usa uma tabela de deslocamento.

(171)

Algoritmo BM

O algoritmo usa uma tabela de deslocamento.

A tabela segue a fórmula abaixo:

(172)

Algoritmo BM

O algoritmo usa uma tabela de deslocamento.

A tabela segue a fórmula abaixo:

Valor = Max(1,Tamanho do Padrão - Index -1)

(173)

Algoritmo BM

O algoritmo usa uma tabela de deslocamento.

A tabela segue a fórmula abaixo:

Valor = Max(1,Tamanho do Padrão - Index -1)

Exemplo:

(174)

Algoritmo BM

O algoritmo usa uma tabela de deslocamento.

A tabela segue a fórmula abaixo:

Valor = Max(1,Tamanho do Padrão - Index -1)

Exemplo:

(175)

Algoritmo BM

(176)

Algoritmo BM

Exemplo:

(177)

Algoritmo BM

Exemplo:

Considere P = ‘HELLO’ e T = ‘LO LOELLO O HELLO’.

(178)

Algoritmo BM

Exemplo:

Considere P = ‘HELLO’ e T = ‘LO LOELLO O HELLO’.

(179)

Algoritmo BM

(180)

Algoritmo BM

Neste método, nós pré-processamos o padrão e armazenamos a última ocorrência de todo

possível caractere em um vetor de tamanho igual ao tamanho do alfabeto.

(181)

Algoritmo BM

Neste método, nós pré-processamos o padrão e armazenamos a última ocorrência de todo

possível caractere em um vetor de tamanho igual ao tamanho do alfabeto.

Se o caractere não estiver presente, então isso pode resultar em um deslocamento de tamanho igual ao padrão.

(182)

Algoritmo BM

Neste método, nós pré-processamos o padrão e armazenamos a última ocorrência de todo

possível caractere em um vetor de tamanho igual ao tamanho do alfabeto.

Se o caractere não estiver presente, então isso pode resultar em um deslocamento de tamanho igual ao padrão.

Portanto, no melhor caso, a complexidade seria

(183)

Algoritmo BM

Neste método, nós pré-processamos o padrão e armazenamos a última ocorrência de todo possível

caractere em um vetor de tamanho igual ao tamanho do alfabeto.

Se o caractere não estiver presente, então isso pode

resultar em um deslocamento de tamanho igual ao padrão.

Portanto, no melhor caso, a complexidade seria O(n/m), onde m é o tamanho do padrão.

O pior caso ocorre quando todos os caracteres do padrão e do texto são os mesmos. Ex: “SSS” em “SSSSSSSSSS”.

Neste caso, a complexidade seria O(n.m).

(184)

Algoritmo BM

(185)

Algoritmo BM

A maioria dos algoritmos de busca em strings requer que o texto seja pré-processado.

(186)

Algoritmo BM

A maioria dos algoritmos de busca em strings requer que o texto seja pré-processado.

Isto será “caro”, se você tiver que refazer isso frequentemente.

(187)

Algoritmo BM

A maioria dos algoritmos de busca em strings requer que o texto seja pré-processado.

Isto será “caro”, se você tiver que refazer isso frequentemente.

BM exige apenas que o padrão seja pré- processado.

(188)

Algoritmo BM

A maioria dos algoritmos de busca em strings requer que o texto seja pré-processado.

Isto será “caro”, se você tiver que refazer isso frequentemente.

BM exige apenas que o padrão seja pré- processado.

Isto torna o algoritmo bastante eficiente.

(189)

Casamento Aproximado

(190)

Casamento Aproximado

(191)

Casamento Aproximado

Nem sempre procuramos de forma exata...

(192)

Casamento Aproximado

Nem sempre procuramos de forma exata...

(193)

Casamento Aproximado

Nem sempre procuramos de forma exata...

(194)

Casamento Aproximado

(195)

Casamento Aproximado

E, às vezes, o Google apenas recomenda...

(196)

Casamento Aproximado

E, às vezes, o Google apenas recomenda...

(197)

Casamento Aproximado

(198)

Casamento Aproximado

Existem variações com relação ao casamento aproximado.

(199)

Casamento Aproximado

Existem variações com relação ao casamento aproximado.

A mais importante é aquela que permite

“alterações” no que você procura.

(200)

Casamento Aproximado

Existem variações com relação ao casamento aproximado.

A mais importante é aquela que permite

“alterações” no que você procura.

Por exemplo, ao procurar a palavra este, talvez pesquisar também por esse, essa, esta, isso, nessa…

Referências

Documentos relacionados

Importa ainda referir que, a prova desta disciplina contempla a componente escrita e prática, o grau de exigência resulta dos critérios gerais de classificação, balizados

Quase todos estão de acordo quando afirmam que o trabalho com informação não é exclusivo de uma área profissional, e com a idéia de uma crescente integração de

Segundo Cabello (1996), um emissor autocompensante apresenta o expoente da equação característica da vazão em função da pressão variando entre 0 a 0,4, informação

Levar o aluno a refletir sobre este “algo” e chegar à conclusão de que são os elétrons que “circulam” porque na verdade passam a se movimentar num

São discutidos os conhecimentos disponíveis em termos de imagem funcional pelo método na esquizofrenia, transtornos ansiosos e do humor, nas demências e nos transtornos de

O pastor Felipe Silva de Oliveira da Terceira Igreja Batista em Jardim Bom Retiro (São Gonçalo/RJ), é convidado para apresentar uma reflexão bíblica baseada na

O dimensionamento de elementos mistos aço-concreto já está consolidado e O dimensionamento de elementos mistos aço-concreto já está consolidado e O dimensionamento de elementos

O jacarandá (Dalbergia brasiliensis) mostrou crescimento em altura próximo à altura média entre as espécies ensaiadas (1,23m), destacando-se também como espécie alternativa para