Je travaille sur Scala avec des listes très larg de Int (peut-être grand) et je dois les compresser et de le maintenir en mémoire. La seule exigence est que je puisse tirer (et décompresser) le premier numéro sur la liste avec lequel travailler, sans toucher le reste de la liste.compression à Scala
J'ai beaucoup de bonnes idées mais la plupart d'entre elles traduisent les nombres en bits. Exemple:
vous pouvez écrire un nombre x comme tuple | log (x) |, X- | log (x) | le premier élément nous le plaçons comme une chaîne de 1 et un 0 à la fin (code unaire) et le second en binaire. par exemple:
1 -> 0,1 -> 0 1
...
5 -> 2,1 -> 110 01
...
8 -> 3,0 -> 1110 000
9 -> 3,1 -> 1110 001
...
Alors qu'un Int prend 32 bits fixes de la mémoire et une longue 64, avec cette compression x nécessite 2log (x) bits pour le stockage et peut atteindre indefinetly. Cette compression est réducemémoire dans la plupart des cas.
Comment gérez-vous ce type de données? Y at-il quelque chose comme bitarray ou quelque chose? Un autre moyen de compresser de telles données dans Scala?
Merci
Quelle est la taille de vos listes? Peut-être n'avez-vous pas besoin du jeu de jambes sophistiqué. Sinon, il semble que vous ayez un problème très spécifique et il est peu probable que vous obteniez quelque chose hors de la boîte. – leonm
Les listes peuvent avoir des millions d'entrées et elles seront lues/écrites depuis/sur le disque et gérer plusieurs à la fois. Ainsi, la compression aidera également les performances (réduction des E/S, je pense). J'espère que quelqu'un connaît une meilleure façon de représenter une telle liste dans Scala (Peut-être un byteArray, je ne sais pas) – Skuge
Est-ce que ce soit une liste de valeurs? Serait-ce un ensemble? –