Data structures 压缩相似但不完全相同字符串列表的最佳方法是什么?

Data structures 压缩相似但不完全相同字符串列表的最佳方法是什么?,data-structures,compression,data-compression,Data Structures,Compression,Data Compression,比如说,我有很多非常相似的字符串,但不是绝对相同的 它们可以或多或少地有所不同,但用肉眼可以看到相似之处 所有长度都相等,每个长度为256字节。字符串总数少于2^16 对于这种情况,最好的压缩方法是什么 更新(数据格式): 我不能分享这些数据,但我可以描述得非常接近现实: 想象一下符号(比如LOGO语言),它是一些设备在平面上移动和绘图的命令序列。例如: U12 - move up 12 steps D64 - move down 64 steps C78 - change drawing co

比如说,我有很多非常相似的字符串,但不是绝对相同的

它们可以或多或少地有所不同,但用肉眼可以看到相似之处

所有长度都相等,每个长度为256字节。字符串总数少于2^16

对于这种情况,最好的压缩方法是什么

更新(数据格式):

我不能分享这些数据,但我可以描述得非常接近现实:

想象一下符号(比如LOGO语言),它是一些设备在平面上移动和绘图的命令序列。例如:

U12 - move up 12 steps
D64 - move down 64 steps
C78 - change drawing color to 78
P1  - pen down (start drawing)
等等

这种语言的全部词汇都不超过英语字母表的大小

然后,字符串描述了一幅全图:“U12C6P1L74D74R74U74P0…”

现在想象一下,有一万名学生被要求借助这种语言绘制一些非常具体的图像:比如他们国家的国旗。我们将得到10K的弦,这些弦在同一时间都是不同和相似的

我们的任务是尽可能地压缩所有字符串


我的怀疑是,有一种方法可以利用这种相似性和字符串的公共长度,而哈夫曼不会明确使用它

你能告诉我们数据是什么吗?也许是DNA序列?像

AGCTGTCGAGAGAGAGGGTGGG

GGCTGTGCGAGGAGAGAGGGTGGG

CGCTGTGANGAGAGGGTGGG

NGCTGTGCGAGAGAGAGGCGGTGGG

GGCTGTGCGAGTAGAGCGGTGGG

?? 也许是,也许不是。无论如何,这里有两个层次或两种思考方式:

  • 哈夫曼编码:参考维基百科

  • 细线学:参考文献


  • 我认为解决你的问题很容易,但很难选择最好的方法。您可以使用和更多工具设计几种方法进行比较。

    因为您的固定宽度为256字节,并且是2的幂,所以我会尝试burrow-wheeler变换或移动到前面的算法,其大小可能是该大小的两倍。然后你可以试试哈夫曼密码。也许你可以尝试256字节的希尔伯特曲线,然后是bwt和mft?

    “字符串总数小于2^16。”这是一个很小的有界数字,这使你的工作非常简单:为什么不保留一个以前看到的所有字符串的查找表(哈希表)。然后,您可以将256字节的每一行转换为两字节索引,并将其转换为该查找表


    然后就有了一个16位整数序列。这些整数将包含这样的模式:“钢笔放下后,下一个命令有90%的几率开始画图”。如果数据包含这样的模式,那么您可以选择PPM。7-zip具有高质量的PPM实现。您可以使用GUI或cmd行选择它。

    如果或类似的东西有帮助,我可能会先看看。然后是。也许有更好的方法,但我们需要更多地了解数据及其使用方法。你说的“非常相似”是什么意思?在不知道更多信息的情况下很难选择正确的方法。@KarolyHorvath:我用数据描述更新了问题。我用数据描述更新了问题。我对Huffman的担心是它不会显式地利用字符串相似性。如果我错了,请纠正我。是的,有你的最新消息。正如@Alex所说,您可以尝试一些字符串学算法,如前缀树/后缀树/尝试树。