Sei sulla pagina 1di 14

ProcessamentodeCadeiasde

Caracteres

RelatriodoProjeto1
2015.2

GuilhermePeixoto
RafaelAcevedo

Recife,25deOutubrode2015

Sumrio

1.Identificao
1.1Equipe
1.2Descriodacontribuiodosmembros
2.Implementao
2.1Algoritmosimplementados
2.2Situaesnasquaiscadaalgoritmoempregado
2.3Detalhesdeimplementaorelevantes
3.Testes
3.1BuscaExata
3.1.1.KMP
3.1.2.AhoCorasick
3.2BuscaAproximada
3.2.1WuMamber
3.2.2.Sellers
3.3Benchmarks
3.3.1:Buscaporumpadro
3.3.2:Buscaporvriospadres
3.3.3:Buscaaproximada

1.Identificao
1.1Equipe
GuilhermePalmaPeixoto(gpp)
RafaelAcevedodeAguiar(raa7)

1.2Descriodacontribuiodosmembros
GuilhermePeixoto
:Implementaodosalgoritmosdestringmatchingexatoseexecuo
dostestesrelacionadosaessesalgoritmos

RafaelAcevedo
:Implementaodosalgoritmosdematchingaproximadoeexecuodos
testesrelacionadosaessesalgoritmos

2.Implementao
2.1Algoritmosimplementados
Foram implementados 2 algoritmos para matching exato: o Algoritmo de
KnuthMorrisPratt(KMP) e o Algoritmo de
AhoCorasick
. J para matching
aproximado, foram implementados o Algoritmo de
Sellers e o Algoritmo de
WuManber
.

2.2Situaesnasquaiscadaalgoritmoempregado
No caso de matching exato, usamos o KMP quando o usurio entra com
apenasumpadro.Quandohmaisdeumpadro,usadooAhoCorasick.
Para matching aproximado, utilizamos o WuManber quando o padro tem
menos que 64 caracteres(tamanho da palavra de mquina) e o Sellers caso o
padrotenha64oumaiscaracteres.

2.3Detalhesdeimplementaorelevantes
Na nossa implementao do algoritmo de AhoCorasick, a funo de
transioentre os estadosfoiimplementadacomoumamatriz(aocontrriodeoutra
estruturacomomap)poisestaexecutaacessostransiesemtempoconstante.

No algoritmo de WuManber, visto queopadro sempreter menos que 64


bits,foiusadounsignedlonglongaoinvsdebitsetparaasmscarasdebits.

Durante a leitura das entradas, fazemos a chamada dos algoritmosquando


uma linha doarquivo de textolida(evitaque umarquivo inteiroseja carregado na
memria). Caso haja algum prprocessamento, este feito antes da leitura do
arquivo de texto. Isso foi feito para evitar o carregamento de um arquivo de texto
inteironamemria.

O projeto foi desenvolvido para trabalhar exclusivamente com caracteres


ASCII, jque algunsdos algoritmos implementadosnecessitamdesaberoalfabeto
deantemoparaseufuncionamento.

3.Testes
A fim de testar a performance do projeto desenvolvido, podemos dividir os
testes nas seguintes fases: busca exata e busca aproximada. A menos que
explicitamente anotado,todosostestes foram feitos em: OS X10.11, 2.6GHzIntel
Corei5,8GB1600MHzDDR3.

3.1BuscaExata
3.1.1.KMP
Para medir a performance embusca exata, foi feita a buscaporpadresde
tamanhos diversosem basesdecaractersticasdiferentes: emtextos de linguagem
natural e bases de "carter gentico" (i.e.: as
strings so padres de genomas,
protenas, etc). A tabela a seguir mostraaperformancede acordo como tamanho
deumpadrobuscadoeabasedetexto.OalgoritmoutilizadonessecasooKMP.

Para cada dupla de tamanho do padro e base, h um par de valores


associados: a mdia de tempo de execuo (em segundos) e o desvio padro
associado em 100 execues.Pode ser observado queaperformancedoalgoritmo
estvel,possuindovaloresbaixosdedesviopadro.

Almdessestestes,foifeitoumasrieadicionaldetestesdentrodoarquivo
genome/ecoli.txt
paraavaliarmelhorainflunciadotamanhodopadronabusca.


Grfico(1):PerformancedoalgoritmoKMPemrelaoaotamanhodopadroaserbuscado.

De acordo com o grfico acima, podemos observar como o tamanho do


