Data Compression and Algorithms

43
Data Compression and Algorithms

description

Data Compression and Algorithms. Συμπίεση (1). στην αποθήκευση στην μεταφορά δεδομένων μέσα από δίκτυα στην διαχείριση τους. Οι μέθοδοι συμπίεσης διακρίνονται σε :. - PowerPoint PPT Presentation

Transcript of Data Compression and Algorithms

Page 1: Data Compression and Algorithms

Data Compression and Algorithms

Page 2: Data Compression and Algorithms

Συμπίεση (1)

στην αποθήκευση

στην μεταφορά δεδομένων μέσα από δίκτυα

στην διαχείριση τους

Οι μέθοδοι συμπίεσης διακρίνονται σε:

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

Μεθόδους με απώλεια πληροφορίας που συμπιέζουν τα δεδομένα απορρίπτοντας μη ουσιώδη πληροφορία. Οι συγκεκριμένες μέθοδοι χρησιμοποιούν απωλεστικούς (lossy) αλγορίθμους και επιτυγχάνουν υψηλό λόγο συμπίεσης.

Page 3: Data Compression and Algorithms

Συμπίεση (2)Μία απλοποιημένη ταξινόμηση των τεχνικών συμπίεσης είναι:

Κωδικοποίηση Εντροπίας (entropy coding)

- δεν λαμβάνεται υπόψη το είδος της πληροφορίας που θα συμπιεστεί

- αντιμετωπίζεται η πληροφορία ως απλή ακολουθία bits

- κωδικοποίηση χωρίς απώλειες

Κωδικοποίηση Πηγής (source encoding)

- οι μετασχηματισμοί που υφίσταται το αρχικό σήμα εξαρτώνται άμεσα από το τύπο του

- μπορούν να παράγουν μεγαλύτερα ποσοστά συμπίεσης

- μειονεκτούν σε σταθερότητα

- λειτουργεί με απώλειες και χωρίς απώλειες.

Page 4: Data Compression and Algorithms

Συμπίεση (3)

Τεχνικές Κωδικοποίησης Εντροπίας

- περιορισμός επαναλαμβανόμενων ακολουθιών

- στατιστική κωδικοποίηση

Τεχνικές Κωδικοποίησης Πηγής

- κωδικοποίηση μετασχηματισμού

- διαφορική ή προβλεπτική κωδικοποίηση

- διανυσματική κβαντοποίηση.

Page 5: Data Compression and Algorithms

Κωδικοποίηση Μετασχηματισμού

Η κωδικοποίηση μετασχηματισμού χρησιμοποιείται συνήθως στη συμπίεση εικόνων. Στη κωδικοποίηση μετασχηματισμού, το σήμα υφίσταται ένα μαθηματικό μετασχηματισμό από το αρχικό πεδίο του χρόνου ή του χώρου σε ένα αφηρημένο πεδίο το οποίο είναι πιο κατάλληλο για συμπίεση. Αυτή η διαδικασία είναι αντιστρεπτή, δηλαδή υπάρχει ο αντίστροφος μετασχηματισμός που θα επαναφέρει το σήμα στην αρχική του μορφή.

Ένα τέτοιος μετασχηματισμός είναι ο μετασχηματισμός Fourier. Μέσω του μετασχηματισμού Fourier μια συνάρτηση του χρόνου f(t) μπορεί να μετασχηματιστεί σε μια g(λ) στο πεδίο των συχνοτήτων. Στη φασματική (στο πεδίο των συχνοτήτων) αναπαράσταση των εικόνων, οι συχνότητες περιγράφουν πόσο γρήγορα μεταβάλλονται τα χρώματα και η απόλυτη φωτεινότητα.

Εκτός από τον μετασχηματισμό Fourier υπάρχουν και άλλοι, όπως οι μετασχηματισμοί των Hadamar, Haar και των Karhunen-Loeve. Ανάλογα με τις ιδιότητες του τύπου της πληροφορίας που θέλουμε να συμπιέσουμε, επιλέγουμε και τον καταλληλότερο μετασχηματισμό.

