За последние 24 часа нас посетили 54447 программистов и 1778 роботов. Сейчас ищут 1008 программистов ...

Рулетка

Тема в разделе "Прочие вопросы по PHP", создана пользователем Crystallon, 4 окт 2010.

  1. Crystallon

    Crystallon Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    61
    Симпатии:
    0
    Доброго времени суток.
    Есть определенный массив чисел, например от 1 до 150. Функцией рандом мы берем случайное число из этого массива.
    Выше написанное это почти то что мне нужно, но все же далеко не оно.
    Допустим этот массив чисел хранится в MySQL таблице, и для каждого числа заранее установлен шанс выпадения.
    Как мне выбрать число от 1 до 150 учитывая то что у некоторых чисел шанс выше а у некоторых ниже?
    Заранее спасибо за помощь.
     
  2. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    структуру таблицы в студию

    ЗЫ: у всех чисел в рулетке одинаковый шанс выпадения, иначе уже наебалово
     
  3. Crystallon

    Crystallon Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    61
    Симпатии:
    0
    Ну ок, рулетка наебалово)
    Структура любая, например
    +----+------+
    | id | rate |
    +----+------+
    | 1 | 15 |
    | 2 | 15 |
    | 3 | 20 |
    | 4 | 25 |
    | 5 | 25 |
    +----+------+
    Где id - числа от 1 до 150, а rate - шанс
    З.Ы. Не подумайте что эт я наебать хочу, я не рулетку делаю, прост так тему назвал :D
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    просто. берешь в массив пихаешь пятнадцать единиц, пятнадцать двоек, двадцать троек, двадцать пять четверок и пятерок.

    потом аррей_ранд =)

    и грызешь по одному в цикле пока не надоест.
     
  5. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    А я вот не понял - тебе именно рандом нужен или всё же первое из списка с большим шансом?
     
  6. Crystallon

    Crystallon Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    61
    Симпатии:
    0
    Ясно, не совсем то что нужно, но зато теперь кое что прояснилось в моей запутанной голове, т.ч. думаю дальше сам додумаю). Спасибо.
     
  7. Crystallon

    Crystallon Активный пользователь

    С нами с:
    7 фев 2010
    Сообщения:
    61
    Симпатии:
    0
    Мне нужен именно рандом, но при этом зависящий от этих шансов)
     
  8. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Crystallon
    O_O
     
  9. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    igordata
    Не вариант. Что, если рейты измеряются трехзначными числами? Будет трата памяти.

    Crystallon
    1. Находишь сумму всех рейтов
    2. Нормализуешь все рейты (каждое значение делишь на сумму всех значений)
    3. Для каждого рейта получаешь его вес - значение от 0 до 1
    4. Генерируешь случайное число от 0 до 1, допустим N
    5. Пробегаешь по списку, и для каждого значения либо принимаешь это число (если его рейт больше или равен N), либо отбрасываешь и переходишь к следующему, при этом нужно от N также отнять отброшенный рейт

    Например:

    В таблице 3 значения: орел, ребро, решка. Рейты: 490, 20, 490.

    1. Сумма = 1000 (490+20+490)
    2. Нормализуешь: 490/1000, 20/1000, 490/1000
    3. Получешь веса: 0.49, 0.02, 0.49
    4. Генерируешь случайное число от 0 до 1, например, N = 0.5
    5a. Первый вариант (орел) не подойдет (0.49 < N), отнимаем его от N (N становится равным 0.01) и отбрасываем
    5б. Второй вариант (ребро) подходит (0.02 >= N), то есть результат броска = ребро :)
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Я бы посоветовал погуглить на тему ТВИМС про моделирование дискретных распределений.
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    насчет отнять от N я не понял =(
     
  12. karlozzz

    karlozzz Активный пользователь

    С нами с:
    24 окт 2010
    Сообщения:
    430
    Симпатии:
    0
    Адрес:
    Y-OLA
    Dagdamor, самый разумный вариант, только я бы посоветовал случайное число от 0 до суммы и бежать по массиву, вычитая вероятность, пока 0 не будет, а то при работе с дробными еще и округление требуется учитывать, зачем лишний раз геморой себе устраивать, и, да, не понимаю людей, которые не могут написать подобный скриптик и хотят замутить рулетки))) Вы не конкурентоспособны, современный бизнес азартных игр - оч сложная математика, учитесь, прежде чем пытаться занять нишу))
     
  13. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    igordata, перечитай ещё раз пост и проследи внимательно за алгоритмом :)))
    Вообще не моё дело, конечно, но просто странно, что ты не понял. Даже я и то понял после первого прочтения :) Всё что нужно для понимания там написано :)