我在学校学习了 lempel ziv 压缩算法。
基本思想是维护一个常见的位序列表,并为每个位序列分配一个唯一的符号。
我想知道我们在整个文件系统中维护一个公共表的文件系统设计是否可行?
然后可以在多个文件中重复使用短代码。
这会节省更多空间吗?(因为 LZW 在更长的字符串上表现更好)或者我们是否会达到一个点,即我们的符号到序列表是如此之大,以至于符号键开始占用更多或等于它们正在替换的字节字符串的空间?
我在学校学习了 lempel ziv 压缩算法。
基本思想是维护一个常见的位序列表,并为每个位序列分配一个唯一的符号。
我想知道我们在整个文件系统中维护一个公共表的文件系统设计是否可行?
然后可以在多个文件中重复使用短代码。
这会节省更多空间吗?(因为 LZW 在更长的字符串上表现更好)或者我们是否会达到一个点,即我们的符号到序列表是如此之大,以至于符号键开始占用更多或等于它们正在替换的字节字符串的空间?
这没有多大意义,因为压缩表必须是静态的。否则,如果它改变了,那么用旧表压缩的文件就不能用新表解压缩。
如果压缩表是静态的,那么您就无法获得按文件压缩的优势。例如,一个文件可能有很多常见的英语单词。它的压缩表将包含那些常见序列的“快捷方式”。另一个文件可能是常见的法语单词,它的压缩表将填充那些常见的序列。但是,如果您在整个系统中有一个通用的压缩表,那么这两个文件都可能没有像样的压缩。
LZW 和类似方案为您提供的压缩的很大一部分是局部最优压缩。如果您想要一个系统范围的表,您将不得不放弃这一点。结果将是不那么令人印象深刻的压缩比。