LZW 压缩和字典
LZW compression & dictionary
我正在研究在C++中实现LZW压缩,但不确定最好的字典实现。
哈希表是有意义的,但我不明白如何"重新分配"值。如果表已满,我需要能够开始覆盖以前(最旧的)多字符字典条目。哈希表需要我跟踪这些,找到它,删除它,然后插入新的。
有什么建议吗?
如果你想要快速压缩和解压缩,那么有比LZW更好的选择,LZW已经过时了。您应该看看zlib(可能已经在您的机器上了)、LZO和lz4中的快速1级压缩。
除了教学或娱乐价值之外,没有任何理由编写新的LZW代码。它只具有历史意义。您还可以研究压缩实用程序,用于此类指导和娱乐。
在压缩和解压缩中必须使用两种不同的结构。
压缩时,您应该使用Trie,因为您必须按内容而不是按关键字搜索字典。
在解压缩时,您可以用更传统的方式访问字典,即按键访问。然后可以使用任何关联数组结构。比如哈希表,甚至字符串的矢量/数据集(因为索引是连续的自然数)。
您要查找的实际上是两个数据结构放在一起:
- 哈希表
- FIFO队列(用于丢弃旧表项)
如果你想按照你的评论寻求实践,你可以自己实现它们,或者使用stl/sgi/c++11实现(unordered_map是通过sgi或c++11的实际哈希图,FIFO队列是一个双链表,比如std::deque)。
其想法是,每当您想要丢弃最旧的字典条目时,都会弹出队列中的最后一个元素,然后将其从哈希表中删除。
您可以尝试在lzws中实现的两个字典:
- 链表,内存使用情况<=327kb
- 稀疏阵列,内存使用量<=3350万
相关文章:
- C++中高效的大型稀疏块压缩线性方程
- 嵌入方指针压缩已禁用
- C++使用整数的压缩数组初始化对象
- 在C++中将函数压缩为两种方式
- 在C++中使用LZ4压缩目录
- 使用C++进行运行长度解压缩
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- C++中的MSD基排序(字典序)
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- C++ 如何将数组值解压缩为函数参数
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- C++中是否有任何函数等同于python中字典的get函数?
- 浏览压缩文件与游览解压缩它们
- 直接 2D 呈现到命令列表和打印:图片压缩
- 如何在 OpenCV c++ 中压缩 TIFF 格式的图像?
- 替代在python中制作邻接列表与图形问题的字典?(如 C++ 中的 vector<vector<int&g
- 如何在C++向量中解压缩多个值
- 具有非常快速的内>数据查找和快速反向查找(搜索/插入/删除数据)的压缩字典?
- LZW 压缩和字典