![]() |
|
![]() ![]() ![]() |
|
Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Доброго времени суток. Сижу вот размышляю над темой. Мне надо написать рандомизер, но какбы "правильный" рандомизер. Т.е. какова суть задачи?
есть для примера n игроков. И есть количество игр: например 100. Процент выигрыша в каждой игре для каждого учасника равно 25%(не меняется никогда); Мне надо написать рандомизер, который будет делать победителя какогото из игроков в каждой игре, у которого будет шанс ровно 25%, а не извните на слове тупой корейский рандом типа random(1,4); При етом если етих 4 игрока сыграли 100 игр подряд, то процент выыиграшей среди победителей тоже не превышало 25% от количества сыграных игр. Т.е. все влажівается в 2 пункта: 1. В игре надо сделать шанс 25% (чтобы реально был шанс 25%) 2. После сыгранных n игр общий процент выиграшей для каждого из игроков тоже не превышал 25%. Кто с таким сталкивался ? Расскажите пжлста хоть суть алгоритма как сделать подобный рандомизер. Спасибо. -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
_Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Что-то я не понял в Ваших условиях.
как-то непонятно. Видимо, вероятность выигрыша в каждой игре 25%?
Тоже непонятно. Если 4 играли какое-то количество игр и ни один не выиграл больше, чем 25% игр, то кто выиграл остальные игры? Ведь 25%*4=100%. Или возможны еще и ничьи? Мне кажется здесь и у Вас какое-то непонимание. Если игры выигрываются именно случайным образом, то теоретически возможно что один игрок выиграет первые же 5 миллионов игр подряд. Понятно, что вероятность такого везения чрезвычайно низка, но она есть. Поэтому гарантировать именно 25% при "правильной" рандомизации нельзя (только при неправильной ![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
нет, немного не так _Y_ , смотри.. например, есть 4 игрока под номерами 1,2,3,4.
И так, ниже приведена таблица:
Т.е. В каждой игре шанс 25% выигрыша именно для каждого игрока и в каждой игре выигрывает только один игрок. Т.е. надо придумать какойто алгоритм, который даст в результате действительно 25%-ый шанс выигрыша, так как банальный rand(1,4) не катит, ибо ето не 25%, хотя и цифр всего 4. Тоесть первую игру например победил игрок №1. Во второй №3, в третьей опять №1, в четвертой №4 и так далее..... В итоге после 100 сыгранных игр (не учитывая 25%-ый шанс выигрыша в каждой игре) каждый из четырех должен выиграть не более 25 раз, т.е. (25%). Если ето было 200 игр, то не более 50 выиграшей для каждого из участников... Ну по сути мне надо только алгоритм расчета победителя в каждой игре отдельно с таким то шансом. а дальше я уже сделаю сам. Иными словами у меня проблема сделать "правильный" шанс выигрыша в игре.... З.ы. Если не понятно то могу обьяснить еще по другому, даже с примерами более корректными) Спасибо Это сообщение отредактировал(а) Zorak - 14.5.2013, 21:56 -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
Первое предложение противоречит остальным двум. Вы допускаете, что при 4 играх распределение будет: 2, 0, 1, 1 Но для 100 игр у вас уже поровну: 25, 25, 25, 25 Если хоть один раз случится первое, то из 100 игр распределение уже будет: 26, 24, 25, 25 Если вам нужны одинаковые шансы для каждого числа, то вам нужен рандом с равномерным законом распределения. По умолчанию у всех языков функция rand должна соответствовать именно равномерному распределению, хотя на практике это далеко не всегда так, чаще распределение нормальное, а не равномерное. Существуют методы приведения нормального к равномерному. Можете поискать (я этой темой не занимался, просто, по этому не в курсе о подробностях). А вообще, попробуйте сделать rand(1,4) пару миллиардов раз и сделайте табличку с результатами и посмотрите. Если разница получится менее половины погрешности (1% в вашем случае), то это можно считать вполне удовлетворительным. Это сообщение отредактировал(а) Arantir - 14.5.2013, 23:28 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
Zorak |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
погрешность +-1, даже +-2 в принципе допустима, но это не основная моя задача. Основная как раз организовать нахождение победителя среди четырех игроков за одну игру, но сделать ето нужно с процентным шансом, в данном случае с 25%. Т.е. надо чистой воды контрольный рандом)
А вот этим поинтересуюсь обьязательно, спасибо огромное. Это сообщение отредактировал(а) Zorak - 14.5.2013, 23:40 -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
||||
|
|||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
Кстати mt_rand в PHP очень неплох:
24999547, 24999210, 25000434, 25000809 Максимальное отклонение всего 0,00007% -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
хм..... -=))))) З.Ы, По сути на PHP и буду реализовывать данный алгоритм) Это сообщение отредактировал(а) Zorak - 15.5.2013, 00:02 -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
Arantir |
|
||||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
А еще можно немножко схитрить...
![]() -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||
|
|||||
Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Хах... ну да.... готовый подконтрольный алгоритм генерации случайности хДДД
-------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Составьте массив последовательных результатов с нужным итогом. Затем используйте любой алгоритм случайного перемешивания.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Что-то мне кажется, что Вашим условиям соответствует не рандомайзер, а, наоборот, некий "выравниватель". На огромных выборках любой качественный генератор случайных чисел будет работать, а вот на маленьких наверняка будут случае с выигрышами превышающими 25%.
В общем, возможно, Вам нужен не рандомайзер, а алгоритм "принудительной социальной справедливости" ![]() ![]() Можно сделать как-то так. 1. Имеем N игроков. 2. Играется одна игра с равной вероятностью выигрыша для каждого игрока 100%/N (25% при четырех игроках). 3. Берем число игроков, имеющих наибольшее число выигрышей (М) и присваиваем им вероятность выигрыша 0%. Вероятность делим между остальными (100%/(N-M)) и играем следующую игру. 4. Считаем новое M. Если M<N переходим к №3. Если нет заканчиваем игры или переходим к №2. Таким образом в каждой игре с номером кратным количеству игроков число выигрышей будет подровнено. Но ничего случайного в этой схеме нет - случайность только в играх, некратных числу игроков. Если непонятно изложил, могу код на Java написать. Это сообщение отредактировал(а) _Y_ - 15.5.2013, 14:33 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Рандомайзер тут вообще не при чём - ему надо получить строго детерминированный результат.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Zorak |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Ну по сути да, просто в точку.
Нет, почему, все понятно изложил, догнал... и нет, писать не надо, реализацию я сам сделаю, просто мне было необходимо ЧТО мне делать ))). А алгоритм, который ты описал, мне подходит в прнципе на все 100%... По сути в каждой игре отдельно получается действительно рандом, но в конечном итоге все "справедливо")))... Спасибо огромное. Считаю тему закрытой.... Добавлено через 1 минуту и 17 секунд
Он мне нужен в конце, что при описанном алгоритме от _Y_ вполне получается. -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
||||||
|
|||||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Совсем уж детерминированный не получится, т.к. существуют количествa проведеных игр не-кратныe количеству игроков. Но для кратных чисел игр действител'но никакой рандомизации - все по-честному, всегдa всем поровну ![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
_Y_, согласно условию, у него должно получиться
следовательно, любое некратное количество делает задачу нерешаемой. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |