I had a great time working on the Spanning Tree Problem for CS6250 this weekend. It’s a problem to identify an optimal tree that connects all subnets in a network. The algorithm we work through is iterative and distributed — each switch in the network has a view only of its own neighbours. But the switches pass messages to each other showing their own knowledge of the state of the world, and somewhat miraculously the whole thing converges to a nice tree structure. It was a pretty fun, occasionally frustrating problem.