Je construis une application Web avancée de partage d'images. Vous pouvez vous attendre à ce que vous attendez, les utilisateurs peuvent télécharger des images et d'autres que d'autres peuvent commenter, de voter dessus et de la favoriser. Ces événements détermineront la popularité de l'image, que je capture dans un champ "karma". P>
Maintenant, je souhaite créer un système de page d'accueil ressemblant à Digg, montrant les images les plus populaires. C'est facile, puisque j'ai déjà le score de karma pondéré. Je trie simplement sur cela descendant pour montrer les 20 images les plus précieuses. P>
La partie qui manque est Questions spécifiques: P>
Je ne demande pas à la communauté de construire cet algorithme, à la recherche de conseils :) p>
4 Réponses :
Vous pouvez simplement calculer un champ de type "karma ajusté" qui prendrait le temps en compte: Vous pouvez alors calculer et trier par cela directement dans votre requête, ou vous pouvez faire C'est un champ réel dans la base de données que vous mettez à jour via un processus nocturne ou quelque chose. Personnellement, j'irais avec un processus nocturne qui la met à jour car cela facilitera probablement plus facilement l'algorithme un peu plus sophistiqué à l'avenir. P> P>
Pour votre première question, j'irais avec la méthode légèrement plus compliquée. Vous voudrez des "tous les favoris de tous les temps" dans le mélange. Mais ne partez pas par le temps seul, passez par le nombre de vues réelles em> l'image a. N'oubliez pas que tout le monde ne va pas se connecter et voter, mais cela ne rend pas l'image moins populaire. Une image âgée de deux ans avec 10 votes et une vue de 100 000 vues est évidemment plus importante pour les personnes qu'une image âgée de 1 an avec 100 votes et une vue 1K. P>
Pour votre deuxième question, oui, vous voulez une sorte de mise en cache sur votre page d'accueil. C'est beaucoup de questions pour produire le point d'entrée sur votre site. Cependant, beaucoup comme, votre type de site aura tendance à dessiner du trafic vers des pages internes via des moteurs de recherche. Alors essayez de regarder / optimiser vos requêtes partout. P>
Pour votre troisième question, allez par des facteurs autres que le temps (c'est-à-dire que # de vues) aide à vous assurer que vous avez toujours une page complète et dynamique. Je ne suis pas sûr de la pagination sur la page d'accueil, que des personnes menant aux balises ou à des recherches puissent être une meilleure stratégie. p>
Ceci, j'ai trouvé cela, le Regardez sur ceci: http: // www. dérivante.com/2009/09/01/PHP-Content-ratant-Confidence/ P>
Au deuxième exemple, il explique comment utiliser le temps comme un "facteur de fraîcheur". P> limité inférieur de Wilson score la confiance d'un intervalle de confiance pour un paramètre Bernoulli code> p>
J'irais avec une fonction qui diminue le "karma effectif" de chaque article après une quantité de temps donnée. Ceci est un peu comme la méthode d'Eric.
Déterminez la fréquence à laquelle vous souhaitez que le "karma effectif" soit réduit. Multipliez ensuite le karma par un facteur de mise à l'échelle basé sur cette période. P> où pourcentage_decrease code> est déterminé par votre fonctionnement. Par exemple, vous pouvez faire P> percentage_decrease = min(1, number_of_hours_since_posting / 24)
Il y a cette formule Bernoulli pour trier les choses que vous pouvez modifier pour prendre du temps comme paramètre. En ce moment, je ne me souviens pas du nom, peut-être que quelqu'un va. (C'est un long nom long)