1. A method of parallelizing an operation, the method comprising: assigning a partition of an input item set to each of a plurality of slave processes; receiving at each of the plurality of slave processes a set of data items that fall within the partition assigned to the slave process; producing a plurality of first results by causing each slave process of the plurality of slave processes to perform a first operation on the set of data items received by the slave process; communicating to each slave process information that reflects the first results produced by one or more other slave processes of the plurality of slave processes; and producing a plurality of second results by causing each slave process to perform a second operation based on said information and the data items received by the slave process.