• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Pure_Water

[Resolvido]Duvida

7 mensagens neste tópico

É 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
... 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
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora