Forum: Mikrocontroller und Digitale Elektronik Zahlen komprimieren


von chis (Gast)


Lesenswert?

Hallo,
ich habe 10 Zahlen von 0-999.
Diese möchte ich gerne komprimieren.
Mein Wunsch wäre gerne eine 10 stellige Zeichenfolge.
Das ganze vielleicht noch mit Hex Zeichen,
dann sollte das etwas leichter sein.

Das Ergebnis sollte 10 Stellen haben und immer gleiche länge.
Daraus soll man dann verlustfrei auf die 10 Ausgangszahlen wieder 
erhalten können.

Ich habe jetzt schon etwas gegoogelt, aber einen vernünftigen Ansatz 
bisher nicht nicht gefunden.

Hätte jemand eine gute Idee wie man an die Sache herangehen könnte, bzw. 
ob das überhaupt so möglich ist?

von Borislav B. (boris_b)


Lesenswert?

chis schrieb:
> as Ergebnis sollte 10 Stellen haben und immer gleiche länge.

Ist doch einfach:
Du hast genau eine Stelle für jede deiner Zahlen. D.h. du brauchst ein 
Alphabet mit 1000 versch. Zeichen.

Dass das nicht funktionieren kann, sollte klar sein...

von Flo (Gast)


Lesenswert?

10 Zahlen zu 0-999 sind 1000^10 verschiedene Kombinationen.

Sind also 30 Stellen im Dezimalsystem oder ca 25 im Hex System.

Man könnte die Symbolanzahl vergrößeren. Mit einem Dreißigersystem 
kommst auf deine 10 Stellen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

chis schrieb:
> Hätte jemand eine gute Idee wie man an die Sache herangehen könnte
Du könntest mal beschreiben, was die Ursache der Aufgabe ist. Woher 
kommen die Zahlen? Warum müssen die "komprimiert" werden und was 
passiert damit? vielleicht kann man dann einen Tipp geben.
> ob das überhaupt so möglich ist?
Mit den gegebenen Informationen lautet die Antwort "Nein, im Zehner- 
oder Hexadezimalsystem nicht möglich!"

von chis (Gast)


Lesenswert?

Hallo,

>>"Nein, im Zehner-
>>oder Hexadezimalsystem nicht möglich!"

Ich dachte mir mit verschiedenen Rechenoperationen,
die man auf die Zahlen anwendet.
Könnte man das ganze eindampfen.
Wenn man die Operationen wieder rückwärts anwendet
kommt man wieder auf die Ursprünglichen Zahlen.

Da muss es doch irgendwelche Algorithmen geben?!?

von micha (Gast)


Lesenswert?

Klar nimm einen einfachen Pseudo-Random Generator Algorithm oder eine 
Hash-Funktion und berechne entsprechende Rainbow-Table; Wenn Du Glück 
hast findest Du einen Startwert, der genau Deine Zahlenfolge erzeugt. 
Kann aber dauern, bis Du eine Lösung findest und kann sein, dass es 
keine gibt. Und du brauchst Rechenpower und Speicher.

von Peter II (Gast)


Lesenswert?

chis schrieb:
> Da muss es doch irgendwelche Algorithmen geben?!?

nein muss es nicht, Man kann mit 10 Stellen nur eine gewissen 
Informationsmenge speichern und diese ist kleiner als die Menge die du 
speichern musst.

Wenn man alles immer Komprimieren könnte, müsste man alles auf 1 
bit/Byte komprimieren können und dann auch wieder entpacken. Das kann 
aber schlecht sein.

Wenn man mehr über die Zahlen wüsste, (wie sie sie verteilt, dürfen sie 
umsortiert werden usw.) dann könnte man sich etwas einfallen lassen, was 
aber nur für genau diesen Zweck funktioniert.

von Jo T. (Gast)


Lesenswert?

Ich vermute jetzt mal, dass chis Speicherplatz sparen will, denn ein 
Wert von 999 braucht 10 Bit, das sinnd 2 Byte.
Also könnte man 10 x 1 Byte und die 2 Bit extra in weiteren 3 Byte 
speichern, mit komplizierten Bitoperationen. Die Befehle dazu brauchen 
mehr Speicher als die oben gesparten 7 Byte.
Bei umfangreicheren Daten kann sich das aber lohnen, auch wenn wirklich 
komprimiert wird.

von Norbert (Gast)


Lesenswert?

chis schrieb:
> Hallo,
> ich habe 10 Zahlen von 0-999.
> Diese möchte ich gerne komprimieren.
> Mein Wunsch wäre gerne eine 10 stellige Zeichenfolge.
> Das ganze vielleicht noch mit Hex Zeichen,
> dann sollte das etwas leichter sein.
>
> Das Ergebnis sollte 10 Stellen haben und immer gleiche länge.
> Daraus soll man dann verlustfrei auf die 10 Ausgangszahlen wieder
> erhalten können.
>
> Ich habe jetzt schon etwas gegoogelt, aber einen vernünftigen Ansatz
> bisher nicht nicht gefunden.
>
> Hätte jemand eine gute Idee wie man an die Sache herangehen könnte, bzw.
> ob das überhaupt so möglich ist?

OK, eine (Anzeige)Position muss die Werte 0-999 darstellen können. Das 
ist geringfügig weniger als 10Bit.
Also muss eine (Anzeige)Position 10Bit (10 unabhängige Informationen) 
darstellen können.

Nehmen wir mal eine Sieben-Segment Anzeige und steuern wir sie derart 
an, das ein Segment AUS | DUNKEL | HELL sein kann.
Damit erreichen wir 2188 mögliche Darstellungen (das sind ca. 11,095Bit)

