【发布时间】:2016-05-02 17:07:34
【问题描述】:
我有一个很长的字节数组,例如:
Byte[] bytes = {90, 80, 63, 65, 70 ...};
大约 20-30 Mb(理论上)。有没有一种快速的方法来检查这个数组是否包含另一个数组,例如:
Byte[] small = {63, 80, 75, 77};
首先,我需要按照它们在小数组中定义的顺序查找字节。其次,我需要在另一个数组中找到数组,而不是小数组的任何字节。 谢谢大家的进步。
【问题讨论】:
-
你能说得更具体点吗?你的意思是确切的顺序还是那些数字,在任何地方的任何顺序?
-
您是否在寻找 sequence,即这四个字节必须按该顺序出现?如果是这样,这通常被称为
substring search(即使它不涉及您正在使用的任何语言的字符串),您应该能够为它查找相当多的算法。 -
您希望它们以相同的顺序显示吗?如果顺序无关紧要,那么您可能可以对初始数组进行排序,然后对候选者进行二进制搜索。如果顺序很重要,那么有各种算法可以帮助您。在我看来,Aho Corasick 可能是你情况下最快的。
-
您可以尝试
IsSubsetOf方法,如this answer 中所述。