Доброго времени суток. Есть определенный массив чисел, например от 1 до 150. Функцией рандом мы берем случайное число из этого массива. Выше написанное это почти то что мне нужно, но все же далеко не оно. Допустим этот массив чисел хранится в MySQL таблице, и для каждого числа заранее установлен шанс выпадения. Как мне выбрать число от 1 до 150 учитывая то что у некоторых чисел шанс выше а у некоторых ниже? Заранее спасибо за помощь.
Ну ок, рулетка наебалово) Структура любая, например +----+------+ | id | rate | +----+------+ | 1 | 15 | | 2 | 15 | | 3 | 20 | | 4 | 25 | | 5 | 25 | +----+------+ Где id - числа от 1 до 150, а rate - шанс З.Ы. Не подумайте что эт я наебать хочу, я не рулетку делаю, прост так тему назвал
просто. берешь в массив пихаешь пятнадцать единиц, пятнадцать двоек, двадцать троек, двадцать пять четверок и пятерок. потом аррей_ранд =) и грызешь по одному в цикле пока не надоест.
Ясно, не совсем то что нужно, но зато теперь кое что прояснилось в моей запутанной голове, т.ч. думаю дальше сам додумаю). Спасибо.
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), то есть результат броска = ребро
Dagdamor, самый разумный вариант, только я бы посоветовал случайное число от 0 до суммы и бежать по массиву, вычитая вероятность, пока 0 не будет, а то при работе с дробными еще и округление требуется учитывать, зачем лишний раз геморой себе устраивать, и, да, не понимаю людей, которые не могут написать подобный скриптик и хотят замутить рулетки))) Вы не конкурентоспособны, современный бизнес азартных игр - оч сложная математика, учитесь, прежде чем пытаться занять нишу))
igordata, перечитай ещё раз пост и проследи внимательно за алгоритмом )) Вообще не моё дело, конечно, но просто странно, что ты не понял. Даже я и то понял после первого прочтения Всё что нужно для понимания там написано