Communication Complexity : and Applications