1. A computer-implemented method for finding the k shortest path lengths among paths between a source vertex and a destination vertex in a data graph composed of vertices interconnected by edges, a path being any series of vertices connected by edges along which path no single vertex is included more than once, the edges being attributed length values, and wherein k is an integer greater than or equal to two, the method including performing a principal process, the principal process comprising performing a computational procedure using a computer, the computational procedure comprising, for the or each vertex preceding a particular vertex, wherein a vertex is defined as preceding the particular vertex if the vertex is connected to the particular vertex by an edge and the vertex lies on one of the paths from a first vertex to the particular vertex: receiving a notification that the computational procedure has been completed for the preceding vertex; and calculating new path lengths for the particular vertex by adding the length value attributed to the edge from the preceding vertex to the particular vertex to each of the recorded k shortest path lengths from the first vertex to the preceding vertex; the computational procedure further comprising: maintaining a record of the k shortest path lengths calculated for the particular vertex; and after the new path lengths have been calculated for the or each of the preceding vertices, issuing a notification that the computational procedure has been completed for the particular vertex; wherein the principal process comprises performing the computational procedure with the source vertex as the first vertex and each vertex on a path from the source vertex to the destination vertex as the particular vertex; the method further comprising, concurrently with the principal process, performing one or more parallel processes, the or each parallel process comprising performing the computational procedure with a parallel process starting vertex as the first vertex and each vertex on a path from the parallel process starting vertex to the parallel process ending vertex as the particular vertex, wherein the parallel process starting vertex and the parallel process ending vertex are both on a path from the source vertex to the destination vertex.