Page 6: Data Compression and Algorithms

Διαφορική Κωδικοποίηση1. Απλή Διαφορική Παλμοκωδική Διαμόρφωση (DPCM)

Η διαφορική παλμοκωδική διαμόρφωση είναι η πιο απλή από τις τρεις μορφές διαφορικής κωδικοποίησης. Η προβλεπόμενη τιμή κάθε δείγματος είναι απλά η τιμή του προηγούμενου δείγματος.

2. Δέλτα Διαμόρφωση Στη δέλτα διαμόρφωση, η διαφορά μεταξύ της προβλεπόμενης και της τρέχουσας τιμής του δείγματος κωδικοποιείται με ένα μόνο bit. Αυτό σημαίνει ότι κάθε δείγμα μπορεί να είναι είτε μεγαλύτερο είτε μικρότερο κατά ένα κβάντο από το προηγούμενο του. Η δέλτα διαμόρφωση είναι κατάλληλη για σήματα χαμηλών συχνοτήτων.

3. Προσαρμοστική Διαφορική Παλμοκωδική Διαμόρφωση

. Στην ADPCM, αντί να χρησιμοποιείται ένας σταθερός μηχανισμός πρόβλεψης, χρημοποιείται ένας δυναμικός μηχανισμός που προσαρμόζεται ανάλογα με τα χαρακτηριστικά του προς δειγματοληψία σήματος. Κατά τα άλλα, όπως και στην απλή DPCM, μόνο η διαφορά μεταξύ της πραγματικής και της προβλεπόμενης τιμής κάθε δείγματος μεταδίδεται.

Page 7: Data Compression and Algorithms

Διανυσματική Κβαντοποίηση

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

Υπάρχει ένας πίνακας που περιέχει ένα σύνολο από πρότυπα διανύσματα. Αυτός ο πίνακας αποτελεί το λεξικό της μεθόδου και πρέπει να είναι διαθέσιμο τόσο κατά την συμπίεση, όσο και την αποσυμπίεση των δεδομένων. Το λεξικό μπορεί να είναι προκαθορισμένο, δηλαδή το ίδιο σε όλες τις διαδικασίες συμπίεσης ή δυναμικό. Στην τελευταία περίπτωση, κάθε φορά που ξεκινά η συμπίεση των δεδομένων, ένα νέο λεξικό δημιουργείται.

. Η συμπίεση έγκειται στην αντικατάσταση κάθε διανύσματος της αρχικής πληροφορίας με το πιο ταιριαστό από τα πρότυπα του λεξικού. Κάνοντας χρήση του λεξικού, αντί για ολόκληρα τα πρότυπα, μόνο η ετικέτα τους ή ο αύξων αριθμός τους στο λεξικό είναι απαραίτητο να αποθηκευτεί.

Page 8: Data Compression and Algorithms

Συμπίεση Κειμένου

Αλγόριθμοι συμπίεσης

Μοντέλα για πρόβλεψη των πιθανοτήτων εμφάνισης των διαφόρων συμβόλων

Κάτω όριο συμπίεσης

Page 9: Data Compression and Algorithms

Μοντέλα

Στατικά Ημιστατικά Προσαρμοστικά ή δυναμικά

Page 10: Data Compression and Algorithms

Προσαρμοστικά Μοντέλα

PPM (Prediction by Partial Matching) Burrows-Wheeler (μετασχηματισμός) Markov Models Word-based Compressors (διαφορετικό μοντέλο για λέξεις

και διαφορετικό μοντέλο για αναπαράσταση κενών (αν υπάρχουν))

Page 11: Data Compression and Algorithms

PPM Model-PPMA: escape method A, το escape σύμβολο παίρνει το 1 ως συχνότητα εμφάνισης στη συμπίεση

- PPMC: η πιθανότητα του escape γίνεται r/(n+r), όπου r είναι ο αριθμός των διακριτών όρων, και n είναι ο συνολικός αριθμός προηγουμένως εμφανιζομένων συμβόλων

