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

Humour Informatique Discussion :

Un code n'est pas écrit pour être optimal mais d'abord pour répondre à ses besoins

  1. #21
    Membre éprouvé Avatar de 4sStylZ
    Homme Profil pro
    Null
    Inscrit en
    Novembre 2011
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 314
    Points : 1 056
    Points
    1 056
    Par défaut
    Je suis le developpeur qui vas google «Best php fibonnaci algorythm» et qui vas la commenter, l'indenter, et la couvrir de quelques tests.

  2. #22
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Il manque le code du développeur en SSII

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import com.math.allYouNeed.Fibonacci
    
    ...
    
    /**
     * TODO document me
     */
    public long getFibonaci(long i){
          return Fibonacci.valueOf(i);
    }
    Avec l'ajout de 250Mo de jar dans le classpath
    Je ne suis pas mort, j'ai du travail !

  3. #23
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut Ma préférence se porte sur : Développeur 1 : L'étudiant débutant !
    Salut à tous.

    Citation Envoyé par Victor Vincent
    Selon vous, quel est le meilleur code présenté par ces 6 profils de développeurs ?
    Le meilleur code, selon moi, est celui qui est lisible. Trop de commentaire nuit à sa lisibilité.
    Un commentaire est nécessaire quand le code ne suffit pas à comprendre ce qu'il fait.
    De plus, le code doit être concis, sans fioriture, juste l'essentiel, mais doit répondre à l'usage que l'on va en faire.

    J'ai donc une préférence pour "Développeur 1 : L'étudiant débutant".

    Celui de "Développeur 2: Le programmeur au Hackaton" ne répond pas à la fonctionnalité demandée.
    Car si on demande que faut 'getFibonnaciNumber(10)', il ne saura pas donner la solution.

    Celui de "Développeur 3: le programmeur dans une startup" surcharge avec trop de commentaire les explications de sa fonction.

    Celui de "Développeur 4: le programmeur dans une grande compagnie", les noms des variables sont trop longs à écrire. C'est sujet à des erreurs.

    Celui de "Développeur 5: le programmeur Docteur en Maths" complexifie à outrance, sans que cela corresponde à un besoin réel.

    Celui de "Développeur 6: Tom le chat" son code est incompréhensible !
    C'est le plus mauvais exemple de ce qu'il ne faut pas faire.

    Citation Envoyé par Victor Vincent
    Pensez-vous qu'un code se doit avant tout de répondre à un besoin ?
    1) Un code doit être lisible !
    2) Pas des astuces connues que du seul programmeur. Il doit être compréhensible par quelqu'un qui a la connaissance du langage.
    3) Il doit répondre aux contraintes du développement (programmation structurée, modulaire, POO, réutilisable, réentrance ...), voire la méthodologie utilisé dans l'entreprise.
    4) Il doit répondre à des besoins fonctionnelles (traiter tous les cas).
    5) Il doit être performant et occupé le moins de place en occupation mémoire.
    6) Il doit être facilement maintenable.

    Maintenant, je ne sais à qui s'adresse l'utilisation de ce code consacré à Fibonacci.
    Un mathématicien n'a rien à voir avec un débutant en informatique. Et pour faire quel genre de calcul ?
    Juste pour démontrer l'usage de la récursivité ou bien pour faire des calculs de haut niveau ?
    Car sachant que la pile servant à gérer la récursivité est fréquemment limité à 255, il est dans ce cas de figure impossible de calculer une valeur de la fonction Fibonacci au delà de 255.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #24
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 056
    Points : 2 559
    Points
    2 559
    Par défaut
    C’est un peu un marronnier ce poste ^^
    Faire un bon code ou être un bon développeur, ça revient souvent ces derniers temps.

    Moi je suis faignant.
    Je n'ai plus envie de faire du travail d’orfèvre, comme à mes débuts, quand je faisais de l'assembleur sur Amiga et qui fallait optimiser à mort.

    Maintenant c'est contreproductif de bosser comme ça.
    Peut-être sur les projets personnels, je peux finasser.

    En informatique de gestion tu es souvent amené à casser ce que tu as fait il y a 3 mois
    Alors je vais à l’essentiel.
    Mais ça ne veut pas dire que je fais du mauvais code, je ne veux pas me casser la tête pour rien.
    Je fais de la modularité surtout pour m’économiser de l’écriture, et de la maintenance
    Mais au boulot ce n’est pas moi, qui ai le dernier mot pour la factorisation.
    Et tant mieux, si tout le monde ajoutait des fonctions de son propre chef, le workspace serait pollué.

    Alors où suis-je, où vais-je qui suis être ou ne pas être un bon codeur telle est la question ^^
    Consultez mes articles sur l'accessibilité numérique :

    Comment rendre son application SWING accessible aux non voyants
    Créer des applications web accessibles à tous

    YES WE CAN BLANCHE !!!

    Rappelez-vous que Google est le plus grand aveugle d'Internet...
    Plus c'est accessible pour nous, plus c'est accessible pour lui,
    et meilleur sera votre score de référencement !

  5. #25
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Un code clair, concis et bien documenté, ça existe aussi hein :p

  6. #26
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par emazoyer Voir le message
    En effet toutes les méthodes proposées sont en O(en).
    Ce qui est cher payé.

    Les codes précédents demandent 2.269.806.339 appels à fibonacci pour calculer fibonacci(45)=1134903170.
    Cet algorithme en demande 87 (pour le même résultat, il va de soi).
    C'est la Mémoïsation.
    ...
    Il me semble que tu as oublié le titre de l'article...

  7. #27
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Celui de "Développeur 2: Le programmeur au Hackaton" ne répond pas à la fonctionnalité demandée.
    Car si on demande que faut 'getFibonnaciNumber(10)', il ne saura pas donner la solution.
    Si justement, il répond pile poil à ce que le hackaton lui demande.
    Pourquoi faire plus compliqué si tout ce que ton code demande sera le résultat entre n=0 et 7 ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #28
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Un code n'est pas écrit pour être optimal mais d'abord pour répondre à ses besoins
    Un code pour répondre à un besoin ? ...
    !


    Bon, je suis malade, j'ai la fièvre, etc,etc .. faut m'excuser
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  9. #29
    Invité
    Invité(e)
    Par défaut
    Pour les professionnels ... gérer une suite de Fibonacci.
    C'est pas en avril d'habitude les poissons d'avril ?

  10. #30
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 646
    Points : 11 135
    Points
    11 135
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    J'ai donc une préférence pour "Développeur 1 : L'étudiant débutant".
    Bof, trop classique manque d'originalité dans le code. 0/20

    Citation Envoyé par Artemus24 Voir le message
    Celui de "Développeur 2: Le programmeur au Hackaton" ne répond pas à la fonctionnalité demandée.
    il a répondu à la problématique.. bon, d'accord, dans une certaine limite

    Citation Envoyé par Artemus24 Voir le message
    Celui de "Développeur 3: le programmeur dans une startup" surcharge avec trop de commentaire les explications de sa fonction.
    Après, on nous reproche de ne pas faire de doc. Bon là, certes, ce ne sont que des TODO mais au moins on sait ce que fait (ou ne fait pas) son code

    Citation Envoyé par Artemus24 Voir le message
    Celui de "Développeur 4: le programmeur dans une grande compagnie", les noms des variables sont trop longs à écrire. C'est sujet à des erreurs.
    C'est du Chateaubriand et puis avec l'autocomplétion, il est facile de retrouver les noms de variables

    Citation Envoyé par Artemus24 Voir le message
    Celui de "Développeur 5: le programmeur Docteur en Maths" complexifie à outrance, sans que cela corresponde à un besoin réel.
    Si cela répond à un besoin : celui du docteur en maths. D'ailleurs il n'y a qu'eux qui le comprennent, c'est l'essentiel.

    Citation Envoyé par Artemus24 Voir le message
    Celui de "Développeur 6: Tom le chat" son code est incompréhensible ! C'est le plus mauvais exemple de ce qu'il ne faut pas faire.
    Au contraire, c'est parfait ! On voit là tout le génie des chats, c'est simplement magnifique, fantastique, merveilleux ! C'est époustouflant, étonnifiant, bouleversifiant !



  11. #31
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    Il y a aussi la version itérative toute simple et la version recursive terminale. Elles ne sont pas en O(1), certes, mais en O(n) et les débutants savent les écrire (ok, pour la version récursive terminale faut pas être complètement stupide non plus).

  12. #32
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Salut à tous

    CodeurPlusPlus: tu me piques l'idée...

    Aucune des solutions ne me convient même si j'ai trouvé la solution 4 assez amusante et hélas possible, j'ai malheureusement déjà vu des choses pareilles, cela doit paraître technique. Au final, on ne sait pas ce que le code fait au premier coup d'oeil, les mainteneurs devront être patients.

    L'exemple est "scolaire", la récursivité est intéressante quand elle est pertinente et pratique. Ici, tout faux, le code est inefficace, la mémoïsation apporte une optimisation mais consomme de la mémoire, enfin, vous le savez tous.

    La solution itérative est plus efficace, tout aussi concise et simple à comprendre même si elle est éloignée de la solution mathématique. Soit en Python:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def fibo(nmax):
        x,y = 1,1
        for i in range(nmax-2):
            x,y = y, x+y
        return y
    En plus, cette solution est facile à implémenter dans tout langage impératif, ce qui n'est pas toujours le cas avec la récursivité.

    Sur le fond de la question, cela dépend aussi de l'environnement professionnel : outils à disposition, niveau techniques des équipes, normes locales. Cela n'empêche pas quand même de chercher une certaine optimalité...

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  13. #33
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    La première fois que l'on m'a demandé d'écrire la suite de Fibonacci en Java, je l'ai écrite en itératif, je comprenais pas pourquoi contrairement aux autres je n'avais pas la fameuse "Stack Overflow" que l'on devait constater pour un n>14 en TP, et pourquoi mes scores de performance étaient totalement différents de ceux attendus.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  14. #34
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def fibo(nmax):
        x,y = 1,1
        for i in range(nmax-2):
            x,y = y, x+y
        return y
    Encore un truc qui me dérange en Python (bien que la forme x, y = 1, 2 soit pratique).
    Niveau ordre d'exécution ça donne quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    x, y = y, x + y
    
    // equivalent à
    x = y
    y = x + y
    
    // ou 
    y = x + y
    x = y
    
    // ou l'ordre est non spécifié ?
    Sinon la solution itérative, c'est la solution "évidente" non ? Enfin de ce que je me rappelle des cours de maths, c'est comme ça que la suite était définie.

  15. #35
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Salut,

    Le plus logiquement du monde : évaluation des valeurs du t-uple de la partie droite de l'affectation PUIS copie des valeurs dans les variables de la partie gauche.

    Ce n'est une séquence d'instructions déguisée, sinon on aurait le type de problème que tu évoques, ce qui rendrait ce genre de construction beaucoup moins attrayante.
    Rien n'empêche cependant de décomposer cette affectation "double" en 2 affectations simples.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  16. #36
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 548
    Points
    10 548
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Le plus logiquement du monde
    L'opérateur virgule en C est un gros panneau "Alerte Danger" : l'évaluation expression par expression, se fait de droite à gauche, et l'expression la plus à gauche est retournée


    Ou un truc comme cela


    Édit: Iradrille officiant souvent dans la section C/ C++, il a des mécanismes/ habitudes/ tics automatiques/ ...

  17. #37
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut à tous.

    Pour solutionner ceci :
    il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    z = y
    y = x + y
    x = z
    Par contre les deux solutions proposées ne fonctionnent pas du tout !
    Pourquoi ? Car il manque une étape afin de ne pas venir écraser une valeur (le x ou le y) lors de la première affectation.
    Donc : donne :
    --> x = y (le x a été écrasé par la valeur de y).
    --> y = 2*y

    De même pour : donne :

    --> y = x + y (le y a été écrasé par la valeur de x+y).
    --> x = x + y

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  18. #38
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Salut

    Tout cela montre bien l'intérêt des tuples.

    Bon WE à tous

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  19. #39
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 247
    Points
    247
    Par défaut
    Citation Envoyé par Victor Vincent Voir le message
    ... qui ont écrit des codes pour gérer une suite de Fibonacci.
    Heu, moi en premier je demande au client: qu'est ce que vous entendez par "gérer" une suite de Fibonacci. Mais bon ,c'est moi
    "Un peuple prêt à sacrifier un peu de liberté pour un peu de sécurité ne mérite ni l'une ni l'autre, et finit par perdre les deux."
    Benjamin Franklin

  20. #40
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 307
    Points : 983
    Points
    983
    Par défaut
    Citation Envoyé par emazoyer Voir le message
    En effet toutes les méthodes proposées sont en O(en).
    Ce qui est cher payé.

    Les codes précédents demandent 2.269.806.339 appels à fibonacci pour calculer fibonacci(45)=1134903170.
    Cet algorithme en demande 87 (pour le même résultat, il va de soi).
    C'est la Mémoïsation.

    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
    long fibonacci(int x) {
        if(x<0) {
            throw new IllegalArgumentException("x="+x+" < 0");
        }
        // Création du tableau de mémoïsation
        long[] farray = new long[x];
        // Initialisation du dit tableau, avec un décalage de 1 car en informatique les tableau commence à l'index 0.
        farray[0]=1;
        farray[1]=1;
        // Appel au calcul avec un décalage de 1 (voir ci-dessus)
        return fibonacciRecursivity(x-1,farray);
    }
        
    long fibonacciRecursivity(int x, long[] farray) {
        if(farray[x]==0) {
            farray[x] = fibonacciRecursivity(x-1,farray)+fibonacciRecursivity(x-2,farray);
        }
        return farray[x];
    }
    Quand à l'occupation mémoire :
    • fibonacci(164)=7278316983633677837,
    • fibonacci(165) dépasse un entier signé sur 64 bits,

    donc au plus nous pouvons calculer 164 valeurs.
    Un tableau de 164 long n'est pas cher payé .
    Nous pouvons aussi remplir tout au début le tableau des 164 valeurs (325 appels) puis avoir un temps de calcul en O(1) pour le reste du temps.
    A ce jeu là, on peut encore gagner beaucoup. Fibonacci c'est une exponentielle de matrice c'est très clair avec ton code.
    Fibo(n + 1) = A.Fibo(n) donc Fibo(n) = A^n.Fibo(0). (je note ^ la puissance)

    Et pour calculer A^n on calcule A^1, A^2, A^4, A^8,... et ensuite on fait les produits qu'il faut pour trouver A^n.... cela est utile si n est grand (et donc que l'on utilise des grands entiers pour la gestion des nombres). On passe alors de n à log(n).

Discussions similaires

  1. Pb de type de champs dans une requête
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/05/2005, 16h19
  2. [type de retour dans une proc]
    Par viny dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 19/03/2005, 15h35
  3. Vérification du type de données dans une procédure stockée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/09/2004, 12h20
  4. BC6 inserer un enreg de type date/heure dans Access2003
    Par o_live dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/06/2004, 12h13
  5. Quel type de BDD dans mon cas
    Par zoubidaman dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 10/06/2004, 19h00

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