2010-08-23 7 views
5

Existe-t-il un algorithme efficace pour la conversion entre les systèmes numériques lorsque la taille de l'entier source est arbitraire? Par exemple, supposons qu'il existe un tableau d'entiers {1, 4, 8} qui est 148 au format décimal en tant qu'entrée. Il peut être converti en {9, 4} au format hexadécimal, ou {2, 2, 4} en octal, ou {1, 0, 0, 1, 0, 1, 0, 0} en format binaire, ou juste { 148} au format 1234-ary ou quelque chose.Algorithme efficace pour la conversion entre les systèmes numériques

C'est simple quand la valeur réelle peut être exprimée en taille de mot supportée par la machine. Mais quand il va à la taille arbitraire, je ne peux pas trouver de manière efficace mieux que O (n^2).

+0

Doit être possible dans O (n). Vous pouvez essayer (aussi) sur math.stackexchange.com. –

Répondre

3

Diviser par la base, repousser le module, rincer et répéter tout quotient! = 0.

Ainsi, par exemple convertir 148 en base 16

148/16 = 9 r 4 
    9/16 = 0 r 9 

Ainsi, 148 dans l'hexagone est 0x94 . Cela ne devrait pas prendre si longtemps.

+0

Malheureusement, ce n'est pas si simple quand un nombre est assez grand - pensez à 10^100, ce qui ne peut pas être représenté dans 1 entier atomique dans l'architecture informatique actuelle. – summerlight

+0

Bien sûr, une certaine abstraction comme la classe big_int peut être utilisée, mais cela aggrave le problème car la complexité temporelle d'une opération modulaire et de division est O (n^2) et nous avons besoin d'une opération modulaire et de division O (n) conversion. – summerlight

Questions connexes