1
013231 2013-01-30 03:58:43 +08:00 1
不知你的用戶群規模有多大.
在不太大的情況下, 可以把所有聯系人信息裝入內存, 每個客戶的聯系人都是一個集合. 想尋找一個客戶"可能认识的朋友", 就用他的聯系人集合和其他每個人的聯系人集合做並運算, 如果某個並集中的條目數足夠大, 就認為這兩人是"可能认识的朋友". |
2
yyai3 2013-01-30 09:27:04 +08:00
算法:MinHash--http://en.wikipedia.org/wiki/MinHash
论文:Google News Personalization: Scalable Online Collaborative Filtering |
3
sqjs86 2013-01-30 09:41:59 +08:00
同意 1L, 可以看一下 redis
|
4
HowardMei 2013-01-30 10:20:07 +08:00 1
可能Bloom Filter更合适,有现成的库:
https://github.com/jaybaird/python-bloomfilter 可以把Hash改得更简单点提高性能: https://github.com/jaybaird/python-bloomfilter/blob/master/pybloom/pybloom.py 可用 http://code.google.com/p/pyfasthash/ 里的MurmurHash替代hashlib |
7
humiaozuzu OP |
8
stackpop 2013-01-30 13:27:34 +08:00
bloom filter可以
|
9
HowardMei 2013-01-30 14:22:50 +08:00
@humiaozuzu http://zacharyvoase.com/2012/08/31/m2mbloom/ 这个和你的需求几乎一模一样,实现方法写得很详细(for Postgres)。性能提高了近30倍,不错了,你可以试试看和 @013231 的方法比,哪个更适合。
|