- PPMD: δίνει μόνο το μισό βάρος σε διακριτές εμφανίσεις, οπότε το escape σύμβολο παίρνει βάρος r/(2n), και η πιθανότητα ενός συμβόλου που έχει εμφανιστεί ci φορές γίνεται (2ci-1)/(2n)

- Method_X: η συχνότητα εμφάνισης των λέξεων που έχουν εμφανιστεί μία φορά (hapax legomena) χρησιμοποιείται για εκτίμηση της πιθανότητας εμφάνισης του ESCAPE συμβόλου (εάν t1 τότε η συχνότητα εμφάνισης γίνεται

(t1+1)/(n+t1+1), και για ένα σύμβολο γίνεται ci/(n+t1+1).

- PPM* : γενική παραμετροποιημένη μέθοδος.

Page 12: Data Compression and Algorithms

Περιγραφή του Burrows Wheeler (1)

Ευθύς μετασχηματισμός: Η είσοδος του αλγορίθμου είναι η s. Προσθέτουμε ένα ειδικό σύμβολο • (που υποδηλώνει το τέλος της συμβολοσειράς)

στο τέλος της s και το οποίο είναι μικρότερο από κάθε σύμβολο του Α, Σχηματίζουμε έναν (n+1) x (n+1) πίνακα T με στοιχεία τα σύμβολα του της

συμβολοσειράς s. Στην 1η γραμμή του πίνακα βάζουμε το s•, στη 2η γραμμή την αριστερή κυκλική μετατόπιση (κατά μία θέση) της 1ης (γραμμής) κ.ο.κ.

Διατάσουμε λεξικογραφικά τις συμβολοσειρές των γραμμών από τα δεξιά προς τα αριστερά . Τελικά η 1η στήλη του πίνακα T χωρίς το • δίνει την έξοδο του μετασχηματισμού (bwt(s).

Η έξοδος είναι το bwt(s) και ένας δείκτης Ι στη γραμμή που είχε το • σαν 1ο στοιχείο.

Page 13: Data Compression and Algorithms

Περιγραφή του Burrows Wheeler (2) Ευθύς μετασχηματισμός: Στον παρακάτω πίνακα φαίνεται ο T για s=mississippi. H

έξοδος είναι: msspipissii και I=3

Page 14: Data Compression and Algorithms

Περιγραφή του Burrows Wheeler (3)Αντίστροφος μετασχηματισμός:

Είσοδος: το bwt(s) και τον δείκτη Ι

Έξοδος: η s

Βασίζεται στις ακόλουθες ιδιότητες του BWT:

1) Όλες οι στήλες του πίνακα που ορίσαμε είναι μεταθέσεις των συμβόλων της s.

2) Για κάθε i = 2,3,…,n+1 ο χαρακτήρας στη θέση (i,n+1) προηγείται άμεσα (δηλαδή είναι ο αμέσως προηγούμενος) του (i,1) στη s.

3) Για κάθε χαρακτήρα η i-οστή εμφάνισή του στην 1η στήλη του πίνακα αντιστοιχεί στην i-οστή εμφάνισή του και στην τελευταία στήλη (δηλαδή στις θέσεις αυτές αναφέρεται το ίδιο σύμβολο).

Page 15: Data Compression and Algorithms

Περιγραφή του Burrows Wheeler (4)

Αντίστροφος μετασχηματισμός: Διατάσσουμε τα στοιχεία του bwt(s) κατά αύξουσα σειρά

(ουσιαστικά παίρνουμε τη τελευταία στήλη L) Αφού το • είναι το μικρότερο από όλα τα σύμβολα του Α θα εμφανίζεται 1ο .

Από την 2η παρατήρησή μας προκύπτει άμεσα ότι το 1ο σύμβολο της bwt(s) είναι 1ο και στην s.

Από την 3η παρατήρηση βρίσκουμε τη θέση του συγκεκριμένου συμβόλου στη L οπότε χρησιμοποιώντας και πάλι τη 2η παρατήρηση βρίσκουμε το επόμενο σύμβολο της s. Συνεχίζοντας με τον ίδιο τρόπο ως το • βρίσκουμε τελικά την s.

