ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 1 Συμβολοσειρές, Πίνακες, Δείκτες

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 3

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Υλοποίηση Εφαρμογής Εστιατορίου (take-away)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 3 Μοντελοποίηση Εστιατορίου (take-away)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στην Πληροφορική ΓΕΝΙΚΟ ΤΜΗΜΑ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ TEI ΧΑΛΚΙ ΑΣ

Φύλλο εργασίας για την κωδικοποίηση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 131: ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I ΕΡΓΑΣΙΑ 2

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

Δομές Δεδομένων και Αλγόριθμοι

Προγραμματισμός Ι (HY120)

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Πληροφορική 2. Δομές δεδομένων και αρχείων

Σχεδίαση με Ηλεκτρονικούς Υπολογιστές (ΗΥ)

Τετάρτη 5-12/11/2014. ΣΗΜΕΙΩΣΕΙΣ 3 ου και 4 ου ΜΑΘΗΜΑΤΟΣ ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΑΡΧΙΤΕΚΤΟΝΙΚΗ Η/Υ Α ΕΞΑΜΗΝΟ

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Διαδικασιακός Προγραμματισμός

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Υπολογιστές και Πληροφορία 1

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

Αναπαράσταση Δεδομένων

ΠΛΗ21 Κεφάλαιο 2. ΠΛΗ21 Ψηφιακά Συστήματα: Τόμος Α Κεφάλαιο: 2 Δυαδική Κωδικοποίηση

7ο ΕΡΓΑΣΤΗΡΙΟ AAAABBBBAAAAABBBBBBCCCCCCCCCCCCCCBBABAAAABBBBBBCCCCD

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

ΕΡΓΑΣΙΑ 3. Παίζοντας Sudoku. Ημερομηνία Ανάρτησης: 16/03/2018 Ημερομηνία Παράδοσης: 03/04/2018, 09:00

Εισαγωγή στην επιστήμη των υπολογιστών. Υπολογιστές και Δεδομένα Κεφάλαιο 2ο Αναπαράσταση Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ, ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 12

Δεδομένα & Αναπαράσταση Πληροφορίας

Β1.1 Αναπαράσταση Δεδομένων και Χωρητικότητα Μονάδων Αποθήκευσης

Εισαγωγή στην Επιστήμη των Υπολογιστών

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Λειτουργικό Σύστημα: διαχείριση πόρων. Διαχείριση αρχείων. Τι είναι ένα αρχείο ; Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Αριθμητικά Συστήματα

Προγραμματισμός Υπολογιστών

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 7 και 8: Αναπαραστάσεις. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Προγραμματισμός Χειμερινό Εξάμηνο 2014

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

7η Σειρά Ασκήσεων. Μπορείτε, αν θέλετε, να χρησιμοποιήσετε τον τύπο string της ΗΡ Pascal και τις αντίστοιχες συναρτήσεις (κεφ 10.1 των σημειώσεων).

Ημερομηνία Ανάρτησης: 08/1/2018 Ημερομηνία Παράδοσης: - Αρχές Γλωσσών Προγραμματισμού

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Συστήματα αρίθμησης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Δομημένος Προγραμματισμός (ΤΛ1006)

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Μάθημα 9 ο : Σύνολα χαρακτήρων και UNICODE. Γεώργιος Πετάσης. Ακαδημαϊκό Έτος:

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΛΟΠΟΝΝΗΣΟΥ, ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ΕΡΓΑΣΙΑ 2. Κατασκευάζοντας Ημερολόγια. Ημερομηνία Ανάρτησης: 23/02/2018 Ημερομηνία Παράδοσης: 13/03/2018, 09:00

Βασική δοµή και Λειτουργία Υπολογιστή

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Ι (ΗΥ120)

