并查集简单实现

假设现在有个很简单的需求:想把每个只有一个元素的组或者类别合并到相邻(间隔为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


你可能感兴趣的:(python,数据结构)