检查多个属性之间的普通用户的算法

时间:2016-09-22 06:32:18

标签: java arrays algorithm

我的域名中有多个属性,并希望查找来自所有或多个属性的用户。

你可以使用这样的用例:

property 1: {User A,User B,User C,User D }
property 2: {User A,User B,}
property 3: {User A,User B,User C}

结果就是这样:

  

物业1,2,3有50%相同的用户
  物业1,2有50%相同的用户
  物业2,3有50%相同的用户
  物业1,3有75%的相同用户

这里的问题是用户数百万(超过2000万) 我不能使用标准方法来使用任何列表方法,因为大小会非常高。

你能帮我找到一个很好的算法来解决这个用例,这个算法足以保存这种数据。

1 个答案:

答案 0 :(得分:0)

为每个用户使用属性的位图。我们这里有3个属性,因此我们需要为每个用户提供大小为3位的位图

BITMAP : ABC => A = 0 or 1, B=0 or 1, C=0 or 1. 

User 1 -> 111
User 2 -> 111
User 3 -> 101
User 4 -> 100

现在,对于任何查询,将查询编写为位图,并查找哪些用户包含该位图。

例如,     查询:属性1,2     位图 - > 110

Only user 1,2 include this bitmap.
Ans = 2/4 = 50%.

如果属性数量不大(&lt; 64或<128),您可以使用整数等来加快计算速度。