padro afeta a performance. O tamanho inicial foi 1000caracteres e foi iterado de
1000 em 1000 at o tamanho 250,000. Devido pequena escala representada,
podemos observar apesar de alguns picos de diferena na performance, a
performance aproximadamente constante. Por fim, tambm foi testado a
performancedoKMP de acordo com o tamanho do texto. Para o teste, foi utilizada
uma string de padro (aleatria) de tamanho 5. A cada iterao, foram geradasN
strings aleatrias de tamanho 50 para o padro ser buscado em cada, tal que N
varia entre 1000 e 50000 (de 1000 em 1000). De acordo com os resultados de
expostos no grfico abaixo, podemos observar a linearidade esperada da
performancedoalgoritmodeacordocomotamanhodotextoaserbuscado.


Grfico(2):PerformancedoalgoritmoKMPemrelaoaotamanhodotextodeentrada.

3.1.2.AhoCorasick
Tambm foi testada a performance ao procurar simultaneamente porvrios
padres no mesmo texto, na qual utilizase o AhoCorasick para realizar essa
busca. Para oteste, foramutilizadasstringsaleatrias. Paraoconjuntode padres,
foram geradas 1000 strings de tamanho 5, 10, 50e100 aleatoriamente,enquanto
para o conjunto de padres foram geradas 40,000 strings de tamanho 200. Os
resultadossoreportados deformaanloga, ao longode100execuesparacada
configurao:

PerformanceAhoCorasick
TamanhodoPadro

Tempomdioexecuo
(s)

DesvioPadro

0.130

0.007

10

0.128

0.006

50

0.144

0.014

100

0.154

0.014

Em adio aos experimentos acima, foi gerado um grfico que mostra a


performance do algoritmo de acordo com a variao do tamanho do padro (em
uma nica execuoparacadatamanho).Para cada tamanho de padro (variando
de5a100),foigerado100stringsaleatoriamenteparaserbuscadonamesmabase
utilizada acima (40,000 strings de tamanho 200). O grfico abaixo mostra que a
performancedoalgoritmo aproximadamente constantedeacordo comotamanho
dopadroaserbuscado.

Grfico(3):PerformancedoalgoritmoAhoCorasickemrelaoaotamanhodopadroaserbuscado.

Similar ao teste realizado com o KMP, tambm medimos a performance do


AhoCorasick em relao ao tamanho do texto a ser buscado. O experimento foi
realizado deformaanloga, noentanto ao invs de buscar por um nicopadrode
tamanho5emcadaiterao,forambuscadospor100padresdetamanho5acada
iterao. Tambm pode ser confirmado que o algoritmo apresenta performance
lineardeacordocomotamanhodotextoaserbuscado.


Grfico(4):PerformancedoalgoritmoAhoCorasickemrelaoaotamanhodotextodeentrada.

3.2BuscaAproximada
Os testes realizados para busca aproximada so similares aos realizados
para buscaexata. A fim de medir a performanceem buscaexata, primeiro feitoa
busca por um padro em textos que possuem caractersticas distintas, de forma
anloga ao experimento inicial. Para padres de tamanho inferiora64caracteres,
WuMamber utilizado como algoritmo caso contrrio a buscafeitautilizando o
Sellers.Natabelaabaixo,observamosaperformancedoWuMamber.

3.2.1WuMamber

Para cada configurao so feitas 100 execues e analisada a mdia do


tempo de execuo e o desvio padro. Para cada documento a ser buscado, um
nico padro buscado (todos os padres so coerentes com o texto a ser
buscado),noentantooerrovariado.


PerformanceWuMamber
Erro
K
1
3
5

englishTexts\bible.txt

genome\ecoli.txt

protein\hs.txt

Mdia

DP

Mdia

DP

Mdia

DP

0,020s

0,001

0,046s

0,004

0,034s

0,004

0,021s

0,001

0,046s

0,002

0,034s

0,002

0,020s

0,0009

0,052s

0,006

0,034s

0,002

Tambm podemos analisar aperformancedo WuMamber de acordo com a


variao do tamanhodo padro,comarestrio dequeo tamanhodopadro no
devecontermaisque64caracteres.

Grfico(5):PerformancedoalgoritmoWuMamberemrelaoaotamanhodopadroaserbuscado.

Nesse teste, foi realizado a buscapor um padro aleatrio de tamanho 10 a


