Mal*_*ker 1 algorithm data-structures
给定多个项目列表,找到具有匹配项目的列表.
这个问题的强力伪代码如下所示:
foreach list L
foreach item I in list L
foreach list L2 such that L2 != L
for each item I2 in L2
if I == I2
return new 3-tuple(L, L2, I) //not important for the algorithm
Run Code Online (Sandbox Code Playgroud)
我可以想到许多不同的方法 - 创建列表列表并在搜索其他候选列表后删除每个候选列表 - 但我想知道是否有更好的算法?
我正在使用Java,如果这对您的实现有所影响.
谢谢
Map<Item,List<List>>.您现在为每个项目都有一个Map条目,告诉您该项目出现在哪个列表中.
该算法约为O(N),其中N是列表的数量(确切的复杂性将受到Map实现的好坏的影响).我相信你的算法至少是O(N ^ 2).
警告:我正在比较比较次数,而不是内存使用情况.如果您的列表非常庞大并且大部分都是非重复项目,那么我的方法创建的地图可能会变得太大.