Jump to content

Programa mais eficiente


paperless
 Share

Recommended Posts

Boas pessoal.

Estou a tentar fazer um pequeno programa que sugira soluções para palavras cruzadas ou problemas equivalentes (jogo da forca, por exemplo).

Ainda estou no ínicio e já me deparei com um pequeno (grande) problema.

Tenho um .txt com 688 mil palavras e para além de não conseguir guardar todas numa linkedlist (só guarda 200 001 palavras) acho uma solução pouco eficiente visto que come muita memoria.

Como é que posso resolver este problema?

Será possível ir lendo o ficheiro aos poucos sem ter de o por todo na memoria?

Cumprimentos.

Link to comment
Share on other sites

Tenho um pequeno editor similar ao sistema latex num trabalho académico que tem mais ou menos o mesmo número de palavras, dado que tem  um dicionário de português carregado em memória. Carregar o dicionário demora alguns segundos mas todas as palavras cabem em memória e não não consome tanta quanto isso, nunca fiquei sem memória a executar o programa e não lhe altero o valor base e máximo de memória disponível, pelo que a JVM não tem mais de 64MB disponíveis para correr.

Uma lista não será a melhor estrutura de dados mas não percebo porque não consegues colocar todas as palavras, não conheço nenhuma limitação, além da memória disponível, que te impeça de colocar elementos dentro da lista. Além disso, no mesmo trabalho, não só tenho todo o dicionário carregado como também é criada uma lista ligada dupla que contém um objecto para cada palavra, elemento de pontuação, espaço entre palavras. Contém ainda uma outra lista para identificar a formatação aplicada ao texto.

Tudo isto funciona bastante bem sem consumir memória por aí além 🙂

Portanto, usar um SGBD seria uma opção, por exemplo o HSQDB é uma boa escolha sendo que ocupa muito pouco espaço, cerca de 600KB, e pode ser incorporado bem numa aplicação, além de ser implementado em Java.

Mas talvez fosse melhor pensares nas estruturas que estás a usar e tentares verificar porque é que estás a ter problemas de memória.

Podes ler um ficheiro aos poucos, mas acho que essa solução não é muito boa, se não tens o ficheiro todo carregado então vai ser mais lento fazer as pesquisas, só estarias da mudar o problema de sítio.

Link to comment
Share on other sites

Eu aconselho antes o H2 DataBase é muito semelhante ao hsqldb, alias os criadores de h2 são parte dos mesmo de hsql. Já use as duas e posso dizer que h2 está bastante melhor que hsql.

Tem muito boa documentação, tem um cliente integrado tipo myphpsql e tem melhor performance que hsql.

Para além disso permite criar bases de dados encriptadas, usar triggers etc....

http://www.h2database.com/

I haven’t lost my mind; it’s backed up on DVD somewhere!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.