Fertich!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

chis schrieb:
> Da muss es doch irgendwelche Algorithmen geben?!?
Warum "muss" es da irgendwelche Algorithmen geben? Denn wenn das gehen 
"muss", dann "muss" doch auch ein ganzer Film in "ein Zeichen" passen. 
Und tatsächlich. Das tut er auch, wenn man "1 DVD" als "1 Zeichen" 
ansieht.

Letztlich ist der gesamte Konsens hier im Thread, dass der Werteraum der 
von dir zur Verfügung gestellten "Zeichen" (bestenfalls Hexadezimal mit 
16 Werten pro Stelle) für die gestellte Aufgabe zu klein ist.

Du könntest aber einfach mal meine Fragen beantworten, vielleicht findet 
sich ein anderer Weg...

von Alex S. (Gast)


Lesenswert?

Ich werfe mal das Chinesische Restklassen-System in die Runde.

von PittyJ (Gast)


Lesenswert?

Alex S. schrieb:
> Ich werfe mal das Chinesische Restklassen-System in die Runde.

Ein paar Glückskekse wären besser gewesen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

chis schrieb:
> ich habe 10 Zahlen von 0-999.
> Diese möchte ich gerne komprimieren.
> Mein Wunsch wäre gerne eine 10 stellige Zeichenfolge.

 Wie man es auch dreht und wendet, das ergibt max. 8 Zahlen.

 Und nein, man kann 10 Zeichen ganz einfach nicht komprimieren,
 also brauchst du mindestens 100 bit.

 Und das wars dann.

von Peter II (Gast)


Lesenswert?

Marc V. schrieb:
> Und nein, man kann 10 Zeichen ganz einfach nicht komprimieren,
>  also brauchst du mindestens 100 bit.

klar kann man das, nur kann man es nicht in jedem Fall. Man kann es also 
nicht garantieren.

"4x112;6x42"

und schon habe ich 112,112,112,112,42,42,42,42,42,42 komprimiert.

von Peter (Gast)


Lesenswert?

10 Bit = 0..1023

10 x 10 Bit = 100 Bit = 12.5 Byte => 13 Character

Es ist also mit 13 Character einfach realisierbar, aber nicht mit 10

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Peter II schrieb:
> klar kann man das, nur kann man es nicht in jedem Fall. Man kann es also
> nicht garantieren.

 Ja, sicher.
 10 Zahlen die alle einen Wert von 0 haben, kann ich sogar mit 1 bit
 darstellen.

 EDIT:
Peter II schrieb:
> und schon habe ich 112,112,112,112,42,42,42,42,42,42 komprimiert.

 Und wie ?

: Bearbeitet durch User
von Max D. (max_d)


Lesenswert?

Das Stichwort lautet "Entropie".
Das ist in diesem Fall die Menge an elementarer Unordnung in einer 
Datenmenge.
Bei englischen Texten ist es knapp über ein Bit pro Buchstabe.
Nachdem wir zu den Zahlen vom TO keine Infos haben müssen wir annehmen, 
dass sie 100% zufällig sind und damit per-se nicht verlustfrei 
komprimierbar.

Bilddaten von Kameras und dgl. enthalten btw. auch eine sehr hohe 
Entropy (Rauschen und unruhige Motive). Dass die trotzdem so gut 
komprimierbar sind liegt daran, dass der Mensch der sich das Bild 
anguckt ziemlich dumm ist und man viele Details weglassen kann, also 
verlustbehaftet komprimiern.

von Stefan F. (Gast)


Lesenswert?

Die ist schon bekannt dass die gängigen verlustfreien 
Komprimierprogramme seit gefühlt 30 Jahren im Durchschnitt "nur" ca 50% 
Platzersparniss bringen?


Die Betonung liegt bei "Durchschnitt", denn es kommt auf die konkreten 
Daten an. Du kannst zum Beispiel 50.000 mal die Zahl 900 in 4 Bytes 
komprimieren. Aber 50.000 zufällige Zahlenwerte kannst du gar nicht 
komprimieren. Das Ergebnis hat also eine variable Größe.

Deine hohe Kompressionsrate erreicht man nur, wenn man 
Informationsverlust toleriert, so wie du das von Fotos im JPG Format 
oder Musik im MP3 Format gewohnt bist.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter schrieb:
> Es ist also mit 13 Character einfach realisierbar, aber nicht mit 10
Aber nicht mit 10 Hex-Zahlen. Und schon gar nicht mit 10 Ziffern von 
0..9.

Wobei ich hier doch sehr ins Grüblen komme, ob chis da mit den 
Zahlensystemen was durcheinender gebracht hat...

chis schrieb:
> Das Ergebnis sollte 10 Stellen haben
Also verkürzen wir die Frage: was ist 1 "Stelle"? Ist das der 
Wertebereich 0..9? Oder ist das ein Hex-Zeichen? Oder ist das 1 Char? 
Oder 1 Short? Oder 1 Long?

: Bearbeitet durch Moderator
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Peter II schrieb:
> "4x112;6x42"
>
> und schon habe ich 112,112,112,112,42,42,42,42,42,42 komprimiert.

 Edit ging nicht mehr, also:

 Du hast zehn Zeichen in 10 Zahlen "komprimiert".
 Alle Achtung.
 Und der praktische Zweck davon ist ?

von Stefan F. (Gast)


Lesenswert?

>> und schon habe ich 112,112,112,112,42,42,42,42,42,42 komprimiert.
> Und wie ?

Indem du folgende Information abspeicherst:

Paket 1 = 4 mal Wert 112
Paket 2 = 6 mal Wert 42

Ergibt die Datenfolge: 4 122 6 42
also 4 Bytes.

