Practice of Stanford Algorithms: Design and Analysis