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 :

Calculer a^{17}


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 155
    Par défaut Calculer a^{17}
    Bonjour,

    Si je dois calculer a^{17} (a étant un réel) j'ai plusieurs possibilités :

    Dans tous les cas je déclare une variable en plus,b.

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    b = a * a * a * a * ... (17 fois)
    2)
    (d est une variable entière)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    b = 1
    d = 1
     
    faire tant que d < 17
    {
       b = (b * a)
       d = d + 1
    }
    3)
    (d est une variable entière)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    b = a
    d = 0
     
    faire tant que d < 4
    {
       a = a * a
       d = d + 1
    }
    a = a * b
    La solution utilisant le moins possible de mutliplication est la solution n° 3.
    Dois-je donc en déduire qu'il s'agit de l'algorithme le plus "efficace" ? (je n'ai encore jamais reçu de définition précise de l'efficacité d'un algorithme mais bon ...)

    merci

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est la troisième méthode qui la meilleure.
    En fait, 17, c'est 0b10001, donc tu multiplies a par a^16 construit par des carrés successifs.

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Ce problème est celui du calcul de x^n, autrement dit des chaînes additives. Les méthodes pour les résoudre sont la chaîne chinoise ( qui utilise le fait que x^2m = x^m * x^m et x^(2m + 1) = x * x^m * x^m ), la méthode des facteurs (où l'on divise toujours par le plus petit facteur premier) et l'arbre de Knuth. La chaîne chinoise bien que non optimale (on ne connaît pas d'algorithme optimal de toute façon) est excellente et très facile à coder de façon récursive (il y a moyen de la traduire de façon itérative).

    --
    Jedaï

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 155
    Par défaut
    Ah bon.
    Miles, qu'entend tu exactement par 'la meilleur' ? La plus rapide ?

    Excusez moi mais mes connaissances en algo. sont encore assez restreintes ...

  5. #5
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Globalement, le but est d'arriver au résultat avec le moins d'opérations possible (donc le plus rapidement possible), quoi d'autre ? (Encore qu'il faille parfois prendre en compte la consommation de mémoire, mais dans ton cas c'est insignifiant)

    Généralement, on définit plutôt un algorithme généraliste, pas aussi spécialisé que ton exemple où on ne peut mettre qu'à la puissance 17, dans ce cas on définit la complexité par rapport à la taille de l'entrée. Je te conseille de lire quelques tutoriels d'algorithmique au plus vite si tu as encore des problèmes avec la notion de complexité (d'efficacité) d'un algorithme : c'est vraiment la base.

    --
    Jedaï

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 155
    Par défaut
    Il y a un chapitre entier consacré à la complexité des algorithmes dans mon cours de programmation (il sera vu au cours d'ici quelques temps)
    D'autre part ce cours de programmation est suivi d'un cours d'algorithmique plus approfondi au second quadrimestre, donc ça va venir ...

    merci

Discussions similaires

  1. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  2. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

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