2012-01-18 4 views
2

저는 Digg와 비슷한 웹 응용 프로그램을 개발 중이며 인기순으로 게시물을 정렬하는 데 필요한 알고리즘이 필요합니다. 예를 들면 : 첫 페이지에는 오늘 가장 인기있는 게시물을 원하고 며칠 전에는 투표 수를 얻지 못했습니다. 내 데이터베이스는 다음과 같습니다.투표 가중 알고리즘

upvote 필드는 bool입니다. 긍정적 인 경우 사용자가 위쪽 버튼을 클릭했음을 의미합니다.

내 테이블은 비어있어 수정할 수 있습니다.

어떤 도움을 내가 제대로 이해하면, 당신은 투표의 값이 그것은 시대에 반비례 할

+0

왜 [KISS] (http://en.wikipedia.org/wiki/Keep_it_simple_stupid)가 아니고 마지막 * X 시간 내에 득표 수에 따라 순위를 매기십니까? 아니면 시간 지연 필터를 사용하십시오 .... – wallyk

답변

2

개인적으로 나는 더 정교한 접근 방식을 선호합니다. 일반적인 아이디어는 cron 프로세서가 매 5 분마다 실행되어 사용자가 언급 한 기준과 사용자 기반 standard deviation을 기반으로 각 엔티티의 인기를 계산하여 명백한 득표 랠리를 없애고 자신의 소셜 서클에서 콘텐츠를 향상시키는 것입니다.

투표 연령을 고려한 좋은 아이디어에 대한 로슨의 대답을 살펴보십시오. 그러나 명성, 연공 서열 등을 기준으로 사용자의 체중을 적용하는 것이 유용 할 수 있다고 생각하십시오.

불행한 점은 간단하지 않다는 것입니다. 대부분의 웹 프로그래밍보다 게임을 더 재미있게 느낄 수 있지만 게임에 대한 모든 기본 심리를 고려하면 시스템이 매우 시간 소모적 인 프로세스가 될 수 있으며 Digg 자체에서 일하지 않는 한 염두에 두지 않을 수도 있습니다. 심각한 시작. 여기

는 php.net 표준 편차입니다 : http://php.net/manual/en/function.stats-standard-deviation.php

나는 그렇게 대답이 점에 더 생각했지만 : z-Scores(standard deviation and mean) in PHP

코드 샘플 좋을 수 있지만, 우리가해야 할 데이터의 일부를 필요 그렇다면 심지어 이것은 복잡해질 수 있습니다. 그러나 그것은 확실히 재미 있습니다. 특히 코드가 시스템을 조작하려는 사람들을 찾을 때 특히 그렇습니다.

5

을 이해할 수있을 것이다. 투표 수가 많으면 많을수록 인기 지수가 더 낮아집니다.

투표를 인기 단위 (PU)로 변환하고 단순 투표가 아닌 PU를 합산하는 간단한 방법이 있습니다. 우레탄 건설은 1/(투표 일 또는 시간으로 표시)만큼 간단하게 만들 수 있습니다. 하루 전의 투표는 1 PU의 가치가 있고 2 일의 투표는 절반의 가치가 있습니다.