599 / 436 / 136
Регистрация: 22.11.2017
Сообщений: 1,340
|
||||||
1 | ||||||
Взбалтывание контейнера пока его элементы не упорядочатся16.08.2019, 17:47. Показов 1133. Ответов 2
Метки нет (Все метки)
Всем привет!
Я к Вам пришёл из раздела C++. Я написал следующий код на C++ Кликните здесь для просмотра всего текста
Суть его заключается в том, что значением переменной len задаём длину последовательности, формируемой в контейнере box. После строки std::vector<int> box(len); в контейнере box имеем len штук элементов, каждый из которых является нулём. Функция std::iota() перезаписывает все эти len нулей числами от 1 (третий аргумент функции) до конца контейнера (до числа len) с шагом 1. Например, при len = 5; после строки 12 и до строки 13 контейнер box имеет наполнение 1 2 3 4 5. В строке 13 функция std::shuffle() случайным образом перемешивает содержимое контейнера box (событие "последовательность элементов в контейнере не изменилась после перемешивания" имеет равновероятное событие быть. То есть случайно может после перемешивания оказаться так как было до перемешивания). То есть, функция std::shuffle() взбалтывает контейнер, однако случайно его содержимое может остаться прежним 1 2 3 4 5. В строке 17 функция std::is_sorted() возвращает true, если в контейнере box все элементы упорядочены по неубыванию и false в противном случае. ! означает отрицание. Если последовательность не упорядочена (проверка в строке 17) снова взбалтываем контейнер (строка 18), иначе выходим из "бесконечного" цикла (break; в строке 20). По завершении цикла, контейнер box будет иметь упорядоченное содержание, ведь из цикла в строках 15 - 21 можно выйти только если содержимое контейнера упорядочено по неубыванию иначе в цикле будет снова и снова происходить перемешивание элементов контейнера. По завершении цикла, переменная count имеет значение численно равное количеству итераций цикла. count имеет следующий смысл -> сколько раз понадобилось хаотично перемешать содержимое контейнера, чтобы в нём все элементы случайно стали упорядочены по неубыванию. Циклом в строках 22 - 25 выводим на консоль содержимое контейнера box, чтобы убедиться в том, что элементы упорядочены по неубыванию. В строке 26 выводим на консоль значение count. Вопрос: С использованием математического аппарата, помогите рассчитать математическое ожидание получения неубывающей последовательности (усреднённое количество взбалтывания контейнера) для каждого из len (количество элементов в последовательности box, например, при len от 1 до 15 с шагом 1), чтобы построить график математического ожидания от len (если желаете, можете его построить. Мне интересно каким будет закон этот). Другими словами: Для каждого из значений len найти среднее количество взбалтываний последовательности, приводящее к её случайному упорядочиванию, при количестве измерений (запусков программы при одном и том же len) стремящемуся к бесконечности. Приведите ход расчёта, чтобы можно было подставить любое значение для len и получить для этой точки значение математического ожидания. Всем спасибо!
0
|
16.08.2019, 17:47 | |
Ответы с готовыми решениями:
2
Как отключить активность контейнера, пока не отработает поток Удаление из контейнера элемента и изменение его размеров Нужно ли перед удалением контейнера очищать его? Дан массив а1,а2,,…,аn. Переставить его элементы так, чтобы в начале массива расположились все его неотрицательные элементы, а в конце – отрицательные |
17.08.2019, 18:35 | 2 |
Сообщение было отмечено SomniPhobia как решение
Решение
Можно и математически.
Так как для len элементов существует len! перестановок, и при взбалтывании появление каждой перестановки равновероятно, включая исходную, то вероятность появления определённой перестановки при одном взбалтывании (например, упорядоченный набор чисел по возрастанию) равна 1/len!, а вероятность получить что-то другое 1-1/len!. Это была комбинаторика. Теперь теория вероятностей. Имеем независимые испытания Бернулли с вероятностью "успеха" (получения нужной перестановки в одном взбалтывании) p=1/len!, и вероятностью неудачи q=1-p. Интересует матожидание случайной величины Х количества опытов до получения нужной перестановки, включая эту последнюю удачную операцию. Эта величина имеет геометрическое распределение, то есть . Можно посмотреть в Википедии, в статье "Геометрическое распределение", чему равно матожидание МХ (правый столбец) - оно равно 1/p, то есть len!. А можно и вывести самому, для этого вычислить сумму . То есть ваша функция среднего количества взбалтываний f(len)=len!
2
|
599 / 436 / 136
Регистрация: 22.11.2017
Сообщений: 1,340
|
|
17.08.2019, 20:36 [ТС] | 3 |
jogano, отличное и развёрнутое объяснение. Спасибо!
0
|
17.08.2019, 20:36 | |
17.08.2019, 20:36 | |
Помогаю со студенческими работами здесь
3
Дан массив а1+ a2+…+an Переставить его элементы так чтобы в начале массива расположились все его неотрицательные элементы, а в конце - отрицательные Пробежать все элементы контейнера Удалить элементы из контейнера map Как изменить свойство контейнера в зависимости от его содержимого Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |