Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Прокомментировать готовый код (формирование рейтинга)
 
 автор: Sturmvogel   (13.05.2011 в 00:35)   письмо автору
 
 

Есть код из CMS LiveStreet. Код отвечает за начисление рейтинга пользователю при голосовании за него. Нужен подробный комментарий по коду: что там делается (в плане зачем, почему логарифмы, почему именно такие формулы), почему примерно такие значения выбираются...

/**
      * Начисляем силу автору коммента, используя логарифмическое распределение
      */      
      $skill=$oUser->getSkill();
      $iMinSize=0.004;
      $iMaxSize=0.5;
      $iSizeRange=$iMaxSize-$iMinSize;
      $iMinCount=log(0+1);
      $iMaxCount=log(500+1);
      $iCountRange=$iMaxCount-$iMinCount;
      if ($iCountRange==0) {
         $iCountRange=1;
      }    
      if ($skill>50 and $skill<200) {
         $skill_new=$skill/70;
      } elseif ($skill>=200) {
         $skill_new=$skill/10;
      } else {
         $skill_new=$skill/130;
      }
      $iDelta=$iMinSize+(log($skill_new+1)-$iMinCount)*($iSizeRange/$iCountRange);

  Ответить  
 
 автор: cheops   (13.05.2011 в 12:08)   письмо автору
 
   для: Sturmvogel   (13.05.2011 в 00:35)
 

Для оценки рейтинга используется логарифмический рост. Если экспоненциальное распределение идет от нуля до бесконечности по нарастающей (сначала медленно, потом все быстрее и быстрее), то логарифмическое идет от нуля до бесконечности (сначала быстро, потом все медленее и медленее). Т.е. у новичков рейтинг растет быстро, а у тех у кого какой рейтинг повыше - медленее, и чем выше рейтинг, тем медленее он растет. Так как автора не очень удовлетворял слишком быстрый логарифмический рост на первых этапах, вероятно разброс был слишком велик, он ввел весовые коэффициенты, до 50 пунктов рейтинг делится на 130, от 50 до 200 на 70, а выше на 10. Т.е. рост получается более плавный, чем логарифмический, но все-равно имеет тенденцию логарифмического роста.

  Ответить  
 
 автор: Sturmvogel   (13.05.2011 в 17:19)   письмо автору
 
   для: cheops   (13.05.2011 в 12:08)
 

огромное спасибо!

  Ответить  
 
 автор: Sturmvogel   (20.05.2011 в 19:34)   письмо автору
 
   для: Sturmvogel   (13.05.2011 в 00:35)
 

а зачем нужен код:
if ($iCountRange==0) { 
         $iCountRange=1; 
      } 


если известно, что log(0+1) != log(500+1)?

  Ответить  
 
 автор: cheops   (20.05.2011 в 19:38)   письмо автору
 
   для: Sturmvogel   (20.05.2011 в 19:34)
 

Вы правы, вероятно это подстраховка, чтобы предотвратить от деления на 0, возможно от старого кода осталась.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования