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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ231: ομές εδομένων και Αλγόριθμοι

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΘΕΜΑ : ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΗΣΗΣ. ΔΙΑΡΚΕΙΑ: 1 περιόδους. 22/1/ :11 Όνομα: Λεκάκης Κωνσταντίνος καθ. Τεχνολογίας

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

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

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

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

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

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

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

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

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

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

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

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

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

./mydiz {-c -a -x -m -d -p -j} <archive-file> <list-of-files/dirs>

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

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

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

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

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

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

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

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

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

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

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

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

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

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

Αναπαράσταση Δεδομένων (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Οντοκεντρικός Προγραμματισμός II C++ Project Xειμερινό Εξάμηνο Organisms

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

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

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

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

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

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

ΕΠΛ132 Άσκηση 3 - Αρχές Προγραμματισμού ΙΙ Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ

Ανάκτηση Πληροφορίας

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

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

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Αναπαράσταση δεδομένων

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑ ΣΥΣΤΗΜΑΤΑ. Δρ. Κουζαπάς Δημήτριος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής. Αναπαράσταση Δεδομένων

Πληροφορική Ι. Μάθημα 9 ο Συμπίεση δεδομένων. Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Δρ.

«Μηχανή Αναζήτησης Αρχείων» Ημερομηνία Παράδοσης: 30/04/2015, 09:00 π.μ.

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

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

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

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

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

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

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

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

ΕΠΙΚΟΙΝΩΝΙΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΕΣ INTERNET

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

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

Αναπαράσταση Μη Αριθμητικών Δεδομένων

! Δεδομένα: ανεξάρτητα από τύπο και προέλευση, στον υπολογιστή υπάρχουν σε μία μορφή: 0 και 1

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

Κεφάλαιο 12: Είσοδος και έξοδος δεδομένων σε αρχεία

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

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

«Η ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ BarCode» ( Μια πρόταση για ένα μαθητικό project )

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 231: Δομές Δεδομένων και Αλγόριθμοι Εαρινό Εξάμηνο 2013 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 2 Διδάσκων Καθηγητής: Παναγιώτης Ανδρέου Ημερομηνία Υποβολής: 05/03/2013 Ημερομηνία Παράδοσης: 22/03/2013 ΠΕΡΙΓΡΑΦΗ Σε αυτή την άσκηση καλείστε να υλοποιήσετε το πρόγραμμα HuffmanCompression για την κωδικοποίηση και αποκωδικοποίηση συμβολοσειρών με σκοπό η αποθήκευσή τους στο δίσκο να χρειάζεται μικρότερο χώρο (σε bytes). ΠΡΟΚΑΤΑΡΚΤΙΚΑ ΓΙΑ ΚΩΔΙΚΟΠΟΙΗΣΗ Οι περισσότερες γλώσσες προγραμματισμού χρησιμοποιούν την κωδικοποίηση ASCII (American Standard Code for Information Interchange). Στην κωδικοποίηση ASCII, κάθε χαρακτήρας κωδικοποιείται με τον ίδιο αριθμό από bits, συγκεκριμένα 8. Αν θέλετε να δείτε την κωδικοποίηση ASCII τότε μπορείτε να επισκεφθείτε την ιστοσελίδα http://www.asciitable.com/. Ένας τρόπος να δημιουργήσετε το δικό σας ASCII table είναι να καταλάβετε πως αντιπροσωπεύονται οι χαρακτήρες στην γλώσσα Java. Σκεφθείτε το επόμενο παράδειγμα: char c='a'; System.out.println("Char: "+c +"\tascii:"+((int) c)); Το αποτέλεσμα του πιο πάνω κώδικα είναι το εξής: Char: a ASCII:97 Πως αποθηκεύονται όμως οι πληροφορίες σε ένα αρχείο;

Αφού κάθε χαρακτήρας μπορεί να αναπαρασταθεί από 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 αλλά σε μεταβλητό. Σκεφτείτε το εξής τυχαίο δέντρο κωδικοποίησης.

Με αυτό το δέντρο παράγεται η εξής κωδικοποίηση: 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. Σε κάθε βήμα επιλέγουμε δύο κόμβους, αυτούς με τις δύο ελάχιστες συνολικές συχνότητες και δημιουργούμε ένα καινούριο κόμβο με το άθροισμα των συχνοτήτων. 3. Να κωδικοποιήσουμε το αρχείο σύμφωνα με την κωδικοποίηση που παράξαμε Για παράδειγμα: 1. Char Συχνότητα a 4/12 b 3/12 c 2/12 d 2/12 e 1/12 abaacbdacebd 12 chars

2. de cd e de cd e ab de

abcde ab cd e 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. Διάβασμα και αποκωδικοποίηση δυαδικού αρχείου a. Είσοδος: όνομα αρχείου που θα διαβαστεί b. Έξοδος: αποκωδικοποίηση αρχείου τύπωμα στην οθόνη 4. Έξοδος ΠΕΡΙΟΡΙΣΜΟΙ Δεν μπορείτε να υποθέσετε ότι τα αρχεία για αποκωδικοποίηση είναι σωστά. Δεν μπορείτε να υποθέσετε ότι οι χαρακτήρες των αρχείων για αποκωδικοποίηση θα βρίσκονται στο δέντρο Huffman.

ΑΞΙΟΛΟΓΗΣΗ Για την αξιολόγηση του προγράμματος σας, θα ληφθούν οι πιο κάτω παράμετροι: 70% Ορθότητα: ο πρόγραμμα σας πρέπει τρέχει ορθά για οποιαδήποτε είσοδο. 5% Κατανοητά σχόλια: Γράφετε κατανοητά σχόλια που να εξηγούν την λειτουργία της κάθε κλάσης/πεδίου/μεθόδου. 5% Αναφορά Προγράμματος: Θα πρέπει να παραδώσετε μία αναφορά η οποία να περιγράφει συνοπτικά τα διάφορα συστατικά (κλάσεις, μεθόδους, διαπροσωπείες, κτλ.) του προγράμματος σας. Επίσης, η αναφορά θα πρέπει να καταγράφει τυχόν υποθέσεων τις οποίες έχετε κάνει. 20% Αποδοτικότητα: το πρόγραμμα σας θα πρέπει να χρησιμοποιήσει αποδοτικές δομές δεδομένων και αλγόριθμους όπου αρμόζει. 10% Επιπρόσθετη Βαθμολογία: η κατάλληλη μετατροπή του προγράμματος ώστε να διαχειρίζεται χαρακτήρες από διάφορες γλώσσες (δηλ., Unicode). ΟΔΗΓΙΕΣ Στο πάνω μέρος της κάθε κλάσης να γράψετε με σχόλια το ονοματεπώνυμο και τον αριθμό ταυτότητας σας. Βεβαιωθείτε ότι τα προγράμματα σας είναι ορθά και τρέχουν. H άσκηση σας θα πρέπει να παραδοθεί στον υπεύθυνο βοηθό μέσω moodle σαν ένα zip αρχείο (που να περιλαμβάνει όλες τις κλάσεις που θα υλοποιήσετε και το έγγραφο τεκμηρίωσης) σε ηλεκτρονική μορφή και σε έντυπη μορφή την ημερομηνία παράδοσης. Το zip αρχείο θα πρέπει να περιλαμβάνει τον κώδικα σας που θα γίνει μέσω export από το eclipse σαν archive file και την αναφορά σας. Το zip αρχείο θα ονομάζεται με τον εξής τρόπο: epl231.pex2.<ταυτότητα>.zip Η αναφορά θα πρέπει να ονομάζεται με τον εξής τρόπο: epl231.pex2.<ταυτότητα>.[doc pdf] Μη τήρηση των ημερομηνιών παράδοσης των εργασιών συνεπάγεται τις ανάλογες βαθμολογικές επιπτώσεις (μέχρι τον μηδενισμό της εργασίας). Οι προγραμματιστικές ασκήσεις θα ελέγχονται από ειδικό πρόγραμμα για την ανίχνευση των αντιγραφών. Οι αντιγραμμένες εργασίες θα μηδενίζονται και για τους αντιγραφείς θα εφαρμόζονται οι κανόνες τού Πανεπιστημίου. Αποφύγετε λοιπόν την αντιγραφή προγραμμάτων από άλλους συναδέλφους σας, διότι έτσι εκτίθετε και αυτούς και τον εαυτό σας στον κίνδυνο μηδενισμού και πειθαρχικής δίωξης. ΚΑΛΗ ΕΠΙΤΥΧΙΑ!!!