IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

comparaison des temps d'execution de tris


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Points : 111
    Points
    111
    Par défaut comparaison des temps d'execution de tris
    Bonsoir à tous,

    Je cherche à afficher les temps d'exécution d'un tri rapide et d'un tri par fusion. Cependant, il me retourne toujours 0! c'est plutôt embêtant... pourriez-vous me dépanner svp?


    Merci beaucoup!
    Aud-(débutante)

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonsoir,
    Aggrandis le N: 10 c'est vraiment petit, trop petit !
    Refais chaque test n fois, histoire de normaliser.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Points : 111
    Points
    111
    Par défaut
    ok alors j'ai simulé pour N=6000

    voici les séquences de résultats:
    Generating input: 0.015 seconds
    Quicksort: 0.0 seconds
    MergesortIter: 0.016 seconds
    ---
    Generating input: 0.015 seconds
    Quicksort: 0.0 seconds
    MergesortIter: 0.0 seconds
    ---
    Generating input: 0.0 seconds
    Quicksort: 0.0 seconds
    MergesortIter: 0.0 seconds
    ---
    Generating input: 0.0 seconds
    Quicksort: 0.016 seconds
    MergesortIter: 0.0 seconds
    ---
    Generating input: 0.0 seconds
    Quicksort: 0.016 seconds
    MergesortIter: 0.0 seconds
    ---
    Generating input: 0.0 seconds
    Quicksort: 0.0 seconds
    MergesortIter: 0.016 seconds

    est-ce normal? je demande ça car je n'ai aucune idée de ce que je devrais obtenir...

    Merci à tous
    aud-(debutante)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Points : 111
    Points
    111
    Par défaut
    quand je simule sur 100000 je me rends compte que dans la majorité des cas, la méthode de tri par fusion prend plus de temps que la méthode tri rapide. est-ce normal?
    enfin, est-ce que mon algo de calcul de temps est bien approprié? (est-ce que je calcule n'importe quoi ou bien est-ce la bonne démarche?)

    Merci beaucoup à tous pour votre aide
    Aud-

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Points : 380
    Points
    380
    Par défaut
    Voila ce que j'utilise pour éviter de trop me casser la tête.

    2 constructeurs pour éviter d'attendre des années quand la méthode qu'on veux tester est pas si rapide que ça.

    J'ai une flemme énorme alors pour gagner du temps sur un échantillons de tests j'ai fait un renvoie de this (regarde le main j'appelle 3 fois ma méthode de tests).

    Si tu veux tester qqch, met le dans un runnable et lance le pour voir si ca fait ce que tu veux.

    Le comparable est la si tu veux voir qui est le plus rapide . Il te donne en théorie la différence d'exécution entre tes méthodes sur 100000 appels (en ms)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import java.io.PrintStream;
    import java.util.ArrayList;
     
    public class TimeTest implements Comparable<TimeTest> {
     
    	private Runnable runnable;
    	private int tests;
    	private static final int DEFAULT_TESTS = 100000;
     
    	public TimeTest(Runnable runnable) {
    		this(runnable, DEFAULT_TESTS);
    	}
     
    	public TimeTest(Runnable runnable, int tests) {
    		this.runnable = runnable;
    		this.tests = tests;
    	}
     
    	@Override
    	public int compareTo(TimeTest other) {
    		return (int)((this.test()*DEFAULT_TESTS)/this.tests -
    					(other.test()*DEFAULT_TESTS)/other.tests);
    	}
     
    	public TimeTest makeTest() {
    		return makeTest(System.out);
    	}
     
    	public TimeTest makeTest(PrintStream out) {
    		out.println("Nouvelle série de tests ...");
    		long res = test();
    		out.println("Fonctionnement total (pour " + tests + " appels) : " +
    				res + " ms.");
    		out.println("Fonctionnement unitaire : " + (res/tests) + " ms.");
    		return this;
    	}
     
    	private long test() {
    		long start = System.currentTimeMillis();
    		for (int i = 0; i < tests; i++)
    			runnable.run();
    		return System.currentTimeMillis() - start;
    	}
     
    	public static void main(String[] args) {
    		(new TimeTest(new Runnable() {
    			public void run() {
    				ArrayList<Integer> array = new ArrayList<Integer>(1000);
    				for (int i = 0; i < 1000; i++)
    					array.add(i);
    			}
    		})).makeTest().makeTest().makeTest();
    	}
    }
    Les résultats perso de mon main :
    Nouvelle série de tests ...
    Fonctionnement total (pour 100000 appels) : 3636 ms.
    Fonctionnement unitaire : 0 ms.
    Nouvelle série de tests ...
    Fonctionnement total (pour 100000 appels) : 3543 ms.
    Fonctionnement unitaire : 0 ms.
    Nouvelle série de tests ...
    Fonctionnement total (pour 100000 appels) : 3538 ms.
    Fonctionnement unitaire : 0 ms.
    Qu'on ne vienne pas dire que ArrayList c'est lent (35ns les 1000 ajouts)

Discussions similaires

  1. comparaison recherche donnée xml ou csv temps d'execution
    Par tiliut dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 05/07/2010, 16h42
  2. Evaluation du temps d'execution des script
    Par Nico87 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/07/2009, 14h34
  3. Réponses: 3
    Dernier message: 14/04/2009, 18h56
  4. Comparaison des performances des algorithmes de tri
    Par biba13 dans le forum Pascal
    Réponses: 2
    Dernier message: 09/05/2007, 20h28
  5. Réponses: 2
    Dernier message: 24/04/2007, 22h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo