找到两组最大公共子集的高效算法?

dat*_*nny 2 algorithm set

每组都包含一堆校验和.例如:
设置A:
{
4445968d0e100ad08323df8c895cea15
a67f8052594d6ba3f75502c0b91b868f
07736dde2f8484a4a3af463e05f039e3
5b1e374ff2ba949ab49870ca24d3163a
}

设置B:
{
6639e1da308fd7b04b7635a17450df7c
4445968d0e100ad08323df8c895cea15
a67f8052594d6ba3f75502c0b91b868f
}

A和B的最大公共子集是:
{
4445968d0e100ad08323df8c895cea15
a67f8052594d6ba3f75502c0b91b868f
}

很多这些操作都将被执行,所以我正在寻找一种有效的算法来实现.谢谢你的帮助.

use*_*792 7

将其中一个集合放在散列表中并迭代另一个集合,丢弃不在散列中的元素.或者,对两者进行排序并同时迭代它们,如合并排序.

编辑:后一种方法创建一个排序结果.我应该补充说,如果这些集合具有广泛不同的大小并且它们被预先排序(比如因为你正在做一堆交叉),那么你可以通过使用"无界"二进制搜索来实现大幅提升性能.大名单.


Ign*_*ams 5

将它们粘贴在散列表中并记下确切的碰撞.