查找重复字节序列的算法



大家好,阅读了这篇文章。请帮助我解决任务:在输入时,我有一个字节数组。我需要为压缩重复项检测重复的字节序列。有人能帮我找到可以接受的算法吗?

通常这种类型的问题伴随着CPU/内存的权衡。极端的解决方案是下面的(1(和(2(,你可以从那里改进:

  1. 高CPU/低内存-迭代所有可能的组合大小和字母并查找重复项(语句为2(
  2. 低CPU/高内存-创建所有所需组合和长度的查找表(哈希图(,遍历数组并添加到表中,稍后遍历表并找到候选
  3. 从这里开始改进-希望(2(中的想法具有更低的内存,减少查找表的大小以获得更多的命中率,并在以后处理更低的问题。要快速查找序列长度,请按长度创建单独的查找表

构建一个分支都是字节类型(256个分支(的树。
然后遍历数组,构建新的分支。在每个节点上,存储找到该序列的位置列表。

例如:假设您位于节点AC,40,2F。树中的这个序列表示:;字节AC被发现在位置xx(其存储在该节点中的一个位置(。下一个字节40位于位置yy=xx+1(以及其他字节(。字节2F位于zz=yy+1位置

现在你想"压缩";仅一些大小的序列(例如5(。因此,穿过这棵树,注意深度5或以上。在节点的第5个深子节点中,您已经存储了在阵列中找到此类序列(或更大序列(的所有位置。这些位置是您有兴趣存储在压缩文件中的位置。

最新更新