Página Inicial do Fórum > Java Básico

Algoritmo de ordenação por seleção



Criar novo tópico   Responder tópico
  1. Comment Arrow

    Publicado em: 18/10/2011 12:33:40

    Primeiro segue todo meu trabalho.


    Bueno, como podem ver esta ordenando em 3 casos, o primeiro é um aleatório, o segundo é um iversso, e o terceiro e um quase ordenado(algoritmo que foi passado pelo professor). O seguinte é, na teoria, pra mim pelo menos, o que era pra demora mais é o inversso pois vai trocar a variavel em todas as vezes. Mas quando executo o algoritmo não é isso que acontece. O resultado sai o seguinte:

    Tempo Para ordernar um vetor: 1 8.218s ( Aleatório)
    Tempo Para ordernar um vetor: 2 8.154s ( Inversso)
    Tempo Para ordernar um vetor: 3 8.14s ( Quase ordenado)

    Entrei em contato com o professor, e o mesmo disse que o que mais demora é o inversso, porém não sei onde estou errando.

    Alguem pode me explica?




  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 18/10/2011 12:58:46


    _________________
    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."


    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.


  1. Comment Arrow

    Publicado em: 18/10/2011 12:33:40

    Como assim cara?




  1. Ragger
    Posts:76


    Comment Arrow

    Publicado em: 18/10/2011 15:04:11

    DDDDDDD

    Aliens sempre estragam nossos planos! :/
    _________________
    Raggenberg. Se rir morrer.


  1. Comment Arrow

    Publicado em: 18/10/2011 12:33:40

    kkkkkkk
    Bah tche sério, todas as vezes q executo na minha máquina o que menos demora é o inverso.




  1. D3z40
    Posts:480


    Comment Arrow

    Publicado em: 18/10/2011 17:03:14

    clf.figueiredo
    kkkkkkk
    Bah tche sério, todas as vezes q executo na minha máquina o que menos demora é o inverso.



    Malditos aliens..... kkkkkkkkkkkkkkk....

    Falando serio...
    Se esta sendo feito conforme o professor lhe disse para ser feito, então acho que não tem o que ser feito... confesso que nunca chequei a fazer esse tipo de teste (de maquina para maquina), mas não sei se isto faz muito sentido, acho que isso faria muito de maquina pra maquina. O que tenho certeza que muda é o tempo quando se trata de outros tipo de classes, por exemplo ArrayList, Vector, HashMap... e por ai vai...

    Como lhe disse nunca fiz o teste de maquina para maquina...
    _________________
    O melhor lugar para se esconder um cadáver, é na segunda página do Google.




  1. simu
    Posts:9416


    Comment Arrow

    Publicado em: 18/10/2011 19:13:04

    alguns pontos IMO:

    - no array quase ordenado só o primeiro valor é que está na posição correta, todos os outros terão que ser movidos

    - esse algoritmo sempre faz o mesmo número de interações e testes, o que varia é o número de vezes que o 'min' é alterado e os valores trocados (ver curiosidade mais abaixo)

    - testar o tempo de um algoritmo é meio complicado, ainda mais no Java/Windows. Os laços devem ser executados várias vezes antes de começar o teste por causa da compilação que a máquina virtual pode efetuar (Explicação para o primeiro ser um pouco mais demorado?)


    Curiosidade: com o array invertido (segundo caso) o algoritmo necessita trocar valores apenas a metade de vezes (vn/2), enquanto nos outros dois casos é quase vn vezes! (é só acresentar dois contadores, um dentro de cada if para verificar)
    [[]]
    _________________
      Nome real: Carlos F. Heuberger

    Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!

    "The mod javafree deserves, but not the one it needs right now."
    --------------------
    Não leio nem respondo MPs!
    This posting is provided AS IS with no warranties and confers no rights.




  1. jeantalons
    Posts:22


    Comment Arrow

    Publicado em: 18/10/2011 19:30:13

    aumenta o tamanho da entrada. para mais de um milhão que vc deve ter uma diferença considerável.


  1. Comment Arrow

    Publicado em: 18/10/2011 12:33:40

    simu
    alguns pontos IMO:

    - no array quase ordenado só o primeiro valor é que está na posição correta, todos os outros terão que ser movidos

    - esse algoritmo sempre faz o mesmo número de interações e testes, o que varia é o número de vezes que o 'min' é alterado e os valores trocados (ver curiosidade mais abaixo)

    - testar o tempo de um algoritmo é meio complicado, ainda mais no Java/Windows. Os laços devem ser executados várias vezes antes de começar o teste por causa da compilação que a máquina virtual pode efetuar (Explicação para o primeiro ser um pouco mais demorado?)


    Curiosidade: com o array invertido (segundo caso) o algoritmo necessita trocar valores apenas a metade de vezes (vn/2), enquanto nos outros dois casos é quase vn vezes! (é só acresentar dois contadores, um dentro de cada if para verificar)
    [[]]




    Show de bola tua explicação cara, muito obrigado me ajudou bastante pra entender. Vou aplicar os contadores pra ver. Quanto ao tempo criei um laço para repetir 50x, e no final fiz a média de cada um, o vetor inverso demoro um puquinho mais.
    Posto aqui o resultado dos demais testes.


  1. Comment Arrow

    Publicado em: 18/10/2011 12:33:40

    Bueno coloquei os contadores.
    O resultados. A Soma é a soma dos contadores nos dois IF.
    vetor decrescente tem laco 1121606 tempo laco 2 14991a soma é 12160614991
    Tempo Para ordernar um vetor Aleatório: 0.226s

    vetor decrescente tem laco 156250000 tempo laco 2 7500a soma é 562500007500
    Tempo Para ordernar um vetor Decrescente: 0.224s

    vetor quase ordenado 186959 tempo laco 2 14989a soma é 8695914989
    Tempo Para ordernar um vetor Quase ordenado: 0.212s

    Mesmo analisando isto, o decrescente não era pra demora menos? pois é o que menos entra no segundo if, sabemos que no segundo if tem 2 linhas a mais que o primeiro.




  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 18/10/2011 12:58:46

    faz o seguinte.

    por causa da compilação nativa da máquina virtual.

    crie classes separadas e execute separadamente para cada tipo de ordenação, ai você vai ter o resultado mais preciso possível
    _________________
    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."


    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.


  1. Comment Arrow

    Publicado em: 18/10/2011 12:33:40

    Ta feito agora, criei um metodo e funciono.





  1. Relacionados





Novo tópico   Responder tópico     Índice do forum -> Java Básico