![]() |
|
![]() ![]() ![]() |
|
ST_Falcon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
Есть массив значений
[0] - 1203 [1] - 34233 ................. [n] - 23432 нужно выбрать из него случайный елемент. НО вероятность выбора елементов с большими значениями должна быть выше!! и чем больше значение елемента от значений остальных елементов тем больше вероятность выбора елемента с большим значением... |
|||
|
||||
MBo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
квадратичная зависимость подойдет?
RandIndex := Max(Random(n+1), Random(n+1)); |
|||
|
||||
ST_Falcon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
MBo
не совсем... тут получается я выбираю максимальный индекс из рендомного диапазона... есть правда вариант прогнать все значения елементов диапазона в цикле и выбрать один из самых больших... сейчас попробую. зы. что больше никто такого не делал? |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
очень просто делаешь так чтобы элемент с значением
х выбирался с вероятностью х\ сумма всех значений элементов массива -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Я вот подумал- дать всем элементам массива равную вероятность, а потом распределять между маленьким и большим элементом массива как нибудь. Например
x[1]=5 x[79]=123556 p[1]=0.2 p[79]=0.2 -> p[79]:=p[79]+p[1]/2; p[1]:=p[1]/2; Где p- это вероятность -------------------- Всем добра ![]() |
|||
|
||||
MBo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
ST_Falcon,
тебе понятны слова "квадратичная зависимость" ? |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Максимум между двумя случайными величинами и квадратичная зависимость суть разные вещи. -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
popolzen |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 19.3.2006 Где: Улан-Удэ Репутация: нет Всего: 2 |
Предположим, что есть такой массив значений (n = 4):
a[1] = 12 a[2] = 4 a[3] = 7 a[4] = 1 Сумма этих элементов равна Sum = a[1] + ... + a[n] Соотнесем с каждым элементом массива еще 2 значения: (b[1] = 0; b[i] = c[i - 1] + 1; c[i] = b[i] + a[i] - 1) b[1] = 0; c[1] = 11 b[2] = 12; c[2] = 15 b[3] = 16; c[3] = 22 b[4] = 23; c[4] = 23 Таким образом, элемент c[n] = sum(a[i]) - 1 Далее делаем Random(Sum), находим это значение в i-м диапазоне [b[i], c[i]] и получаем a[i] с вероятностью, пропорциональной его значению. Для поиска лучше всего использовать специализированные алгоритмы (например, бинарный), имеющие сложность меньше линейной. Надеюсь, я правильно понял твой вопрос. Это сообщение отредактировал(а) popolzen - 30.4.2006, 08:24 |
|||
|
||||
ST_Falcon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
popolzen
все понял кроме этого момента. делаю рандом по массиву sum и дальше поиск этого значения в массиве а? |
|||
|
||||
Breed |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 6.4.2006 Репутация: нет Всего: нет |
Random от 0 до Sum/ Попадение этого числа в интервал от b[i] до c[i] получается с вероятностью а[i]. То есть находишь интервал в который попало временное случайное число, и соответствующее a[i] и будет - искомое число. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |