За последние 24 часа нас посетили 16805 программистов и 1642 робота. Сейчас ищут 1078 программистов ...

ГПСЧ с заданной вероятностью выпадения

Тема в разделе "Прочие вопросы по PHP", создана пользователем onyksis, 20 июл 2015.

  1. onyksis

    onyksis Новичок

    С нами с:
    20 июл 2015
    Сообщения:
    2
    Симпатии:
    0
    Добрый день, дорогие форумчане. Я не специалист в php програмировании, поэтому решил обратиться к вам. У меня есть сайт, и мне надо что бы при заходе на страницу с php кодом выдавалось случайное число к примеру от 1 до 10 (но по сайту так же надо будет от 100 до 1000 или от 500 до 5000 с шагом 100). Но выдача была не равномерная, а к примеру от цифры 1 до 5 60%, цифра 6 10%, цифра 7 10%, цифра 8 10%, цифра 9 и 10 5%. Но я не знаю как это реализовать, весь интернет перешерстил уже :(. Прошу кто добрый и может помочь, написать php код. Можно если не сложно с пометками, но я в случае чего разберусь сам, если лень делать пометки :).

    Добавлено спустя 13 минут 39 секунд:
    В помошь специалистам, нашел идею описанную где то. Может быть вам это как то поможет.

    — Нам нужен генератор псч, скажем от 0 до 99 с варьируемой вероятностю выпадения чисел.
    — Заводим массив из 10000 элементов. Все числа заносим в массив по 100 раз.
    — Выбирая из массива число со случайным (через обычный гпсч) индексом от 0 до 9999, мы получим число от 0 до 99 с равной вероятностью.
    — Для уменьшения вероятности выпадения числа нужно уменьшить количество этих чисел в массиве. Например, если число «8» будет входить в массив не 100, а 50 раз — то его вероятность выпадения будет вдвое ниже, чем остальных.
    — Для увеличения вероятности выпадения числа расширяем массив и добавляем ещё таких чисел.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Результат:
    Код (PHP):
    1.   '1-5' => 600, // ~60%
    2.   6 => 99, // ~10%
    3.   7 => 91, // ~10%
    4.   8 => 99, // ~10%
    5.   9 => 52, // ~5%
    6.   10 => 59, // ~5%
    7. )
    Код:
    Код (PHP):
    1. <?php
    2. function myrandom()
    3. {
    4.     $r = rand(1, 100);
    5.     
    6.     switch ($r) {
    7.         case ($r <= 60):
    8.             return rand(1, 5);
    9.         break;
    10.         case ($r <= 70):
    11.             return 6;
    12.         break;
    13.         case ($r <= 80):
    14.             return 7;
    15.         break;
    16.         case ($r <= 90):
    17.             return 8;
    18.         break;
    19.         case ($r <= 95):
    20.             return 9;
    21.         break;
    22.         case ($r <= 100):
    23.             return 10;
    24.         break;
    25.     }
    26. }
    27.  
    28. // Для проверки
    29. $arr = array(
    30.     '1-5'=>0,
    31.     '6'=>0,
    32.     '7'=>0,
    33.     '8'=>0,
    34.     '9'=>0,
    35.     '10'=>0,
    36. );
    37.  
    38. for ($i = 1; $i <= 1000; $i++) {
    39.     $tmp =  myrandom();
    40.     if($tmp <= 5) {
    41.         $arr['1-5']++;
    42.         continue;
    43.     }
    44.     $arr[$tmp]++;
    45. }
    46.  
    47. echo '<pre>';
    48. var_export($arr);
     
  3. onyksis

    onyksis Новичок

    С нами с:
    20 июл 2015
    Сообщения:
    2
    Симпатии:
    0
    Спасибо огромное!