这些行如下
A1;B1;C1
A2;B2;C2
如何找到一组唯一字符串并按以下标准将其分为非相交组:如果两行在一列或多列中具有非空值的重合,则它们属于同一组。例如,行
1,2,3
4,5,6
1,5,7
属于一个群组。 最初我想通过三个HashSet(对于每一列)快速查看字符串是否包含在唯一值列表中,然后将其添加到已分组行的列表或唯一行列表中。但是这种情况下的算法存在性能瓶颈:如果要合并组,则必须遍历列表中的每个组。具有大量合并的大量数据(> 100万条记录)的算法工作缓慢。如果合并很小(大约数千),它会很快运作。我抓住了这个地方的卡住,不知道如何优化这个瓶颈,或者是否有必要使用其他数据结构和算法。有人能告诉我挖掘的方向。对于此事的任何想法,我将不胜感激。
答案 0 :(得分:0)
我建议采用以下方法:
Set<String> ungroupedLines
,最初包含所有行。在您将这些行分配给组时,您将删除这些行。Map<String, Collection<String>>
- s,每列一个。Collection<Collection<String>> result
。ungroupedLines
不为空:
Collection<String> group
。group
。ungroupedLines
。ungroupedLines
中删除,然后将其添加到group
,然后再进行递归。group
添加到result
。