You can edit almost every page by Creating an account. Otherwise, see the FAQ.

Fibonacci coding

Από EverybodyWiki Bios & Wiki
Μετάβαση σε:πλοήγηση, αναζήτηση

Ο Κωδικός Fibonacci είναι ένας καθολικός κωδικός στα μαθηματικά και την πληροφορική, ο οποίος κωδικοποιεί τους θετικούς ακεραίους σε δυαδικές λέξεις κωδικού. Είναι ένα παράδειγμα αναπαράστασης ακεραίων βασισμένης στους αριθμούς Fibonacci. Κάθε λέξη κωδικού τελειώνει με "11" και δεν περιέχει άλλες εμφανίσεις του "11" πριν από το τέλος.

Ορισμός[επεξεργασία]

Για έναν αριθμό , αν αντιπροσωπεύουν τα ψηφία της λέξης κωδικού που αντιπροσωπεύει τον , τότε έχουμε:

όπου F(i) είναι ο iος αριθμός Fibonacci, και έτσι ο F(i+2) είναι ο iος ξεχωριστός αριθμός Fibonacci ξεκινώντας με . Το τελευταίο βίτ είναι πάντα ένα προστιθέμενο βίτ του 1 και δεν φέρει τιμή θέσης.

Μπορεί να αποδειχθεί ότι μια τέτοια κωδικοποίηση είναι μοναδική, και η μόνη εμφάνιση του "11" σε οποιαδήποτε λέξη κωδικού είναι στο τέλος (δηλαδή, d(k−1) και d(k)). Το προτελευταίο βίτ είναι το πιο σημαντικό βίτ και το πρώτο βίτ είναι το λιγότερο σημαντικό βίτ. Επίσης, οι αρχικοί μηδένικοι δεν μπορούν να παραλειφθούν όπως μπορούν να γίνει στους δεκαδικούς αριθμούς.

Οι πρώτες λέξεις Fibonacci παρουσιάζονται παρακάτω, καθώς και η λεγόμενη υπονοούμενη πιθανότητα για κάθε αριθμό που έχει ένα κωδικό μικρότερου μεγέθους στην κωδικοποίηση Fibonacci.

Σύμβολο Αναπαράσταση Fibonacci Λέξη κωδικού Fibonacci Υπονοούμενη πιθανότητα
1 11 1/4
2 011 1/8
3 0011 1/16
4 1011 1/16
5 00011 1/32
6 10011 1/32
7 01011 1/32
8 000011 1/64
9 100011 1/64
10 010011 1/64
11 001011 1/64
12 101011 1/64
13 0000011 1/128
14 1000011 1/128

Για να κωδικοποιήσουμε έναν ακέραιο N:

  1. Βρείτε τον μεγαλύτερο αριθμό Fibonacci ίσο ή μικρότερο από το N; αφαιρέστε αυτόν τον αριθμό από το N, κρατώντας το υπόλοιπο.
  2. Αν ο αριθμός που αφαιρέθηκε ήταν ο iος αριθμός Fibonacci F(i), βάλτε ένα 1 στη θέση i − 2 στη λέξη κωδικού (μετρώντας το αριστερότερο ψηφίο ως θέση 0).
  3. Επαναλάβετε τα προηγούμενα βήματα, αντικαθιστώντας το υπόλοιπο για N, έως ότου φτάσετε σε υπόλοιπο 0.
  4. Βάλτε ένα επιπλέον 1 μετά από το δεξιότερο ψηφίο στη λέξη κωδικού.

Για να αποκωδικοποιήσετε μια λέξη κωδικού, αφαιρέστε το τελικό "1", αναθέστε στα υπόλοιπα τις τιμές 1,2,3,5,8,13... (οι αριθμοί Fibonacci) στα βίτ στη λέξη κωδικού, και προσθέστε τις τιμές των βίτ "1".

Σύγκριση με άλλους καθολικούς κωδικούς[επεξεργασία]