Τα µπιτ και η σηµασία τους. Σχήµα bit. ΚΕΦΑΛΑΙΟ 1: Αποθήκευση εδοµένων (1/2) 1.7 Αποθήκευση κλασµάτων 1.8 Συµπίεση δεδοµένων 1.9 Σφάλµατα επικοινωνίας

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Κωδικοποίηση Πηγής. Η λειτουργία ενός συστήματος επικοινωνίας (γενικό διάγραμμα):

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ, ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Μοντελοποίηση υπολογισμού. Θέματα Υπολογισμού στον Πολιτισμό Πεπερασμένα αυτόματα

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Παίζοντας Τόμπολα. Ημερομηνία Ανάρτησης: 16/03/2017 Ημερομηνία Παράδοσης: 30/03/2017, 23:59

Μάθημα 2: Παράσταση της Πληροφορίας

ΠΛΗΡΟΦΟΡΙΚΗ I Ενότητα 6

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τα επιμέρους τμήματα Η ΟΜΗ TOY ΥΠΟΛΟΓΙΣΤΗ. Αναπαράσταση μεγεθών. Αναλογική αναπαράσταση ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ ΜΟΝΑ Α ΕΛΕΓΧΟΥ

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Εισαγωγή. Interface της εφαρμογής. Κ24: Προγραμματισμός Συστήματος - 1η Εργασία, Εαρινό Εξάμηνο 2019 Προθεσμία Υποβολής: Παρασκευή 15 Μαρτίου, 23:59

Πληροφορική. Ενότητα 4 η : Κωδικοποίηση & Παράσταση Δεδομένων. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

Κωδικοποίηση Πηγής. Δρ. Α. Πολίτης

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματιστικές τεχνικές

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δύο είναι οι κύριες αιτίες που μπορούμε να πάρουμε από τον υπολογιστή λανθασμένα αποτελέσματα εξαιτίας των σφαλμάτων στρογγυλοποίησης:

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

Τυπικά θέματα εξετάσεων. ΠΡΟΣΟΧΗ: Οι ερωτήσεις που παρατίθενται ΔΕΝ καλύπτουν την πλήρη ύλη του μαθήματος και παρέχονται απλά ενδεικτικά

Κ15 Ψηφιακή Λογική Σχεδίαση 2: Δυαδικό Σύστημα / Αναπαραστάσεις

Συμπίεση Δεδομένων Δοκιμής (Test Data Compression) Νικολός Δημήτριος, Τμήμα Μηχ. Ηλεκτρονικών Υπολογιστών & Πληροφορικής, Παν Πατρών

Σειρά Προβλημάτων 3 Λύσεις

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 035: Δομές Δεδομένων και Αλγόριθμοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών Χειμερινό Εξάμηνο 2012 ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων Διδάσκων Καθηγητής: Παναγιώτης Ανδρέου Ημερομηνία Υποβολής: 01/11/2012 Ημερομηνία Παράδοσης: 25/11/2012 @23:59 Υπεύθυνος Εργαστηρίου: Παύλος Αντωνίου (paul.antoniou@cs.ucy.ac.cy) ΠΕΡΙΓΡΑΦΗ Σε αυτή την άσκηση καλείστε να υλοποιήσετε πρόγραμμα για την κωδικοποίηση και αποκωδικοποίηση συμβολοσειρών με σκοπό η αποθήκευσή τους στο δίσκο να χρειάζεται μικρότερο χώρο (σε bytes). Γενικά περί κωδικοποίησης Οι περισσότερες γλώσσες προγραμματισμού χρησιμοποιούν την κωδικοποίηση ASCII (American Standard Code for Information Interchange). Στην κωδικοποίηση ASCII, κάθε χαρακτήρας κωδικοποιείται με τον ίδιο αριθμό από bits, συγκεκριμένα 8. Αν θέλετε να δείτε την κωδικοποίηση ASCII τότε μπορείτε να επισκεφθείτε την ιστοσελίδα http://www.lookuptables.com/.

