Методы генерации случайного сочетания — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м
Строка 1: Строка 1:
 
==Постановка задачи==
 
==Постановка задачи==
Необходимо сгенерировать случайное сочетание из <tex> n </tex> чисел с равномерным распределением вероятности, если есть в наличии функция для генерации случайного числа в заданном интервале.  
+
Необходимо сгенерировать случайное сочетание из <tex> n </tex> элементов по <tex>k</tex> с равномерным распределением вероятности, если есть в наличии функция для генерации случайного числа в заданном интервале.  
  
 
==Решение за время O(n<sup>2</sup>)==
 
==Решение за время O(n<sup>2</sup>)==
 
Комментарий
 
 
===Алгоритм генерации===
 
 
 
  
 
===Псевдокод===
 
===Псевдокод===
Строка 20: Строка 14:
 
==Решение за время O(n)==
 
==Решение за время O(n)==
  
Комментарий
+
Для более быстрого решения данной задачи воспользуемся следующим алгоритмом: пусть задан для определенности массив <tex>a[]</tex> размера <tex>n</tex>, состоящий из <tex>k</tex> единиц и <tex>n - k</tex> нулей. Применим к нему [[Метод генерации случайной перестановки, алгоритм Фишера-Йетса|алгоритм генерации случайной перестановки]]. Тогда все элементы <tex>i</tex>, для которых <tex>a[i] = 1</tex>, включим в сочетание.
 
 
===Алгоритм генерации===
 
 
 
 
 
  
 
===Псевдокод===
 
===Псевдокод===

Версия 20:37, 26 декабря 2012

Постановка задачи

Необходимо сгенерировать случайное сочетание из [math] n [/math] элементов по [math]k[/math] с равномерным распределением вероятности, если есть в наличии функция для генерации случайного числа в заданном интервале.

Решение за время O(n2)

Псевдокод

Доказательство корректности алгоритма

Решение за время O(n)

Для более быстрого решения данной задачи воспользуемся следующим алгоритмом: пусть задан для определенности массив [math]a[][/math] размера [math]n[/math], состоящий из [math]k[/math] единиц и [math]n - k[/math] нулей. Применим к нему алгоритм генерации случайной перестановки. Тогда все элементы [math]i[/math], для которых [math]a[i] = 1[/math], включим в сочетание.

Псевдокод

Доказательство корректности алгоритма

Оценка временной сложности

См. также

Источники