私が持っているのは2つのテーブルです:
Users (id, name, lastname)
Friends (id1, id2)
これらの2つのテーブルを考えると、2人のユーザー間の距離を見つけることができる必要がありますd(id1、id2)
テーブル内の各ユーザー属性を保持するUserクラスを定義しました。
グラフを作成する必要があります。グラフのデータ構造は
Map<User, Set<User>>
ユーザーを一連の友達にマッピングします。グラフを作成するにはどうすればよいですか?db内のすべてのユーザーのIDをdbに照会しました。私は
int[] userids
次に、この配列のintごとに:
(1)Userオブジェクトを作成し、そのユーザーの属性をデータベースにフェッチします
(2)データベース内のFriendsテーブルにクエリを実行して、そのユーザーの友達のIDを取得します。
int [] friends
(3)このfriends配列の各intについて、dbにそのユーザーの属性をフェッチするUserオブジェクトを作成し、それに追加します。
Set<User> friends = new Set<User>();
質問1:これをより良くする方法について何かアイデアはありますか?500人のユーザーがいて、Friendsテーブルに20000のエントリがあることを考えると、これには永遠に時間がかかります...
ここでの大きな問題は、2人のユーザーがデータベースで「同じ」である場合、それらが私のグラフの異なるオブジェクトで参照されることです。
これは私の距離アルゴリズムを台無しにしています。ユーザーuから始めて、彼の友達{f1、f2}を取得し、graph.get(f1)とgraph.get(f2)を使用して友達の友達を取得したい場合、nullになります(問題に記載されている理由により) 、つまり、多くの異なるUserオブジェクトの1 dbユーザー)
与えられた1人のユーザー(1、John、Doe)がヒープ内の唯一のUserオブジェクトで参照されるように、グラフを作成する方法を見つける必要があります...
質問2:どのように??
どうもありがとう