Es gibt natürlich auch komplexere Algorithmen. Aber dieses Prinzip wird 
bei Faxgeräten und GIF Dateien angewendet und hat sich bis heute 
bewährt.

Wenn Du mein Beispiel mit zufällig verteilten Daten wiederholst, wirst 
du den Schwachpunkt dieses primitiven Algorithmus erkennen. Im 
schlimmsten Fall verdoppelt er nämlich das Datenvolumen.

von Peter II (Gast)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan U. schrieb:
> Ergibt die Datenfolge: 4 122 6 42
> also 4 Bytes.
Passt: "4 122 6 42" sind genau die 10 geforderten "Stellen"...

von Mark B. (markbrandis)


Lesenswert?

chis schrieb:
> Da muss es doch irgendwelche Algorithmen geben?!?

Nein, muss es nicht.

Im Übrigen: Was hat das Thema mit "Mikrocontroller und Digitale 
Elektronik" zu tun? Das ist ja nun eher Mathematik, bzw. 
Informationstheorie.

https://de.wikipedia.org/wiki/Informationstheorie

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Stefan U. schrieb:
> Indem du folgende Information abspeicherst:
>
> Paket 1 = 4 mal Wert 112
> Paket 2 = 6 mal Wert 42
>
> Ergibt die Datenfolge: 4 122 6 42
> also 4 Bytes.

 Paket 1 = 123
 Paket 2 = 456  // Oops
 Paket 3 = 789  // Und wieder Oops
 Paket 4 = 221
 Paket 5 = 446
 Paket 6 = 476
 Paket 7 = 556
 Paket 8 = 656
 Paket 9 = 756
 Paket 10 = 999

 Ergibt die Datenfolge: 1 123 1 456 ... 1 999
 also 100 bit + 80 bit = 180 bit.

 Ausgezeichnet.

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Eine vernünftige Kompression ist nur dann sinnvoll, wenn es Schwerpunkte 
(Häufungen) gibt.
Sind die Zahlen aber halbwegs, gleichmäßig verteilt, so bringt das 
nichts.

Manchmal, aber nur Manchmal, unterliegen die Zahlen bestimmten Trends. 
Dann kann die Überlegung nur die Differenz zu speichern reizvoll sein.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Diese Beispiele laufen alle Richtung Huffman. Da kann man zwar durchaus 
was einsparen, aber nur, wenn man die Wahrscheinlichkeiten mit denen die 
Zahlen 0..999 auftauchen kennt, und wenn diese Wahrscheinlichkeiten 
stark unterschiedlich sind.
Aber dann ist keine konstante Laenge der komprimierten Daten garantiert. 
Nur eine durchschnittliche Laenge (wenn eben die Wahrscheinlichkeiten 
passen).

Gruss
WK

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Amateur schrieb:
> Manchmal, aber nur Manchmal, unterliegen die Zahlen bestimmten Trends.
> Dann kann die Überlegung nur die Differenz zu speichern reizvoll sein.

 Dann braucht man sogar 11 bits.

 Zahl 1    =  999
 Zahl 2    =  123
 Differenz =  876   10 bit

 Zahl 2    =  123
 Zahl 3    =  999
 Differenz = -876   11 bit

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Ich vergaß:

Gibt es eindeutige, sich wiederholende Häufungen, so könnte der Herr 
Huffman Linderung bringen.
Wohl gemerkt: Wenn diese Häufungen nicht vorhanden sind, blähst Du, mit 
solchen Kompressionsalgorithmen, nur den Datenstrom auf.

von Peter II (Gast)


Lesenswert?

Marc V. schrieb:
> Amateur schrieb:
>> Manchmal, aber nur Manchmal, unterliegen die Zahlen bestimmten Trends.
>> Dann kann die Überlegung nur die Differenz zu speichern reizvoll sein.
>
>  Dann braucht man sogar 11 bits.

du sucht immer den schlimmsten fall raus - ja dabei wird das Ergebnis 
sogar größer. Es gibt aber sehr oft den Fall wo die Differenzen kleiner 
sind, dann kommt man mit weniger Bits aus.

von Hans M. (Gast)


Lesenswert?

Dann sortiert man vor dem abziehen sie von Groß nach klein ;-)

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

micha schrieb:
> Klar nimm einen einfachen Pseudo-Random Generator Algorithm oder eine
> Hash-Funktion und berechne entsprechende Rainbow-Table; Wenn Du Glück
> hast findest Du einen Startwert, der genau Deine Zahlenfolge erzeugt.
> Kann aber dauern, bis Du eine Lösung findest und kann sein, dass es
> keine gibt. Und du brauchst Rechenpower und Speicher.

Einen ähnlichen Gedanken hatte ich auch schon:

V1) Der Encoder sucht eine passende Sequenz in Pi oder e und gibt einen 
Pointer an der Decoder. Wird in der Praxis nicht für lange Sequenzen 
funktionieren.

V2) Reihenentwicklung, etc.: Der Encoder erzeugt Parameter einer 
gebrochen rationalen Funktion.

Beide Decoder verlangen allerdings etwas Rechnerei und Speicher. Bleibt 
also wieder die Frage nach der Anwendung.

von Peter II (Gast)


Lesenswert?

Marcus H. schrieb:
> Beide Decoder verlangen allerdings etwas Rechnerei und Speicher. Bleibt
> also wieder die Frage nach der Anwendung.

und bei beiden ist nicht garantiert das es dann auch in 10 Zeichen 
passt.

von Amateur (Gast)


Lesenswert?

Noch eine Möglichkeit:
Die Zahlen 0 ... 999 benötigen 10 Bit.
Computi kann aber nur 8/16/24 oder 32 Bit.

