15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|||||||||||
1 | |||||||||||
Применить генератор к shuffle12.06.2015, 17:53. Показов 3117. Ответов 12
Метки нет (Все метки)
Всем привет.
Нужно перемешать массив, как можно с меньшей вероятностью повторения одной и тойже последовательности элементов после перемешиванья. Нашел на просторах хороший генератор, вот его реализация:
0
|
12.06.2015, 17:53 | |
Ответы с готовыми решениями:
12
Функция Shuffle Неправильно работает функция random shuffle Shuffle, как перемешать массив? Китайская копия ipod shuffle |
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
||||||
12.06.2015, 19:17 | 2 | |||||
Третий аргумент функции std::shuffle должен удолетворять требованиям UniformRandomNumberGenerator. Следовательно ваш генератор следует переписать в виде функтора:
1
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
12.06.2015, 19:44 [ТС] | 3 |
mymedia, Спасибо огромное! А как я могу узнать наибольшее и наименьшее число, которое может вернуть этот генератор?
0
|
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
|
12.06.2015, 20:10 | 4 |
А там, откуда вы брали, не было указаны его характеристики?
Ну, можно как-нибудь подобрать. Только главное не ошибиться, иначе std::shuffle будет обращаться по неверным индексам или не перемешает часть массива.
0
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
12.06.2015, 20:14 [ТС] | 5 |
mymedia, Не, на сайте указанно небыло. А какой примерно диапазон?
0
|
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
|
12.06.2015, 20:20 | 6 |
Насколько я понимаю, исходный ваш генератор возвращает значения в диапозоне [0,1). Правда, я могу ошибаться.
Но если так, то замените MIN на 0, а MAX на какое-нибудь число. В моей версии я домножаю результат прежде чем вернуть его. Так что, думаю, всё будет работать нормально. Добавлено через 2 минуты Только не понятно, зачем там дважды XOR'ить dummy, ведь его можно было поXOR'ить один раз, перед инициализацией…
0
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||
12.06.2015, 20:28 [ТС] | 7 | |||||
mymedia, не, ерунда какая-то получается.
Добавлено через 1 минуту Не знаю, я просто внаглую скопировал генератов отсюда http://algolist.ru/maths/generator/park_mil.php Добавлено через 5 минут mymedia, Пробывал еще такой вариант, взял с http://www.cplusplus.com/refer... m/shuffle/,
0
|
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
||||||
12.06.2015, 20:38 | 8 | |||||
Слушайте, а зачем вам вообще это генератор? Может стоит воспользоваться готовым вихрем Мейерсона?.
Вот тут есть пример использования. Попробуйте так, я думаю, вполне пойдёт для вашей задачи:
Этот код за 20 запусков подряд не выдал мне одинакового результата Добавлено через 2 минуты Скажате, а вы генератор (engine) каждый раз заново создавали и инициализировали, или в при очередном тесте передавали уже использовавшийся? Собственно говоря, нужно было поступать по второму сченарию. Добавлено через 2 минуты Ещё учтите, что если между запусками программы прошло менее секунды, то у seed будет одинаковое значение.
0
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||
12.06.2015, 20:50 [ТС] | 9 | |||||
mymedia, а vector string`ов мешается по такому же принципу. Потому что, если я беру vector int`ов, то там, вихрем Мейерсона, все прекрасно перемешивается. А если я беру vector string`ов, то там все перемешивается черт пойми как и очень плохо.
И опять же, пока что, самый лучший результат я получил, делав так:
0
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
12.06.2015, 20:58 | 10 |
Не по теме: Переименовать Мерсенна в Мейерсона - это таки бесценно! :D А теперь немножечко по делу: Вот тут интересное место. Нормальный shuffle обеспечивает "вероятность повторения одной и той же последовательности" равную вероятности появления любой другой последовательности. Возможно, при постановке задачи имелось в виду именно это. Однако же эта вероятность не является минимальной. Минимальная вероятность равна 0 (если, конечно, последовательность позволяет), её можно обеспечить ручным поиском и устранением повторов.
1
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
12.06.2015, 21:09 [ТС] | 11 |
Nick Alte,
Не по теме: Да простит меня Мерсенн. Я просто никогда не слышал об этом человеке.
0
|
mymedia
|
12.06.2015, 21:11
#12
|
0
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
12.06.2015, 21:18 [ТС] | 13 |
Ладно. Объявляю тему закрытой. Не скажу, что добился идеала, но спишем на то, что идеала не существует
0
|
12.06.2015, 21:18 | |
12.06.2015, 21:18 | |
Помогаю со студенческими работами здесь
13
Не перемешиваются буквы во всех словах. Shuffle Может ли получится список тождественный исходному при перемешивании методом random.shuffle() Как можно в textarea применить ::first-line, или как к первой строки применить стиль, внутри данного элемента Генератор комплексных чисел. Генератор гауссовских целых чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |