|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.01.2011, 22:16 | #1 |
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
вероятность выпадения в процентах
Предположим у меня есть массив мне надо сделать так, чтоб вероятность выпадения того, или иного элемента была столько-то процентов как это организовать? Пока пришло в голову создать еще структуру(или обект) и хранить в ней промежуток с какого по какой(элемент один вероятность 5% 1-5, элемент два вероятность 9% 6-15...), сгенирировать рандомное число и проверять если оно больше стольких-то но меньше стольких-то то(это я буду смотреть в стрктуре) показываю это ну так в циле... мб можно еще как-то можно?
|
24.01.2011, 23:07 | #2 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Все структуры это тоже объекты . Но эт так.
Делаешь класс, хранящий в себе массив пар объектов и вероятностей (std:air) и делаешь там метод randomObject(). Также можно перегрузить оператор [] для лёгкости обращения с таким классом. В таких задачах лучше вводить "вес". Сложно объяснить словами, поэтому приведу пример: если у A вес 1 и у B вес 1, вероятность их выпадения равна. Если у A вес 1, а у B вес 2, то вероятность выпадения B — 66%. Если вес у A — 1, у B — 1, а у C — 2, то вероятности будут 25%, 25%, 50%. Это удобно тем, что алгоритмы легки в написании. Суть ясна? Могу написать тебе такой класс, если хочешь...
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
25.01.2011, 17:14 | #3 |
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
спасибо, но я не нашел randomObject и мне хочется понять как это делается в принципе, а не в какой либо библиотеке
|
25.01.2011, 17:26 | #4 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Что значит не нашёл? Я просто сказал, как стоит назвать метод, который предлагается написать . Никакой библиотеки . Просто сказал название теоретического метода.
То есть так: у нас есть 5 элементов, вес у 1-3 по одному, у 4 и 5 по 2. Общий вес — 1+1+1+2+2=7. Вероятности выпадения у 1го, 2го и 3го элементов — по 1/7. У 4го и 5го элементов — по 2/7. Генерируем случайное число от 1 до 7. Если это 1, то возвращаем 1й элемент, 2 - 2й, 3 - 3й, 4 или 5 — 4й, 6 или 7 — 5й. Теперь-то понял?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
25.01.2011, 20:49 | #5 |
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
Не понял чем это принципиально отличается от изложенного мной в первом посте
|
25.01.2011, 20:49 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Obey-Kun +1
Ещё посмотрите темку - вывод рандомного числа с большей или меньшей вероятностью (там, правда, пример на Delphi, но общую идею можно уловить) |
25.01.2011, 20:54 | #7 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Я тебе алгоритм предложил. Ещё 1 способ:
Скажем, еслу у объектов 1-3 вес по 1, а у 4-5 по 2, то можно воспользоваться временным массивом указателей: &1 &2 &3 &4 &5 &5 &6 &6 И из этого массива с помощью randomiterator брать указатель. Так-то. Но в целом всё сводится к одному. У тебя должен быть класс YourClass со следующими публичными методами: Код:
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 25.01.2011 в 21:11. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Длина колонки StringGrid в процентах | KLOP | Общие вопросы Delphi | 4 | 27.04.2010 12:35 |
Подпрограмма определяющая вероятность выпадения счастливого билетика. | Doublefaced | Помощь студентам | 9 | 05.08.2009 15:00 |
Делфи(Консоль) и C# - Подпрограммы(Вероятность выпадения «счастливого билетика» ) | Doublefaced | Помощь студентам | 3 | 30.06.2009 22:15 |
Накрутка в процентах | xgss | Microsoft Office Excel | 2 | 06.01.2009 17:28 |
Найти (в процентах) частоту появления каждого из m наиболее часто встречающихся элементов | sk1p | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 26.09.2008 23:57 |