Негафибоначчиево кодирование (UyigsnQkugccnyfk tk;njkfguny)
В математике негафибоначчиева система счисления — универсальный код, который кодирует ненулевые целые числа в двоичные кодовые слова. Обобщает фибоначчиеву систему счисления на все ненулевые целые числа (а не только натуральные). Все коды заканчиваются "11" и не имеют "11" в середине или начале слова. Коды для целых чисел от -11 до 11 приведены ниже.
xx негафибоначчиево представление негафибоначчиев код -11 101000 0001011 -10 101001 1001011 -9 100010 0100011 -8 100000 0000011 -7 100001 1000011 -6 100100 0010011 -5 100101 1010011 -4 1010 01011 -3 1000 00011 -2 1001 10011 -1 10 011 0 0 (не кодируется) 1 1 11 2 100 0011 3 101 1011 4 10010 010011 5 10000 000011 6 10001 100011 7 10100 001011 8 10101 101011 9 1001010 01010011 10 1001000 00010011 11 1001001 10010011
Код Фибоначчи тесно связан с негафибоначчиевым представлением, иногда используемой математиками позиционной системой счисления. Код негафибоначчи для каждого ненулевого целого числа — это в точности его негафибоначчиево представление (представление через числа Фибоначчи с отрицательными номерами) с обратным порядком цифр и дополнительной единицей в конце. Все отрицательные числа имеют нечётное количество разрядов, все положительные — четное.
Для кодирования ненулевого целого числа X следует:
- Суммировать числа негафибоначчи, совпадающие по знаку с искомым числом, пока модуль суммы меньше модуля искомого числа. Номер последнего прибавленного числа негафибоначчи (N) соответствует номеру разряда в искомом слове.
- Поставить единицу в N-ый разряд искомого слова.
- Вычесть из кодируемого числа X значение N-го числа негафибоначчи.
- Повторять шаги 1-3 пока X не станет равным нулю.
- За старшим разрядом искомого слова помещается дополнительная единица (завершающий бит).
Пример для числа 16:
- Суммируем положительные числа: 1+2+5+13=21 — найдена сумма превысившая число 16. Последним прибавлено число 13 (это 7-е число ряда).
- Записываем единицу в 7-ю позицию: 0000001.
- 16-13=3.
- Суммируем: 1+2=3 — найдена сумма дающая число 3. Последним прибавлено число 2 (3-е число ряда).
- Записываем единицу в 3-ю позицию: 0010001.
- 3-2=1.
- Суммируем: 1=1 — найдена сумма дающая число 1. Последним прибавлено число 1 (1-е число ряда).
- Записываем единицу в 1-ю позицию: 1010001.
- Добавляем завершающий бит: 10100011.
Для декодирования следует удалить последнюю единицу, остальным битам присвоить значения чисел негафибоначчи (1, -1, 2, -3, 5, -8, 13...), а затем сложить значения, соответствующие ненулевым битам.
См. также
[править | править код]Ссылки
[править | править код]- Knuth, Donald (2008), Negafibonacci Numbers and the Hyperbolic Plane, Paper presented at the annual meeting of the Mathematical Association of America, San Jose, California.
- Knuth, Donald (2009), The Art of Computer Programming, Volume 4, Fascicle 1: Bitwise Tricks & Techniques; Binary Decision Diagrams, ISBN 0-321-58050-8. In the pre-publication draft of section 7.1.3 see in particular pp. 36–39.
- Margenstern, Maurice (2008), Cellular Automata in Hyperbolic Spaces, Advances in unconventional computing and cellular automata, vol. 2, Archives contemporaines, p. 79, ISBN 9782914610834.