Seguinte to elaborando um programinha que ele aprensenta o menor e maior numero mais como posos fazer isso?quero que ele automaticamente defina pensei em fazer uma ordenação do menor para o maior mais não consegui representa apenas o menor e maior
Com arrays eu sei fazer xD só dessa forna sem arrays que eu naum cosigo fazer =/… pq nunca me deparei com uam dessas comparar variavel por variavel e apresentar maior e menor! se pode ajudar ae vei agradeço fiko grato ou poder me daruma dica de como fazer jah ajuda abraço!
T
thingol
Amigo, sem arrays você pode fazer como se fosse uma tabelinha de futebol. Vai ficar um programa meio grande, mas é um exercício (trabalhoso mas é um exercício).
Em vez de "numero", "numero2" etc. use "vasco", "flamengo", "corinthians", "palmeiras", "remo" ou os times de sua preferência , e faça os jogos, como se fosse um tipo de "mata-mata". Se vasco > flamengo, então vasco ganhou, então você procede ao próximo par de times (corinthians x palmeiras)
Entendeu direitinho?
J
javahelp
Ah entendi tip comparar um a um ate chegara uma final e tals pensei nisso mais sei lah pensie ke tinha uma forma ke jah comparava todos e apresentava mais ok valeu agradeço mesmo xD
É claro que existe “Collections.max” e “Collections.min”, mas o professor do cara não vai aceitar isso - ele quer uma solução como a do Ricardo.
Paulo_Silveira
O codigo do ricardo esta perfeito. Nao precisa ordenar!! Mas ainda da pra melhorar.
Ele faz praticamente 2*n comparacoes… da pra fazer com uma quantidade menor que isso de comparacoes. Quem se atreve?
T
thingol
Dá para fazer usando a tal tabela do campeonato e os mata-matas. (Fazendo desse jeito você precisa fazer algumas continhas, mas não é nada absurdo).
Dou a idéia para que o pessoal possa aprimorar.
davidbuzatto
Tentei implementar uma solução com maior performance mas não funcionou…
marciobarroso
Seria algo como N*logN ???
[]'s
Paulo_Silveira
Nao
É 3n/2. Beeeeeeem melhor que nlogn.
Alguem aqui tinha digitado um codigo e chegado perto… Bricando meia hora la na caelum pra lembrar como era isso…
marciobarroso
Paulo Silveira:
Nao
É 3n/2. Beeeeeeem melhor que nlogn.
Alguem aqui tinha digitado um codigo e chegado perto… Bricando meia hora la na caelum pra lembrar como era isso…
Eu cheguei a postar um código q eu fiz aqui, mas depois de analisar melhor, ví que ele não era tão bom qto o do Ricardo … por isso tirei :oops:
marciobarroso
Paulo …
Tentei, mas não conseguí … como seria possível implementar algo com complexidade 3N/2 ???
[]'s
mueller
Da pra alterar o código pra ficar assim, 3n/2 -1 comparações em média, n-1 no melhor caso e 2n -2 no pior (atenção: a pressa junto com o sono podem gerar conclusões erradas sobre o número de comparações )
da pra fazer (3n/2)-2 no pior caso
acho que é legal de blogar. nao encontrei referencias em portugues.
dreamspeaker
Paulo Silveira:
da pra fazer (3n/2)-2 no pior caso
acho que é legal de blogar. nao encontrei referencias em portugues.
O Sr. poderia então fazê-lo logo, porque ontem fiquei uma hora da minha vida pensando no 3n/2 e não cheguei a lugar algum.
davidbuzatto
Consegui diminuir o número de iterações pela metade, mas aumentou a quantidade de comparações, fazendo com que a performance não fosse melhorada.
Para a quantidade de elementos do array abaixo, eu tive que alocar 500mb para a máquina virtual, pois estava dando estouro de memória.
Fiz uma classe com métodos estáticos só para testar.
importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){int[]array=newint[100000000];intmenorR;intmenorD;populaArray(array);longinicio=System.currentTimeMillis();menorR=menorRapido(array);longmeio=System.currentTimeMillis();menorD=menorDevagar(array);longfim=System.currentTimeMillis();System.out.println("Utilizando metodo rapido\n"+"Menor = "+menorR+"\n"+"tempo gasto em milisegundos = "+(meio-inicio));System.out.println("Utilizando metodo denavagar\n"+"Menor = "+menorD+"\n"+"tempo gasto em milisegundos = "+(fim-meio));}publicstaticintmenorRapido(int[]array){intmenor=array[array.length-1];for(inti=1;i<array.length;i+=2){if(array[i-1]<array[i]&&menor>array[i-1])menor=array[i-1];elseif(menor>array[i])menor=array[i];}returnmenor;}publicstaticintmenorDevagar(int[]array){intmenor=array[0];for(inti=1;i<array.length;i++){if(menor>array[i])menor=array[i];}returnmenor;}publicstaticvoidpopulaArray(int[]array){Randomr=newRandom();for(inti=0;i<array.length;i++){array[i]=r.nextInt(10000);}}}
Cheguei perto? :?:
ricardosoares
Certamente a solução “Collections” é a mais apropriada pro dia-a-dia. Deixa o código limpo e, tenho o palpite de que, internamente ela realiza as mesmas operações que eu apresentei.
Mas, como foi dito, creio que se trata de uma tarefa para curso. Lembro-me de ter feito esses exercícios na facul, em Pascal, a alguns 10 anos atrás. E o professor deve estar pedindo algo assim.
ricardosoares
Paulo Silveira:
O codigo do ricardo esta perfeito. Nao precisa ordenar!! Mas ainda da pra melhorar.
Ele faz praticamente 2*n comparacoes… da pra fazer com uma quantidade menor que isso de comparacoes. Quem se atreve?
Na verdade são 3 comparações por item. Tem também a comparação do “for”. hehehe
dreamspeaker
E o for conta como comparação? Não sei… bem, eu cheguei nisso aqui, comparando por pares:
Galera aproveitando o tópico, como posso colocar uns 3 numero ou mais em ordem crescente ou decrescente ?
estou tentando fazer mais não consigo…alguem pode me explicar mais n em java faz em pseudo-código por favor.
peczenyj
marciobarroso:
Paulo …
Tentei, mas não conseguí … como seria possível implementar algo com complexidade 3N/2 ???
[]'s
Arvores Binárias?
ricardosoares
.
ricardosoares
E o for conta como comparação? Não sei…
for (int i=0;[color=red] i<listanumeros.length-1[/color]; i=i+2) {
No caso, faz a comparação a cada loop para determinar se realiza outro (loop) ou não.
T
thingol
Se você só quisesse determinar o valor máximo, a complexidade seria O(n) (ou seja, n comparações), porque você precisa varrer todos os elementos (já que eles estão em qualquer ordem), não dá para ser menor que isso.
O que o Paulo está dizendo é que é possível achar o máximo e o mínimo, em menos de 2 n comparações.
Em complexidade de algoritmos os índices dos loops normalmente não são levados em consideração, somente as operações “lentas” e “significativas” (que no caso é a comparação).
(Uma comparação de números de ponto flutuante é razoavelmente rápida, mas não uma de strings, se as strings forem arbitrariamente grandes. É por isso que em ordenação a operação de comparação é considerada “significativa”.
Paulo_Silveira
o codigo do dreamspeaker me parece correto
a sacada é fazer uma comparacao dois a dois, e depois so coparar o menor local com o menor global e a mesma coisas pro maior. da 3 comparacoes para cada par de numeros. 3n/2.
E -2 comparacoes por causa do primeiro par nao ter com quem comparar…