Ich frage mich, wie DEFLATE Blockgröße bestimmt (ich meine, in zlib.)Wie bestimmt DEFLATE (zlib) die Blockgröße?
In RFC 1591 folgende Erklärung gibt: „Der Kompressor einen Block endet, wenn es feststellt, dass wäre ein neuer Block mit frischen Bäume beginnen nützlich oder wenn die Blockgröße den Blockpuffer des Kompressors füllt. "
Es ist nicht genug für mich. Ich möchte wissen, welche Bedingung benötigt wird, um den aktuellen Block zu beenden und den neuen Block im Detail zu starten.
Wie entscheidet DEFLATE, ob frische Bäume nützlich sind oder nicht? Was ist die Größe des Kompressorblockpuffers?
Scheint mir eine triviale Optimierung am Anfang des nächsten Blocks, nimm die Unterschiede zwischen alter und neuer Codelänge und multipliziere diese mit den entsprechenden Symbolhäufigkeiten. Wenn die Summe kleiner als die Größe des Endcodes plus der Größe der neuen Tabelle ist und die neue Tabelle keine Codes mit der Länge Null verwendet, verschieben Sie sie und geben Sie den neuen Block mit der alten Tabelle aus. – sh1