Wenn Du die Zahlen "zusammenschiebst", um die ungenutzten 6 Bit zu 
verwenden, so kannst Du Deine 10 Zahlen in 100 Bit oder 12 Bytes 
verpacken, statt 160 bzw. 16 Bytes zu verwenden.
Die Schiebebefehle und die booleschen Maskierungen werden dann Dein 
Freund werden.
Nett ist auch, dass das Ganze verlustlos geschieht.

von Peter II (Gast)


Lesenswert?

Amateur schrieb:
> Nett ist auch, dass das Ganze verlustlos geschieht.

aber immer noch dumm, das ist mehr als 10byte sind die gebraucht werden.

von Mark B. (markbrandis)


Lesenswert?

Amateur schrieb:
> Wenn Du die Zahlen "zusammenschiebst", um die ungenutzten 6 Bit zu
> verwenden, so kannst Du Deine 10 Zahlen in 100 Bit oder 12 Bytes
> verpacken, statt 160 bzw. 16 Bytes zu verwenden.
> Die Schiebebefehle und die booleschen Maskierungen werden dann Dein
> Freund werden.
> Nett ist auch, dass das Ganze verlustlos geschieht.

Das ist dann eben ein Trade-off: Man spart Hauptspeicher, aber dafür 
braucht man mehr Rechenzeit. Und mehr Speicher für den Code.

Wenn der Themenersteller man sinnvolle Informationen über seinen 
Anwendungsfall herausrücken würde...

von Der Andere (Gast)


Lesenswert?

Hans M. schrieb:
> Dann sortiert man vor dem abziehen sie von Groß nach klein ;-)

Und wo speicherst du die Originalpositionen? Auch die sind Teil des 
Gesamt-Informationsgehalts oder willst du uns erzählen 10000 = 00001?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Peter II schrieb:
> das ist mehr als 10byte sind die gebraucht werden.

Das mit den 10 Byte kann ich da nicht direkt rauslesen:

chis schrieb:
> Das Ergebnis sollte 10 Stellen haben und immer gleiche länge.

Er meint wohl eine 10-stellige Zahl. Ob die im Binärsystem, als 10 
ASCII-Zeichen oder als BCD dargestellt werden soll, entzieht sich 
unserer Kenntnis. Ich bezweifle auch, dass der TO diese Frage überhaupt 
beantworten kann.

Nach der Wortwahl des Ausgangspostings zu urteilen, steckt der TO da 
überhaupt gar nicht in der Materie, wie Zahlen dargestellt werden 
können.

: Bearbeitet durch Moderator
von Amateur (Gast)


Lesenswert?

>Das ist dann eben ein Trade-off: Man spart Hauptspeicher, aber dafür
>braucht man mehr Rechenzeit. Und mehr Speicher für den Code.

@Mark

Die Syntax für den Zauberalgorithmus ist mir leider entfallen. Aus 
diesem Grunde brauchen alle Verfahren, sogar die 1:1 
Übertragung/Speicherung Code;-)
So ein Mist aber auch!

Aber vielleicht hast Du ja sogar etwas konstruktives auf der Pfanne?

von Hosenmatz (Gast)


Lesenswert?

chis schrieb:
> Hallo,
> ich habe 10 Zahlen von 0-999.
> Diese möchte ich gerne komprimieren.
Warum? Zu welchem Zweck?

> Mein Wunsch wäre gerne eine 10 stellige Zeichenfolge.
Aus welchem Zeichensatz? Oder ist das freigestellt? Dann müsste man sich 
einen Zeichensatz ausdenken, der 1000 Symbole umfasst.

> Das ganze vielleicht noch mit Hex Zeichen,
> dann sollte das etwas leichter sein.
Dann geht es nur für einen Teil der möglichen Kombinationen.
Aber was sollte in welcher Hinsicht leichter sein?

> Das Ergebnis sollte 10 Stellen haben und immer gleiche länge.
> Daraus soll man dann verlustfrei auf die 10 Ausgangszahlen wieder
> erhalten können.
Dann müsste man sich einen neuen Zeichensatz, wie oben erwähnt, 
ausdenken.

> Ich habe jetzt schon etwas gegoogelt, aber einen vernünftigen Ansatz
> bisher nicht nicht gefunden.
Wonach genau hast Du gesucht?

> Hätte jemand eine gute Idee wie man an die Sache herangehen könnte, bzw.
> ob das überhaupt so möglich ist?

Welchen theoretischen Hintergrund hast Du?
Deine Fragestellung deutet darauf hin, dass Du lediglich einmal gehört 
hast, das man Daten komprimieren kann. Eventuell hast Du schon Programme 
wie ZIP, Huffmann, Run-Length-Coding oder Liv-Zempel oder ähnliches 
verwendet, weisst aber nicht warum und in welchen Grenzen sie 
funktionieren. Ist das so?

Wenn man mal alle unbekannten Fakten durch plausible Annahmen ersetzt, 
dann ist es nicht möglich, alle möglichen Folgen von 10 Zahlen, jeweils 
0-999 durch eine kürzere Folge so zu ersetzen, dass die originale 
Zahlenfolge wieder reproduzierbar ist.

Das folgt aus ganz einfachen Überlegungen:
Angenommen, es gäbe so ein Verfahren, dann wäre die entstehende Folge 
kürzer als die Ausgangsfolge. Daraus folgt, dass es auch weniger 
mögliche Darstellungen verschiedener Zahlenfolgen gäbe als mit der 
ursprünglichen Darstellung. Nun soll aber jede der erzeugten 
Zahlenfolgen eindeutig einer einzigen der Ausgangszahlenfolgen 
zugeordnet werden können.