Ένας τρόπος να δημιουργήσετε το δικό σας ASCII table είναι να καταλάβετε πως αντιπροσωπεύονται οι χαρακτήρες στην γλώσσα C. Σκεφθείτε το επόμενο παράδειγμα: char c='a'; printf("char[%c]\n", c); printf("ascii[%d]\n", c); Το αποτέλεσμα αυτού του κώδικα είναι το εξής: Char[a] ASCII[97] Με αυτό τον τρόπο μπορεί να βρεθεί το ASCII code για κάθε χαρακτήρα στην γλώσσα C. Πως αποθηκεύονται όμως οι πληροφορίες σε ένα αρχείο; Αφού κάθε χαρακτήρας μπορεί να αναπαρασταθεί από 8 bits τότε σε κάθε αρχείο με N χαρακτήρες χρειαζόμαστε Nx8bits για να το αποθηκεύσουμε. Παράδειγμα Σκεφτείτε το αρχείο input.txt το οποίο έχει την εξής συμβολοσειρά μόνο αποθηκευμένη. abaacbdace ASCII coding Char ASCII Binary a 97 11100001 b 98 11100010 c 99 11100011 d 100 11100100 e 101 11100101 Για να αποθηκεύσουμε αυτή την συμβολοσειρά binary, θα χρειαστούμε να αποθηκεύσουμε το εξής: abaacbdace 11100001 11100010 11100001 11100001 11100011 11100010 11100100 11100001 11100011 11100101 Συνολικά θα χρειαστούμε 10x8bits = 80 bits. Υπάρχει καλύτερος τρόπος για να αποθηκεύσουμε αυτή την συμβολοσειρά;

Η απάντηση είναι φυσικά ΝΑΙ και είναι η κωδικοποίηση. Αφού η συμβολοσειρά μας αποτελείται μόνο από 5 χαρακτήρες μπορούμε να δημιουργήσουμε μία δική μας κωδικοποίηση η οποία να περιέχει κώδικες μόνο για τους 5 χαρακτήρες. Για να κωδικοποιήσουμε σε binary τους αριθμούς 0-4 χρειαζόμαστε 3 bits. Εφαρμόζοντας αυτό στο πιο πάνω παράδειγμα έχουμε το εξής αποτέλεσμα: abaacbdace ASCII coding Char My Coding Binary a 0 000 b 1 001 c 2 010 d 3 011 e 4 100 Σε αυτή την περίπτωση για να αποθηκεύσουμε αυτή την συμβολοσειρά binary, θα χρειαστούμε να αποθηκεύσουμε το εξής: abaacbdace 10chars 000 001 000 000 010 001 011 000 010 100 Συνολικά θα χρειαστούμε 10x3bits = 30 bits. Η διαφορά είναι σημαντική, ειδικά για πιο μεγάλα αρχεία. Υπάρχει όμως ακόμη καλύτερος τρόπος για να αποθηκεύσουμε αυτή την συμβολοσειρά; Προσέξτε ότι χρησιμοποιήσαμε 3 bits για κάθε χαρακτήρα σταθερό μέγεθος. Αν το μέγεθος είναι μεταβλητό; Η απάντηση είναι φυσικά ΝΑΙ, και είναι η κωδικοποίηση Huffman! Κωδικοποίησης Huffman Η κωδικοποίηση Huffman βασίζεται σε ένα δέντρο κωδικοποίησης. Το δέντρο κωδικοποίησης είναι ένα δυαδικό δέντρο αναζήτησης όπου αποθηκεύει binary αναπαραστήσεις χαρακτήρων. Χρησιμοποιώντας αυτό το δέντρο μία ακολουθία από χαρακτήρες μπορεί να κωδικοποιηθεί σε bits και αντίστροφα μία ακολουθία από bits μπορεί να αποκωδικοποιηθεί σε χαρακτήρες. Το πλεονέκτημα της κωδικοποίησης με δέντρο κωδικοποίησης βρίσκεται στο γεγονός ότι δεν χρειάζεται να κωδικοποιούνται οι χαρακτήρες σε ένα σταθερό μέγεθος από bits αλλά σε μεταβλητό.

