Rocha–Thatte cycle detection algorithm

Rocha–Thatte algorithm[1] is a distributed algorithm in graph theory for detecting cycles on large-scale directed graphs based on the bulk synchronous message passing abstraction. This algorithm for detecting cycles by message passing is suitable to be implemented in distributed graph processing systems, and it is also suitable for implementations in systems for disk-based computations, such as the GraphChi,[2] where the computation is mainly based on secondary memory. Disk-based computations are necessary when we have a single computer for processing large-scale graphs, and the computation exceeds the primary memory capacity.

Overview

The Rocha–Thatte algorithm is a general algorithm for detecting cycles in a directed graph G by message passing among its vertices, based on the bulk synchronous message passing abstraction. This is a vertex-centric approach in which the vertices of the graph work together for detecting cycles. The bulk synchronous parallel model consists of a sequence of iterations, in each of which a vertex can receive messages sent by other vertices in the previous iteration, and send messages to other vertices.

In each pass, each active vertex of G sends a set of sequences of vertices to its out-neighbours as described next. In the first pass, each vertex v sends the message (v) to all its out-neighbours. In subsequent iterations, each active vertex v appends v to each sequence it received in the previous iteration. It then sends all the updated sequences to its out-neighbours. If v has not received any message in the previous iteration, then v deactivates itself. The algorithm terminates when all the vertices have been deactivated.

For a sequence (v_1, v_2, \ldots , v_k) received by vertex v, the appended sequence is not forwarded in two cases: (i) if v = v_1, then v has detected a cycle, which is reported; (ii) if v = v_i for some i \in {2, 3, \ldots , k}, then v has detected a sequence that contains the cycle (v = v_i, v_i+1, \ldots , v_k, v_k+1 = v); in this case, the sequence is discarded, since the cycle must have been detected in an earlier iteration; to be precise, this cycle must have been detected in iteration k - i + 1. Every cycle (v_1, v_2, \ldots , v_k, v_k+1 = v_1) is detected by all v_i, i = 1 to k in the same iteration; it is reported by the vertex \min\{v_1, \ldots , v_k\}.

References

  1. Rocha, Rodrigo Caetano; Thatte, Bhalchandra (2015), Distributed cycle detection in large-scale sparse graphs (PDF), Simpósio Brasileiro de Pesquisa Operacional (SBPO)
  2. Kyrola; Blelloch; Guestrin (2012), GraphChi: Large-scale graph computation on just a PC
This article is issued from Wikipedia - version of the Wednesday, November 11, 2015. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.