Estes trabalhos devem ser entregues até dois dias antes da data de apresentação.

Indexação dinâmica de texto

Seu programa lerá um texto e permitirá que você procure palavras. O programa deve ter um prompt interativo, que aceita os comandos read, find, show, save.

Um exemplo de consulta ao programa:

*) read historia.txt
 *> arquivo historia.txt lido e indexado
*) find chocolate
Linha      Ocorrencia
10         "... copo de chocolate quente ..."
13         "... tomar o chocolate ..."
9          "... mais choclate ..."
 *> 3 ocorrencias encontradas
*) show 12-14
12 havia voltado para casa.
13 Ele entao decidiu tomar o chocolate,
14 percebendo que naquele dia nao"
 *> 3 linhas mostradas
*)

O programa deve ordenar as ocorrências por frequência de busca, e a frequência de busca deve ficar armazenada em disco, para que o usuário possa sair do programa e voltar tendo as frequências preservadas. O comando "save" gravará as frequências de busca no arquivo (por exemplo historia.txt) em algum lugar onde possa encontrar depois (por exemplo, em .indexador-freq_historia.txt

Grep flexível

Estude a ferramenta grep do Unix. Você fará um concorrente do grep, que faz casamento de padrões por proximidade.

Este tecto tem alguns problemas.
Varas palsvras estao escritas de forma arrada,
como alias acontece muoto quando estamos com prassa
escrevendo um texto.
Eu tento nao cometer erros, mas...
apgrep texto
1: Este tecto tem alguns problemas.
4: escrevendo um texto.
Note que a palavra "tento" não foi selecionada, mesmo tendo um só caracter diferente de "texto" (porque a distância de teclado entre as duas é muito grande).

Typo corrector

Este tecto tem alguns problemas.
Varas palsvras estao escritas de forma arrada,
como alias acontece muoto quando estamos com prassa.
1: texto -> texto
2: palsvras -> palavras
2: arrada -> errada, arada
3: muoto -> muito
4: prassa -> passa, pressa
Note que as palavras "arrada" e "prassa" não foram incluídas, porque o programa não usou apenas a distância de teclado.

Manipulação simbólica de matrizes

Implemente dois algoritmos em matrizes: um para calcular o determinante e outro para multiplicar duas matrizes. As matrizes serão especificadas de forma simbólica.

det:
x y
a b
r: xb - ay
det:
x 0
a b
r: xb
det:
x 4
3 2
r: 12 - 2x
mul:
2 b
a 0

x -1
4 y
r:
2x+4b   -2 + by
ax      -a

Use representação esparsa para as matrizes.

Algoritmos genéticos para o TSP

Use AG para resolver o TSP (traveling salesperson problem).

Algoritmos para caminhos mínimos

Implementar os algoritmos de Bellman-Ford e Dijkstra.