Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как рандом "притянуть за уши" / 25 сообщений из 35, страница 1 из 2
16.04.2015, 23:57
    #38938707
iskatelsql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
Вот пример - лампочка в коридоре.
Ее в обычной жизни включают рандомно. Но днем редко и ненадолго, вечером чаще и дольше, ночью - ну иногда, на время чтоб в туалет сходить :)

функцию вероятности включения от времени суток составить можно, но как рандом к ней подтянуть, чтоб получилось "аля человек"?

о очень интерестно как бы это по научному , чтоб рандом правильным рандомом был

Поясню:
Забавлялся тут вечерком - скачал словарь русских слов, и составил массив зависимостей, сколько раз какая бувка после какой бывает. Потом рандомом выбирал буквы, и с учетом этой зависимости генерил слова. Получались прикольные :)

Но делал я так: например после буквы "а" идет "м" 1000 раз, "т" 50 раз "с" 10 раз
я генерил рандомное число от 0 до максимума (в данном случае 1000) а потом находил ближайшее к рандомному и брал его

А ведь если "п" после "р" встречается всего 20 раз (все цифры условные),то получается в первом случае распределение от 0 до 1000, а во втором от 0 до 20...

Вот собственно и вопрос: как по научному то лучше? так, как я делал, иль все сначала в проценты перевести, чтоб уровнять, а не по абсолютному значению брать, или еще как..

ЗЫ. вопрос к тем кто знает ТВ ибо догадок у меня самого валом
...
Рейтинг: 0 / 0
17.04.2015, 00:08
    #38938709
iskatelsql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
ЗЫЫ. все примеры просто примеры

Хотелость бы знать именно алгоритм как рандом притянуть к распределению, в независимости от того, что это именно.
...
Рейтинг: 0 / 0
17.04.2015, 04:57
    #38938740
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
Ну сделай в лоб:
1. Посчитай количество включений лампочки за каждый час (пол-часа, пять минут, сам подбери интервал).
2. Усредни результат подсчета за несколько дней.
3. Полученные цифры сложи - полученную сумму обозначь за 100%
4. Посчитай процент на каждый интервал (100 * сумма за интервал / сумма за день)
5. Полученные цифры процентов положи один за другим на интервал 0-100.
6. Возьми случайное число от 0, до 100 - найди на какой из отрезков это число попадает.
Всё.
...
Рейтинг: 0 / 0
17.04.2015, 08:12
    #38938773
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
iskatelsqlфункцию вероятности включения от времени суток составить можно, но как рандом к ней подтянуть, чтоб получилось "аля человек"?
1. Надо время суток анализировать. Для каждого времени своя функция.
2. Снять наблюдение включений. Например днем, минуты: 3,5,3,10,1,7,6

Код: sql
1.
2.
3.
int day[] = {3,5,3,10,1,7,6);

if(day_now()) return day[rand() % (sizeof(day)/sizeof(int))];



массив тут дает вероятностное распределение, т.е. если чаще включают на 3 минуты чем на 10, то 3 должно встречаться больше раз чем 10.
...
Рейтинг: 0 / 0
17.04.2015, 08:45
    #38938786
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
iskatelsqlфункцию вероятности включения от времени суток составить можно, но как рандом к ней подтянуть, чтоб получилось "аля человек"?
В данном случае нужны две функции. Первая - вероятность того, что в данный промежуток времени (скажем, единица дискретности минута) лампочку включат. Вторая - вероятное время горения лампочки, если её включат (учитывая вероятность, что её забудут погасить, кстати).
Соответственно в начале каждой минуты генерится RND. Если полученное значение меньше значения первой функции - то лампочка включается, и по второй генерируется время её работы. Можно дополнительно сгенерить случайный "хвост" ко времени включения в секундах.
...
Рейтинг: 0 / 0
17.04.2015, 23:56
    #38939718
iskatelsql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
Господа, я всем благодарен за ответы, но всеже:

iskatelsqlХотелость бы знать именно алгоритм как рандом притянуть к распределению, в независимости от того, что это именно.

мне не лампочку зажигать нужно и не генератор слов... мне понять истину нужно...
(ну да, была у нас теория вероятностей, лекций 12, было это 15 лет незад... там только объединение и пересечение успели преподать... застойные годы)
...
Рейтинг: 0 / 0
18.04.2015, 14:26
    #38939811
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
iskatelsqlГоспода, я всем благодарен за ответы, но всеже:

