2012-04-12 7 views
0

Ich habe 13 Zahlen aus einem Satz mit 13 Arten von Daten zeichnen, jede Art hat 4 Artikel so insgesamt 52 Artikel. Wir können den Gegenstand als 1,2,3,4,5,6,7,8,9,10,11,12,13 nummerieren, also wird es 4 "1", 4 "2", ... 4 geben "13" im Set. Die 13 Zahlen, die aus dem Set stammen, sind zufällig. Der ganze Vorgang wiederholt sich millionenfach oder noch mehr, also brauche ich eine effiziente Möglichkeit, die 13 Zahlen zu speichern. Ich dachte daran, eine Art von Codierungsmethode zu verwenden, um die 13 ganzen Zahlen in Bits zu komprimieren. Zum Beispiel zähle ich, wie viele "1", "2" ... zuerst die Zählung für jedes Element mit 2 Bits codieren und 1 weiteres Bit verwenden, um anzuzeigen, ob das Element gezeichnet wurde oder nicht. Für jeden Gegenstand benötigen wir also 3 Bits, insgesamt kosten 13 Gegenstände 39 Bits. Es benötigt definitiv 8 Bytes, um dies zu tun. Aber es ist immer noch zu viel, da ich über paar Millionen oder Milliarden von Berechnungen spreche und jeder Satz muss später in der Datei gespeichert werden. Also, wenn ich 8 Bytes benutze, werde ich immer noch ungefähr 80 GB für meine Daten fragen. Aber wenn ich das um die Hälfte reduzieren kann, werde ich 40 GB sparen. Irgendeine Idee, wie man diese Struktur effizienter komprimiert? Ich denke auch, 5 Bytes stattdessen zu verwenden, aber als ich mich um den unterschiedlichen Typ der Nummer kümmern muss (ein int + ein Zeichen), gibt es irgendeine Bibliothek in C++ kann das Kodieren/das Komprimieren für mich leicht tun?die Suche nach einer besseren Art und Weise Zahlen zu kodieren und komprimieren

Danke.

+0

Der Versuch, herauszufinden, wie das Casino zu schlagen, nicht wahr? :-) – paxdiablo

+0

Ist die Reihenfolge der Zahlen wichtig? Sonst scheint es, als könnten Sie Ihre Objekte leicht als Bits speichern, wobei jedes Bit repräsentiert, wenn ein bestimmtes Objekt gezeichnet wird oder nicht. Für 1 Million von denen brauchen Sie 8MB Speicher. Um Milliarden, bohnen Sie 100 Millionen oder 1 Million Millionen? Für den ersten brauchen Sie nur 8 GB Speicherplatz. Dies könnte um 12,5% reduziert werden, indem 7 Bytes anstelle von 8 Bytes verwendet werden. Gibt es für die weitere Komprimierung eine Struktur zu den Daten oder ist sie rein zufällig? –

+0

Ist das Hausaufgaben? –

Antwort

0

versuchen LV77 und LVZ Kompression

0

Vielleicht ein wenig anspruchsvoller als Sie suchen, aber HDF5 überprüfen.

1

Mit Ihrem Schema googeln, repräsentiert jede Hand von 39 Bits um 8 Bytes von 64 Bits haben 25 Bits verschwendet, etwa 40%.

Wenn Sie Batch Hände zusammen, können Sie sie darstellen, ohne diese Bits zu verschwenden.

39 und 64 haben keine gemeinsamen Faktoren, so dass die kleinste gemeinsame Vielfache ist nur das Mehrfach 39 * 64 = 2496 Bits oder 312 Bytes. Dies hält 64 Hände und ist etwa 60% der Größe Ihres aktuellen Systems.

Verwandte Themen