1.
Slope One は非常に単純化されたものですが、おそらく使用できます。Facebook はニュースフィードに EdgeRank を使用しています。
2.
あなたのコメントによると、言語、フレームワークなどに関する要件/好みは何ですか? あなたがオープンで、しゃれを許すなら、推奨事項をお勧めします.ASP.Net MVC 3 Webプロジェクトをお勧めします。
データの設定は、"Person"
またはクラスの設定の問題になります (これは、友人の"Friend"
推薦が必要であることを前提としています。グループ、ページ、アプリなどでこれを簡単に行うことができます)。次に、ランダム化された名前、プロパティなどを使用して、そのクラスのインスタンスをいくつか (多ければ多いほど良い) 作成します。Google でランダム ジェネレーターを検索すると、何かが見つかるはずです。または、自分でコードを記述します。これらのいずれも実行できない場合は、ここに返信してください。そのためのコードをいくつかまとめます。
次に、ネットワークの小規模な表現を設定します。つまり、「人」間の関係を定義します。これを行うにはいくつかの方法がありますが、シナリオでは、他のオブジェクトへの参照を保持する各Person
オブジェクトに"Friends"
プロパティを与えることでおそらくうまくいくでしょうPerson
。
アルゴリズムの実装については、もう少し皆さんにお任せします (これは学術的なプロジェクトなので、皆さんに学習させなければなりませんよね?)。
あなたが私に示した実装を使用して、次のようにクラスを設定できます。
public static class Rating
{
public static double RatingBetween(Person a, Person b)
{
double rating = 0;
foreach (Person friend in a.Friends)
{
if(b.Friends.Contains(friend))
{
rating ++;
}
}
}
}
これは非常に単純な例ですが、基本的には次のように機能します: 人物 a のすべての友人に対して、人物 b にもこの友人がいる場合、人物 a と人物 b の間の評価は少し良くなります。これに他のシナリオを追加する必要があります (たとえば、友人 a と友人 b が同じ都市に住んでいる場合は 5 の評価を追加し、同じ学校、仕事などには 5 を追加します。その後、辞書を設定できます (または、次のような、特定の人の評価の何か):
Dictionary<Person, double> FriendDict = new Dictionary<Person, double>();
foreach (Person a in personYouAreRecommendingFriendsFor.Friends)
{
FriendDict.Add(a,Rating.RatingBetween(personYouAreRecommendingFriendsFor, a))
}
これで、評価のテーブルが設定されました。あとは、見つけた実装を使用して実行できます。
進行中に正しい方向にさらに微調整が必要な場合は、喜んでお手伝いさせていただきます。ここにコメントを返すだけです。
参考文献
幸運を!