ajgan / pcc1

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ferramenta pmt de busca de padrões.

Implementada por Antonio Gadelha(ajgan) e Gabriel Melo(gvmgs) como Projeto 1 para a disciplina de Processamento de Cadeias de Caracteres(if767) do CIn-UFPE.

Antonio implementou os algoritmos Brute Force, KMP e Sellers. Fez também a parte da leitura das flags da linha de comando.
Gabriel implementou os algoritmos Aho-Corasick e Ukkonen.
Ambos contribuíram com a documentação e com os testes.

Para compilar o projeto, basta dar o comando:
make pmt
dentro da pasta src. Após isso um executável é gerado e obedece ao seguinte comando:
./pmt [options] pattern textfile
Um executável já foi previamente gerado pela equipa e se encontra dentro da pasta bin

Os seguintes algoritmos de busca foram implementados:
Para busca exata:
    - Brute Force
    - KMP
    - Aho-Corasick
Para busca por proximidade:
    - Sellers
    - Ukkonen

As flags de linha de comando implementadas foram:
    -c ou --count
        Flag para exibir contagem de ocorrências do padrão no texto(por default, não se exibe)
    -e ou --edit emax
        Flag para explicitar o valor de edit máximo em casos de algoritmos de busca aproximada(por default, é zero)
    -a ou --algorithm algorithmname
        Flag para explicitar qual algoritmo de busca o usuário deseja utilizar(por default, a escolha do algoritmo segue uma heurística que será explicada posteriormente)
        lista de algoritmos:
            - brt (Brute Force)
            - kmp (KMP)
            - aho (Aho-Corasick)
            - sel (Sellers)
            - ukk (Ukkonen)
    -p ou --pattern patternfile
        Flag para indicar que os padrões devem vir de um arquivo(por default, o padrão é um só e é digitado pelo usuário)
    -h ou --help
        Flag que exibe informações básicas do programa ao usuário
    -t ou --time
        Flag que exibe ao final o tempo gasto com a execução do programa(por default, não se exibe)

A flag -t foi uma opção que a equipe julgou como interessante, mas não estava no escopo das especificações do projeto

Como citado anteriormente, caso o usuário não informe qual algoritmo ele deseja executar, o programa segue uma heurística obtida através de experimentações.
A heurística se dá da seguinte forma:

Para busca exata:
 - Caso existam mais de 20 padrões para serem pesquisados, é selecionado o Aho-Corasick
 - Caso seja apenas um padrão de tamanho menor que 5, se usa o Brute Force
 - De resto, utiliza-se o KMP
Para busca aproximada:
 - Seleciona o Sellers(tivemos problemas com o Ukkonen)

About


Languages

Language:C++ 100.0%