2010-08-13 5 views
1

Je lance un site Web digg-like qui fait la promotion du contenu à la première page quand il atteint un certain nombre de voix. À l'heure actuelle, il ne prend pas en considération la date.simple algorithme de popularité (en utilisant la date de présentation et nombre de votes)

Je voudrais utiliser un algorithme simple qui utilise seulement le nombre de voix et la date indiquée pour déterminer si quelque chose doit être encouragée. Je ne veux pas que l'algorithme fasse quoi que ce soit de plus complexe (comme l'itération de toutes les dates de vote).

EDIT:

Si pas la formule quelque chose comme ceci:

30/(days between post date and now) * (vote count) = weighted vote 

Voici quelques scénarios qui semblent raisonnables pour mon site, ce qui indique que l'algorithme doit être plus clément pour les articles plus anciens (puisque les articles plus anciens sont moins visibles sur le site)

30/30 * 30 = 30 (30 jours, promu avec 30 votes)
30/5 * 15 = 90 (5 jours, promu avec 15 votes)
30/1 * 10 = 300 (1 jour, promu avec 10 votes)

Comment la formule peut-elle être modifiée afin que les 3 ci-dessus donnent près du même vote pondéré min requis pour la promotion?

+2

* Comment * voulez-vous prendre en compte la date? – jball

Répondre

0

Vous pouvez utiliser la différence entre la date courante et la date de soumission pour pondérer les votes.

(seuil - (jours entre la date de poste et maintenant))/seuil * (vote compte) = pondéré des votes

dans le code

$weightedVote = ($threshold - $daysOld)/$threshold * $voteCount; 

Cela aurait l'effet des postes d'éliminer plus que la seuil de considération. Par exemple, un vote de 10 jours aurait ses votes multipliés par 20/30.

+0

Voir moi éditer dans le message principal. Il semble que votre algorithme est sur la bonne voie, mais il semble que plus l'élément est ancien, plus le vote pondéré est élevé. J'ai donc apporté quelques modifications. Faites-moi savoir si j'ai mal compris quelque chose. – makeee

+0

Correction de mon poste, avait les numérateurs commutés. La méthode que vous fournissez dans la modification de votre question pourrait également fonctionner. Les cas que vous avez ajoutés ne sont pas liés de manière propre. – jball

0

Y at-il une raison pour laquelle vous attribuez un nombre arbitraire de contenu lorsque la condition est basée vote? Je veux dire - il semble que vous feriez mieux de peser les utilisateurs et leurs votes plutôt que de donner un morceau de contenu plus ou moins de votes en fonction de la date. Je écrit un logiciel de vote assez moyenne pour une entreprise qui a 10 000 $ + concours et notre algorithme considéré l'utilisateur et l'histoire de leur comportement, ce qui a fini par filtrer un grand nombre de votes de spam.

Cela semble complexe, mais il est pas vraiment.

Comme pour votre code d'équilibrage - Vous voulez que le contenu de 1 jour soit promu à 10 votes, où un article de 30 jours nécessite 30 votes? Ou voulez-vous dire 1 contenu de jour avec 10 voix est promu, tandis qu'un élément de 30 jours avec, disons, 6 voix pourrait être encouragée car il est plus âgé et moins susceptible d'être vu, si la tolérance de vote est réduit? Donc, supposons que la fonction daysDifference a renvoyé 26 et qu'il y avait 4 voix à l'origine. Cela se traduirait par 30/(30 - 26 = 4) = 7,4 + 4 Donc 11,4 votes au total. Pour un article d'un jour avec 10 votes, il faudrait lire 30/(30 - 1 = 29) = 1.03 + 10. Donc 11.03 au total. À peu près la même chose pour cet échantillon, mais elle varie pour les autres. Le signifie que tout contenu de plus de 30 jours n'est tout simplement pas pris en compte et que leurs votes sont égaux à la valeur réelle.

Je pourrais avoir juste mal compris vos besoins cependant.

Questions connexes