Collaborative Recommendations: Algorithms, Practical Challenges And Applications