大家好,阅读了这篇文章。请帮助我解决任务:在输入时,我有一个字节数组。我需要为压缩重复项检测重复的字节序列。有人能帮我找到可以接受的算法吗?
通常这种类型的问题伴随着CPU/内存的权衡。极端的解决方案是下面的(1(和(2(,你可以从那里改进:
- 高CPU/低内存-迭代所有可能的组合大小和字母并查找重复项(语句为2(
- 低CPU/高内存-创建所有所需组合和长度的查找表(哈希图(,遍历数组并添加到表中,稍后遍历表并找到候选
- 从这里开始改进-希望(2(中的想法具有更低的内存,减少查找表的大小以获得更多的命中率,并在以后处理更低的问题。要快速查找序列长度,请按长度创建单独的查找表
构建一个分支都是字节类型(256个分支(的树。
然后遍历数组,构建新的分支。在每个节点上,存储找到该序列的位置列表。
例如:假设您位于节点AC,40,2F
。树中的这个序列表示:;字节AC被发现在位置xx(其存储在该节点中的一个位置(。下一个字节40位于位置yy=xx+1
(以及其他字节(。字节2F位于zz=yy+1
位置
现在你想"压缩";仅一些大小的序列(例如5(。因此,穿过这棵树,注意深度5或以上。在节点的第5个深子节点中,您已经存储了在阵列中找到此类序列(或更大序列(的所有位置。这些位置是您有兴趣存储在压缩文件中的位置。