내 웹 사이트의 사용자에 대한 순위 시스템을 만들고 싶습니다. 순위는 회원이 된 기간, 작성한 게시물 수 등과 같은 여러 요소에 의해 결정됩니다. 모든 데이터 항목 또한 나에 의해 결정되는 "가중치"로 나뉘어져 더 많은 실제 사용자 활동 - 회원 수만큼 1 일 게시물이 중요하지 않습니다. 계량 후 모든 통계가 함께 합산됩니다.대수 눈금을 사용하여 데이터 크기 조정 및 정규화
그런 다음 합계를 정규화하여 1에서 20까지의 순위에 할당해야합니다. 일부 구성원의 활동 점수는 약간이고 일부 베테랑 구성원의 점수는 수천입니다. I 데이터를 정규화하고,이 기능을 갖는 1-20 등급 범위로 다운 스케일링함으로써이를 수행
function normalize($userTotal, $minOriginalRange, $maxOriginalRange, $minNewRange, $maxNewRange){
return $minNewRange + ((($maxNewRange - $minNewRange) * ($originalValue - $minOriginalRange))/($maxOriginalRange - $minOriginalRange));
}
이것은 보통과 같이 호출된다 정규화 (getUserTotal(), 0, getHighestTotalOfAllMembers() 1 , 20);
그래서 내가 그 결과로이있어, 키는 순위이고 값은 해당 순위 얻을 것이다 회원 번호 :
Array
(
[1] => 7418
[2] => 1918
[3] => 289
[4] => 102
[5] => 62
[6] => 28
[7] => 21
[8] => 14
[9] => 1
[10] => 8
[11] => 6
[12] => 5
[13] => 1
[14] => 1
[17] => 1
[20] => 1
)
을 당신은 저와 매우 순위가 엄청난 수의 사용자가 볼 수 있듯이 중급자와 중위자를 배정받는 사람은 거의 없습니다. 로그 랭킹을 사용하여 할당 된 순위를 계산하여이 문제를 해결하고 싶으므로 하위 계층의 순위를 올리기 쉽고 더 높은 순위로 갈수록 어려워집니다. 그렇게하면 더 균등하게 퍼져 나가야하며 더 많은 사용자가 중간에 순위를 매길 수 있습니다.
그러나 나는 이것에 접근하는 방법을 모르지만, 나는 로그 스케일을 사용한 적이 없으며 항상 내 코드에서 간단한 산법에 의존했습니다.