distributed algorithm