Given a continuous scalar field f : X → IR where X is a topological space, a level set of f is a set {x ∈ X : f (x) = α} for some value α ∈ IR. The level sets of f can be subdivided into connected components. As α changes continuously, the connected components in the level sets appear, disappear, split and merge. The Reeb graph of f encodes these changes in connected components of level sets. It provides a simple yet meaningful abstraction of the input domain. As such, it has been used in a range of applications in fields such as graphics and scientific visualization.In this paper, we present the first sub-quadratic algorithm to compute the Reeb graph for a function on an arbitrary simplicial complex K. Our algorithm is randomized with an expected running time O(m log n), where m is the size of the 2-skeleton of K (i.e, total number of vertices, edges and triangles), and n is the number of vertices. This presents a significant improvement over the previous Θ(mn) time complexity for arbitrary complex, matches (although in expectation only) the best known result for the special case of 2-manifolds, and is faster than current algorithms for any other special cases (e.g, 3-manifolds). Our algorithm is also very simple to implement. Preliminary experimental results show that it performs well in practice.