压缩包含Windows文件路径的字符串的高效算法

时间:2017-01-02 17:44:36

标签: string algorithm encoding compression decoding

我需要设计一种有效的方法来编码/解码包含Windows文件路径的多个字符串,例如具有有限长期存储的嵌入式系统上的C:\ Users \ Public \ Documents \ CompanyName \ ApplicationName \ VersionNumber \ Filename.ext。

目前,我们采用3个字符并将它们转换为单个唯一的整数,然后我们将其存储在其中一个寄存器位置。由于整个单元只有大约500个存储位置,因此很明显使用1个寄存器作为3个字符并不是一个好的解决方案。

应用程序工作流程:

  1. 用户在Windows PC上选择文件。
  2. 文件名按上述方式编码,并与其他信息(与文件名无关)发送到嵌入式系统到持久存储。
  3. 运营商选择何时执行步骤2中发送的信息。将来可能会很远。
  4. 嵌入式系统可以进行操作。
  5. 信息(包括已解码的文件名)将被发送回Windows PC。
  6. Windows PC使用操作结果更新文件。
  7. 注意:

    1. 处理能力(CPU)不是此混合系统(Windows PC和嵌入式系统)的约束。目前,我们在Windows PC上进行编码并在嵌入式系统上进行解码,但不一定是这种情况。
    2. Windows文件路径通常位于几个位置中的一个位置,但客户可以将默认文件位置更改为他们想要的任何位置,而且他们经常这样做。
    3. 修订后的算法很可能是用C ++实现的。
    4. 这种编码/解码需要考虑哪些好的算法?

      如果我忘记了任何重要细节,请告诉我。我试图尽可能彻底,但压缩绝对不是我的专长。

2 个答案:

答案 0 :(得分:0)

由于路径名中有许多类似的前缀,您可以使用trie。这节省了大量空间,并且检索速度也很快。互联网上有许多免费实现,实现一个也很简单。

这里有更多解释为什么这是有用的。让我们将每个文件路径视为单个字符串。许多字符串都有共同的前缀,例如字符串C:\Users\Public\Documents\将经常出现。即使你有像

这样的东西也许就是这种情况
C:\Users\Public\Documents\file1
C:\Users\Public\Documents\file2
.....
C:\Users\Public\Documents\file10000

然后整个前缀 C:\Users\Public\Documents\file 出现在许多文件中,我们不需要全部保存。但我们也不知道结构是怎样的(因为它是动态的而不是静态的)所以我们不能用硬代码来保存前缀 x 。但是,trie有助于在狭小的空间内保持整个琴弦。例如在每个非常庞大的文本搜索引擎中都有类似于trie的结构。因为它们不能保存所有行文本,因为它昂贵并且需要大量硬件,并且比这更重要,所以很难在数十亿行文本中找到特定文本。相反,他们使其结构像trie一样紧凑。

还有其他结构,如Huffman coding,这对于压缩巨大的字符串数据库相对有效,但在您的特定情况下,我认为您不仅仅是要压缩字符串,而是希望能够查询并快速找到相关信息。所以特里会有所帮助。

答案 1 :(得分:0)

将zlib与字典一起使用。更好的解决方案取决于了解嵌入式数据和程序的空间限制,更新数据和程序的成本,更新的频率和大小,更新到以前内容的相关性等。