2010-03-10 2 views
0

Учитывая бесконечный поток случайных 0 и 1, который является из-за смещения (например, 1 более распространены, чем 0 из-за знающего фактора), но в остальном идеальный генератор случайных чисел, я хочу преобразовать его в (более короткий) бесконечный поток, который как идеальный, но и беспристрастный.Как настроить распределение значений в случайном потоке данных?

Поднимая definition of entropy, этот график показывает, сколько бит вывода я должен теоретически получить от каждого бита ввода.

Entropy of a coin flip in bits versus the fairness of the coin

Вопрос: Есть ли практический способ на самом деле реализовать преобразователь, который почти идеально эффективным?

+1

Это известно как «отбеливание» данных. –

ответ

4

Существует известное устройство благодаря Фон Нейману за то, что он превратил несправедливую монету в честную монету. Мы можем использовать это устройство для решения нашей проблемы.

Повторно нанесите два бита из вашего смещенного источника, пока не получите пару, для которой бит отличается. Теперь верните первый бит, отбросив второй. Это создает непредвзятый источник. Причина, по которой это работает, заключается в том, что независимо от источника вероятность 01 равна той же вероятности, что и вероятность 10. Поэтому вероятность условия 0 на 01 или 10 равна 1/2 и вероятность 1-го условия на 01 или 10 равно 1/2.

+0

Кроме того, пары не должны пересекаться. –

+0

Какова эффективность этого? Сколько бит необходимо использовать для генерации одного выходного бита? (Помимо этого, приятно и просто, +1) – BCS

+0

Это зависит от распределения ваших данных. Если вы получите строку из 10000 бит «1», чередующуюся с одним «0» битом, алгоритм будет генерировать один выходной бит. –

2
+0

Экстрактор случайности кажется самым близким к тому, что я ищу. (Другие, похоже, применимы к конечным наборам данных, и я действительно искал операцию потока) – BCS

0

Хоффман закодировать вход.

Учитывая, что входной сигнал имеет известное смещение, вы можете вычислить распределение вероятности для контрольных сумм каждого n битового сегмента. Из этой конструкции Hoffman code, а затем просто кодируйте последовательность.

Я не уверен, но одна потенциальная проблема заключается в том, что это может привести к некоторой корреляции между последовательными битами.