We consider the minimal k-grouping problem: given a graph G = (V, E) and a constant k, partition G into subgraphs of diameter no greater than k, such that the union of any two subgraphs has diameter greater than k. We give a silent self-stabilizing asynchronous distributed algorithm for this problem in the composite atomicity model of computation, assuming the network has unique process identifiers. Our algorithm works under the weakly-fair daemon. The time complexity (i.e. the number of rounds to reach a legitimate configuration) of our algorithm is O nD k where n is the number of processes in the network and D is the diameter of the network. The space complexity of each process is O((n + n false ) log n) where n false is the number of false identifiers, i.e., identifiers that do not match the identifier of any process, but which are stored in the local memory of at least one process at the initial configuration. Our algorithm guarantees that the number of groups is at most 2n/k + 1 after convergence. We also give a novel composition technique to concatenate a silent algorithm repeatedly, which we call loop composition. * This is a revised version of the conference paper [6], which appears in the proceedings of the 18th International Conference on Distributed Computing and Networking (ICDCN), ACM, 2017. This revised version slightly generalize Theorem 1.
PreliminariesA connected undirected network G = (V, E) of n = |V | processes is given where n ≥ 2. Each process v has a unique identifier v.id chosen from a set ID of non-negative integers. We assume that |ID | ≤ O(n c ) holds for some constant c, thus, a process can store an identifier in O(log n) space. By an abuse of notation, we will identify each process with its identifier, and vice versa, whenever convenient. We call a member of ID a false identifier if it does not match the identifier of any process in V .We use the locally shared memory model [8]. A process is modeled by a state machine and its state is defined by the values of its variables. A process can read the values of its own and its neighbors' variables simultaneously, but can update only its own variables. An algorithm of each process v is