Das Codieren von Fibonacci

In der Mathematik ist das Codieren von Fibonacci ein universaler Code, der positive ganze Zahlen in binäre Codewörter verschlüsselt. Jedes Codewort endet mit "11" und enthält keine anderen Beispiele "11" vor dem Ende.

Definition

Für eine Zahl, wenn die Ziffern des Codewortes vertreten, das dann vertritt, haben uns:

:

wo F (i) die ith Fibonacci-Zahl ist.

Es kann gezeigt werden, dass solch ein Codieren einzigartig ist, und das einzige Ereignis "11" in jedem Codewort am Ende d. h. d (k−1) und d (k) ist.

Die ersten paar Codes von Fibonacci werden unten, und auch der so genannte implizierte Vertrieb, der Vertrieb von Werten gezeigt, für die das Codieren von Fibonacci einen Code der minimalen Größe gibt.

Der Fibonacci-Code ist nah mit der Darstellung von Zeckendorf, ein Stellungsziffer-System verbunden, das den Lehrsatz von Zeckendorf verwendet und das Eigentum hat, dass keine Zahl eine Darstellung mit dem aufeinander folgenden 1s hat. Das Fibonacci-Codewort für eine besondere ganze Zahl ist genau die Darstellung von Zeckendorf der ganzen Zahl mit der Ordnung seiner Ziffern umgekehrt und zusätzlicher "1", der am Ende angehangen ist.

Eine ganze Zahl N zu verschlüsseln:

  1. Finden Sie die größte Fibonacci-Zahl gleich oder weniger als N; ziehen Sie diese Zahl von N, dem Nachgehen des Rests ab.
  2. Wenn die abgezogene Zahl die ith Fibonacci-Zahl F (i) war, stellen Sie 1 im Platz i−2 im Codewort (den verlassenen der grösste Teil der Ziffer als Platz 0 aufzählend).
  3. Wiederholen Sie die vorherigen Schritte, gegen den Rest N auswechselnd, bis ein Rest 0 erreicht wird.
  4. Legen Sie zusätzlichen 1 nach der niedrigstwertigen Ziffer im Codewort.

Um ein Codewort zu decodieren, entfernen Sie das Finale "1", teilen Sie das restliche die Werte 1,2,3,5,8,13... (die Fibonacci-Zahlen) zu den Bit im Codewort zu, und summieren Sie die Werte "1" Bit.

Vergleich mit anderen universalen Codes

Das Codieren von Fibonacci hat ein nützliches Eigentum, das es manchmal attraktiv im Vergleich mit anderen universalen Codes macht: Es ist ein Beispiel eines gleichzeitig selbstseienden Codes, es leichter machend, Daten von einem beschädigten Strom wieder zu erlangen. Mit den meisten anderen universalen Codes, wenn ein einzelnes Bit, keine der Daten verändert wird, die kommen, nachdem es richtig gelesen wird. Mit dem Fibonacci-Codieren, andererseits, kann ein geändertes Bit einen Jeton veranlassen, als zwei gelesen zu werden, oder zwei Jetons veranlassen, falsch als ein gelesen zu werden, aber das Lesen "0" vom Strom wird die Fehler verhindern, sich weiter fortzupflanzen. Da der einzige Strom, der keinen "0" darin hat, ein Strom "11" Jetons ist, editiert die Summe Entfernung zwischen einem durch einen einzelnen Bit-Fehler beschädigten Strom, und der ursprüngliche Strom ist höchstens drei.

Diese Annäherung - das Verwenden der Folge von Symbolen verschlüsselnd, in denen einige Muster (wie "11") verboten werden, kann http://aps.arxiv.org/pdf/0710.3861 frei verallgemeinert werden.

Beispiel

Der folgende Tisch zeigt, dass die Nummer 65 in Fibonacci vertreten wird, der als 0100100011, seitdem codiert. Die ersten zwei Fibonacci-Zahlen (0 und 1) werden nicht verwendet, und zusätzlicher 1 wird immer angehangen.

Eine Methode, jede ganze Zahl zu verschlüsseln, wird im folgenden Pythonschlange-Programm gezeigt.

def encode_fib (n):

# Rückschnur mit der Verschlüsselung von Fibonacci für n (n> = 1).

resultieren Sie = ""

wenn n> = 1:

a = 1

b = 1

c = + b # folgende Fibonacci-Zahl

Flunkereien = [b] # Liste von Fibonacci-Zahlen, mit F (2), jeder anfangend

fibs.append (c) # fügen folgende Fibonacci-Zahl zum Ende der Liste hinzu

a = b

b = c

c = + b

resultieren Sie = "1" # zusätzlich "1" am Ende

für fibnum im umgekehrten (Flunkereien):

wenn n> = fibnum:

n = n - fibnum

resultieren Sie = "1" + Ergebnis

sonst:

resultieren Sie = "0" + Ergebnis

geben Sie Ergebnis zurück

drucken Sie encode_fib (65) # zeigt "0100100011"

</Quelle>

Siehe auch

Weiterführende Literatur


Das 19. Jahrhundert v. Chr. / Die Sesame Street
Impressum & Datenschutz