Генерация псевдослучайного потока с параметрами энтропии - PullRequest
0 голосов
/ 12 февраля 2012

Как я могу сгенерировать поток двоичных результатов длиной n с равным числом нулей и единиц, но с смещенной частотой парных результатов, т.е. с учетом частоты чередования k ( freq(01) + freq(10) ) / ( freq(00) + freq(11) ) = k

1 Ответ

1 голос
/ 12 февраля 2012

Генерация случайной цепочки Маркова со следующей вероятностью перехода:

        0       1
0   1/(k+1)  k/(k+1)

1   k/(k+1)  1/(k+1)

По сути, если вы только что сгенерировали 0, сгенерируйте еще 0 с вероятностью 1 / (k + 1)

Примечание: если вы хотите гарантировать требования, используйте следующий подход

Предположим, вы хотите сгенерировать mk неравных комбинаций и m равных комбинаций.

  1. Пусть reserve_eq = m и reserve_uneq = mk.
  2. Генерировать случайный бит 0/1 с равной вероятностью. Пусть cur будет этим битом
  3. Выходной ток
  4. Генерация new_cur = (cur, 1-cur) с взвешенной вероятностью (reserve_eq, reserve_uneq)
  5. Если new_cur = cur, тогда уменьшать Reserve_eq, в противном случае уменьшать Reserve_uneq
  6. cur = new_cur
  7. Перейти к шагу 3

В шаге 4 завершите работу, если оба параметра Reserve_eq и reserve_uneq равны нулю. Выходная строка имеет длину км + м + 1.

...