2014-05-16 2 views
0

Je suis intéressé à faire une classe pour stocker des données dans un manoir plus pacte et je sais que je peux stocker des nombres entre 0 et 2^(x) -1 avec facilité, ainsi que booléens par en utilisant des opérateurs au niveau du bit, mais je suis intéressé par des nombres plus impairs comme un maximum de 6 ou quelque chose. Cela fait environ une semaine que je la bouscule dans ma tête et que je fais du google depuis environ une heure, mais je ne trouve pas vraiment d'aide.Pack de plusieurs valeurs dans le type de données unique

Je suis à la recherche d'un algorithme ou quelque chose pour me aider à trouver la meilleure façon pour emballer les données qui se situe entre 0 et un nombre aléatoire qui est compris entre 1 et 32ish ...

Je suis juste brainstorming sur ceci et voudrait savoir également si la compression comme ceci devrait même être regardée. l'une des raisons pour lesquelles je cherche dans ce domaine est pour les tableaux énormes et autres. Désolé si c'est une question stupide, mon cerveau n'a pas été très tranchant récemment.

En outre, un exemple de valeurs max: 1,5,8,3,12,19

Une classe finalisée Je pensais serait quelque chose comme:

public class MyObject{ 
    private long packed; 
    ... 
    public int getA(){...} 
    public void setA(){...} 
    public int getB(){...} 
    public void setB(){...} 

Merci pour l'aide , ~ vzybilly ~

+0

Pourquoi le feriez-vous? –

+0

Je suis intéressé par une compression de données plus extrême tout en maintenant la convivialité des données. J'ai un certain nombre de projets sur l'esprit qui se développent de manière exponentielle et ainsi, donc je voulais faire une classe qui pourrait construire de nouvelles classes qui contient les données souhaitées. Je me souviens aussi d'un chat en ligne dans lequel j'ai fait quelque chose pour stocker 0 ~ 2 et 0 ~ 5 tout en réussissant à le mettre en 4 bits ... mais j'ai oublié les choses qu'ils ont fait pour y arriver et mon meilleur est 5 bits, un 25% supplémentaires – vzybilly

+0

@vzybilly Si vos besoins en données augmentent de façon exponentielle, l'encombrement ne vous aidera pas beaucoup puisque vous n'obtenez au mieux qu'un taux de compression linéaire. – awksp

Répondre

0

En général, ce n'est pas très intéressant pour un programmeur - peut-être pour un mathématicien/théoricien de l'information. Des exemples spécifiques sont amusants à jouer avec mais pas important dans le monde d'aujourd'hui où la mémoire est abondante, mais tous les autres travaux que vous et l'ordinateur font sont plus rares. Disons que vous deviez stocker une séquence de numéros de lot entre 1 et 6. Vous pouvez ajuster 12 d'entre eux dans un entier de 32 bits, comme 6^12 < 2^32. Mais maintenant vous avez de l'arithmétique supplémentaire à chaque fois que vous accédez aux données, en voyant le nombre de 6^n dans le module d'entrée 6^n + 1. C'est parce qu'il y a des compromis dans la vitesse et la compacité pour n'importe quelle représentation que vous utilisez. "Best" dans la pratique signifie simple. Cela ne veut pas dire qu'il n'y a pas de moments où économiser de l'espace est libre, bon et élégant, mais c'est un problème qui ne devrait être posé que par quelqu'un qui a déjà les compétences pour le résoudre, dans une situation qui nécessite il.

+0

Je suis intéressé à apprendre les compétences, même si je ne pourrais pas besoin les maintenant, ça peut être utile. Je sais déjà comment les déplacer et les ranger ensemble pour les emballer, mais je cherchais une façon plus compacte de le faire. – vzybilly

+0

Fondamentalement, vous stockez juste un groupe de 1-6 valeurs comme un plus grand nombre dans la base 6. Vous ne faites pas décalage et ORing; vous faites multiplier et modding. –

+0

Comment pourrais-je stocker/récupérer les données en utilisant cela, je pense que c'est plus de ce qui m'intéresse ...Je verrai si je ne peux pas bidouiller et tester quelques méthodes pour le faire – vzybilly

Questions connexes