Το σημαντικό είναι ότι δε χρειάζεται ο T!!!

Page 16: Data Compression and Algorithms

Περιγραφή του Burrows Wheeler (5)

mississippi•ississippi•mssissippi•misissippi•misissippi•miss ssippi•missi sippi•missis ippi•mississ ppi•mississi pi•mississip i•mississipp •mississippi

mississippi•ssissippi•mi•mississippi

ppi•mississi ississippi•m pi•mississip i•mississipp sissippi•mis sippi•missis issippi•missippi•mississ

ssippi•missi

Page 17: Data Compression and Algorithms

Περιγραφή του Burrows Wheeler (6)

Θέτουμε το bw(s) να είναι η πρώτη στήλη του διατεταγμένου πίνακα χωρίς το σύμβολο

Η έξοδος του BWT είναι το bw(s) και ο δείκτης Ι που δείχνεί τη θέση που βρίσκεται το στο bw(s)

- Στο παράδειγμα μας είναι bw(s) = msspipissii

m ississippi•s sissippi•mi• mississippi

p pi•mississi i ssissippi•m p i•mississip i •mississipp s issippi•mis s ippi•missis i ssippi•miss i ppi•mississ

s sippi•missi

και Ι=3

Page 18: Data Compression and Algorithms

Περιγραφή του Burrows Wheeler (7)

Βήματα-ΠαρατηρήσειςΒήματα-Παρατηρήσεις

Εισάγουμε το στη θέση Ι του bw(s) παίρνοντας την πρώτη στήλη F διατεταγμένου πίνακα

Διατάσσοντας τα στοιχεία του bw(s) λαμβάνουμε την τελευταία στήλη L του διατεταγμένου πίνακα

Για κάθε i=2,…,|s|+1, το Fi είναι το σύμβολο που ακολουθεί το Li στο s

Page 19: Data Compression and Algorithms

Η συμβολοσειρά F :

Παράδειγμα:Παράδειγμα:

1 2 3 4 5 6 7 8 9 10 11 12

F m s s p i p i s s i i

L i i i i m p p s s s s

s = m i ssissippi

Page 20: Data Compression and Algorithms

Compression Algorithms

Περιγραφή αλγορίθμων συμπίεσης κειμένου:

Huffman Coding (Static & Dynamic)

Arithmetic Coding

LZW Coding

Page 21: Data Compression and Algorithms

Static Huffman Coding

Η μέθοδος Huffman είναι ένας στατιστικός τρόπος κωδικοποίησης.

Η κωδικοποίηση του κειμένου αφορά την αντικατάσταση κάθε συμβόλου με μία κωδική λέξη.

Χρησιμοποιεί την έννοια του prefix code.

Αναποτελεσματική τεχνική (ερμηνεία;):

Pr(s1)+log(2loge/e)=Pr(s1)+0.086

Page 22: Data Compression and Algorithms

Κωδικοποίηση

Η κωδικοποίηση αποτελείται απο 3 βήματα:

Μέτρηση των συχνοτήτων εμφάνισης των χαρακτήρων

Κατασκευή του prefix code

Κωδικοποίηση του κειμένου

Page 23: Data Compression and Algorithms

1ο Βήμα: Μέτρηση Συχνοτήτων Εμφάνισης Χαρακτήρων

Κατά το 1ο βήμα του αλγορίθμου μετρώνται οι συχνότητες εμφάνισης των χαρακτήρων στο αρχικό κείμενο. Χρησιμοποιείται ο ειδικός χαρακτήρας END για το τέλος τουκειμένου.

Σε περιπτώσεις όπου υπάρχουν στατιστικές έτοιμες για τις εμφανίσεις των στοιχείων του αλφαβήτου το 1ο βήμαπαραλείπεται.

Page 24: Data Compression and Algorithms

2ο Βήμα: Κατασκευή του Δέντρου του prefix code

Το δέντρο του prefix code που καλείταιHuffman tree κατασκευάζεται ως εξής: Δημιουργία ενός δέντρου με ένα κόμβο για κάθε χαρακτήρα

