Computational techniques for studying protein-protein interactions