Sagen wir, Du hast 1000^10 verschiedene Zahlen. Du hättest ein 
Verfahren, dass jede mögliche Kombination einer kürzeren Zahl zuordnet. 
Angenommen, diese neue, kürzere Darstellung könnte nur 16^10 (das ist 
eindeutig wesentlich weniger als 1000^10) verschiedene Zahlen darstellen 
(also etwa 10-stellige Hexzahlen). Dann blieben 1000^10 - 16^10 Zahlen 
die keiner neuen Zahl zugeordnet werden könnten. Denn die 
Rechenvorschrift könnte ja nur EINER Zahl der Ausgangsmenge jeweils EINE 
Zahl der Zielmenge zuordnen. Wenn ich nun alle 16^10 der Zielmenge 
ausgenutzt hätte, was mache ich dann mit der Zahl mit der Nummer 16^10+1 
aus der Ausgangsmenge? Ich habe ja keine aus der Zielmenge mehr übrig.

Falls Dir das wegen der grossen Zahlen zu unübersichtlich ist, versuche 
es mit kleineren Zahlen. Nimm an Du hättest, 8 verschiedene Zahlen und 
würdest versuchen, sie 4 verschiedene Zahlen (durch ein 
Kompressionsverfahren) zuordnen wollen. Dann könntest Du zwischen jeder 
der 8 Zahlen der Ausgangsmenge einen Pfeil zu genau einer der 4 Zahlen 
der Zielmenge zeichnen. Das aber geht nicht, wenn Du es versuchst. Nach 
der 4. Zahl sind alle Zahlen der Zielmenge besetzt.

Klar?

Bleibt die Frage, warum es so etwas wie ZIP etc. gibt und wie das 
funktioniert. Eine einfache Antwort ist zweiteilig: 1. Auch ZIP etc. 
macht nicht ALLE möglichen Kombinationen kleiner (Du wirst schon 
festgestellt haben, dass eine gezippte Datei nicht wesentlich kleiner 
oder sogar größer wird, wenn sie noch einmal gezippt wird) und 2.  ZIP 
und ähnliches nutzen die Tatsache, dass nicht alle möglichen 
Kombinationen genutzt werden (z.B. in ASCII-Texten) und ausserdem, dass 
es - je nach Inhalt - gewisse Abhängigkeiten zwischen den Teilen der 
Gesamtdatei gibt.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

chis schrieb:
> Mein Wunsch wäre gerne eine 10 stellige Zeichenfolge.

Wie schon von den Vorrednern dargestellt, benötigt man 100 Bit für die 
Darstellung der zehn Zahlen. Bei Verwendung von Unicode, d.h. UTF-16 
oder UTF-32, statt ASCII oder ISO-8859 könnte man es sich sogar 
erlauben, zugunsten der Lesbarkeit erhebliche Teile des Zeichensatzes 
ungenutzt zu lassen.

Trotzdem bedarf es schon sehr fortgeschrittener semiotischer Kenntnisse, 
solch eine Zeichenfolge auf einem Computer als Text einzugeben. Da würde 
ich selbst für Unicode-Experten durchaus mit vielen Minuten bis Stunden 
für eine 10-stellige Zeichenfolge ansetzen.

> Das ganze vielleicht noch mit Hex Zeichen,
> dann sollte das etwas leichter sein.

Zahlen in Hexadezimaldarstellung besitzen eine viel zu geringe 
Informationsdichte, da selbst bei Zugrundelegung unseres lateinischen 
Buchstaben- und arabischen Ziffernalphabets nur ein Bruchteil der 
verfügbaren Zeichen ausgenutzt werden kann.

von veganer Metzger (Gast)


Lesenswert?

Also mit Huffmann komme ich für die Testdaten (999, 828, 717, 717, 818, 
110
22, 1, 288, 788) auf 12 bytes. Da ist aber die Tabelle (die hat 42 
bytes) nicht dabei, die braucht man aber um es wieder zu dekodieren.

Ohne nähere Angaben kann man da keinen vernünftige Antwort geben, evt. 
geht es für bestimmte Fälle aber dazu müsste man mehr wissen.

Also Fakten auf den Tisch oder Thread dicht machen.

von veganer Metzger (Gast)


Lesenswert?

Ich vergass: Die Code-Tabelle kann man nochmal eindampfen die war nur 
der Übersichtlichkeit halber ASCII.

Bei solchen kleinen Datenmengen lohnt sich der Aufwand nicht, der Code + 
die Verwaltungsdaten sind anschliessend grösser als der erzeugte Code.

Da bleibt höchstens die Idee von oben per Hash, Pi-Sequenz,....

Tauchen nur bestimmte Werte im Intervall auf und man kann andere Werte 
sicher ausschliessen geht noch was, es kommt halt sehr darauf an was er 
überhaupt vor hat aber da er den Mund nicht aufbekommt ...

von Amateur (Gast)


Lesenswert?

@Chis
solltest Du noch unter den Lebenden weilen, so wäre es nicht schlecht, 
wenn Du Dich mal wieder "einmischen" tätest.

Irgendwie ist immer noch nicht klar, ob es sich um binäre-, BCD- oder 
ASCII-Zahlen handelt.

Oder hast Du nur einen Schneeball vom Berg gerollt und schaust erst  in 
der nächsten Woche mal nach, ob in der Ortschaft, am Fuße des Berges, 
ein paar Grundstücke günstig zu haben sind?

von Mark B. (markbrandis)


Lesenswert?

