Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Случайный елемент массива, почти случайный... 
:(
    Опции темы
ST_Falcon
Дата 28.4.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



Есть массив значений

[0] - 1203
[1] - 34233
.................
[n] - 23432

нужно выбрать из него случайный елемент. НО вероятность выбора елементов с большими значениями должна быть выше!! и чем больше значение елемента от значений остальных елементов тем больше вероятность выбора елемента с большим значением...

 
PM MAIL ICQ   Вверх
MBo
Дата 28.4.2006, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



квадратичная зависимость подойдет?

RandIndex := Max(Random(n+1),  Random(n+1)); 
PM MAIL   Вверх
ST_Falcon
Дата 28.4.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



MBo
не совсем... тут получается я выбираю максимальный индекс из рендомного диапазона... есть правда вариант прогнать все значения елементов диапазона в цикле и выбрать один из самых больших... сейчас попробую.

зы. что больше никто такого не делал? 
PM MAIL ICQ   Вверх
esperant0
Дата 28.4.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



очень просто делаешь так чтобы элемент с значением 

х выбирался с вероятностью 

х\ сумма всех значений элементов массива 


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
SoWa
Дата 28.4.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 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- это вероятность 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
MBo
Дата 29.4.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



ST_Falcon
тебе понятны слова "квадратичная зависимость" ? 
PM MAIL   Вверх
esperant0
Дата 29.4.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(MBo @ 28.4.2006,  05:34)
квадратичная зависимость подойдет?

RandIndex := Max(Random(n+1),  Random(n+1));

Максимум между двумя случайными величинами и квадратичная зависимость суть разные вещи.


 


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
popolzen
Дата 30.4.2006, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL ICQ   Вверх
ST_Falcon
Дата 3.5.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



popolzen
Цитата

Далее делаем Random(Sum), находим это значение в i-м диапазоне [b[i], c[i]] и получаем a[i] с вероятностью, пропорциональной его значению.

все понял кроме этого момента. делаю рандом по массиву sum и дальше поиск этого значения в массиве а? 
PM MAIL ICQ   Вверх
Breed
Дата 4.5.2006, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 6.4.2006

Репутация: нет
Всего: нет



Цитата(ST_Falcon @  3.5.2006,  19:48 Найти цитируемый пост)
все понял кроме этого момента. делаю рандом по массиву sum и дальше поиск этого значения в массиве а?  


Random от 0 до Sum/ Попадение этого числа в интервал от b[i] до c[i] получается с вероятностью а[i].
То есть находишь интервал в который попало временное случайное число, и соответствующее a[i] и будет - искомое число. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1175 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.