5. Limites do programa |
Felizmente no que toca a limites neste programa só os encontramos quanto aos tempos de execução,
de resto não conseguimos encontrar nada
senão a memória disponível (provavelmente não procuramos
os suficiente).
A principal limitação que leva a um maior tempo de execução é devida à classe StringBasic,
em especial à função Count(). Propomos uma forma de optimizar esta classe a partir do
uso de um inteiro count (algo de semelhante ao que foi feito com o VectorString por exemplo)
- ver comentários no código da classe StringBasic fornecida com este relatório.
Apesar de termos explicado algumas das razões pelas quais a classe StringBasic é lenta
não indicamos ainda onde tal se manifesta.
Por exemplo, ao ler um ficheiro relativamente grande (superior à capacidade alocada),
ou quando usamos a função Replace() - na parte da função OurSelection::Process() que
retira os artigos ("dos", "des", etc).
Uma forma de optimizar todo o processo de busca seria ignorar palavras que não começassem
por maísculas (partindo do principio de que todos os nomes dos jogadores, etc., começam por
maísculas), mas tal método é demasiado específico para os jogadores, e aliás não permite
encontrar o nome "João pinto" numa notícia... Contudo se utilizassemos este método
teriamos que substituir todas as plavras com mínusculas por um caracter (ex: '+')
que impedisse erros como encontrar "João Pinto" na seguinte frase: ".. o já conhecido
João galardoado com uma medalha pelo dirigente do seu clube Pinto da Costa ...".
Este sistema poderia ser utilizado se o único objectivo do programa fosse obter a
máxima velocidade possível para resolver este problema sem criar um programa mais
facilmente adaptável a outras situações (possivelmente até com maior utilidade nestas).
Quanto ao uso do Tokenizer é necessário algum cuidado. Por exemplo retirar
virgulas (',') pode levar a casos semelhantes a encontrar "João Pinto" em " ... o nosso
João, Pinto da Costa, pelo contrário...", portanto devemos apenas usar o espaço (' ') como
Token.
O uso do Tokenizer na leitura dos SportAgents é por sua vez limitativo visto não permitir
buscas (que por alguma razão sejam necessárias fazer) como de "Rui Gomes" (com os dois
espaços).
Testes com o Tokenizer demonstraram que este processo é mais lento do que o SearchAndReplace
e de tal maneira o segundo método foi mantido no nosso programa.