跪求大佬指点! 10GB+数据查重最优解,哪种算法能扛住?

137 天前
 shil949

目前遇到一个大数据查重问题:需要处理 10GB 的二元序列数据,通过逐比特移动方式,查找 k 比特( k=64,65,..., 80 )重复序列出现的次数。尝试过逐比特移动的暴力方法,效率太低。求大佬支招推荐最优算法思路!

1520 次点击
所在节点    算法
12 条回复
txx
137 天前
什么场景,数据大概长成什么样子? 10gb 感觉并不多啊
shil949
137 天前
@txx 就是随机数文件,判断生成的文件质量好不好,重码多不多,10 个 G 从比特角度来说就很大了
yinmin
137 天前
不需要移动比特,K 比特转化成 byte[]+最后一个字节的 mask ,按照字节查找;然后 k 比特右移一位转化成 byte[]+第一个字节的 mask+最后一个字节的 mask ,按照字节查找;然后 k 比特再右一位… 查找 8 次即可

考虑到数据缓存效率,8 组 byte+mask 查找可以同步推进查询。 (具体代码可以让 gpt 写)
irrigate2554
137 天前
@shil949 如果只是要判断质量的话我感觉不如用某个压缩算法压缩后看压缩率,如果压缩率小就说明重复度低,信息熵大,随机质量好。
shil949
137 天前
@xausky 因为我们这个硬性指标就是要查出 K 重码的个数,你说的这个是通过另外一个纬度去判断质量好坏
shil949
137 天前
@yinmin 好的 感谢大佬支招,我 try 一下
shil949
137 天前
@yinmin 大佬,我看了你这个思路,原谅我才疏学浅,不是很懂,你前面说的不需要移动比特,后面又说要移动比特,为什么查找 8 次即可,按照字节查找是怎么查找思路呢
harlen
137 天前
一定长度的比特流重复的次数是吧,你把一定长度数据的组合固定(二禁止变固定长度进制)出来, 最后数据流就小了,然后抽象成 abcd 就变成了 多少进制字符串查重, 字符串查重那就简单了。
shil949
137 天前
@harlen 但是要考虑逐比特移动的,每次只移动一位构造出来的二进制序列在全局的重复个数呢,我理解你这个只是二进制转化成一种形式去查重而已
yinmin
137 天前
@shil949 #7 移动的不是 10GB 的数据比特,是 K 比特,把 K 比特移动一位,然后按字节
yinmin
137 天前
接#10 然后把移位后的 K 比特转化成 byte[]+第一个字节 mask+最后一个字节的 mask ,按字节去检索 10GB 数据

(把我的回复发给 gpt4.1 或者 claude sonnet3.7 ,AI 会给出代码和详细实现细节的)
shil949
137 天前
@yinmin 好的 大佬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1127118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX