2016-09-22 4 views
0

私のドメインに複数のプロパティがあり、すべてのプロパティまたは複数のプロパティで使用されているユーザーを検索したい。複数のプロパティ間で共通のユーザーを確認するアルゴリズム

あなたはユースケースは次のようであることができます。

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%の同一ユーザー

ここで問題となるのは、ユーザーが数百万人(2,000万人以上)です。
サイズがかなり高いので、リスト方法を使用するための標準的なアプローチは使用できません。

この種のデータを保持するのに十分速いこのユースケースのための良いアルゴリズムを見つけることができますか?

+0

プロパティの最大カウントとは何ですか? –

答えて

0

各ユーザーのプロパティのビットマップを使用します。ここでは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 

ための3ビットサイズのビットマップを必要とします。

例えば、 クエリ:プロパティ1、2 ビットマップ - プロパティの数は(< 64または< 128)大でない場合は> 110

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

、あなたはより速く計算に整数などを使用する場合があります。

関連する問題