gpt4 book ai didi

Delphi TStringList 包装器实现即时压缩

转载 作者:行者123 更新时间:2023-12-03 15:57:30 25 4
gpt4 key购买 nike

我有一个用于在 TStringList 中存储许多字符串的应用程序。这些字符串在很大程度上彼此相似,并且我想到可以即时压缩它们 - 即以唯一文本片段加上对先前存储的片段的引用的混合形式存储给定的字符串。字符串列表(例如完全限定的路径和文件名列表)应该能够被大大压缩。

有谁知道实现此功能的 TStringlist 后代 - 即提供对未压缩字符串的读写访问,但将它们存储在内部压缩,以便 TStringList.SaveToFile 生成压缩文件?

虽然您可以通过在每次访问之前解压缩整个字符串列表并在之后重新压缩来实现此目的,但它会不必要地缓慢。我正在寻找对增量操作和随机“查找”和读取有效的东西。

TIA罗斯

最佳答案

我认为没有任何免费可用的实现(无论如何我都不知道,尽管我已经在商业代码中编写了至少 3 个类似的构造),所以你必须自己推出。

马塞洛关于按顺序添加项目的评论非常相关,因为我想您可能希望在添加时压缩数据 - 快速访问已经与添加的条目相似的条目,可以提供更好的性能而不是必须在整个集合中查找“最适合的条目”(相似性压缩所需)。

您可能想阅读的另一件事是“绳索”——概念上与字符串不同的类型,I already suggested to Marco Cantu一会儿回来。以每个“twine”的下一个指针为代价(由于缺乏更好的词),您可以连接字符串的各个部分,而不保留任何重复的数据。主要问题是如何检索可以组合成新“绳子”的部分,代表原始字符串。一旦这个问题得到解决,您就可以随时将数据重建为字符串,同时仍然具有紧凑的存储空间。

如果您不想走“绳索”路线,您还可以尝试称为“前缀缩减”的方法,这是一种简单的压缩形式 - 只需使用前一个字符串的索引和后一个字符串来开始每个字符串。应被视为新字符串前缀的字符数。请注意,您不应该递归得太远,否则访问速度会受到很大影响。在一个简单的实现中,我对索引执行了 mod 16,以建立开始前缀缩减的条目,这平均节省了大约 40% 的内存(这个数字完全取决于数据)当然)。

关于Delphi TStringList 包装器实现即时压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3237414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com