a θέτοντας weight(t) = freq(a) και label(t) = a Επανάληψη

Αποσπάμε τα δύο δέντρα με το μικρότερο βάρος t1 και t2 Δημιουργούμε ένα καινούργιο δέντρο t3 που έχει

αριστερό υπόδεντρο το t1, δεξί το t2 και βάρος weight(t3) = weight(t1) + weight(t2)

Επανάληψη μέχρι να μείνει ένα δέντροΑφού χτιστεί το δέντρο κωδικοποίησης είναι δυνατόν ναανακτηθούν κωδικές λέξεις που συνδέθηκαν με χαρακτήρεςμε μία απλή αναζήτηση (depth first-search),

Page 25: Data Compression and Algorithms

3ο Βήμα: Κωδικοποίηση του κειμένου

Η κωδικοποίηση γίνεται με τα εξής βήματα: Δημιουργία επικεφαλίδας του συμπιεσμένου αρχείου, που

περιέχει το δέντρο κωδικοποίησης και τις κωδικές λέξεις, με τον αλγόριθμο H-ENCODE-TREE (fout, t)

Κωδικοποίηση του κειμένου και αποθήκευση στο συμπιεσμένο αρχείο, με τον αλγόριθμο H-ENCODE-TEXT (fin, fout)

Page 26: Data Compression and Algorithms

Huffman Encoding

Η τελική υλοποίηση του αλγόριθμου κωδικοποίησης Huffman είναι:

H-ENCODING (fin, fout)

1. H-COUNT (fin)

2. t H-BUILD-TREE

3. H-BUILD-CODE (t, 0)

4. H-ENCODE-TREE (fout, t)

5. H-ENCODE-TEXT (fin, fout)

Η κατασκευή του δέντρου έχει κόστος Ο(σ log σ) αν η

ταξινόμηση των φύλλων είναι υλοποιημένη αποδοτικά. Η

υπόλοιπη διαδικασία έχει γραμμικό χρόνο ανάλογο με το

μέγεθος του αρχικού και του συμπιεσμένου κειμένου.

Page 27: Data Compression and Algorithms

Decoding

Η αποκωδικοποίηση κειμένου κωδικοποιημένου με τον αλγόριθμο Huffman γίνεται με τα εξής βήματα:

Χτίσιμο του δέντρου κωδικοποίησης, με τον αλγόριθμο H-REBUILD-TREE (fin, t)

Ανάκτηση του αρχικού κειμένου, με τον αλγόριθμο H-DECODE-TEXT (fin, fout, root)

Page 28: Data Compression and Algorithms

Huffman Decoding

Η τελική υλοποίηση του αλγόριθμου αποκωδικοποίησης Huffman είναι:

H-DECODING (fin, fout)

1. create a new node root

2. H-REBUILD-TREE (fin, root)

3. H-DECODE-TEXT (fin, fout, root )

Page 29: Data Compression and Algorithms

Dynamic Huffman Coding

Διορθώνει τα δύο βασικά μειονεκτήματα της στατικής μεθόδου Huffman.

– Αν οι συχνότητες δεν είναι γνωστές από την αρχή πρέπει να διαβαστεί το κείμενο δύο φορές

– Το δέντρο κωδικοποίησης πρέπει να περιέχεται στο συμπιεσμένο αρχείο.

Page 30: Data Compression and Algorithms

Κατά τη δυναμική μέθοδο Huffman: Το δέντρο κωδικοποίησης ενημερώνεται κάθε φορά που

διαβάζεται ένα σύμβολο από το κείμενο εισόδου Το τρέχων δέντρο είναι ένα Huffman δέντρο σχετικό με το

κομμάτι του κειμένου που ήδη έχουμε επεξεργαστεί Η αποδοτικότητα της μεθόδου βασίζεται σε ένα

χαρακτηριστικό των δέντρων Huffman, της siblings ιδιότητας

Page 31: Data Compression and Algorithms

Encoding

Η κωδικοποίηση γίνεται ως εξής 1ο Βήμα: αρχικοποίηση δέντρου, με τη συνάρτηση DH-

INIT 2ο Βήμα: διάβασμα του αρχείου και για κάθε α

– Κωδικοποίηση του συμβόλου, με τη συνάρτηση DH-ENCODE-SYMBOL(a, fout)

– Ενημέρωση του δέντρου με την DH-ADD-NODE(a)

Page 32: Data Compression and Algorithms

Ο ολοκληρωμένος αλγόριθμος για τη δυναμική κωδικοποίηση είναι:

DH-ENCODING (fin, fout)

1. DH-INIT

2. while not end of file fin and a is the next symbol

3. do DH-ENCODE-SYMBOL (a, fout)

4. DH-UPDATE(a)

5. DH-ENCODE-SYMBOL(END, fout)

Page 33: Data Compression and Algorithms

Decoding

Η αποκωδικοποίηση γίνεται ως εξής: 1ο Βήμα: Αρχικοποίηση του δέντρου όπως και στην κωδικοποίηση 2ο Βήμα: Ακολουθείται το κατάλληλο μονοπάτι στο δέντρο

ανάλογα με τα bits εισόδου μέχρι την εξαγωγή του χαρακτήρα, μέχρι τον χαρακτήρα END. Η αποκωδικοποίηση του συμβόλου γίνεται με την συνάρτηση DH-DECODE-SYMBOL (fin)

Page 34: Data Compression and Algorithms

Η ολοκληρωμένη αποκωδικοποίηση Huffman είναι:

DH-DECODING (fin, fout)

1. DH-INIT

2. a DH-DECODE-SYMBOL (fin)

3. while a ≠ END

4. do write a in fout

5. DH-UPDATE (a)

6. a DH-DECODE-SYMBOL (fin)

Page 35: Data Compression and Algorithms

Η διαδικασία ενημέρωσης του δέντρου κατά τη διάρκεια των φάσεων κωδικοποίησης και αποκωδικοποίησης γίνεται με τη συνάρτηση DH-UPDATE(a):Για κάθε σύμβολο α Το βάρος του αντίστοιχου φύλλου n αυξάνεται κατά 1 Σε περίπτωση που δεν ικανοποιείται η ιδιότητα siblings ο

κόμβος n ανταλλάσσει θέσεις με τον πλησιέστερο κόμβο m (m<n) στη λίστα έτσι ώστε weight(m) < weight(n).

Μετά η ίδια λειτουργία επαναλαμβάνεται στον πατέρα του n έως ότου φτάσουμε στη ρίζα.

Page 36: Data Compression and Algorithms

Κανονική Κωδικοποίηση Huffman (1)To assign a canonical Huffman to a set of symbols, supposing that symbol i is assigned a code of li bits, maxlength the maximum length and n the number of distinct symbols

1.For i=1 to maxlength do numl[l]=0

2. For i=1 to n numl[li]=num[li]+1

Number of codes of length l is stored in numl[l]

3.Set firstcode[maxlength]=0

4.For l=maxlength-1 downto 1 do

5.firstcode[l]=(firstcode[l+1]+num[l+1])/2

Integer for first code of length l is stored in firstcode[l]

6.For l=1 to maxlength nextcode[l]=firstcode[l]

7.For i=1 to n do

codeword[i]=nextcode[li]

symbol[li, nextcode[li]-firstcode[li]]=i

nextcode[li]=nextcode[li]+1

The rightmost li bits of the integer codeword[i] are the code for symbol i.

Page 37: Data Compression and Algorithms

Κανονική Κωδικοποίηση Huffman (2)

To decode a symbol represented in a canonical Huffman Code

1.Set v=nextinputbit()

Set l=1

2.While v<firstcode[l] do

(a) set v=2*v+nextinputbit()

(b) set l=l+1

Integer v is now a legitimate code of l bits

3.Return symbol[l, v-firstcode[l]]

This is the index of the decoded symbol

Page 38: Data Compression and Algorithms

