This document compares and analyzes three clock synchronization algorithms: Cristian's algorithm, Berkeley algorithm, and Network Time Protocol (NTP). Cristian's algorithm uses a centralized time server model where processes synchronize with a single server. The Berkeley algorithm does not use an accurate time source; it obtains an average time from participating computers. NTP enables clients across the internet to synchronize to UTC despite message delays using statistical techniques. The document provides details on how each algorithm works, including message exchanges, calculating offsets, and handling delays. It discusses using Java RMI for implementing and testing the algorithms on distributed processes.