Σκεφτείτε το εξής τυχαίο δέντρο κωδικοποίησης. 0 1 0 1 0 1 0 1 c d a b e Με αυτό το δέντρο παράγεται η εξής κωδικοποίηση: Char Code c 000 d 001 a 01 b 10 e 11 Σε αυτή την περίπτωση για να αποθηκεύσουμε αυτή την συμβολοσειρά binary, θα χρειαστούμε να αποθηκεύσουμε το εξής: abaacbdace - 10chars 01 10 01 01 000 10 001 01 000 11 Συνολικά θα χρειαστούμε 7x2bits και 3x3 bits = 23 bits. (<30 bits)

Πως παράγεται όμως ένα δέντρο κωδικοποίησης Huffman; Η βασική λογική είναι ότι οι χαρακτήρες με μεγάλη συχνότητα θα πρέπει να κωδικοποιούνται με όσο το δυνατό λιγότερα bits ώστε να μειώνεται όσο είναι δυνατό περισσότερο το τελικό αρχείο. Για να το καταφέρουμε αυτό θα πρέπει: 1. να διατρέξουμε το αρχείο μας μία φορά για να βρούμε τις συχνότητες. 2. Ακολούθως να δημιουργήσουμε το Huffman tree a. Σε κάθε βήμα επιλέγουμε δύο κόμβους, αυτούς με τις δύο ελάχιστες συνολικές συχνότητες και δημιουργούμε ένα καινούριο κόμβο με το άθροισμα των συχνοτήτων. 3. Να κωδικοποιήσουμε το αρχείο σύμφωνα με την κωδικοποίηση που παράξαμε Για παράδειγμα: abaacbdacebd 12 chars 1. Char Συχνότητα a 4/12 b 3/12 c 2/12 d 2/12 e 1/12 2. de

cd de cd ab de abcde ab cd de

Από το πιο πάνω δέντρο βγαίνει η πιο κάτω κωδικοποίηση: Char Code a 00 b 01 c 10 d 110 e 111 Για να αποθηκεύσουμε αυτή την συμβολοσειρά binary, θα χρειαστούμε να αποθηκεύσουμε το εξής: abaacbdacebd 12 chars 00 01 00 00 10 01 110 00 10 111 01 110 Συνολικά θα χρειαστούμε (9x2bits + 3x3bits)=27bits. ΖΗΤΟΥΜΕΝΟ Το πρόγραμμά σας με την εκκίνηση θα παρουσιάζει το εξής menu στον χρήστη. 1. Διάβασμα αρχείου και δημιουργία δέντρου Huffman Tree a. Είσοδος: όνομα αρχείου που θα διαβαστεί b. Έξοδος: μήνυμα ότι το αρχείο έχει διαβαστεί επιτυχώς, πίνακας με συχνότητες χαρακτήρων, πίνακας με κωδικοποιήσεις χαρακτήρων 2. Αποθήκευση αρχείου και Huffman Tree σε binary αρχείο a. Είσοδος: όνομα αρχείου που θα αποθηκευτεί b. Έξοδος: μήνυμα ότι το αρχείο έχει αποθηκευτεί 3. Διάβασμα και αποκωδικοποίηση δυαδικού αρχείου 4. Έξοδος a. Είσοδος: όνομα αρχείου που θα διαβαστεί b. Έξοδος: αποκωδικοποίηση αρχείου τύπωμα στην οθόνη ΠΕΡΙΟΡΙΣΜΟΙ Δεν μπορείτε να υποθέσετε ότι τα αρχεία για αποκωδικοποίηση είναι σωστά. Δεν μπορείτε να υποθέσετε ότι οι χαρακτήρες των αρχείων για αποκωδικοποίηση θα βρίσκονται στο δέντρο Huffman.

