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

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

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

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

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

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

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

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

Хотелость бы знать именно алгоритм как рандом притянуть к распределению, в независимости от того, что это именно.
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #38938740
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну сделай в лоб:
1. Посчитай количество включений лампочки за каждый час (пол-часа, пять минут, сам подбери интервал).
2. Усредни результат подсчета за несколько дней.
3. Полученные цифры сложи - полученную сумму обозначь за 100%
4. Посчитай процент на каждый интервал (100 * сумма за интервал / сумма за день)
5. Полученные цифры процентов положи один за другим на интервал 0-100.
6. Возьми случайное число от 0, до 100 - найди на какой из отрезков это число попадает.
Всё.
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #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
Как рандом "притянуть за уши"
    #38938786
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlфункцию вероятности включения от времени суток составить можно, но как рандом к ней подтянуть, чтоб получилось "аля человек"?
В данном случае нужны две функции. Первая - вероятность того, что в данный промежуток времени (скажем, единица дискретности минута) лампочку включат. Вторая - вероятное время горения лампочки, если её включат (учитывая вероятность, что её забудут погасить, кстати).
Соответственно в начале каждой минуты генерится RND. Если полученное значение меньше значения первой функции - то лампочка включается, и по второй генерируется время её работы. Можно дополнительно сгенерить случайный "хвост" ко времени включения в секундах.
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #38939718
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, я всем благодарен за ответы, но всеже:

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

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

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

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

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

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

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

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

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

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

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

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

Впрочем, ни один алгоритм сортировки не использует сравнения "каждый с каждым", чтобы сначала получить данные для ранжирования, а только потом сортировать (впрочем, это и невозможно, поскольку рандом с большой вероятностью породит противоречивый набор бинарных сравнений). Следовательно, результаты сортировки определяются величиной сгенерированного случайного значения на начальных этапах больше, чем на завершающих. Т.е. получившийся алгоритм нельзя считать "честным".
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #38970360
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще говоря, ни одна функция random не является "честной", поскольку генерирует не случайные, а "просчитанно-случайные" числа, т.е. используется некая функция, дающая каждый раз один и тот же результат, при одних и тех же начальных значениях.
Можно конечно использовать в качестве начального значения что-то машинное, например показания часов, но все равно это не "настоящая случайность" (и существует ли она? ;)
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #38970362
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.Можно конечно использовать в качестве начального значения что-то машинное
Math.random не умеет seed вручную.
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #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
Как рандом "притянуть за уши"
    #38970604
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabВопрос: по-честному были перетасованы карты или нет?
С высокой степенью вероятности - нет. Функция сравнения нестабильна, а в такой ситуации алгоритм сортировки может повести себя непредсказуемо. Например, просто сто раз переставит первую карту со второй и обратно.

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

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

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

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

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

В примере с тремя картами происходит следующее:
у нас 3 коробочки 1, 2, 3
а) на первом этапе мы находим "наибольшее" значение и кладем его в 3ю коробочку
б) на втором мы находим "наибольшее" значение из 2х и раскладываем значения во вторую и третью коробочки.
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #38970693
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab, я всё сказал и не имею намерения спорить. Никто не забирает у Вас права разложить максимальное количество граблей для себя и не дай бог продолжателей.
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #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
Как рандом "притянуть за уши"
    #38970727
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,
т.е. перемешивания (а не сортировки) :-)
...
Рейтинг: 0 / 0
Как рандом "притянуть за уши"
    #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]