Рейтинг:1

Минимальная длина цикла для автомата по правилу 30 с переключением битов

флаг br

А правило 30 клеточный автомат производит хаотический вывод из очень простого правила и поэтому может использоваться как генератор псевдослучайных чисел (но нет криптографически безопасный).

Одна из проблем заключается в том, что существуют «черные дыры», например, битовый вектор с константой 0 отображается сам в себя, а вектор с константой 1 отображается в константу 0.

Это можно исправить с помощью простого переключения (через XOR) бита 0 (самый правый бит); это это простая реализация в С.

Вопрос. Имеет ли «Правило 30 с переключением битов» минимальную длину цикла $ {\ кал О} (2 ^ п) $ куда $n$ длина битовых векторов?

poncho avatar
флаг my
Для $n=32$ я нашел цикл длиной 6923; Я не знаю, может ли он быть самым маленьким...
Dominic van der Zypen avatar
флаг br
Спасибо за этот краткий способ описания @fgrieu! Только одна маленькая вещь, я думаю, что нужно поменять местами $\lll$ и $\ggg$, так как правило, описанное в [Википедии](https://en.wikipedia.org/wiki/Rule_30), это "left_cell XOR (central_cell ИЛИ right_cell)», и вы получаете левую ячейку, «выровненную над» центральной (исходной) ячейкой посредством **правого** сдвига/поворота, если я не ошибаюсь, и наоборот. Так что, возможно, это $$u_{n+1} := \big((u_n \ggg 1) \oplus (u_n \lor (u_n \lll 1))\big) \; \oplus c$$ - но я думаю, из соображений продолжительности периода это не имеет значения.
Dominic van der Zypen avatar
флаг br
Спасибо @poncho - я полагаю, это делает самые маленькие циклы слишком маленькими ...
ThomasM avatar
флаг sk
Не ответ на вопрос, но вы можете обеспечить большую длину цикла с помощью операции XOR со счетчиком: $$u_{j+1}= (u_j \ggg 1) \oplus (u_j \vee (u_j \lll 1)) \oplus j$$
Dominic van der Zypen avatar
флаг br
Хороший вопрос @ThomasM -> Я действительно пробовал нечто подобное: на каждом этапе один бит инвертируется в другой позиции, очень похоже на то, что вы предлагаете! Формула для этого будет следующей: $$u_{j+1} = u_j \oplus (1 \lll j). ) является простой реализацией. Действительно, периоды довольно длинные, возможно, ${\cal O}(2^n)$.
Рейтинг:1
флаг ng

С конвенцией в эталонная реализация, повторение $$u_{j+1}:=c\oplus(u_j\lll1)\oplus(u_j\vee(u_j\ggg1))$$ куда $с$ это $n$-битовая константа со всеми битами в $0$ кроме самого правого (иначе сказано $c=0^{n-1}\mathbin\|1$ ), $\оплюс$ побитовое XOR, $\вее$ побитовое ИЛИ, $\lll$ и $\гггг$ - это левое и правое вращение $n$-bit bistring перед оператором по количеству бит после.

Если мы изменим направление сдвигов, это просто отразит (круговое) отображение битов, поэтому структура цикла не изменится.


Имеет ли «Правило 30 с переключением битов» минимальную длину цикла $ {\ кал О} (2 ^ п) $ куда $n$ длина битовых векторов?

Нет, так как для нечетного $n$ существует минимальный цикл длины один. Эта фиксированная точка имеет двоичное выражение чередование $\frac{n+1}2\ 1$ и $\frac{n-1}2\ 0$ (в шестнадцатеричном формате: 55–55 за $n\bmod 4=3$ или же 15–55 за $n\bmod 4=1$). Таким образом, в дальнейшем мы ограничимся даже $n$.

Изучение малого $n$ не показывает никаких доказательств в пользу утверждения: минимальная длина цикла часто $3$, и, кажется, не взлетел.

 n начало длины
 2 2 0x0
 4 5 0x1
 6 3 0x03
 8 6 0x14
10 3 0x07C
12 5 0x42F
14 7 0x035D
16 33 0x2D34
18 3 0x03E43
20 27 0x00A28
22 3 0x07C87C
24 4 0x102040
26 14 0x0ABB343
28 5 0x2D1E5A3
30 3 0x03E43E43
32 7 0x1B3AFA05
34 3 0x07C87C87C
36 13 0x0217F5A73

Для случайной функции ожидаемый размер цикла, начинающегося со случайной точки, близок к $\sqrt{\pi2^n/8}=\mathcal O(2^{n/2})$; см. Флажоле и Одлызко Статистика случайного сопоставления. Наименьший цикл обычно намного меньше (хотя я не знаю ожидаемого распределения). Таким образом, заявленная длина цикла была бы несколько неожиданной.

С другой стороны, функция имеет очень медленную диффузию, поэтому она очень далека от случайной функции.

Вот график для $n=14$. График для n = 14

poncho avatar
флаг my
"Таким образом, заявленная длина цикла будет несколько неожиданной."; это я нашел цикл длиной 6923? Ну, это самый маленький цикл, который я видел; Я также видел циклы длиной 166839, 223545, 423038 и 1143461. Помните, что $\mathcal{O}(2^{n/2})$ соответствует циклу из случайной точки; наименьший цикл может быть значительно меньше.
Dominic van der Zypen avatar
флаг br
Красивый ответ, спасибо за ваши усилия, fgrieu!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.