2012-05-05 2 views
2

Я пытаюсь разработать простой алгоритм ранжирования для социальной сети, основанный на количестве получаемых и ожидающих отзывов и комментариев. Я читал о алгоритме краевого ранга, который использует facebook и пытался сделать что-то подобное, но я не могу понять это правильно.Социальный сетевой рейтинг Algorithm

Алгоритм должен показывать популярные сообщения сейчас.

Вот что я пробовал:

let nComments = (from c in db.Comments where c.postid == r.pageOwner.PostId select c).Count() 

let nReposts = (from s in db.Posts where s.RepostedFrom_postid == r.pageOwner.PostId select s).Count() 

let nLikes = (from u in db.UserPageRelations where u.Post_id == r.pageOwner.PostId select u).Sum(s => s.Rate) 

let TimeDecayFactor = ignoretime ? 1 : Math.Exp(-(DateTime.Now - Post.Date).TotalHours) 

let TotalEdge = (1 * nComments + 3 * nLikes + 2 * nReposts + 1) * TimeDecayFactor 

orderby (TotalEdge) descending 

ли кто-нибудь есть лучшее решение?

+0

В чем проблема с вашим алгоритмом? Структура формул выглядит разумно, есть ли у вас проблемы с параметрами? – Mathias

ответ

3

Вы можете использовать PageRank algorithm, чтобы обеспечить всем пользователям популярность. Этот алгоритм предназначен для ранжирования веб-сайтов с использованием ссылок между ними, но вместо ссылок вы можете использовать комментарии, реплики и предпочтения (с разными коэффициентами).

Если вы считаете, что PageRank трудно реализовать (из-за размера данных), вы можете использовать opic algorithm, который дает те же результаты, но требует значительно меньше памяти.