For massive graphs, or graphs where the edges can only be implicitly generated and not persistently stored, the algorithm needs \(k\)  passes over the edges and the edges can be provided in arbitrary order. The memory usage is bounded by \(O(n \log n)\) , thus the algorithm works in the semi-streaming model of computation [1]} where the space usage must be \(O(n \text{ polylog }n)\) .
