Distributed algorithms and computational algorithm design