Arithmetic CodingΒασική ιδέα: Θεωρεί ένα σύμβολο σαν ψηφία ενός αριθμητικού συστήματος και τα

κείμενα σαν δεκαδικά μέρη αριθμών μεταξύ του 0 και του 1. Το μήκος του διαστήματος που ανατίθεται σε κάθε ψηφίο (είναι 0.1 για

ψηφία στο συνηθισμένο δεκαδικό σύστημα) φτιάχνεται αναλογικά με την συχνότητα εμφάνισης του αντίσοτιχου δεκαδικού αριθμού.

Page 39: Data Compression and Algorithms

EncodingΤο διάστημα που συσχετίζεται με κάθε σύμβολο ai Є Σ (1=<i=<σ) συμβολίζεται σαν Ι(ai ) =[li, hi[. Τα διαστήματα ικανοποιούν τις συνθήκες: l1=0, hσ=1 και li=hi-1 for l<i=<σ.

AR-ENCODE (fin)1. l 02. h13. while not end of file fin and ai is the next symbol4. do5.

6. return(l)

illhll *)( ihlhlh *)(

Page 40: Data Compression and Algorithms

Decoding

Η αποκωδικοποίηση του αριθμού l γίνεται ως ακολούθως: πρώτα βρίσκουμε τo ai σύμβολο, που να αντιστοιχεί στο διάνυσμα του αριθμού, παράγουμε το ai και ύστερα αντικαθιστούμε το l με l’ που ορίζεται από:

Η ίδια διαδικασία επαναλαμβάνεται μέχρι l=0. AR-DECODE (l,fout)1. while l!=0

2. do find ai such that

3. write ai in file fout

ii

i

lh

lll

)( iaIl )/()( iii lhlll

Page 41: Data Compression and Algorithms

LZW Coding

Χρησιμοποιεί κομμάτια (segments) του αρχικού κειμένου που αποθηκεύονται σε λεξικό που φτιάχνεται κατά τη συμπίεση. Τα κομμάτια του λεξικού που συναντώνται αργότερα αντικαθίστανται από τη θέση τους στο λεξικό.

Το λεξικό είναι βασική έννοια της μεθόδου. Είναι κλειστό ως προς τα προθέματα και με κατάλληλη τεχνική hashing η υλοποίησή του είναι αποδοτική. Υλοποιείται με ένα trie.

Page 42: Data Compression and Algorithms

EncodingΤο λεξικό αρχικοποιείται με αλφαριθμητικά μεγέθους 1, τους χαρακτήρες του αλφαβήτου. Έστω a το επόμενο σύμβολο (αμέσως επόμενο από τη δεδομένη εμφάνιση w). Τότε προχωρούμε ως ακολούθως:

Αν το wa δεν υπάρχει στο λεξικό, γράφουμε τη θέση του w στο αρχείο εξόδου και προσθέτουμε το wa στο λεξικό. Έπειτα θέτουμε το w σε a και επεξεργαζόμαστε το επόμενο σύμβολο (επόμενο του a).

Αν wa υπήρχε στο λεξικό επεξεργαζόμαστε το επόμενο σύμβολο με το κομμάτι wa αντί για w.

Page 43: Data Compression and Algorithms

DecodingΗ μέθοδος απoκωδικοποίησης είναι συμμετρική του αλγορίθμου συμπίεσης. Το λεξικό ανακτάται καθώς η διαδικασία αποσυμπίεσης προχωρά, ως εξής:

Διάβασε ένα κωδικό c στο συμπιεσμένο αρχείο, Γράψε στο αρχείο εξόδου το κομμάτι w που έχει θέση c στο λεξικό, Πρόσθεσε τη λέξη wa στο λεξικό όπου a είναι το πρώτο γράμμα του

επόμενου κομματιού.

- υπάρχει πρόβλημα αν η επόμενη θέση δεν υπάρχει, αυτό μπορεί να συμβεί μόνο αν η επόμενη θέση είναι του wα, κάτι το οποίο σημαίνει ότι το w μπορει να γραφεί ως αz και συνεπώς το αzα προστίθεται στο λεξικό.