【发布时间】:2018-02-20 10:05:28
【问题描述】:
我有 100,000 个固定长度的字节数组(长度为 150),我想将它们相互比较。我想识别我的 100,000 个字节数组中的任何一个,它们的 90% 以上的字节值位于同一位置,并且与一个或多个其他数组具有相同的值。
例如:
测试 1:A4343FBC2321FFD135423232EF.....(匹配2(100%)和3(96%))
2: A4343FBC2321FFD135423232EF.....(匹配 1 (100%) 和 3 (96%))
3: A4343FBC2321FFD135423232E1.....(匹配 1 (96%) 和 2(96%))
4: B465454ABC32321323AAAAAFFF .....(不匹配)
5: FED124343214343FE3232FE323.....(匹配 7 (100%))
6: FED12434321431121212121212.....(不匹配,相似度低于 90%)
7: FED124343214343FE3232FE323.....(匹配 5 (100%))
我想使用 C# 编写它并尽可能快地运行它,因为我可能需要它与超过一百万字节的数组一起运行以进行比较。
【问题讨论】:
-
所以写一些代码看看它是怎么回事..
-
堆栈溢出不能为你做功课......
-
祝您好运 - 您正在查看 7.5 x 10 次方 13 字节比较范围内的一百万个 150 字节数组。如果你每秒可以处理 100 万次比较,那将需要 2 年多的时间。
-
不幸的是,如果大多数数组有相似之处,你可能不得不做很多比较:对于每组
m数组,它们以某种方式聚集到同一个“桶”中,你需要O(m^2)比较以确认确切的百分比。最好的情况是很少有足够相似的数组,在这种情况下,您将能够断言它们在~O(n)中都不同。实际上,您想做什么? -
如果您能提供minimal reproducible example,那就太好了。
标签: c# arrays compare byte diff