Você está na página 1de 11

Trabalho Prtico 4 AEDS 3

Casamento de Caracteres



























Maria Eduarda de Lacerda Pazeli 112050015
Pedro Henrique Pinto Sarmento 112050049
Introduo

Buscar padres em um texto um problema com vrias aplicaes em Cincia da
Computao, que vo de buscas simples em textos, at processamento de sequncias de DNA
Ao realizar uma pesquisa em uma mquina de busca, como o Google, por exemplo,
estamos essencialmente tentando casar o nosso padro em uma base de documentos vistos como
sequncia de caracteres.
Entretanto, h situaes em que no queremos encontra apenas o padro exato, mas
tambm ocorrncias aproximadas. Essa situao til, por exemplo, quando o padro ou texto
podem ter sofrido alguma corrupo.
Este trabalho divido em duas etapas, sendo que a primeira etapa visa comparar
algoritmos para busca de palavras (padres) em textos permitindo erros, atravs do casamento de
caracteres. Os algoritmos comparados nessa primeira etapa so o Shift-And Aproximado e
Programao Dinmica. J na segunda parte do trabalho, o objetivo analisar e comparar o
funcionamento do algoritmo BMH em arquivos normais e comprimidos atravs da compresso de
Huffman.


Comentrios Explicativos e Anlise de Complexidade

Os algoritmos implementados nesse trabalho seguem as especificaes propostas por
Ziviani, inclusive no que diz respeito s implementaes. Todos os algoritmos sero explicados a
seguir.

Para anlise de complexidade:

m tamanho do padro;
k nmero de erros;
t tamanho to texto;
c tamanho do alfabeto;

Para executar os algoritmos:

Primeira Etapa:

A compilao feita atravs do make. Para a execuo: ./Tp4_parte1 o <opo de
algoritmo> (1-Shift-And/ 2-Prog Dinmica) p <arq padro> -t <arq texto> -e <erro>

Segunda Etapa:

A compilao feita atravs do make. Para a execuo: ./Tp4_parte2 p <arq padro> -t
<arq texto>







Primeira etapa:

Como dito anteriormente, nessa etapa o objetivo analisar algoritmos para casamento de
caracteres considerando erros. Os algoritmos so Shift-And e Programao Dinmica, que sero
explicados a seguir.



Shift-And Aproximado:

A base do Shift-And o paralelismo de bits, que uma tcnica que tira proveito do
paralelismo das operaes sobre os bits dentro de uma palavra do computador. Tirando proveito
disso, o nmero de operaes que o Shift-And realiza pode ser reduzido at w, em que w o
nmero de bits da palavra do computador. Considerando as arquiteturas atuais em que w pode ser
32 ou 64, o ganho do Shift-And pode ser muito grande.
O algoritmo pode ser visto com um autmato no determinista que pesquisa o padro no
texto. O seu funcionamento, consiste em manter um conjunto de prefixos do padro que casam
com o texto lido at ento. E para cada novo caractere lido utilizado o paralelismo de bit para
atualiza-lo.












Imagem 01: Exemplo de autmato no determinista considerando 1 erro, que pode ser de
insero, substituio ou retirada.


Inicialmente, ocorre a fase de pr-processamento do algoritmo em que criada uma matriz
[i][j] para armazenar o conjunto de bits, onde o i = nmero de caracteres distintos do padro, e o j
= tamanho do padro.








Imagem 02: Exemplo da mscara para o padro teste




A mscara feita, colocando 1 nas posies onde ocorre a letra na palavra e 0 nos demais
lugares. Ex: M[t] 10010, pois na palavra teste, o t ocorre na primeira e quarta posies.

O algoritmo empacota, para cada linha j(0<j<=k) do autmato no determinista em uma
palavra

diferente do computador. Para cada novo caractere lido do texto, todas as transies do
autmato so simuladas usando operaes entre as k+1 mscaras de bits:
0
(casamento exato),

1
(um erro), ,

(k erros).
Inicialmente, a mscara
0
(casamento exato) inicializada com
0
=0

. E para 0<j<=k,


inicializado com

=1

.
Considerando M a tabela do algoritmo para casamento exato, para cada novo caractere t
lido do texto, as mscaras so atualizadas pelas expresses:
0
=((
0
>>1 | 10
1
) & M[t[i]]. Para
0<j<=k,

= ((

>>1) & M[T[i]]) |


1
| (
1
>>1)|(
1
>>)|10
1
.
Considerando o autmato, a frmula para expressa s arestas:
Horizontais, indicando casamento de um caractere;
Verticais, indicando insero (
1
);
Diagonais cheias, indicando substituio (
1
>>1);
Diagonais tracejadas, indicando retirada (
1
);
A tabela a seguir, mostra o funcionamento do SHift-And Aproximado para o texto ostestestestam e
padro teste

















Complexidade: Com o uso do paralelismo de bits, em uma linguagem como C, que realize
eficientemente operaes de and, or, deslocamentos e complemento, a mscara pode ser
calculada em O(1).
A fase de pesquisa constituda de um lao for que percorre todo o texto, com um for
alinhado que vai de 0 at o nmero total de erros permitidos, em que cada caractere analisado e
mscara alterada para analise do prximo caractere. Como cada operao de comparao O(1), a
complexidade total do Shift-And O(kt).







Programao Dinmica:

Baseado na lgica do algoritmo apresentado por Levenshtein, chamado distancia de
Levensthein ou distncia de edio. Ele consiste em, dadas duas cadeias de caracteres X e Y,
calcular quantas operaes so necessrias pra transformar a cadeia X na cadeia Y, este nmero de
operaes consiste na distncia de edio entre X e Y ed(X,Y)
A tcnica de programao, j conhecida por ns, obedece ao principio da otimalidade, isto
, consiste em resolver problemas menores at se atingir a soluo tima global. A matriz usada
para o clculo da distncia de edio ser demonstrada logo abaixo.









Imagem 03: Exemplo de uma matriz de distncia de edio. O caminho tracejado representa o
conjunto mnimo de operaes que transforma levenshtein em meilenstein

Inicialmente, alocada uma matriz[t+1][p+1], sendo t o tamanho do texto e p o tamanho
do padro. Em seguida, preenchida a primeira linha da matriz com 0, e a primeira coluna com
uma sequencia de 0 a p. Logo aps, a matriz percorrida e preenchida do topo esquerda at a
base direita , atravs do calculo da distancia de edio apresentado abaixo:

,0
= 0;
0,
= ;

,
= {

1,1
,

= 0
1 + min (
1,1
,
1,

,1
,

Aps todo o preenchimento da matriz, na ltima linha temos os valores da distancia de
edio para cada posio texto em relao ao padro. Sendo assim, com apenas uma busca nessa
linha podemos saber onde as distncias de edio foram menores ou iguais ao erro permitido.


Complexidade: Inicialmente feito um lao do tamanho do texto a primeira linha da matriz
preenchendo 0, como dito acima. A complexidade deste lao O(t). Logo em baixo, em outro lao
for, percorrida a primeira coluna da matriz, tambm explicado acima, preenchendo na sequencia
de 0 a P, logo a complexidade deste lao O(p).
Logo aps, em dois anis for alinhados, toda a matriz percorrida, do topo esquerdo at a
base direita, preenchendo a matriz de acordo com o clculo descrito acima. Logo a complexidade
desta parte do cdigo O(t*p), que a complexidade total deste algoritmo.



Segunda Etapa:

Esta segunda etapa do trabalho, tem como objetivo comparar o funcionamento do
algoritmo BMH para situaes em que o texto est normal ou comprimido. Para isso, mais dois
algoritmos foram implementados nessa etapa, sendo eles o BMH e Huffman, para ser realizada a
compresso. Ambos sero explicados a seguir.



Boyer-Moore-Horspool:

A ideia principal do algoritmo pesquisar o padro no texto no sentido contrrio do
tradicional, usado pelos outros algoritmos, ou seja, o padro pesquisado da direita para a
esquerda em uma janela que desliza ao longo do texto. Para cada posio dessa janela,
pesquisado um sufixo do texto na janela que casa com um sufixo do padro. Se no forem
encontradas desigualdades, ento uma ocorrncia foi encontrada, seno, o algoritmo calcula um
deslocamento para que o padro seja deslizado para a direita.
O algoritmo BM prope duas heursticas para calcular o quanto o padro deslizar na
janela, sendo elas:
1. Alinha o texto no caractere que ocorreu a coliso com o primeiro caractere do
padro que case com ele.
2. Ao mover o padro para a direita, ele casa com o padro anteriormente casado.










Imagem 04: Exemplo da primeira heurstica










Imagem 05: Exemplo da segunda heurstica

O que o BM faz, escolher para cada situao, qual a melhor heurstica a ser usada no
momento, isto , qual das duas possibilitar o maior deslocamento do padro.
A grande melhoria do BMH em relao ao BM, parte da observao de que qualquer
caractere lido do texto a partir do ltimo deslocamento, pode ser usado para enderear a tabela
de deslocamentos. A tabela endereada como o caractere no texto correspondente ao ltimo
caractere do padro.
Complexidade: O pr-processamento dos deslocamentos pode ser feito com base apenas
no padro e no alfabeto, em dois laos for alinhados. Assim, a complexidade do pr-
processamento de O(m*c).
O custo de execuo depende da probabilidade de se encontrar o padro, de sua
localizao e frequncia com que ocorre no texto. Alm disso, depende tambm da estrutura do
prprio padro e do texto, que afetam na possibilidade de os saltos serem executados.
Exemplo: Considerando um caso em que o Padro tenha todos os caracteres iguais, e o
texto seja composto de somente estes caracteres tambm, no ocorrero saltos. Considerando
este caso, cairemos no pior caso do algoritmo em que o anel mais externo ser executado m vezes,
e o anel mais interno percorrer todo o texto, sendo a complexidade ento O(m*t)




Compresso de Huffman:

A ideia deste tipo de compresso atribuir cdigos mais curtos aos smbolos com
frequncia alta. Um cdigo nico de tamanho varivel a cada smbolo diferente que o texto possui.
Para implement-lo, existem dois jeitos: considerando smbolos como caracteres, ou considerando
as palavras como smbolos, sendo este o jeito mais recente e utilizado por ns neste trabalho.
Escolhemos a segunda forma de implementao, pois ela permite acesso randmico a
palavras dentro do texto e a tabela de smbolos do codificador exatamente o vocabulrio do
texto.
Alm disso, por essa forma de implementao, conseguimos acessar qualquer parte do texto
comprimido sem precisar antes descomprimi-lo, o que torna o algoritmo mais rpido e eficiente
que sua outra verso.
Na compresso de Huffman, os espaos so representados de forma implcita no texto
comprimido, e os outros separadores como vrgula, ponto final, exclamao, entre outros, so
codificados separadamente da palavra. Ou seja, na hora de descodificar, supe-se cada palavra
seguida de um espao, a no ser que o prximo smbolo a ser descodificado seja um outro
separados.
O primeiro passo do algoritmo de Huffman percorrer o texto inteiro, calculando as
frequncias das palavras. Logo aps, a partir desta frequncia calculada, feita a codificao de
cada uma das palavras existentes no texto, onde a mais frequentes recebem uma codificao
menor e as menos frequentes ficam com um cdigo maior.
Em seguida ocorre a construo da rvore de frequncias. Consideramos inicialmente uma
rvore com t folhas, em que cada folha corresponde a uma palavra do texto e sua respectiva
frequncia.
Ento, a cada iterao, as duas palavras com menor frequncias so unidas em uma nica
rvore e as suas frequncias so somadas e atribudas ao n raiz. O que temos ao final deste
processo uma arvore que une todas as palavras existentes no texto, no qual os cdigos
associados a cada uma delas so representados pelas arestas que levam da raiz folha que a
representa.
Em geral, a rvore escolhida para representar Huffman, cannica, ou seja, a altura da sub-
rvore direita de qualquer n, nunca menor do que a altura da sub-rvore esquerda. Isso
facilita a forma de visualizao, auxiliando na hora de codificao, em que arvore percorrida
emitindo bits ao longo de suas arestas e descodificao em que os bits so usados para selecionar
as arestas.













Imagem 06: Exemplo de uma rvore de Huffman montada, como explicado acima. Cada
vrtice contm a letra (no nosso caso so palavras) e sua frequncia, e cada n da rvore contm a
frequncia acumulada at ento.



Anlise de resultados

Os testes foram realizados para dois textos de tamanhos diferentes, e 5 padres diferentes
com 4, 7, 10, 12, 15 caracteres. Para os algoritmos de casamento aproximado, foram testados para
0, 1, 2, 3 erros.



Nmero de comparaes

Para o algoritmo de programao dinmica, como podemos notar no grfico abaixo, h um
crescimento do nmero de comparaes em relao ao tamanho do padro, provando que h uma
relao entre eles, o que j era esperado de acordo com a anlise de complexidade, pois cada
caractere do padro comparado com cada caractere do texto. Para o Shift-And Aproximado, no
houve mudanas no nmero de comparaes quando variamos o padro, o que tambm
coerente com a anlise feita anteriormente por ns, uma vez que o Shif-And depende apenas do
tamanho do texto.
Para os algoritmos BMH e BMH em arquivo comprimido, a comparao que podemos fazer,
a partir do grfico que o nmero de comparaes realizadas pelo algoritmo que pesquisa em
texto comprimido bem inferior ao outro, o que condizente com o que aprendemos com a
matria, pois mesmo com o overhead para comprimir e descomprimir o texto, ele bastante
eficiente. Para ambos os algoritmos, notamos tambm que a medida que o tamanho do padro
aumenta, diminui o nmero de comparaes realizadas. Isso ocorre, pois os saltos realizados pelo
algoritmo tendem a serem maiores.

Notamos tambm, que para todos os algoritmos citados acima, quanto maior o tamanho
do texto, maior o nmero de comparaes realizadas pelo algoritmo. Como dito anteriormente,
ambos dependem do tamanho do texto, logo a anlise est condizente com o funcionamento dos
algoritmos.



Texto menor Texto maior






Texto menor Texto maior




Apesar de no mostrar nos grficos, os testes foram feitos para nmero diferentes de erros
e comparados. Notamos que o nmero de comparaes no se altera em relao ao nmero de
erros para a programao dinmica. O que condizente com a complexidade encontrada por ns,
pois o algoritmo executa todas as comparaes independentes da quantidade de erros. J o Shift-
And, tem seu nmero de comparaes aumentada a medida que aumentamos o nmero de erros,
o que tambm condizente com a complexidade, que O(kt), sendo k o nmero de erros.





Tempo

Observando os grficos abaixo de tempo X padro, podemos observar o crescimento do
tempo para execuo do algoritmo de programao dinmica, medida que aumentamos o
tamanho do padro. Isso j era esperado, pois o algoritmo compara todos os caracteres do padro
com todos os caracteres do texto, logo quanto maior o padro, maior o nmero de comparaes, e
consequentemente, maior tempo gasto para sua execuo completa.
J para o Shift-And, o tempo, assim como o nmero de comparaes indiferente ao
tamanho do padro, o que tambm j era esperado, uma vez que como j dito anteriormente, o
algoritmo s depende do tamanho do texto e nmero de erros.
Apesar de o algoritmo BMH para textos comprimidos ter o nmero de comparaes
muito menor do que o BMH para textos, no-comprimidos, notamos pelo grfico de tempo,
que em questo de tempo a situao se inverte, tendo o BMH para textos no-comprimidos um
tempo muito menor que o outro. Conclumos que isso ocorreu, pois o algoritmo para
compresso usado por ns no foi to eficiente.




Texto maior Texto menor





Texto maior Texto maior
Apesar de no mostrar nos grficos, os testes foram feitos para nmero diferentes de erros
(0, 1, 2, 3) e comparados. Notamos que o funcionamento do algoritmo de Programao Dinmica,
em relao ao tempo, indiferente para o nmero de erros permitidos. J era esperado esse
comportamento, pois o nmero de comparaes realizadas por ele a mesma independente dos
erros. O que muda, a busca na ltima linha da matriz, que avalia quais os casamentos, de acordo
com os erros permitidos. J o Shift-And, tem um aumento no seu tempo de execuo a medida
que aumentamos o nmero de erros, o que tambm condizente com a complexidade, que
O(kt), sendo k o nmero de erros.




Concluso

Com este trabalho, realizado em duas etapas, tivemos a oportunidade de comparar na
prtica o funcionamento de algoritmos para casamento de caracteres, e tambm analisar o
comportamento de uma mesmo algoritmo, no caso o BMH, para arquivos comprimidos e no-
comprimidos. A partir da anlise de complexidade apresentada e testes feitos, observamos que,
em termos de nmero de comparaes, o BMH foi o algoritmo mais eficiente, e o menos eficiente
foi o Programao Dinmica, isso porque ele compara todas as letras do padro com todas as
letras do texto. Em relao ao tempo de execuo, o que notamos foi o quanto o BMH
demorado em relao ao outros algoritmos, acreditamos que isso seja a ineficincia da forma que
os padres so obtidos no vocabulrio.



Bibliografia

[1] ZIVIANI, Nvio. Projeto de Algoritmos com implementaes em PASCAL e C. 2 Edio.

[2] ROCHA, Leonardo. Slides da disciplina de Algoritmos e Estruturas de Dados III. Lecionada no
ano de 2013.

Você também pode gostar