Amateur schrieb:
> Oder hast Du nur einen Schneeball vom Berg gerollt und schaust erst  in
> der nächsten Woche mal nach, ob in der Ortschaft, am Fuße des Berges,
> ein paar Grundstücke günstig zu haben sind?

:-)

von Kurt (Gast)


Lesenswert?

Zahlen der Größe nach sortieren, die erste Zahl speichern und dann nur 
noch die Differenzen.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Kurt schrieb:
> Zahlen der Größe nach sortieren, die erste Zahl speichern und dann nur
> noch die Differenzen.

lol Ich muss grad eine WAV-Datei komprimieren.
Dazu sortiere ich jetzt alle Bytes in aufsteigender Reihenfolge, damit 
die RLE maximal-effizient wird.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Versucht ihr immer noch den Nobelpreis zu kriegen ?

Marc V. schrieb:
> chis schrieb:
>> ich habe 10 Zahlen von 0-999.
>> Diese möchte ich gerne komprimieren.
>> Mein Wunsch wäre gerne eine 10 stellige Zeichenfolge.
>
>  Wie man es auch dreht und wendet, das ergibt max. 8 Zahlen.
>
>  Und nein, man kann 10 Zeichen ganz einfach nicht komprimieren,
>  also brauchst du mindestens 100 bit.
>
>  Und das wars dann.

von Mark B. (markbrandis)


Lesenswert?

Marc V. schrieb:
> Versucht ihr immer noch den Nobelpreis zu kriegen ?

Aber nein. Es reicht schon, wenn wir besser sind als Claude Shannon. ;-)

von chis (Gast)


Lesenswert?

Hallo,

Amateur schrieb:
> Oder hast Du nur einen Schneeball vom Berg gerollt und schaust erst  in
> der nächsten Woche mal nach, ob in der Ortschaft, am Fuße des Berges,
> ein paar Grundstücke günstig zu haben sind?

Nein, ich habe aber auch noch genug andere Dinge zu tun.
Und außerdem scheint hier jeder zweite nur seinen Senf
dazugeben zu müssen.

Wenn ich hier fragen würde:
Wann darf man in Deutschland über eine Ampel gehen,
dann ist die erste Antwort die kommt:
Wo steht denn die Ampel???

Ich fasse mal zusammen, was jetzt rausgekommen ist
in den letzten ~50 Beiträgen:
Man kann eine Zahl komprimieren, solange gleiche Zeichen darin sind,
das ist aber nicht immer gegeben, also kann ich nicht immer
sicher auf eine vorgegebene Zeichenlänge kommen.

Damit ist die Diskussion jetzt wohl beendet.

Wenn ihr jetzt weiter Seft dazugeben wollt nur zu
ist mir jetzt egal.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

chis schrieb:
> Nein, ich habe aber auch noch genug andere Dinge zu tun.
Du fängst eine Sitzung (Thread) an und gehst dann als Sitzungsleiter 
(TO) zum Rasenmähen? Und wunderst dich hinterher, dass die 
Sitzungsteilnehmer (User) irgendwelche Fragen stellen und mangels 
Antworten nicht genau das diskutieren, was du willst?

> dann ist die erste Antwort die kommt:
> Wo steht denn die Ampel???
Richtig, das sollte man beachten.

> Ich fasse mal zusammen, was jetzt rausgekommen ist
> in den letzten ~50 Beiträgen:
> Man kann eine Zahl komprimieren, solange gleiche Zeichen darin sind,
> das ist aber nicht immer gegeben, also kann ich nicht immer
> sicher auf eine vorgegebene Zeichenlänge kommen.
Du solltest die ~50 Beiträge nochmal lesen. Da steht viel, viel mehr 
drin. Sogar ich habe daraus noch was gelernt. Und noch immer ist unklar, 
was denn jetzt "1 Stelle" ist.

> ist mir jetzt egal.
Und schon wieder nichts gelernt. Ein weiteres Fazit hättest du zumindest 
ziehen müssen: Nachholbedarf beim Thema "Zahlensysteme"...

von Stefan F. (Gast)


Lesenswert?

> Ich fasse mal zusammen, was jetzt rausgekommen ist
Das ist völlig falsch.

Richtig ist, dass du zu deinen Zahlenfolgen zu wenig Eigenschaften 
genannt hast, um einen geeigneten Kompressionsalgorithmus zu wählen bzw 
zu entscheiden, ob die Aufgabe lösbar ist.

Welche Eigenschaften haben die Zahlen? Wie stehen sie zueinander in 
Beziehung? Auf welchen Informationsgehalt kann man notfalls verzichten? 
Was verstehst du unter einer "Stelle"?

Das sind die Kernfragen, die wiederholt gestellt wurden und Antwort 
bedürfen.

von Pete (Gast)


Lesenswert?

@chis

Wenn man in diesem Forum nicht alle Informationen die zur Behandlung der 
Fragestellung notwendig sind preisgibt,
entwickelt sich hier schnell eine ebenso unproduktive Eigendynamik.

Welche Informationen benötigt werden ist leider nicht immer 
offensichtlich.

von Pete (Gast)


Lesenswert?

Oh, sorry hab Stefans letzten Beitrag übersehen.
Aber der fragt ja konkret nach und macht damit meinen letzten Satz 
überflüssig.

von Eric B. (beric)


Lesenswert?

chis schrieb:
> Wenn ich hier fragen würde:
> Wann darf man in Deutschland über eine Ampel gehen,
> dann ist die erste Antwort die kommt:
> Wo steht denn die Ampel???

Nö, zuerst meckern dass man besser an der Ampel entlang geht statt 
drüber.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

chis schrieb:
> Ich fasse mal zusammen, was jetzt rausgekommen ist
> in den letzten ~50 Beiträgen:

 Beitrag "Re: Zahlen komprimieren"

 Sapienti sat

