Using Vanilla K2 algorithm as the starter, modifies to include a pruning step per iteration, and constrains the number of parents per node to ensure a sparse graph. Additionally, does monte carlo restarts to find the best graph. Stores the intermediate required computations in a sparse format to save memory and scales almost linearly with the data size.