Welche Zeichen können in den Strings denn vorkommen? Ggf. kann durch eine geschickte Kodierung daraus immernoch eindeutige aber deutlich kürzere Binärcodes erzeugen.
Beispiel:
Wenn in den Strings nur die Großbuchstaben A-Z und die Ziffern 0-9 vorkommen, muss pro Zeichen eigentlich nur ein Wert von 0-35 abgespeichert werden, nicht von 0-255 (AnsiChar) oder gar mehr. Damit könnte man 256/36 = > 7 Zeichen in einem Byte abspeichern.
Das ist auf so viele Arten und Weisen einfach nur falsch:
- Der Zeichenvorrat beträgt nicht 256. Wenn man von ANSI ausgeht, liegt die Anzahl der Zeichen bei etwa 215 (unter Abzug von neun sichtbaren nicht erlaubten Zeichen und 32 Steuerzeichen).
- Der Zeichensatz von NTFS ist aber UTF-16. Da man UTF-16-Codepunkte nicht beliebig aneinanderreihen kann, muss man stattdessen UCS-2 verwenden. Von dessen 63.488 Zeichen zieht man dann wieder die 41 ab. Ich würde mal vermuten, dass man auch hier nicht alle Zeichen verwenden kann, aber es geht um die Größenordnung.
- Und das schlimmste: Man kann nicht einfach dividieren. Korrekt wären also für ANSI lb(215)/lb(36), was nur ganz knapp unter 1,5 ergibt. Für UCS-2 ergibt sich mit lb(63447)/lb(36) erwartungsgemäßg gut das Doppelte (ca. 3,09). Von deiner 7 ist man sehr sehr weit entfernt.
(Edit: Natürlich kann man statt lb auch ln oder lg rechnen. lb ergibt aber am meisten Sinn, da man so sofort erkennt, dass es hier um die Entropie (in Bit) geht, die sich damit ergibt. Und das Verhältnis der Entropien ist ja anschaulich das, worum es dummzeuch ging.)