von Georg (Gast)


Lesenswert?

chis schrieb:
> ich habe 10 Zahlen von 0-999.
> Diese möchte ich gerne komprimieren.

Wegen der beschränkten Stellenzahl von Taschenrechnern vereinfache ich 
das mal oBdA (ohne Beschränkung der Allgemeinheit) auf 4 Zahlen.

Ich nehme mal als Beispiel 4 Zahlen 0..999, die auf 4 Ziffern 
komprimiert werden sollen:

274 877 906 936

Die Ziffern schreibe ich einfach hintereinander (nötigenfalls mit 
führenden Nullen), ergibt eine 12 stellige Zahl

274877906936

Das ist 2^38-8, ich gebe also weiter "38-8" - Voila, 4 Zeichen.

Georg

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Georg schrieb:
> Das ist 2^38-8, ich gebe also weiter "38-8" - Voila, 4 Zeichen.

 Bitte dasselbe fur
 274,877,906,928

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Georg schrieb:
> Das ist 2^38-8, ich gebe also weiter "38-8" - Voila, 4 Zeichen.
Zeig das doch mal mit 274 677 906 936
Ich komme da auf         38-2000000008
oder                     37+137238953464
Und jede der "Lösungen"
ist länger als           274677906936

Und da möchte ich mal sehen, wie das wieder bei einer 100stelligen 
Binärzahl (die für die angelegentliche Aufgabe ja nötig ist) wieder 
auseinandergeklaubt wird. Das sind dann immerhin mehr als 3 longs 
hintereinander...

: Bearbeitet durch Moderator
von Georg (Gast)


Lesenswert?

Marc V. schrieb:
> Bitte dasselbe fur

Lothar M. schrieb:
> Zeig das doch mal mit 274 677 906 936

Genau das wollte ich ja zeigen: es funktioniert nur für ganz bestimmte 
Zahlen (übrigens für ziemlich wenige). Aber wo ihr recht habt: da dem TO 
wohl jedes mathematische Verständnis abgeht, wird er meinen Post 
womöglich noch als Bestätigung nehmen:

chis schrieb:
> Da muss es doch irgendwelche Algorithmen geben?!?

Eine Frage am Rande: gehören Mathematiker und Nicht-Mathematiker 
tatsächlich beide zur Art Homo Sapiens? Sind das verschiedene 
Unterarten?

Georg

von Clemens L. (c_l)


Lesenswert?

Georg schrieb:
> gehören Mathematiker und Nicht-Mathematiker tatsächlich beide zur Art
> Homo Sapiens?

"Anyone who cannot cope with mathematics is not fully human. At best he 
is a tolerable subhuman who has learned to wear shoes, bathe, and not 
make messes in the house."
(Robert Heinlein)

von Toto mit Harry (Gast)


Lesenswert?

Könnte man nicht bei 10xZiffern bis 999

auf die Gesamte breite ein Steuerbyte anhängen und zum Beispiel die Bits 
so schieben das jedes 5. Bit ein Wiederholungsbit darstellt.

Wenn das 5Bit null ist werden die nächsten 4normal eingelesen, sonst vom 
vorherigen kopiert.

Somit würde aus 1Byte 0000|0000|2222|2222 0000|1|2222|1| werden.

Hab irgendwann mal ein Bild so komprimiert, allerdings hab ich eine 
Farbe gelöscht und als Steuerbyte gesetzt... ich denke so köntne man 
aber vielleicht schon ansetzen.

von Amateur (Gast)


Lesenswert?

@chis

Für meinen Einwand:

>Oder hast Du nur einen Schneeball vom Berg gerollt und schaust erst  in
>der nächsten Woche mal nach, ob in der Ortschaft, am Fuße des Berges,
>ein paar Grundstücke günstig zu haben sind?

möchte ich mich hier in aller Form entschuldigen.

Statt in der nächsten Woche hätte ich besser am nächsten Tag 
geschrieben.

Tut mir aufrichtig Leid!

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Toto mit Harry schrieb:
> Wenn das 5Bit null ist werden die nächsten 4normal eingelesen, sonst vom
> vorherigen kopiert.
>
> Somit würde aus 1Byte 0000|0000|2222|2222 0000|1|2222|1| werden.

 Etwas ähnliches nennt sich bit stuffing und nein, da könnte man nicht
 ansetzen.

 Wie willst du ein normales von einem Stuffbit unterscheiden ?

 EDIT:

Toto mit Harry schrieb:
> Könnte man nicht bei 10xZiffern bis 999

 Es geht um 10 Zahlen, nicht Ziffern.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Amateur schrieb:
> Statt in der nächsten Woche hätte ich besser am nächsten Tag
> geschrieben.

 Warum ?

 Der TO ist weg, aber die Frage bleibt, mit oder ohne deinen Senf.

von Richard H. (richard_h27)


Lesenswert?

Lothar M. schrieb:
> chis schrieb:
>> Nein, ich habe aber auch noch genug andere Dinge zu tun.
> Du fängst eine Sitzung (Thread) an und gehst dann als Sitzungsleiter
> (TO) zum Rasenmähen?

Da hier die Komprimier-Experten präsent sind, hätte ich auch eine Frage: 
Wie kann ich meinen Rasenschnitt verdichten, dass er in einen einzigen 
Auffangkorb passt?
Überlegt Euch was, ich muss jetzt in eine Sitzung.

von Peter II (Gast)


Lesenswert?

Richard H. schrieb:
> Wie kann ich meinen Rasenschnitt verdichten, dass er in einen einzigen
> Auffangkorb passt?

