【发布时间】:2011-10-13 07:53:23
【问题描述】:
我有一个管理大量字符串的应用程序。字符串是类似路径的格式,有很多共同的部分,但没有明确的规则。它们不是文件系统上的路径,但可以这样考虑。 我显然需要优化内存消耗,但又不能牺牲很大的性能。
我正在考虑 2 个选项:
- 实现一个compressed_string 类来存储压缩数据,但我需要一个固定的字典,我现在找不到这个库。我不想要字节上的霍夫曼,我想要文字上的霍夫曼。
- 在字符串部分实现某种flyweight 模式。
这个问题看起来很常见,我想知道最好的解决方案是什么,或者是否有人知道针对此问题的库。
谢谢
【问题讨论】:
-
一种选择是让你的“路径”成为
boost::flyweight<std::string>的向量。 -
当我想到路径时,我通常会想到树。阻止我将其视为答案的原因是您说它们仅采用类似路径的格式,但是如何将整个数据结构实现为路径树或图形(如果它更复杂),并且仅存储实际数据的入口点和选择的路径?这样每个单词在图中只会出现一次,就是这样。当然,如果您的事件具有高度复杂的互连,则该图可能会变得难以管理,因此您应该看看这是否适合您的情况
-
如果你有大量的单词样本,你可以构建一个 LZ77 字典,并用它进行编码。
标签: c++ algorithm compression huffman-code