Фибоначчиева система счисления: различия между версиями

Материал из in.wiki
Перейти к навигации Перейти к поиску
w>Pieter Baas
w>Incnis Mrsi
(Кнут, Кнут… я сам немного подумал, и понял, в чём тут дело!)
Строка 1: Строка 1:
'''[[Фибоначчи]]ева [[система счисления]]''' — способ представления [[целое число|целых чисел]] через [[числа Фибоначчи]] F<sub>k</sub>.
+
'''[[Фибоначчи]]ева система счисления''' — [[позиционная система счисления]] для [[целое число|целых чисел]] на основе [[числа Фибоначчи|чисел Фибоначчи]] F<sub>2</sub>=1, F<sub>3</sub>=2, F<sub>4</sub>=3, F<sub>5</sub>=5, F<sub>6</sub>=8 и т.д.
  
 
== Представление натуральных чисел ==
 
== Представление натуральных чисел ==
Строка 56: Строка 56:
 
  |<tt>10</tt>……<tt>01</tt>
 
  |<tt>10</tt>……<tt>01</tt>
 
  | align=right |<tt>10</tt>……<tt>011</tt>
 
  | align=right |<tt>10</tt>……<tt>011</tt>
 +
|-
 +
| colspan=3 |[[Image:Zeckendorf representations.png|320px]]
 
  |}
 
  |}
Любому неотрицательному целому числу <math>a = 0,\ 1,\ 2,\dots</math> можно единственным образом представить через последовательность [[бит]]ов …σ<sub>k</sub>…σ<sub>4</sub>σ<sub>3</sub>σ<sub>2</sub>: <math>a = \sum_k \sigma_k F_k,\ \sigma_k = 0,1</math>, причём последовательность {σ<sub>k</sub>} содержит лишь конечное число единиц, и не имеет пар соседних единиц: <math>\forall k\ge 2: (\sigma_k=1) \rightarrow (\sigma_{k+1}=0)</math>.
+
Любому неотрицательному целому числу <math>a = 0,\ 1,\ 2,\dots</math> можно единственным образом представить через последовательность [[бит]]ов …ε<sub>k</sub>…ε<sub>4</sub>ε<sub>3</sub>ε<sub>2</sub>: <math>a = \sum_k \varepsilon_k F_k,\ \varepsilon_k = 0,1</math>, причём последовательность {ε<sub>k</sub>} содержит лишь конечное число единиц, и не имеет пар соседних единиц: <math>\forall k\ge 2: (\varepsilon_k=1) \Rightarrow (\varepsilon_{k+1}=0)</math>.
 
За исключением последнего свойства, данное представление аналогично [[двоичная система счисления|двоичной системе счисления]].
 
За исключением последнего свойства, данное представление аналогично [[двоичная система счисления|двоичной системе счисления]].
  
Строка 69: Строка 71:
 
Для составления кода Фибоначчи по записи числа в фибоначчиевой системе счисления следует переписать цифры в обратном порядке (так, что старшая единица оказывается последним символом) и приписать в конце ещё раз <tt>1</tt> (см. таблицу).
 
Для составления кода Фибоначчи по записи числа в фибоначчиевой системе счисления следует переписать цифры в обратном порядке (так, что старшая единица оказывается последним символом) и приписать в конце ещё раз <tt>1</tt> (см. таблицу).
  
=== Фибоначчиево «произведение» ===
+
== Обобщение на действительные числа ==
Для <math>a = \sum_k \sigma_k F_k</math> и <math>b = \sum_l \tau_l F_l</math> можно определить «произведение» <math>a\circ b = \sum_{k,l} \sigma_k \tau_l F_{k+l}</math>, формула для которого аналогична формуле умножения двоичных чисел.
+
Похожее устройство имеет позиционная система счисления для [[действительные числа|действительных чисел]], основанием которой служит [[золотое сечение]] <math>\varphi = (1 + \sqrt{5})/2</math> — [[иррациональное число]].
 +
Оказывается, что любое действительное число ''a'' из отрезка [0,1] допускает разложение в ряд через отрицательные степени золотого сечения:
 +
: <math>a = \sum_{k=-1}^{-\infty} \varepsilon_k \varphi^k,\ \varepsilon_k = 0,1\ ,</math>
 +
где {ε<sub>k</sub>} обладает тем же свойством отсутствия соседних единиц.
 +
Из этого нетрудно видеть, что любое неотрицательное действительное число допускает разложение:
 +
: <math>a = \sum_{k=N-1}^{-\infty} \varepsilon_k \varphi^k\,,</math>
 +
где ''N'' таково, что <math>a < \varphi^N</math>.
 +
Разумеется, следует считать что <math>\varepsilon_k = 0</math> для <math>k \ge N</math>.
 +
 
 +
Эти формулы полностью аналогичны формулам для обычных позиционных систем с целыми основаниями.
 +