ΑΞΙΟΛΟΓΗΣΗ Για την αξιολόγηση του προγράμματος σας, θα ληφθούν οι πιο κάτω παράμετροι: - Η ΑΞΙΟΛΟΓΗΣΗ ΘΑ ΓΙΝΕΙ ΤΗΝ ΤΕΛΕΥΤΑΙΑ ΒΔΟΜΑΔΑ ΣΤΗΝ ΩΡΑ ΤΟΥ ΕΡΓΑΣΤΗΡΙΟΥ - Ορθότητα: ο πρόγραμμα σας πρέπει τρέχει ορθά για οποιαδήποτε είσοδο - Κατανοητά σχόλια: Γράφετε κατανοητά σχόλια που να εξηγούν την λειτουργία της κάθε δομής/συνάρτησης. - Αποδοτικότητα: το πρόγραμμά σας θα πρέπει να δεσμεύει/αποδεσμεύει την μνήμη αποδοτικά. - BONUS Επιπλέον μονάδες θα δοθούν για τη γενίκευση του προγράμματος ώστε να μπορεί να κωδικοποιεί και να αποκωδικοποιεί UNICODE αρχεία, δηλαδή να περιέχουν χαρακτήρες σε οποιαδήποτε γλώσσα. ΟΔΗΓΙΕΣ - Οι άσκηση σας θα πρέπει να παραδοθεί σε ηλεκτρονική μορφή μέσο email στον υπεύθυνο βοηθό σαν ένα αρχείο (.c) ή/και αρχεία (.h), που να περιλαμβάνει τον κώδικά σας. - Το αρχείο (.c) θα ονομάζεται με τον εξής τρόπο: epl035.ex<αριθμός άσκησης>.<ταυτότητα>.c (π.χ., epl035.ex5.123456.c) - Στην περίπτωση χρήσης βιβλιοθήκης (.h) τότε το αρχείο θα ονομάζεται με τον εξής τρόπο: epl035.ex<αριθμός άσκησης>.<ταυτότητα>.<όνομα βιβλιοθήκης>.h (π.χ., epl035.ex5.123456.stack.h) - Βεβαιωθείτε ότι τα προγράμματα σας είναι ορθά και τρέχουν. - Τα αρχεία σας πρέπει να μεταγλωττίζονται ορθά με τον μεταγλωττιστή (compiler) gcc του εργαστηρίου UNIX. Παράδειγμα μεταγλώττισης: gcc epl035.ex5.123456.c o a.out - Στην αρχή του κάθε αρχείου θα πρέπει να αναγράφεται η ταυτότητά σας σε σχόλια. - Επίσης θα πρέπει να παραδώσετε μία αναφορά, σε έντυπη μορφή η οποία θα περιέχει τον κώδικα σας και ένα αντιπροσωπευτικό παράδειγμά εκτέλεσης του μαζί με τα σχόλια που ζητούνται πιο πάνω. - Στην αναφορά σας θα πρέπει να αναφέρετε συγκεκριμένα ποιες συναρτήσεις δουλεύουν και ποιες όχι. - Μη τήρηση των ημερομηνιών παράδοσης των εργασιών συνεπάγεται τις ανάλογες βαθμολογικές επιπτώσεις (μέχρι τον μηδενισμό της εργασίας). - Οι προγραμματιστικές ασκήσεις θα ελέγχονται από ειδικό πρόγραμμα για την ανίχνευση των αντιγραφών. Οι αντιγραμμένες εργασίες θα μηδενίζονται και για τους αντιγραφείς θα εφαρμόζονται οι κανόνες τού Πανεπιστημίου. Αποφύγετε λοιπόν την αντιγραφή προγραμμάτων από άλλους συναδέλφους σας, διότι έτσι εκτίθετε και αυτούς και τον εαυτό σας στον κίνδυνο μηδενισμού και πειθαρχικής δίωξης. ΚΑΛΗ ΕΠΙΤΥΧΙΑ!!!