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