2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Генерация случайной перестановки
Сообщение07.06.2012, 17:40 


29/12/09
360
Я использую следующий алгоритм для генерации случайной перестановки чисел от$1$ до $n$. В начале разыгрываю случайным образом первое место в перестановке: между всеми числами от $1$ до $n$. Потом разыгрываю второе место в перестановке между числами, за исключением числа, которое выпало в первом розыгрыше. И так далее пока не останется одно число которое занимает последнее место в перестановке. Возникает вопрос, будет ли перестановка случайной и можно ли это как то доказать?

 Профиль  
                  
 
 Re: Генерация случайной перестановки
Сообщение07.06.2012, 17:49 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
alexey007 в сообщении #581946 писал(а):
Возникает вопрос, будет ли перестановка случайной и можно ли это как то доказать?


Да, будет. Можно.

 Профиль  
                  
 
 Re: Генерация случайной перестановки
Сообщение07.06.2012, 17:52 


04/06/12
3
Да, она будет случайной. Случайной можно считать даже перестановку (1, 2, 3), в которой все числа всегда идут по порядку.
Вопрос, конечно, в том, какова вероятность появления будет той или иной перестановки. Будут ли все перестановки при таком способе размещения чисел равновероятны? Ответ положителен. Это классическая задача про вытягивание группой студентов билетов на экзамене.
"В группе n студентов, на экзамене m билетов. Один билет - халявный. Доказать, что вероятность вытащить халявный билет не зависит от того, каким по счету стоит студент".
Доказывается через аппарат условных вероятностей.
Сначала нужно доказать, что если я в произвольной перестановке элементов поменяю два соседних элемента, то получу новую перестановку, у которой вероятность появления будет прежней.
А потом замечательные слова: что так можно получить любую перестановку, следовательно, все перестановки равновероятны.

Философский вопрос: а у вас датчик случайных чисел равномерный? Вернее, он должен быть k-равномерным или k-н-равномерным, в зависимости от способа использования последовательности случайных чисел.

 Профиль  
                  
 
 Re: Генерация случайной перестановки
Сообщение07.06.2012, 18:49 


29/12/09
360
Спасибо, всем за ответы, особенно Egor1984, очень успокоился. Генератор использую C++ функцию rand() %k, функция генерирует случайные числа по равномерному закону.

 Профиль  
                  
 
 Re: Генерация случайной перестановки
Сообщение07.06.2012, 20:50 
Заслуженный участник
Аватара пользователя


13/08/08
14463
Я тоже недавно переставлял массив прямо на месте :-)
Код:
for (  i=0, i<n-2, i++  ) {   swap(  m[i], m[i+random(n-1-i)];  };

Примерно то же самое: уже заданный массив проходил от первой до предпоследней позиции, переставляя очередной элемент со случайным из элементов с не меньшими номерами.

 Профиль  
                  
 
 Re: Генерация случайной перестановки
Сообщение07.06.2012, 23:21 


04/06/12
3
К сожалению, линейный конгруэнтный генератор rand() из стандартной библиотеки C очень плох. Это проверялось много раз на практике и доказано теоретически.
Он не проходит почти все тесты библиотеки diehard!!! Я уж не говорю о тесте на заполнение гиперкуба. Да и период у него маленький, на современных машинах этот период превысить очень просто.
Его лучше не использовать. Особенно в задачах криптографии. Это известный факт.

Мой выбор: Mersenne Twister, или любой из серии генераторов Фибоначи.

Про использование генераторов для метода Монте-Карло смотреть тут http://mathstyle.org/?page=rngresults&language=ru

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group