Jump to content
Sign in to follow this  
Pure_Water

[Resolvido]Duvida

Recommended Posts

Pure_Water

É o seguinte, tenho um ciclo for a correr, que vai lendo valores dum file.txt e que imprime e faz operaçoes com esses valores recorrendo a outras classes.  O que eu gostava de saber é qual a melhor forma de ver qual dos valores é que é o maior. Nao consigo criar variaveis porque o file.txt pode ser alterado e depois ja n funcionava bem :S

Share this post


Link to post
Share on other sites
ouvi_dizer

Ora bem vindo ao problema dos formatos proprietários.

Tens sempre que definir um parametro de ordenação, ou seja, uma parametro (valor, variável, campo...) que o ficheiro tem que ter para que possas criar um objecto mais ou menos dinamico que represente cada registo do ficheiro.

Tipicamente não se faz isso.

Normalmente existem 3 soluções que são mais frequentemente escolhidas, que são:

- Ficheiro XML com style sheet/name space/ e parsing DOM (para maping directo com objectos, mais dinamico) ou paring sax (leitura sequencial do ficheiro xml, mais estático)

- Base de dados, que de uma forma mais directa ou menos directa (via tabelas de catalogo) se consegue ter uma estrutura algo dinamica (mas n muito)

- Normal de pequenos trabalhos / trabalhos académicos, ficheiro txt com ou sem encriptação mas com formato bem definido.

O que eu proponho é que definas bem o formato do teu ficheiro, ou então cries tags para os dados de forma a que consigas saber a q e q se refere um determinado valor, tendo isso feito que é a parte mais dificil, vais ao Google e procuras por "Quick Sort Java" e adaptas o código as tuas necessidades.

Basicamente tens duas questões:

1 - resolver o problema da estrutura do ficheiro

2 - algoritmo de ordenação.

O Quick Sort é dos mais eficientes, mas é algo complexo. Podes sempre dar uma olhadela a Merge Sort (mais simples, mas ainda eficiente) ou Bubble Sort (não serve para nada mas é de facil compreensão).

Boa Sorte

Share this post


Link to post
Share on other sites
[PT]Devilishly
... vais ao Google e procuras por "Quick Sort Java" e adaptas o código as tuas necessidades.
É melhor o usar o método estático Arrays.sort() que é garantido ser melhor que implementações encontradas no google para ordenação :D

Share this post


Link to post
Share on other sites
ouvi_dizer

Como a maioria das optimizações depende...

Um Array implica saber a dimensão máxima do que é que se esteja a listar, pessoalmente quando tenho que fazer algo do género opto pelo QuickSort (que procuro sempre um novo, pois normalmente vão evoluindo as implementações) e não me posso queixar das suas performances.

Mas não existe regra de oiro.

Share this post


Link to post
Share on other sites
[PT]Devilishly

Boas!

Como e' evidente, podes implementar os teus proprios algoritmos q ate podem ser mais efecientes em determinados aspectos..

No entanto, o "java" faz questao de fornecer algoritmos standard q sao faceis(simples) de usar, bem testados, e q na maioria das vezes sao mais eficientes q as "nossas" implementaçoes.. :)

Se nao quiseres usar o metodo estatico Arrays.sort(), podes sempre usar o Collections.sort(), q tal como diz na especificacao 'e um merge sort optimizado q cujos testes empiricos mostraram ser tao rapido como um quicksort optimizado..

Fast: It is guaranteed to run in n log(n) time and runs substantially faster on nearly sorted lists. Empirical tests showed it to be as fast as a highly optimized quicksort. Quicksort is generally regarded to be faster than merge sort but isn't stable and doesn't guarantee n log(n) performance.
Esta informacao pode ser encontrada em: Lesson: Algorithms

Se e' mais simples de usar e e' garantida a "mma" performance, pq nao usar? :roll:

Share this post


Link to post
Share on other sites
hybrispt

Não tenho experiência nenhuma em Java e estou actualmente a ler um livro (Basicamente, um curso Java) para mudar isso.

Há uma classe chamada ArrayList que resolve o problema do tamanho do Array pois o tamanho pode ser alterado. (Listas ligadas)

Essa classe fornece um método de ordenação...

Se estou a dizer asneiras e devia estar calado, peço desculpa. :oops:

Se não estou em erro, essa classe vem apenas na última versão do Java (1.5).

Share this post


Link to post
Share on other sites
[PT]Devilishly

Boas!

Sim, a classe ArrayList implementa a interface List, o q é compactivel com o metodo estático fornecido pelo Collections.sort(List<T> list, Comparator<? super T> c)

Logo, sim podes usar o metodo de ordenaçao usado pelo Collections :D

PS: Nao é a classe ArrayList que tem o metodo de ordenacao, mas sim o java.util.Collections..

Share this post


Link to post
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
Sign in to follow this  

×
×
  • 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.