LZW压缩与压缩;词典 我正在研究C++中实现LZW压缩,而不确定最好的字典实现。

LZW压缩与压缩;词典 我正在研究C++中实现LZW压缩,而不确定最好的字典实现。,c++,dictionary,compression,lzw,C++,Dictionary,Compression,Lzw,哈希表是有意义的,但我不明白如何“重新分配”值。如果表已满,我需要能够开始覆盖以前的(最旧的)多字符字典条目。哈希表需要我跟踪这些,找到它,删除它,然后插入新的 有什么建议吗?您想要的实际上是两个数据结构: 哈希表 FIFO队列(用于丢弃旧表项) 如果您希望按照您的评论进行实践,您可以自己实现它们,或者使用stl/sgi/c++11实现(无序的_映射是通过sgi或c++11实现的实际哈希映射,FIFO队列是一个双链接列表,如std::deque) 其思想是,每当您想要丢弃最旧的字典条目时,您都会

哈希表是有意义的,但我不明白如何“重新分配”值。如果表已满,我需要能够开始覆盖以前的(最旧的)多字符字典条目。哈希表需要我跟踪这些,找到它,删除它,然后插入新的


有什么建议吗?

您想要的实际上是两个数据结构:

  • 哈希表
  • FIFO队列(用于丢弃旧表项)
  • 如果您希望按照您的评论进行实践,您可以自己实现它们,或者使用stl/sgi/c++11实现(无序的_映射是通过sgi或c++11实现的实际哈希映射,FIFO队列是一个双链接列表,如std::deque)


    其思想是,每当您想要丢弃最旧的字典条目时,您都会弹出队列中的最后一个元素,然后将其从哈希表中删除。

    您要查找的实际上是两个数据结构组合在一起:

  • 哈希表
  • FIFO队列(用于丢弃旧表项)
  • 如果您希望按照您的评论进行实践,您可以自己实现它们,或者使用stl/sgi/c++11实现(无序的_映射是通过sgi或c++11实现的实际哈希映射,FIFO队列是一个双链接列表,如std::deque)

    其思想是,每当您想要丢弃最旧的字典条目时,您都会弹出队列中的最后一个元素,然后将其从哈希表中删除。

    使用双重哈希和周期表清除

    如果您想要快速压缩和解压缩,那么有比LZW更好的选择,LZW已经非常过时了。您应该查看中的快速1级压缩(可能已经在您的机器上),以及

    除了出于教学或娱乐价值,没有理由编写新的LZW代码。它只具有历史意义。您还可以研究用于此类指令和娱乐的压缩实用程序。

    使用双哈希和周期表清除

    如果您想要快速压缩和解压缩,那么有比LZW更好的选择,LZW已经非常过时了。您应该查看中的快速1级压缩(可能已经在您的机器上),以及


    除了出于教学或娱乐价值,没有理由编写新的LZW代码。它只具有历史意义。您还可以研究压缩实用程序,用于此类指令和娱乐。

    在压缩和解压缩中必须使用两种不同的结构

    压缩时,应该使用,因为必须按内容而不是按键搜索词典

    解压时,您可以使用更传统的方式(即通过键)访问字典。
    然后可以使用任何关联数组结构。类似于哈希表,甚至是字符串的向量/deque(因为索引是连续的自然数)。

    在压缩和解压缩中必须使用两种不同的结构

    压缩时,应该使用,因为必须按内容而不是按键搜索词典

    解压时,您可以使用更传统的方式(即通过键)访问字典。
    然后可以使用任何关联数组结构。类似于哈希表,甚至是字符串的向量/deque(因为您的索引是连续的自然数)。

    您可以尝试使用以下两种字典实现:


  • 链表,内存使用量您可以尝试在中实现的两个词典:


  • 链表,内存使用是否有任何东西妨碍您使用
    std::map
    或其他标准map实现?好吧,有人只需问“libbzip2有什么问题?”:-)@ChristianStieber可能问题在于它不支持极快的LZW压缩?需要一些实践,而不是寻找使这太简单的东西(STL)。是否有任何东西妨碍您使用
    std::map
    或其他标准map实现?嗯,有人需要问一下“libbzip2有什么问题?”:-)@ChristianStieber可能有什么问题,它不支持极快的LZW压缩?希望进行一些练习,而不是寻找使其过于简单的东西(STL)。这应该是一个评论,而不是一个答案。我不能以同样的方式使用链接,也不能在评论中添加段落。参考压缩源代码及其策略,这是一个正确的答案,同时也是一个很好的建议。+1.哇,马克·阿德勒?酷。这应该是一个评论,而不是答案。我不能以同样的方式使用链接,也不能添加段落参考压缩源代码及其策略,这是一个正确的答案,同时也是一个很好的建议。