|
|
Line 1: |
Line 1: |
| {{no footnotes|date=January 2013}}
| | The author is known as Irwin. My day occupation is a meter reader. North Dakota is our beginning location. Doing ceramics is what my family members and I appreciate.<br><br>Here is my blog: [http://yadget.ru/blog/1189280/tips-about-how-to-overcome-yeast-infection-easily/ yadget.ru] |
| {{numeral systems}}
| |
| In [[mathematics]] and computing, '''Fibonacci coding''' is a [[universal code (data compression)|universal code]] which encodes positive integers into binary [[code word]]s. It is one example of representations of integers based on [[Fibonacci number]]s. Each code word ends with "11" and contains no other instances of "11" before the end.
| |
| | |
| ==Definition==
| |
| For a number <math>N\!</math>, if <math>d(0),d(1),\ldots,d(k)\!</math> represent the digits of the code word representing <math>N\!</math> then we have:
| |
| | |
| : <math>N = \sum_{i=0}^{k-1} d(i) F(i+2),\text{ and }d(k)=d(k-1)=1.\!</math>
| |
| | |
| where ''F''(''i'') is the ''i''th [[Fibonacci number]].
| |
| | |
| It can be shown that such a coding is unique, and the only occurrence of "11" in any code word is at the end i.e. ''d''(''k''−1) and ''d''(''k''). Note that the penultimate bit is the most significant bit and the first bit is the least significant bit. Note also that leading zeros can not be omitted as they can in e.g. decimal numbers.
| |
| | |
| The first few Fibonacci codes are shown below, and also the so-called [[Universal code (data compression)#Relationship to practical compression|''implied distribution'']], the distribution of values for which Fibonacci coding gives a minimum-size code.
| |
| | |
| {|class="wikitable"
| |
| ! Symbol !! Fibonacci representation !! Fibonacci code word !! implied distribution
| |
| |-
| |
| | 1 || <math>F(2)</math> || 11 || 1/4
| |
| |-
| |
| | 2 || <math>F(3)</math> || 011 || 1/8
| |
| |-
| |
| | 3 || <math>F(4)</math> || 0011 || 1/16
| |
| |-
| |
| | 4 || <math>F(2) + F(4)</math> || 1011 || 1/16
| |
| |-
| |
| | 5 || <math>F(5)</math> || 00011 || 1/32
| |
| |-
| |
| | 6 || <math>F(2) + F(5)</math> || 10011 || 1/32
| |
| |-
| |
| | 7 || <math>F(3) + F(5)</math> || 01011 || 1/32
| |
| |-
| |
| | 8 || <math>F(6)</math> || 000011 || 1/64
| |
| |-
| |
| | 9 || <math>F(2) + F(6)</math> || 100011 || 1/64
| |
| |-
| |
| | 10 || <math>F(3) + F(6)</math> || 010011 || 1/64
| |
| |-
| |
| | 11 || <math>F(4) + F(6)</math> || 001011 || 1/64
| |
| |-
| |
| | 12 || <math>F(2)+F(4)+F(6)</math>|| 101011 || 1/64
| |
| |-
| |
| | 13 || <math>F(7)</math> || 0000011 || 1/128
| |
| |-
| |
| | 14 || <math>F(2) + F(7)</math> || 1000011 || 1/128
| |
| |-
| |
| |}
| |
| | |
| The Fibonacci code is closely related to the ''Zeckendorf representation'', a positional [[numeral system]] that uses [[Zeckendorf's theorem]] and has the property that no number has a representation with consecutive 1s. The Fibonacci code word for a particular integer is exactly the integer's Zeckendorf representation with the order of its digits reversed and an additional "1" appended to the end.
| |
| | |
| To encode an integer ''N'':
| |
| # Find the largest [[Fibonacci number]] equal to or less than ''N''; subtract this number from ''N'', keeping track of the remainder.
| |
| # If the number subtracted was the ''i''th Fibonacci number ''F''(''i''), put a 1 in place ''i''−2 in the code word (counting the left most digit as place 0).
| |
| # Repeat the previous steps, substituting the remainder for ''N'', until a remainder of 0 is reached.
| |
| # Place an additional 1 after the rightmost digit in the code word.
| |
| | |
| To decode a code word, remove the final "1", assign the remaining the values 1,2,3,5,8,13... (the [[Fibonacci number]]s) to the bits in the code word, and sum the values of the "1" bits.
| |
| | |
| ==Comparison with other universal codes==
| |
| | |
| Fibonacci coding has a useful property that sometimes makes it attractive in comparison to other universal codes: it is an example of a [[self-synchronizing code]], making it easier to recover data from a damaged stream. With most other universal codes, if a single [[bit]] is altered, none of the data that comes after it will be correctly read. With Fibonacci coding, on the other hand, a changed bit may cause one token to be read as two, or cause two tokens to be read incorrectly as one, but reading a "0" from the stream will stop the errors from propagating further. Since the only stream that has no "0" in it is a stream of "11" tokens, the total [[edit distance]] between a stream damaged by a single bit error and the original stream is at most three.
| |
| | |
| This approach - encoding using sequence of symbols, in which some patterns (like "11") are forbidden, can be freely generalized [http://aps.arxiv.org/pdf/0710.3861].
| |
| | |
| ==Example==
| |
| The following table shows that the number 65 is represented in Fibonacci coding as 0100100011, since {{nowrap|1=65 = 2 + 8 + 55}}. The first two Fibonacci numbers (0 and 1) are not used, and an additional 1 is always appended.
| |
| | |
| {| class="wikitable" style="text-align:center"
| |
| |- style="font-size:130%"
| |
| | 0 || 1 || 1 || 2 || 3 || 5 || 8 || 13 || 21 || 34 || 55 || –
| |
| |-
| |
| | <math>F(0)</math> || <math>F(1)</math> || <math>F(2)</math> || <math>F(3)</math> || <math>F(4)</math> || <math>F(5)</math> || <math>F(6)</math> || <math>F(7)</math> || <math>F(8)</math> || <math>F(9)</math> || <math>F(10)</math> || <small>additional</small>
| |
| |-
| |
| | – || – || 0 || 1 || 0 || 0 || 1 || 0 || 0 || 0 || 1 || 1
| |
| |}
| |
| | |
| ==See also==
| |
| *[[Golden ratio base]]
| |
| *[[Ostrowski numeration]]
| |
| *[[Universal code (data compression)|Universal code]]
| |
| *[[Zeckendorf's theorem]]
| |
| | |
| ==References==
| |
| * {{cite book | last1 = Allouche | first1 = Jean-Paul | last2 = Shallit | first2 = Jeffrey | author2-link = Jeffrey Shallit | isbn = 978-0-521-82332-6 | publisher = [[Cambridge University Press]] | title = Automatic Sequences: Theory, Applications, Generalizations | year = 2003 | zbl=1086.11015 | page=105 }}
| |
| * {{cite journal | last1=Fraenkel | first1=Aviezri S. | last2=Klein | first2=Shmuel T. |title=Robust universal complete codes for transmission and compression | journal=Discrete Applied Mathematics | volume=64 | number=1 | year=1996 | pages=31–55 | url=http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.3064 | doi = 10.1016/0166-218X(93)00116-H | zbl=0874.94026 | issn=0166-218X }}
| |
| | |
| ==Further reading==
| |
| *{{cite book
| |
| | last = Stakhov
| |
| | first = A. P.
| |
| | authorlink =
| |
| | title = The Mathematics of Harmony: From Euclid to Contemporary Mathematics and Computer Science
| |
| | url =
| |
| | year = 2009
| |
| | publisher = [[World Scientific Publishing]]
| |
| | location = Singapore
| |
| | isbn=}}
| |
| | |
| {{Compression Methods}}
| |
| | |
| {{DEFAULTSORT:Fibonacci Coding}}
| |
| [[Category:Non-standard positional numeral systems]]
| |
| [[Category:Lossless compression algorithms]]
| |
| [[Category:Fibonacci numbers]]
| |
The author is known as Irwin. My day occupation is a meter reader. North Dakota is our beginning location. Doing ceramics is what my family members and I appreciate.
Here is my blog: yadget.ru