在项目中碰到这样的问题:
互联网用户每天会访问很多的网页,假设两个用户访问过相同的网页,说明两个用户相似,相同的网页越多,用户相似度越高,这就是典型的CF中的user-based推荐算法。
算法的原理很简单,只要两两计算用户的相似性,针对每个用户,获取最相似的K个用户即可。
但是在实际的工程上,假定用户规模在亿的规模N,计算复杂度为N*N,即使是分布式,也是非常可怕的复杂度。
考虑一下,我们是不是真的需要计算所有用户之间的相似性?其实我们只需要计算和用户A最相似的K个用户即可,如果已知B和A一定不相似,那么就没有必要计算,这就是LSH的思想。
LSH:local sensitive hash,局部敏感哈希,关注可能相似的pair,而非所有的pair,这是lsh的基本思想。
举个例子:
用户user1 访问过 url1,url2
用户user2访问过