einfach einen Verbrenner im Auffangkorb verbauen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Richard H. schrieb:
> Wie kann ich meinen Rasenschnitt verdichten, dass er in einen einzigen
> Auffangkorb passt?

 Ausblasrohr bis zum Nachbar verlängern ?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Richard H. schrieb:
> Da hier die Komprimier-Experten präsent sind, hätte ich auch eine Frage:
> Wie kann ich meinen Rasenschnitt verdichten, dass er in einen einzigen
> Auffangkorb passt?
> Überlegt Euch was, ich muss jetzt in eine Sitzung.

Ich präzisiere:

Wie kann ich meinen Rasenschnitt verlustfrei verdichten, dass er in 
einen einzigen Auffangkorb passt?

:)

von Hans M. (Gast)


Lesenswert?

Frank M. schrieb:
> Ich präzisiere:
>
> Wie kann ich meinen Rasenschnitt verlustfrei verdichten, dass er in
> einen einzigen Auffangkorb passt?

Ganz "einfach" den Raum zwischen Atomkern und Elektronenschalen des 
Rasenschnitts entfernen!

:-P

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Frank M. schrieb:
> Wie kann ich meinen Rasenschnitt verlustfrei verdichten, dass er in
> einen einzigen Auffangkorb passt?
Rasen pflastern. Das bisschen Unkraut, das dann noch zwischen den Fugen 
wächst, passt locker rein.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans M. schrieb:
> Ganz "einfach" den Raum zwischen Atomkern und Elektronenschalen des
> Rasenschnitts entfernen!

Genau: einfach die "Luft" dazwischen rauspumpen :)

von Richard H. (richard_h27)


Lesenswert?

Frank M. schrieb:
> Ich präzisiere:
>
> Wie kann ich meinen Rasenschnitt verlustfrei verdichten, dass er in
> einen einzigen Auffangkorb passt?

Verlustfrei ist echt nicht nötig, ich will ihn nicht wieder herstellen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Richard H. schrieb:
> Verlustfrei ist echt nicht nötig,

Das passt aber nicht zum Ausgangsbeitrag:

chis schrieb:
> Daraus soll man dann verlustfrei auf die 10 Ausgangszahlen wieder
> erhalten können.

Du bist also somit offtopic.

von Richard H. (richard_h27)


Lesenswert?

Marc V. schrieb:
>  Ausblasrohr bis zum Nachbar verlängern ?

In eine ähnliche Richtung hatte ich auch schon gedacht, nämlich das Zeug 
in der Cloud ablegen. Kam aber alles wieder runter geregnet.

von Ralf G. (ralg)


Lesenswert?

Richard H. schrieb:
> Kam aber alles wieder runter geregnet.

Grass-Rain-Wall installieren!

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Richard H. schrieb:
> In eine ähnliche Richtung hatte ich auch schon gedacht, nämlich das Zeug
> in der Cloud ablegen. Kam aber alles wieder runter geregnet.

 Menge die durch den Firewall zurückkommt auf <= Auffangkorb begrenzen ?

von Rolf Magnus (Gast)


Lesenswert?

Marc V. schrieb:
> Der TO ist weg, aber die Frage bleibt, mit oder ohne deinen Senf.

Die Frage ist Unsinn. Das hat der TO erkannt. Sie weiter im Raum stehen 
zu lassen und zu diskutieren ist einigermaßen sinnlos.

Frank M. schrieb:
> Hans M. schrieb:
>> Ganz "einfach" den Raum zwischen Atomkern und Elektronenschalen des
>> Rasenschnitts entfernen!
>
> Genau: einfach die "Luft" dazwischen rauspumpen :)

Das Vakuum raussaugen, bis keins mehr drin ist.

von (prx) A. K. (prx)


Lesenswert?

Peter II schrieb:
> einfach einen Verbrenner im Auffangkorb verbauen.

Frischer Rasen brennt schlecht.

von Toto mit Harry (Gast)


Lesenswert?

Im Prinzip will der To doch nur 300bit komprimieren..

Mit fester Endgrösse wird das nicht gehen..Aber man kann es 
grundsätzlich versuchen.. Es kann dann etwas mehr oder viel weniger 
werden.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rolf Magnus schrieb:
> Die Frage ist Unsinn. Das hat der TO erkannt. Sie weiter im Raum stehen
> zu lassen und zu diskutieren ist einigermaßen sinnlos.

 Die meisten haben es auch erkannt, es geht aber ohne Beleidigungen
 und Beschimpfungen weiter - vielleicht kommt noch etwas nützliches
 dabei heraus - für Gärtner oder so...

von Lukey S. (lukey3332)


Lesenswert?

Na toll - Jetzt haben die Nachbarn mit jeder Menge Erde einen 
Denial-of-Grass angriff gestartet. Und mit lrzip bekomm ich den ganzen 
Dreck nicht wegkomprimiert - Da ist wohl die Entropie zu hoch. Ich will 
wieder an meinen Rasen! Jetzt versuch ich andere zu überzeugen, um einen 
DDoG durchzuführen.
1
Lukas@31.Gartenstraße.Filderstadt.de:~$ hping3 -S --flood --data 30t --file $HOME/Schlamm 32.Gartenstraße.Filderstadt.de
2
HPING 32.Gartenstraße.Filderstadt.de (Zaun0 192.168.4.41): S set, 40 headers + 30000 kilo data
3
hping in flood mode, no replies will be shown
4
5
Broadcast message from Gott@Erde (pts/3) (Wed Jun 22 19:02:17 2016):        
6
7
m(
8
9
Segmentation fault
10
Lukas@31.Gartenstraße.Filderstadt.de:~$

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.