目前遇到一个大数据查重问题:需要处理 10GB 的二元序列数据,通过逐比特移动方式,查找 k 比特( k=64,65,..., 80 )重复序列出现的次数。尝试过逐比特移动的暴力方法,效率太低。求大佬支招推荐最优算法思路!
![]() |
1
txx 103 天前
什么场景,数据大概长成什么样子? 10gb 感觉并不多啊
|
3
yinmin 103 天前 via iPhone
不需要移动比特,K 比特转化成 byte[]+最后一个字节的 mask ,按照字节查找;然后 k 比特右移一位转化成 byte[]+第一个字节的 mask+最后一个字节的 mask ,按照字节查找;然后 k 比特再右一位… 查找 8 次即可
考虑到数据缓存效率,8 组 byte+mask 查找可以同步推进查询。 (具体代码可以让 gpt 写) |
![]() |
4
irrigate2554 103 天前
@shil949 如果只是要判断质量的话我感觉不如用某个压缩算法压缩后看压缩率,如果压缩率小就说明重复度低,信息熵大,随机质量好。
|
![]() |
7
shil949 OP @yinmin 大佬,我看了你这个思路,原谅我才疏学浅,不是很懂,你前面说的不需要移动比特,后面又说要移动比特,为什么查找 8 次即可,按照字节查找是怎么查找思路呢
|
8
harlen 103 天前
一定长度的比特流重复的次数是吧,你把一定长度数据的组合固定(二禁止变固定长度进制)出来, 最后数据流就小了,然后抽象成 abcd 就变成了 多少进制字符串查重, 字符串查重那就简单了。
|
11
yinmin 103 天前 via iPhone
接#10 然后把移位后的 K 比特转化成 byte[]+第一个字节 mask+最后一个字节的 mask ,按字节去检索 10GB 数据
(把我的回复发给 gpt4.1 或者 claude sonnet3.7 ,AI 会给出代码和详细实现细节的) |