Η κωδικοποίηση Fibonacci έχει μια χρήσιμη ιδιότητα που κάποιες φορές την καθιστά ελκυστική σε σύγκριση με άλλους καθολικούς κωδικούς: είναι ένα παράδειγμα ενός αυτοσυγχρονιζόμενου κωδικού, καθιστώντας το ευκολότερο να ανακτηθούν δεδομένα από μια κατεστραμμένη ροή. Με τους περισσότερους άλλους καθολικούς κωδικούς, αν ένα μοναδικό βίτ αλλάξει, τότε κανένα από τα δεδομένα που έρχεται μετά από αυτό δεν θα διαβαστούν σωστά. Με την κωδικοποίηση Fibonacci, από την άλλη, ένα αλλαγμένο βίτ μπορεί να προκαλέσει ένα σύμβολο να διαβαστεί ως δύο, ή να προκαλέσει δύο σύμβολα να διαβαστούν λανθασμένα ως ένα, αλλά η ανάγνωση ενός "0" από τη ροή θα σταματήσει τα σφάλματα από το να διαδοθούν περαιτέρω. Επειδή η μόνη ροή που δεν έχει "0" είναι μια ροή από σύμβολα "11", η συνολική απόσταση επεξεργασίας μεταξύ μιας ροής που καταστράφηκε από ένα μοναδικό σφάλμα βίτ και της αρχικής ροής είναι το πολύ τρία.

Αυτή η προσέγγιση, κωδικοποίηση χρησιμοποιώντας ακολουθίες συμβόλων, στην οποία κάποια μοτίβα (όπως το "11") είναι απαγορευμένα, μπορεί να γενικευτεί ελεύθερα.[1]

Παράδειγμα[επεξεργασία]

Ο παρακάτω πίνακας δείχνει ότι ο αριθμός 65 αναπαρίσταται στην κωδικοποίηση Fibonacci ως 0100100011, αφού 65 = 2 + 8 + 55. Οι δύο πρώτοι αριθμοί Fibonacci (0 και 1) δεν χρησιμοποιούνται, και προστίθεται πάντα ένα επιπλέον 1.

Γενικεύσεις[επεξεργασία]

Αν κωδικοποιούμε τους θετικούς ακεραίους, τότε οι λέξεις Fibonacci είναι δυαδικές αλυσίδες που τελειώνουν με "11" και δεν περιέχουν άλλες εμφανίσεις του "11". Αυτό μπορεί να γενικευτεί σε δυαδικές αλυσίδες που τελειώνουν με Ν συνεχόμενα 1s και δεν περιέχουν άλλες εμφανίσεις των Ν συνεχόμενα 1s. Για παράδειγμα, για Ν = 3 οι θετικοί ακεραίοι κωδικοποιούνται ως 111, 0111, 00111, 10111, 000111, 100111, 010111, 110111, 0000111, 1000111, 0100111, …. Σε αυτή την περίπτωση, ο αριθμός των κωδικοποιήσεων ως συνάρτηση του μήκους της αλυσίδας δίνεται από την ακολουθία των αριθμών tribonacci.

Για γενικούς περιορισμούς που ορίζουν ποια σύμβολα επιτρέπονται μετά από ένα δεδομένο σύμβολο, η μέγιστη πληροφοριακή ταχύτητα μπορεί να επιτευχθεί βρίσκοντας πρώτα τις οπτιμοποιημένες πιθανότητες μετάβασης χρησιμοποιώντας έναν τυχαίο περίπατο μέγιστης εντροπίας, και μετά χρησιμοποιώντας έναν κωδικοποιητή εντροπίας (με ανταλλαγμένο κωδικοποιητή και αποκωδικοποιητή) για να κωδικοποιήσει ένα μήνυμα ως μια ακολουθία συμβόλων που ικανοποιούν τις βρεθείσες οπτιμοποιημένες πιθανότητες μετάβασης.

Δείτε επίσης[επεξεργασία]

Βιβλιογραφία[επεξεργασία]

Πρόσθετη ανάγνωση[επεξεργασία]

  • Script error: No such module "citation/CS1".


Read or create/edit this page in another language[επεξεργασία]