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

avec Java Discussion :

problème java exercice et complexité


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par défaut problème java exercice et complexité
    bonjour,
    voila dans mon exam de java il y avait cette question, mais je n'ai pas compris la réponse !!

    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Class D {
    public int x;
    public D() { x = 3;}
    public D (int a) {this(); x=x+a;}
    public D (int a, int b){ this(b); x=x-a;}
    Qu'afficheras le code suivant ?

    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    D a = nex D(5,6);
    System.out.println(a.x);
    la réponse est 4..Pourquoi ?

  2. #2
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    D(5,6) fait appel a D(6) qui initialise x à 3 et D(6) fait x+=6 soit 9 et D(5,6) fait 9-5 soit 4
    j'espère avoir été clair!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par défaut
    [QUOTE=michel.di
    j'espère avoir été clair! [/QUOTE]

    Oui ! Merci beaucoup !!

  4. #4
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    ravi de t'avoir aidé!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par défaut
    je vais en profiter car j'ai encore des doutes au sujet d'une chose !
    la compléxité !! (c'est ce qui me fais me planter à chaque fois !)
    voila l'énoncé :
    on considère la boucle suivante (n > 0) :
    for (int i = 0 ; i < n; i+=1) for (int j = 1; j < n; j=2*j) f(i);

    1) Le nombre d'apels de f est un O(n)
    2) Le nombre d'apels de f est un O(n²)
    3) Le nombre d'apels de f est un O(log(n))
    4) Le nombre d'apels de f est un O(nlog(n))

    au passage si quelqu'un à un bon cours sur la compléxité je prends car je suis vraiment nul !
    pour moi la bonne réponse été la 2 (car il y a deux boucle imbriquée) mais apparament c'est la 4...

  6. #6
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    il s'agit bien de la 4 car pour ta première boucle tu fais bien n parcours mais pour la seconde tu divises par deux à chaque tour et il s'agit alors de log n !
    J'ai eu des cours cette année en Master mais les exemples du pdf ne sont pas corrigés, ça ne t'aidera pas!

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par défaut
    j'ai vraiment pas tout saisi sur la complexité !
    alors d'aprés ce que j'ai lu dans ta réponse, cela dépend aussi de ce qu'il y a comme condition dans la boucle, et pas uniquement la boucle...
    pour moi jusqu'ici c'était une boucle for est de compléxité n si on imbrique une boucle dans une autre on passe a n² et ainsi de suite, en revanche si les boucle ne sont pas imbriquée cela fait 2n...

    alors comment reconnaitre réellement lorsque c'est n ou log(n) ?
    si tu as eu des cours tu peux peut-etre m'aider ! moi je suis en 1iere année de licence...Désolé si tu n'as pas le temps ce n'est pas grave !

    Merci pour tout

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par baobab95 Voir le message
    on considère la boucle suivante (n > 0) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i = 0 ; i < n; i+=1)
       for (int j = 1; j < n; j=2*j)
          f(i);
    pour moi la bonne réponse été [Le nombre d'apels de f est un O(n²)] (car il y a deux boucle imbriquée) mais apparament c'est [Le nombre d'apels de f est un O(nlog(n))]
    Il y a certes 2 boucles, mais ce ne sont pas les mêmes !

    Première boucle : for (int i = 0 ; i < n; i+=1)
    A chaque passage dans la boucle, on incrémente i de 1. Donc au k-ième passage dans la boucle i=k.
    On sort de la boucle dès que i>=n, c'est à dire dès que k>=n.
    On va donc passer environ n fois dans la boucle.

    Deuxième boucle : for (int j = 1; j < n; j=2*j)
    A chaque passage dans la boucle, on multiplie j par 2. Donc au k-ième passage dans la boucle j=2^k.
    On sort de la boucle dès que j>=n, c'est à dire dès que 2^k>=n.
    On va donc passer environ log2(n) fois dans la boucle.

    Citation Envoyé par baobab95 Voir le message
    pour moi jusqu'ici c'était une boucle for est de compléxité n si on imbrique une boucle dans une autre on passe a n² et ainsi de suite, en revanche si les boucle ne sont pas imbriquée cela fait 2n...
    Ce n'est pas parce qu'il y a une condition de sortie de la forme "indice < n" qu'on va passer n fois dans la boucle. Il faut aussi regarder ce qu'on fait de l'indice : sa valeur initiale, son évolution... L'indice est-il également modifié à l'intérieur de la boucle ? Peut-on sortir de la boucle sans respecter la condition de sortie (avec un break) ? etc

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par défaut
    ok je comprend deja un peu mieux...

    Mais lorsqu'une boucle fais
    for (int i =0; i < n; i+=3)

    elle est de complexité O(n)...
    C'est parcequ'on considére qu'on fais environ n fois la chose ?
    Enfaite on est dans le cas log(n) que lorsqu'on s'éloigne assez des "environs n fois"
    comme par exemple dans le cas d'une multiplication ou d'une division.

    Cela est correct ??

Discussions similaires

  1. Problème avec exercice Java
    Par lilp1 dans le forum Général Java
    Réponses: 6
    Dernier message: 20/12/2011, 00h01
  2. Problème Java/MySql : "Unknown database"
    Par darkflo dans le forum JDBC
    Réponses: 3
    Dernier message: 24/03/2006, 11h34
  3. Problème sur exercice de manip de tableaux
    Par jurio2005 dans le forum Assembleur
    Réponses: 8
    Dernier message: 05/12/2005, 20h53
  4. [c++] second problème avec exercices du livre Big c++
    Par TERRIBLE dans le forum Contribuez
    Réponses: 6
    Dernier message: 06/11/2005, 21h07
  5. problème java run time environment
    Par abrmed dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 19/08/2005, 13h27

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