Le mappage des entiers signés à des entiers non signés peut être fait en utilisant des techniques courantes comme Two's complément. Malheureusement, ils échouent à mapper de petits entiers négatifs à de petits nombres. Pour les algorithmes de compression, nous voulons souvent préserver autant que possible la valeur absolue des nombres: les petits nombres négatifs et positifs doivent être mappés sur de petits nombres.Quel est le moyen le plus rapide pour implémenter la carte signée à non signée r (x) = 2x-1 si x> 0 et r (x) = 2x autrement
Une carte populaire est r (x) = -2x-1 si x < 0 et r (x) = 2x si x> = 0. (Un semblable est r (x) = -2x si x < = 0 et 2x + 1 si x> 0.)
Implémentée naïvement, cette carte est relativement lente. Certainement beaucoup plus lent que de simplement lancer des entiers signés à des entiers non signés (ce qui applique silencieusement le complément de deux).
Quel est le moyen le plus rapide?
x> 0 au lieu de x ≥ 0 right ? – kennytm
Je ne pense pas qu'il soit logique de poser une question de performance sans spécifier de matériel (et un compilateur, pour les solutions en C). –
@KennyTM: En supposant que l'entrée signée est un complément à 2, elle doit être 'x> = 0' (pas' x> 0' comme le dit le questionneur). Sinon, MIN_INT et 0 sont tous deux mappés à 0, ce qui contredit la "bijection". –