Semi-Join Algorithms for Distributed Database Machines