Оказывается, что любое неотрицательное целое число (и, более общо, всякий неотрицательный элемент [[кольцо (алгебра)|кольца]] <math>{\mathbb Z}+\varphi{\mathbb Z}</math>) имеет представление лишь с конечным количеством единиц, то есть в виде конечной суммы неповторяющихся степеней золотого сечения.<!-- тут хорошо бы найти источник -->
  
Разумеется, данная операция не является настоящим умножением чисел, однако [[Дональд Кнут]] доказал её [[ассоциативность]].
+
Аналогия между числами Фибоначчи и степенями золотого сечения основана на одинаковой форме тождеств:
 +
: <math>F_k = F_{k-1} + F_{k-2}\,,\ \varphi^k = \varphi^{k-1} + \varphi^{k-2}\,,</math>
 +
позволяющих устранение соседних единиц. Прямой связи между представлением натуральных чисел в системе золотого сечения и в фибоначчиевой не имеется.<!-- тут надо уточнить, на самом деле связь будет с некоторыми оговорками и с точностью до множителя √5 или что-то такое  --Incnis Mrsi -->
 +
{{section-stub}}
  
== Обобщение на действительные числа ==
+
== Фибоначчиево «произведение» ==
Похожее устройство имеет [[позиционная система счисления]] для [[действительные числа|действительных чисел]], основанием которой служит [[золотое сечение]] <math>\phi = (1 + \sqrt{5})/2</math> [[иррациональное число]].
+
Для целых чисел <math>a = \sum_k \varepsilon_k F_k\ </math> и <math>b = \sum_l \zeta_l F_l\ </math> можно определить «произведение»<ref>{{OEIS2C|A101330}}, [[:en:Zeckendorf's theorem]]{{ref-en}}</ref>
 +
: <math>a\circ b = \sum_{k,l} \varepsilon_k \zeta_l F_{k+l}</math>,
 +
формула для которого аналогична формуле умножения двоичных чисел.
 +
 
 +
Разумеется, данная операция не является настоящим умножением чисел, и выражается<ref>[http://www.research.att.com/~njas/sequences/a101330.txt Notes on the Fibonacci circle and arroba products]{{ref-en}}</ref> формулой:
 +
: <math>a\circ b = 3 a b  -  a [\varphi^{-2}(b+1)] -  b [\varphi^{-2}(a+1)]\ ,</math> где […] — [[целая часть]].
 +
 
 +
Эта операция обладает [[ассоциативность]]ю. Можно видеть, что формула «произведения» соответствует настоящему перемножению выражений вида <math>a = \sum_k \varepsilon_k \varphi^k\,,k=2, 3\dots</math>.
 +
 
 +
Впервые на ассоциативность этой операции обратил внимание [[Дональд Кнут]].
 +
Следует отметить, что другое «произведение» <math>\sum_{k,l} \varepsilon_k \zeta_l F_{k+l-2},</math> отличающееся лишь сдвигом на два разряда, уже не будет ассоциативно, поскольку…
 +
{{section-stub}}
  
{{section-stub}}<!-- надо перевести [[en:Golden_ratio_base]], но я уже ничего не соображаю --Incnis Mrsi -->
+
== Источники ==
{{rq|source}}
+
* [http://rain.ifmo.ru/cat/view.php/theory/coding/integer-2005#Fcode «Коды Фибоначчи»], факультет информационных технологий и программирования [[ИТМО]]
 +
* [http://www.wikiznanie.ru/ru-wz/index.php/Код_Фибоначчи «Код Фибоначчи»] на Викизнании
 +
{{примечания}}
  
 
[[Категория:Системы счисления]]
 
[[Категория:Системы счисления]]

Версия от 13:16, 4 января 2009

Фибоначчиева система счисленияпозиционная система счисления для целых чисел на основе чисел Фибоначчи F2=1, F3=2, F4=3, F5=5, F6=8 и т.д.

Представление натуральных чисел

Число Запись
в ФСС
Код
Фибоначчи
0 0……0  
F2=1 1 11
F3=2 10 011
F4=3 100 0011
4 101 1011
F5=5 1000 00011
6 1001 10011
7 1010 01011
F6=8 10000 000011
Fn-1  101010 0101011 
Fn 10……00 00……011
Fn+1 10……01 10……011
Zeckendorf representations.png

Любому неотрицательному целому числу a = 0 ,   1 ,   2 , a = 0,\ 1,\ 2,\dots можно единственным образом представить через последовательность битов …εk…ε4ε3ε2: a = k ε k F k ,   ε k = 0 , 1 a = \sum_k \varepsilon_k F_k,\ \varepsilon_k = 0,1 , причём последовательность {εk} содержит лишь конечное число единиц, и не имеет пар соседних единиц: k 2 : ( ε k = 1 ) ( ε k + 1 = 0 ) \forall k\ge 2: (\varepsilon_k=1) \Rightarrow (\varepsilon_{k+1}=0) . За исключением последнего свойства, данное представление аналогично двоичной системе счисления.

Обоснование

В основе лежит теорема Цеккендорфа — любое неотрицательное целое число представимо в виде суммы некоторого набора чисел Фибоначчи, не содержащего пары соседних чисел Фибоначчи. Причём представление такое единственно.

Доказательство существования легко провести по индукции. Любое целое число a 1 a\ge 1 попадёт в промежуток между двумя соседними числами Фибоначчи, то есть для некоторого n 2 n\ge 2 верно неравенство: F n a < F n + 1 F_n \le a < F_{n+1} . Таким образом, a = F n + a a = F_n + a' , где a = a F n   a'=a-F_n\ , так что разложение числа a a' уже не будет содержать слагаемого F n 1 F_{n-1} .

Использование в теории информации

На основе фибоначчиевой системы счисления строится код (кодирование) Фибоначчиуниверсальный код для натуральных чисел (1, 2, 3…), использующий последовательности битов. Поскольку комбинация 11 запрещена в Фибоначчиевой системы счисления, её можно использовать как маркер конца записи. Для составления кода Фибоначчи по записи числа в фибоначчиевой системе счисления следует переписать цифры в обратном порядке (так, что старшая единица оказывается последним символом) и приписать в конце ещё раз 1 (см. таблицу).

Обобщение на действительные числа

Похожее устройство имеет позиционная система счисления для действительных чисел, основанием которой служит золотое сечение φ = ( 1 + 5 ) / 2 \varphi = (1 + \sqrt{5})/2 иррациональное число. Оказывается, что любое действительное число a из отрезка [0,1] допускает разложение в ряд через отрицательные степени золотого сечения: a = k = 1 ε k φ k ,   ε k = 0 , 1   , a = \sum_{k=-1}^{-\infty} \varepsilon_k \varphi^k,\ \varepsilon_k = 0,1\ , где {εk} обладает тем же свойством отсутствия соседних единиц. Из этого нетрудно видеть, что любое неотрицательное действительное число допускает разложение: a = k = N 1 ε k φ k , a = \sum_{k=N-1}^{-\infty} \varepsilon_k \varphi^k\,, где N таково, что a < φ N a < \varphi^N . Разумеется, следует считать что ε k = 0 \varepsilon_k = 0 для k N k \ge N .

Эти формулы полностью аналогичны формулам для обычных позиционных систем с целыми основаниями. Оказывается, что любое неотрицательное целое число (и, более общо, всякий неотрицательный элемент кольца Z + φ Z {\mathbb Z}+\varphi{\mathbb Z} ) имеет представление лишь с конечным количеством единиц, то есть в виде конечной суммы неповторяющихся степеней золотого сечения.

Аналогия между числами Фибоначчи и степенями золотого сечения основана на одинаковой форме тождеств: F k = F k 1 + F k 2 ,   φ k = φ k 1 + φ k 2 , F_k = F_{k-1} + F_{k-2}\,,\ \varphi^k = \varphi^{k-1} + \varphi^{k-2}\,, позволяющих устранение соседних единиц. Прямой связи между представлением натуральных чисел в системе золотого сечения и в фибоначчиевой не имеется. Шаблон:Section-stub

Фибоначчиево «произведение»

Для целых чисел a = k ε k F k   a = \sum_k \varepsilon_k F_k\ и b = l ζ l F l   b = \sum_l \zeta_l F_l\ можно определить «произведение»[1] a b = k , l ε k ζ l F k + l , a\circ b = \sum_{k,l} \varepsilon_k \zeta_l F_{k+l}, формула для которого аналогична формуле умножения двоичных чисел.

Разумеется, данная операция не является настоящим умножением чисел, и выражается[2] формулой: a b = 3 a b a [ φ 2 ( b + 1 ) ] b [ φ 2 ( a + 1 ) ]   , a\circ b = 3 a b - a [\varphi^{-2}(b+1)] - b [\varphi^{-2}(a+1)]\ , где […] — целая часть.

Эта операция обладает ассоциативностью. Можно видеть, что формула «произведения» соответствует настоящему перемножению выражений вида a = k ε k φ k , k = 2 , 3 a = \sum_k \varepsilon_k \varphi^k\,,k=2, 3\dots .

Впервые на ассоциативность этой операции обратил внимание Дональд Кнут. Следует отметить, что другое «произведение» k , l ε k ζ l F k + l 2 , \sum_{k,l} \varepsilon_k \zeta_l F_{k+l-2}, отличающееся лишь сдвигом на два разряда, уже не будет ассоциативно, поскольку… Шаблон:Section-stub

Источники

en:Fibonacci coding eo:Vikipedio:Projekto matematiko/Fibonacci-a kodigo fr:Codage de Fibonacci