Очень простым, но при этом до сих пор использующимся алгоритмом генерации псевдослучайной последовательности бит является алгоритм
LFSR. Работает он примерно так:
- Есть последовательность нескольких битов. Изначально она заполняется неким значением, например, текущим временем.
- На выход уходит последний (правый) бит, после чего все остальные биты сдвигаются вправо
- На освободившееся слева место ставится результат выполнения XOR двух последних битов (включая тот который ушёл)
- Повторяем шаги 2 и 3, пока не получим последовательность нужной длины
Реализация на языке Python может выглядеть примерно так:
def lfsr(seed):
state = seed
while True:
yield state & 1
newbit = (state ^ (state >> 1)) & 1
state = (state >> 1) | (newbit << 7)
В данном примере используется внутренний буфер из восьми бит. Получим последовательность из ста псевдослучайных бит, используя "10000001" в качестве начального значения:
import itertools
print("".join(map(str, itertools.islice(lfsr(0b10000001), 100))))
Результат:
1000000110000010100001111000100010011001101010101111111100000001000000110000010100001111000100010011