Код без разделителей
В фибоначчиевой системе каждое натуральное число единственным образом представляется суммой несоседних чисел 1, 2, 3, 5, 8, 13, 21, 34, 55, …
Первый символ относится к весу 1, второй — к весу 2 и так далее. Поэтому нули в начале здесь значимы.
Используем главное свойство представления Цекендорфа: соседние числа Фибоначчи одновременно не используются.
Поэтому внутри такой последовательности никогда не встречается 11. Эта комбинация остаётся свободной.
Чтобы отметить конец числа, достаточно приписать ещё одну единицу. Например, для числа 57:
010000001 → 0100000011.
Появившаяся в конце пара 11 служит меткой окончания.
Теперь несколько кодов можно записывать подряд без пробелов.
Первая единица заключительной пары 11 — последний коэффициент самого числа, вторая — специально приписанная служебная единица.
Такой способ называется кодом Фибоначчи. Он саморазделяющийся: длину каждого числа заранее знать не требуется.
Если просто записывать обычные двоичные представления одно за другим, приходится отдельно сообщать их длины или использовать разделители.
А здесь сам запрет на соседние единицы создаёт комбинацию, которую можно отдать под знак конца.
Запрещённая внутри записи комбинация становится естественной границей между числами.
Post #1325
499
- 👍 8
- 🔥 8