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.