예제 #1
0
def clustersNeeded(nodes, bitLength):
    unionSet = UnionFind()
    unionSet.addNodes(nodes)
    for node in nodes:
        one_bit_difference = oneBitVaried(node, bitLength)
        for u in one_bit_difference:
            if u in nodes:
                unionSet.union(node, u)
            two_bit_difference = oneBitVaried(u, bitLength)
            for v in two_bit_difference:
                if v in nodes:
                    unionSet.union(node, v)
    return unionSet.cardinality, unionSet
예제 #2
0
def max_spacing_kcluster(nodes, edges, k):

    unionSet = UnionFind()
    unionSet.addNodes(nodes)
    edges = sorted(edges, key=itemgetter(2))
    i = 0
    min_edge = None
    while not unionSet.cardinality < k:
        min_edge = edges[i]
        i += 1
        u, v = min_edge[0], min_edge[1]
        x = unionSet.find(u)
        y = unionSet.find(v)
        if x != y:
            unionSet.union(x, y)

    return edges[i - 1][2]