Gibt es Grenzen bei der Komprimierung von Daten?

8 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das kommt ganz darauf an, wie vielfältig diese Daten sind, bzw. wie stark sich einzelne Bestandteile ähneln oder sogar identisch sind.

Wenn ja, dann ist eine so starke Komprimierung auch möglich.
(Da machen sich manche Leute einen Spaß draus. Kannst ja mal "zip bomb" oder "Archivbombe" googlen, falls es dich interessiert.)

Das ist aber wirklich ein Extrembeispiel. Solch eine starke Kompression ist mit realen Nutzdaten selten möglich.

Wenn keine Übereinstimmungen oder (einem Muster entsprechende) Ähnlichkeiten vorliegen, dann lässt sich da auch nicht viel verlustfrei komprimieren.

Verlustbehaftete Kompression geht immer. Da stellt sich nur die Frage, bis zu welchem Grad man das treiben kann, sodass die Daten noch ihrem Zweck dienen können.

Es gibt da einen japanischen Programmierer (Yoshizaki Haruyasu), der vor mehr als 30 Jahren das Programm LHarc entwickelt hat. Das war ein leistungsstarkes Komprimierprogramm, welches damals für alle Systeme frei verfügbar war.
Der hat sich mal zu den Grenzen der Kompression so geäußert: "Ich habe eine geniale Methode gefunden, jede beliebige Datei auf 1 Byte zu packen. Nur mit dem Auspacken habe ich noch schwierigkeiten."

Wenn Du aber mal Komprimierung mit extrem beeindruckenden Werten erleben willst, dann erstelle eine knapp 4 GB große leere Datei und jage die durch ZIP. Die ZIP-Datei vervielfältigst Du und packst diese Dateien dann zusammen in eine neue ZIP-Datei. Das gleiche Spiel wiederholst Du ein paar Runden. Die frisch erstellte ZIP-Datei ist winzig. Wenn Du diese ZIP-Datei dann per Mail verschickst und der Virenscanner auf dem Server des Empfängers ZIP-Dateien auspackt und auf solche Aktionen nicht vorbereitet ist, hast Du den Server damit abgeschossen. Aus den paar Bytes einer ZIP-Datei können schnell mal viele Terabytes werden. Beeindruckender Kompressionsfaktor, weil die Dateien leer sind. Sowas nennt man auch eine logische Bombe.

Woher ich das weiß:Berufserfahrung – ist mein Beruf

Das kommt darauf an, um was für Daten es sich handelt und welche Kompression verwendet wird.

Wenn es sich um eine normale Bilddatei, Musikdatei o.Ä. handelt, wird man eine solche Komprimierung nicht hinkriegen (vor allem nicht verlustfrei). Wenn du aber eine Textdatei hast, die einfach nur eine Billionen Mal das gleiche Zeichen enthält (aaaaaaaaaa[...]), hättest du eine Textdatei mit 1 TB (= 1000 GB) und kannst die problemlos auf ein paar Byte runter komprimieren, nämlich mit Run Length Encoding. Eine solche Datei könnte ich einfach komprimieren, indem ich sie zu "1000000000000a" ändere. Heißt dann quasi "1 Billionen Mal a". Damit hätte ich die Datei von 1TB auf 14 Byte komprimiert... Und die könnte ich mit einer ähnlichen Kompression theoretisch nochmal runter komprimieren auf sowas wie "1\112\01a" (9 Byte), was dann soviel heißt wie "1x die 1, 12x die 0 und 1x das a" (der Backslash wird als Escape-Sequenz verwendet). Man kann solche Spielereien also schon sehr weit treiben.

Sprich: Kommt drauf an. In Spezialfällen auf jeden Fall. Aber eine "normale" Datei wahrscheinlich nicht. Kompressionen von 70-80% sollten da das allerhöchste der Gefühle sein mit einem für die jeweilige Datei sorgfältig ausgewählten Algorithmus.

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung
Flips12345  11.03.2022, 18:20

Eine Normale Textdatei in der größe wirst du niemals auf den Wert runterschrauben können,auh eine Video oder eine reine DB in der Größe auch nicht. 50% Komprimierung sind Ok also den Wert Halbieren das schafft fast jedes Packprogramm.

0
Functional  11.03.2022, 18:23
@Flips12345

Klar geht das. Habe doch sogar vorgeführt, dass es mittels RLE funktioniert. Und das ist nicht nur Spielerei, sondern war eine zeitlang mal ein richtig beliebter "Spaß", mit solchen Sachen Archivbomben zu basteln (das Kompressionsformat bzip2 basiert beispielsweise auf Run Length Encoding). Sprich, Archive die nur ein paar Byte groß sind und extrahiert dann plötzlich keinen Platz mehr auf der Platte finden.

Aber wie ich oben sagte: Eine "normale" Datei, die nicht extra dafür konstruiert wurde, stark komprimiert werden zu können, wird man auch nicht um so einen hohen Faktor komprimieren können, das ist richtig.

0
Flips12345  11.03.2022, 18:27
@Functional

Ich hab mich mal mit Komprimieren befasst die Techniken die dabei verwendet werden sind häufig das Problem das sie auch hin und wieder Falsch Komprimieren und das encoden danach Probleme bereitet. Man kann versuchen auch möglichst kleine Dateien aus Großen zu Komprimieren das wird aber selbst mit RLE nicht gelingen. Es zeigt sich immer wieder das die Theorie die eine ,Praxis die andere Sache ist.

0

In der Zukunft vielleicht, aber Daten zu weniger als ihrer grundlegenden Bedeutung zu reduzieren ist schlichtweg unmöglich.

Woher ich das weiß:Berufserfahrung – IT-Consultant
Narrativium  11.03.2022, 18:00

Dateien kann man nicht reduzieren, aber Musik oder Videos, das geht halt dann auf die Qualität.

0

Nein ist nicht möglich

Die Kompression benötigt auch einen Algorythmus der entsprechend auch dort in der gepackten Datei Hinterlegt werden muss damit ds Packprogramm weis wie mit den Daten umzugehen sind. Kompressionen um den Faktor 50-60% gegenüber der Original Größe sind durchaus machbar. 70-80% sind schon schwieriger Realisierbar und um 90% fast unmöglich. Passende Packer gibt es unter Linux Distributionen einige die das können. Also z.B. eine 10 GB Große Datei auf 2 GB zu Packen ist schon schwierig , unmöglich zwar nicht aber schwierig. Mit Zip allein kriegst du das nicht hin :-)

Woher ich das weiß:Berufserfahrung – 30 Jahre in dem Bereich tätig