假设现在有个很简单的需求:想把每个只有一个元素的组或者类别合并到相邻(间隔为1)的组中,来减少组的数量。
这时,第一个想到的解决方案就是用并查集:维护一个字典,首先列出所有单个元素的组,键和值都是组的编号。若某组相邻的组也只有单个元素,则将该组的值更新为相邻组号,重复查找直到找不到为止。下面直接上python代码,因为比较简单,也就不加注释了。
val_one = {k: v for k, v in grp.iteritems() if v == 1}
union_set = {k: k for k in val_one}
for k in union_set:
if (k + 1) in union_set:
union_set[k] = k + 1
ind_map = {}
for k in union_set:
val = union_set[k]
while val != union_set[val]:
val = union_set[val]
ind_map[k] = val