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 :

Changement de base décimal->binaire efficace !


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut Changement de base décimal->binaire efficace !
    Bonjour,

    j'aimerais savoir quel est le meilleur algorithme de conversion décimal -> binaire.
    Je connais celui qui consiste a diviser par deux successivement ledit nombre et de conserver le reste de ces divisions.

    Cependant, il me semble qu'il existe un algorithme plus performant, c'est à dire dont la complexité serait inférieure à 0(n²), n étant le nombre de bits du nombre a convertir.

    Alex

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    En fait tu peux dans certaines conditions travailler à partir de données pré-calculés en 0(k) où k est le nombre de bits maximum dans lequel tu souhaites travailler.

    Il suffit de retrancher quand c'est possible la valeur 2^i (en commençant par k) à N, jusqu'à obtenir 0.

    Mais ça nécessite tout de même certains pré requis pas toujours disponibles :
    - Pourvoir représenter en machine toutes les puissances de 2 que l'on veut jusqu'à k (si k > 32 ça peut commencer à poser problèmes).
    - Pouvoir être sur qu'on peut déterminer un k (ne va-t'on pas devoir calculer autre chose de plus grand ?)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut
    Je vois... merci.
    donc je peux gagner un peu en complexité en enregistrant certaines puissances de 2.
    Effectivement si j'arrive à les enregistrer "toutes", ie jusqu'à un k au dela duquel je n'irai pas, c'est très intéressant.

    J'ai lu sur internet qu'on pouvait aussi passer par la base 256 (ou surement une autre), puis revenir en base 2 (256=2^8) simplement. qu'en pensez-vous ?

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    J'ai lu sur internet qu'on pouvait aussi passer par la base 256 (ou surement une autre), puis revenir en base 2 (256=2^8) simplement. qu'en pensez-vous ?
    En fait, ça ne change pas le problème. il faudra toujours convertir en base 2^n. de plus, le problème de la représentation des suites de base de 2^n est toujours existant.

    Néanmoins pour ce qui est de la conversion du nombre en base 2^n en un nombre en base 2 c'est effectivement trivial mais ça n'était pas le problème.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut
    D'accord.
    Le principal problème est, comme vous le dites, d'être certain d'avoir enregistré toutes les valeurs utiles (k) dans notre table pour pouvoir faire le calcul efficacement.

    La complexité devient-elle O(n) dans ce cas ?

    connaissez-vous un algorithme qui puisse s'affranchir du pré-enregistrement de valeurs ?

  6. #6
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    La complexité devient-elle O(n) dans ce cas ?
    C'est O(k) où k est la plus grande puissance de 2 possible.

    connaissez-vous un algorithme qui puisse s'affranchir du pré-enregistrement de valeurs ?
    Mis à part la division, je ne vois pas de méthode générale plus efficace pour passer d'une base b à une base p.

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par namerif Voir le message
    Cependant, il me semble qu'il existe un algorithme plus performant, c'est à dire dont la complexité serait inférieure à 0(n²), n étant le nombre de bits du nombre a convertir.
    C'est une question générale, où c'est pour répondre à un problème spécifique ?

    Une méthode parmi d'autres, utiliser le fait que a*10 = a*(8+2) = (a<<3) + (a<<1)

    Et donc, par exemple

    x = 1537 = 1*1000+5*100 + 3*10 + 7 = ( ( ( ( (1*10) + 5 )*10 ) + 3 )*10 ) + 7

    x = 1
    x = (x<<3) + (x<<1)
    x = x + 5
    x = (x<<3) + (x<<1)
    x = x + 3
    x = (x<<3) + (x<<1)
    x = x + 7
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/01/2014, 22h36
  2. Réponses: 5
    Dernier message: 11/08/2006, 10h57
  3. changement de base de donnée
    Par Pitou5464 dans le forum Access
    Réponses: 3
    Dernier message: 08/08/2006, 14h37
  4. Changement de base...enfin je crois....
    Par Eric Boisvert dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 28/09/2005, 21h11
  5. [VB6] changement de base....
    Par white angel dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/04/2004, 17h19

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