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

Java Discussion :

Complexité d'un algorithme


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Informaticien
    Inscrit en
    Juillet 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Informaticien
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 26
    Points : 19
    Points
    19
    Par défaut Complexité d'un algorithme
    Bonjour à tous,

    Je voudrais déterminer la complexité de cet algorithme ou disons de ces 2 méthodes qui servent ensemble à vérifier si un nombre est pair ou impair.

    Quelle est sa complexité? Est-elle assez efficace ou tout à fait inefficace? Merci de vos réponses.

    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
    	static boolean foo (int n) {
    		int a=0, b=0; 
    	    if (n==0) {
     
    	        return false;
    	    } else {
     
    	        return bar(n-1);
    	    }
    	}
     
    	static boolean bar (int n) {
    	    if (n==0) {
    	        return true;
    	    } else {
    	        return foo(n-1);
    	    }
     
    	}
    S

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    foo(-1) doit donner une exécution intéressante
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Informaticien
    Inscrit en
    Juillet 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Informaticien
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    foo(-1) produit un ..Exception in thread "main" java.lang.StackOverflowError.
    Pour quoi ce résultat alors tout à l'air correcte pour d'autres valeurs? Il y a t'il quelque chose à en dédure de la complexité de l'algorithme?

  4. #4
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Sur sa complexité non, par contre sur ton programme tu peux effectivement en déduire qu'il ne marche pas très bien.

    Fais une petite trace vite fait de ton programme à la main et tu verras vite où est le problème.

    Pour ce qui est de la complexité bah, essais aussi de faire une petite trace en partant de foo(1) puis de foo(2) puis foo(3) par exemple et tu devrais pouvoir trouver la réponse tout seul

    Cdt.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Informaticien
    Inscrit en
    Juillet 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Informaticien
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Je l'ai essayé. J'y ai ajouté une variable globale ck pour disons "compter" le nombre d'opérations comme vous le pouvez le constater. Ce n'est pas assez propre mais ça produit en sortie une séquence du type "1234567" pour n=6 et "1234.....501" pour n=500.
    Je pourrais conclure que la complexité est linéaire... mais les problèmes recursives peuvent faire allusion à la complexité factorielle. En effet, le code montre que n est décrémenté jusqu'à 0 pour chaque passage successif dans foo et dans bar si je ne me trompe bien sûr.
    Je débute en complexité et je suis un peu confus face à ces 2 choix..

    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
    static int ck=0;
    	static boolean foo (int n) {
    	    if (n==0) {
    	    	ck++;
    	    	System.out.print(ck);
    	        return false;
    	    } else {
    	    	ck++;
    	    	System.out.print(ck);
    	        return bar(n-1);
    	    }
    	}
     
    	static boolean bar (int n) {
    	    if (n==0) {
    	    	ck++;
    	    	System.out.print(ck);
    	        return true;
    	    } else {
    	    	ck++;
    	    	System.out.print(ck);
    	        return foo(n-1);
     
    	    }
     
    	}

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Dis toi que la récursivité et les boucles, c'est grosso modo la même chose. Ici, à chaque appel tu te rapproche de 1 de la réponse (pour les nombres positif). Tu auras donc, pour un nombre n, n appels, ce qui veux dire une complexité de o(n). Pour qu'il y aie une complexité plus élevée, il aurait fallu que chaque appel de foo() implique m appels de bar(). Autrement dit que dans foo ou bar il y aie une boucle ou n'importe quel facteur multiplicateur.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Informaticien
    Inscrit en
    Juillet 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Informaticien
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Merci Tchize, c'est plus que clair à présent !
    Très bonne suite à vous et je vous souhaite un excellent mois de Juin!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Complexité de l'algorithme de multiplication matricielle de strassen
    Par judge06 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/07/2007, 07h27
  2. Complexité de l'algorithme de multiplication de Karatsuba
    Par judge06 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/03/2007, 12h02
  3. Complexité de l'algorithme de Tri Fusion
    Par judge06 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 26/03/2007, 22h04
  4. [Complexité d'un algorithme] Triangle de Sierpinski
    Par Opérateur dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 18/12/2006, 15h25
  5. complexité d'un algorithme par un...algorithme??
    Par afrikha dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 02/11/2005, 00h59

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