iskatelsqlХотелость бы знать именно алгоритм как рандом притянуть к распределению, в независимости от того, что это именно.
Определяешь нужное матожидание, определяешь нужную дисперсию, вызываешь функцию ГПСЧ нормального распределения с этими параметрами. Всё.
...
Рейтинг: 0 / 0
18.04.2015, 14:53
    #38939816
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
iskatelsql,

1) на основе полученных данных расчитываем параметры случайного распределения
2) генерируем случайные величины из полученного распределения
3) все
...
Рейтинг: 0 / 0
19.04.2015, 14:47
    #38940083
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
iskatelsqlПоясню:
Забавлялся тут вечерком - скачал словарь русских слов, и составил массив зависимостей, сколько раз какая бувка после какой бывает. Потом рандомом выбирал буквы, и с учетом этой зависимости генерил слова. Получались прикольные :)

Но делал я так: например после буквы "а" идет "м" 1000 раз, "т" 50 раз "с" 10 раз
я генерил рандомное число от 0 до максимума (в данном случае 1000) а потом находил ближайшее к рандомному и брал его

А ведь если "п" после "р" встречается всего 20 раз (все цифры условные),то получается в первом случае распределение от 0 до 1000, а во втором от 0 до 20...

Вот собственно и вопрос: как по научному то лучше? так, как я делал, иль все сначала в проценты перевести, чтоб уровнять, а не по абсолютному значению брать, или еще как..

Тебе нужна интегральная фунция распределения твоей случайной величины которая задана таблично.
Строится она легко. Из твоей плотности распределения ты строишь другую функцию путём накопления
величин каждого столбкиа. Получается новая функция которая неубывает и заключена в области значений
от 0.0 до 1.0.

Для кейсов с пред-условиями почитай про Байесовские сети или Марковские сети.
...
Рейтинг: 0 / 0
20.04.2015, 14:28
    #38940636
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
iskatelsqlфункцию вероятности включения от времени суток составить можно, но как рандом к ней подтянуть, чтоб получилось "аля человек"? .... вопрос к тем кто знает ТВ ибо догадок у меня самого валом
А потом создаются топики "нафиг программисту высшее образование". Формула из первых недель курса тервера... Ну вот, что, ли, чтобы попроще: http://ecocyb.narod.ru/513/immod/imms3_2.htm
...
Рейтинг: 0 / 0
22.04.2015, 00:15
    #38942061
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
softwarer,
главное, это уметь найти нужную страницу в справочнике инженера-строителя, понять, что же там написано и применить на практике. вот как нас учили в универе.
...
Рейтинг: 0 / 0
27.05.2015, 21:17
    #38970195
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
Задача:
требуется перемешать 5(допустим) карт с помощью JS
для перемешивания была использована следующая функция

//Тестовые карты :
tst = [1, 2, 3, 4, 5]

// Перемешиваем:
tst.sort( function(a,b) { return Math.random()-0.5; } )

Вопрос: по-честному были перетасованы карты или нет?
...
Рейтинг: 0 / 0
28.05.2015, 08:22
    #38970325
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
mini.weblabВопрос: по-честному были перетасованы карты или нет?
Поскольку array.sort в JScript - чёрный ящик, уверенно ответить на этот вопрос невозможно.

Впрочем, ни один алгоритм сортировки не использует сравнения "каждый с каждым", чтобы сначала получить данные для ранжирования, а только потом сортировать (впрочем, это и невозможно, поскольку рандом с большой вероятностью породит противоречивый набор бинарных сравнений). Следовательно, результаты сортировки определяются величиной сгенерированного случайного значения на начальных этапах больше, чем на завершающих. Т.е. получившийся алгоритм нельзя считать "честным".
...
Рейтинг: 0 / 0
28.05.2015, 09:21
    #38970360
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
Вообще говоря, ни одна функция random не является "честной", поскольку генерирует не случайные, а "просчитанно-случайные" числа, т.е. используется некая функция, дающая каждый раз один и тот же результат, при одних и тех же начальных значениях.
Можно конечно использовать в качестве начального значения что-то машинное, например показания часов, но все равно это не "настоящая случайность" (и существует ли она? ;)
...
Рейтинг: 0 / 0
28.05.2015, 09:23
    #38970362
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
S.G.Можно конечно использовать в качестве начального значения что-то машинное
Math.random не умеет seed вручную.
...
Рейтинг: 0 / 0
28.05.2015, 11:59
    #38970557
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
Предположения:
1) На данном этапе претензий к работе Math.random() нет
2) JS использует optimized bubble sort
:-)

Пример: будем сортировать [3, 7, 2]
Step 1:
[3,7,2] -> [3, 7, 2]
[3, 7, 2] -> [3, 2, 7]
Step 2:
[3,2] -> [2,3]
...
Рейтинг: 0 / 0
28.05.2015, 12:26
    #38970604
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
mini.weblabВопрос: по-честному были перетасованы карты или нет?
С высокой степенью вероятности - нет. Функция сравнения нестабильна, а в такой ситуации алгоритм сортировки может повести себя непредсказуемо. Например, просто сто раз переставит первую карту со второй и обратно.

Если хотите тасовать честно - припишите каждой карте value = random и сортируйте по этому value.
...
Рейтинг: 0 / 0
28.05.2015, 12:41
    #38970633
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
softwarer,

1) почему нестабильна ? можно пример ?
2) у нас 5 карт, так что возможность автор сто раз переставит первую карту со второй и обратно исключается
см. предположения по алгоритму
...
Рейтинг: 0 / 0
28.05.2015, 12:49
    #38970645
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
mini.weblab1) почему нестабильна ? можно пример ?
Допустим, у нас три карты, (a, b, c). Ваша функция сравнения запросто может при первом вызове сказать, что a < b, при втором - что b < c, при третьем - что c < a. Как алгоритм сравнения отработает в таких условиях - вопрос, прямо скажем, открытый. Глобально его никто не исследовал и не будет, ибо идиотизм. Вы, конечно, можете исследовать, как оно будет в конкретной ситуации... но даже если исследуете правильно, завтра в библиотеке сменят реализацию, и Ваш код начнёт с вероятностью 50% попросту виснуть (то есть сортировка никогда не закончится).
...
Рейтинг: 0 / 0
28.05.2015, 13:07
    #38970680
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
iskatelsqlНо делал я так: например после буквы "а" идет "м" 1000 раз, "т" 50 раз "с" 10 раз
я генерил рандомное число от 0 до максимума (в данном случае 1000) а потом находил ближайшее к рандомному и брал его

А ведь если "п" после "р" встречается всего 20 раз (все цифры условные),то получается в первом случае распределение от 0 до 1000, а во втором от 0 до 20...

Вот собственно и вопрос: как по научному то лучше? так, как я делал, иль все сначала в проценты перевести, чтоб уровнять, а не по абсолютному значению брать, или еще как..
Давайте вернёмся к нашим буквам и лампочкам.

У тебя уже есть таблица относительных частот этих букв?
...
Рейтинг: 0 / 0
28.05.2015, 13:09
    #38970681
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
softwarer,
1) поясню, это задача по теме топика (и JS здесь замешан эпизодически: я с ним сейчас разбираюсь) :-)
2) рассмотрим пример с тремя картами, для перемешивания мы используем улучшенную пузырьковую сортировку,
поэтому бесконечный цикл невозможен.

В примере с тремя картами происходит следующее:
у нас 3 коробочки 1, 2, 3
а) на первом этапе мы находим "наибольшее" значение и кладем его в 3ю коробочку
б) на втором мы находим "наибольшее" значение из 2х и раскладываем значения во вторую и третью коробочки.
...
Рейтинг: 0 / 0
28.05.2015, 13:13
    #38970693
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
mini.weblab, я всё сказал и не имею намерения спорить. Никто не забирает у Вас права разложить максимальное количество граблей для себя и не дай бог продолжателей.
...
Рейтинг: 0 / 0
28.05.2015, 13:32
    #38970724
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
softwarer,
это не грабли ! это просто задачка на проверить правильность работы алгоритма !

вот кстати, пожалуйста, корректный алгоритм сортировки

Код: javascript
1.
2.
3.
4.
To shuffle an array a of n elements (indices 0..n-1):
  for i from n &#8722; 1 downto 1 do
       j &#8592; random integer such that 0 &#8804; j &#8804; i
       exchange a[j] and a[i]
...
Рейтинг: 0 / 0
28.05.2015, 13:34
    #38970727
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
mini.weblab,
т.е. перемешивания (а не сортировки) :-)
...
Рейтинг: 0 / 0
28.05.2015, 13:34
    #38970729
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рандом "притянуть за уши"
mini.weblab2) рассмотрим пример с тремя картами, для перемешивания мы используем улучшенную пузырьковую сортировку,
поэтому бесконечный цикл невозможен.
Так понимаю это утверждение высосано из этого
mini.weblab2) JS использует optimized bubble sort
Но почему именно так? и только так? и не может быть никак иначе?

PS По моему проще свой код написать в 5-10 строк, чем надеяться что сортировка во всех реализациях JS одинакова и никогда не будет изменена.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как рандом "притянуть за уши" / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]