有哪些复杂度比 n^2 要小的来计算给定的 n 个序列中重复的系列的好的算法

Hashing 撞桶就是一样的Hashing的复杂度算O(1)全部检查一遍就是 O(n)如果序列的维度很高,就用局部敏感哈希算法(LSH),先撞桶,然后再计算距离,简单的就是计算欧式距离。不过因为是完全重复,那么应该可以设置好Hash算法,通过完全撞桶的方式来判断。
■网友
根据问题需求可以有不同的方法。 可以将每一个序列映射(例如Hashing)到一个可排序集合(例如一个数字集合),然后排序映射后的集合,在排序的结果中一样的序列就在一起了。预处理复杂度O(NL),排序O(NlogN),其中L是序列的最大长度,N是序列个数。例如:以前的序列是s1,s4,s3,s4,无论你采用什么方法,将其一一对应到4个不同的数字,假设是1,4,3,4,也就是f:s1-\u0026gt;1, f:s4-\u0026gt;4, f:s3-\u0026gt;3, f:s4-\u0026gt;4,然后排序,就得到了1,3,4,4,这样我们就能反推出对应的原序列是s1,s3,s4,s4,发现其中有两个s4了。如果是英文字符串之类的,可以建立一个Trie树,每次添加过程中就知道以前是否添加过了。不过如果量比较大的话,可能空间占用较多。
■网友
参照simhash


    推荐阅读