2010-05-18 4 views
0

J'ai une longue liste d'entiers, et je dois la réduire à un seul entier. La liste des entiers peut être comprise entre 0 et 300 ints (environ). Je dois pouvoir encoder/décoder.Problème de codage et de décodage d'Intger

Existe-t-il une meilleure option qu'une table de recherche?

+2

Définir "le réduire à un seul entier" –

+0

Est-ce que concaténer tous les entiers en un entier très long considéré comme "réduire"? : O –

Répondre

0

Toute technique permettant de réduire N bits de données à M bits de données, où M est inférieur à N ne peut fonctionner que pour des entrées qui sont redondantes d'une manière ou d'une autre. Une réduction de 300: 1 nécessiterait un énorme quantité de redondance dans l'entrée (par exemple, presque tous les nombres étaient des zéros).

+0

oui jerry c'est ce que je pensais. dans la plupart des cas, il y aura plus de 0, mais d'autres fois ce ne sera pas le cas. et j'aurai beaucoup plus que mes 32 bits d'entier. ill prenez juste la route facile et la table de consultation cela. C'est leur faute pour changer les exigences 3 mois après avoir commencé cette merde de toute façon. – asdasd

0

Si vous souhaitez économiser de l'espace et que votre liste d'entiers 32 bits est mise en cluster de manière statistique autour d'une certaine plage de valeurs, vous pouvez utiliser la compression d'entier.

.NET utilise la compression d'entier pour les métadonnées de méthode dans les assemblys IL. L'idée est que si l'entier est généralement petit (par exemple 1-100), vous pouvez économiser de l'espace en l'encodant en utilisant beaucoup moins de 32 bits. Selon votre schéma, vous devrez sacrifier un peu ou deux pour indiquer au compresseur/décompresseur si vous avez une petite valeur ou une grande valeur.

Voir here pour une explication plus détaillée de la façon dont .NET le fait.