There is a lot of confusion between hash- and encryption algorithms; I would like to understand:

 1. When do we use a hash algorithm and when do we use a cipher?
 2. How difficult it is to reverse hash and encryption functions?
 3. From the theoretical/mathematical perspective, what differentiates a hash or encryption algorithm?