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

Algorithmes et structures de données Discussion :

[Vérification] Exercices de complexité


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Points : 6
    Points
    6
    Par défaut [Vérification] Exercices de complexité
    Bonjour,

    Dans le cadre de mes études, j'ai à rendre un devoir de complexité et j'avoue que ce n'est pas mon fort. J'ai fait la plus part des exercices (à la rigueur des pistes pour certains) et j'aimerais avoir des avis sur mes réponses.

    Le premier exercice demande de donner la compléxité de morceaux de code. Tout d'abord, l'énoncé (en anglais) parle de "computational complexity", est-la notation "grand O" ou bien un calcul plus "exact" du nombre d'opérations effectuées ?

    Algorithme 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (int i=n ; i>0 ; i/=2) { Pour moi, log(n) passages
       for (int j=1 ; j<n ; j*=2) { Pour moi, log(n-1) passages
          for (int k=0 ; k<n ; k+=2) { Pour moi, n/2 passages
             // Constant number of operations
          }
       }
    }
    Ici j'ai répondu O(n.log²(n)).

    Algorithme 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (int i=1 ; i<n ; i++) { Pour moi, n passages
       for (int j=i ; j<n ; j++) { Pour moi, (n-i) passages, au maximum n-1 passages
          for (int k=0 ; k<j ; k++) { Pour moi, j passages, au maximum n passages
             // Constant number of operations
          }
       }
    }
    Ici j'ai répondu O(n^3).

    Algorithme 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (int i=n ; i>0 ; i--) { Pour moi, n passages
       for (int j=1 ; j<n ; j*=2) { Pour moi, log(n-1) passages
          for (int k=0 ; k<j ; k++) { Pour moi, j passages, au maximum log(n-1) passages
             // Constant number of operations
          }
       }
    }
    Ici j'ai répondu O(n.log²(n)).


    L'exercice 2 est le suivant :
    Vous vous trouvez au pied d'un très long mur (comme la grande muraille de chine), vous savez qu'il y a une porte à n kilomètres mais vous ne savez pas si elle est à gauche ou à droite. Montrez qu'il est possible de trouver la porte en marchant au pire Grand Theta(n) kilomètres.
    Je n'ai pas véritablement de réponse à celui-ci.
    Mon idée d'algorithme serait de marche une certaine distance (laquelle) sur la gauche puis si l'on ne trouve pas la porte, revenir au point de départ et marcher le double à droite, puis le double à gauche, ...

    Mais je ne vois vraiment pas comment cela peut se rapprocher des Grand Theta(n) kilomètres.

    Merci ^^

  2. #2
    Membre à l'essai
    Profil pro
    ingé
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Je suis pas d'accord sur la troisième complexité.
    Pour moi, ça serait plus n²log(n).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int i=n ; i>0 ; i--) { Pour moi, n passages
       for (int j=1 ; j<n ; j*=2) { Pour moi, log(n-1) passages
          for (int k=0 ; k<j ; k++) { Pour moi, j passages, au maximum log(n-1) passages
             // Constant number of operations
          }
       }
    }
    Dans ta boucle la plus interne, la complexité est log(n). Quand j augmente de 1, et que tu passes de j à 2*j, tu fais aussi 2 fois plus d'opérations à l'intérieur et pas seulement une de plus..

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Ah oui effectivement, d'autant que dans la boucle la plus interne, la valeurs maximale de j est bien n.

    Merci :-)

Discussions similaires

  1. [RegExp] Mode d'emploi - Vérification de la complexité du mot de passe
    Par Zanarkand dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/08/2013, 09h50
  2. Exercice caml complexité
    Par reuqnas dans le forum Caml
    Réponses: 3
    Dernier message: 07/04/2011, 20h56
  3. problème java exercice et complexité
    Par baobab95 dans le forum Débuter avec Java
    Réponses: 20
    Dernier message: 14/06/2009, 14h40
  4. exercice complexité et analyse des algorithmes
    Par psycho_xn dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 21/01/2008, 14h04
  5. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26

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