64 caracteres com o erro limite igual a 1 dentro de 40,000 strings aleatrias de
tamanho 200 cada. Novamente, podemos observar que dentro dos limites
suportados pela implementao realizada do WuMamber, o tamanho do padro
noprejudicaaperformance.
9


Grfico(6):PerformancedoalgoritmoWuMamberemrelaoaotamanhodotextodeentrada.

No grfico acima, observase que o algoritmo responde em performance


linear em relao ao crescimento do tamanho dotexto a serbuscado o padro. O
tamanho do texto varia de 1000 a 50000 linhas (50 caracteres cada) e feita a
buscaaproximadaporumpadrodetamanho5comerrolimiteiguala3.

3.2.2.Sellers
ParatestaroalgoritmoSellers,foifixado otamanhodopadroem100(umavezque
para qualquer padrodetamanhoinferiora65oWuMamber acionado)efoi feitaabusca
aproximadaemtrsbasesdiferentes,analogamenteaosexperimentosanteriores.

PerformanceSellers
Erro
K
10
25

englishTexts\bible.txt

genome\ecoli.txt

protein\hs.txt

Mdia

DP

Mdia

DP

Mdia

DP

0.065

0.007

0.043

0.006

0.031

0.002

0.062

0.003

0.043

0.003

0.032

0.003
10

50

0.064

0.007

0.044

0.007

0.032

0.002

Observamos tambm de acordo com o grfico a seguir o impacto (ou ausncia de)
que a variao no tamanho do padro provoca na performance do algoritmo. Para os
valores testados, podemos perceber que, assim como nosoutrosexperimentos,otamanho
dopadropoucoinfluencianaperformancedoalgoritmo.

Grfico(7):PerformancedoalgoritmoSellersemrelaoaotamanhodopadroaserbuscado.

possvel ver tambm que, de acordo com o esperado, o algoritmo obtm uma
performancelineardeacordocomotamanhodotexto,comoobservadonogrficoaseguir.

Grfico(8):PerformancedoalgoritmoSellersemrelaoaotamanhodotextodeentrada.

11

3.3Benchmarks
Na fase de testes comparamos tambm a performance da nossa implementao
com a da ferramenta grep (verso: (BSD grep) 2.5.1FreeBSD, OS X 10.11)parabuscade
padres exatos. Cada teste foi executado 100 vezes e foi obtida a mdia e desvio padro
dotempodeexecuo.Mostramososresultadosaseguir:

3.3.1:Buscaporumpadro
Nesse caso de teste, foi feita a busca por um padro gerado aleatoriamente de
tamanho 5 dentrodeumarquivodetexto geradoaleatoriamentequecontm400,000linhas
com200caracterescada.Osresultadosforam:

Ferramenta

Mdia

DesvioPadro

grep

0.136s

0.041

pmt\kmp

0.089s

0.012

3.3.2:Buscaporvriospadres
Nesse caso de teste, foi feita a busca por 100 padres gerados aleatoriamente de
tamanho 5 dentrodeumarquivodetexto geradoaleatoriamentequecontm400,000linhas
com 200 caracteres cada. A opo"f"foipassadaaogrepparaquefossefeita abuscapor
mltiplospadres.Osresultadosforam:

Ferramenta

Mdia

DesvioPadro

grep

3.960s

0.090

pmt\ahocorasick

0.117s

0.002

A queda de performance drstica do grep nesse caso devese ao fato de que a


opo "f" para procurar por vrios padres no feita de forma "simultnea", ao contrrio
decomorealizadopeloalgoritmodeAhoCorasick.

12

3.3.3:Buscaaproximada
O benchmark de comparao para a busca aproximada foi o
agrep
4.172_i386
,
VMWareubuntu14.04,4GBRAM, Inteli7.Foibuscadoporumpadroaleatriodetamanho
32 dentro de um arquivo gerado aleatoriamente que contm 400,000 linhas com 200
caracterescada.Osresultadosforam:

Ferramenta

Mdia

DesvioPadro

agrep

0.670s

0.001

pmt\wu_mamber

0.100s

0.007

Apenas o WuMamber foi empregado nesse caso de de teste porque a ferramenta


agrep d suporte apenas para padres que contmapenasat32caracteres.importante
notar tambm que a performance do agrep influenciada pelo fato do teste ter sido
executado em uma configurao de mquina virtual, ao invs de ter sido executado
diretamentepelosistemaoperacional.

13

Potrebbero piacerti anche