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

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

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

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

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

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

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (3)

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Αλγόριθμοι Ταξινόμησης Μέρος 4

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

Ασκήσεις Φροντιστηρίου «Υπολογιστική Νοημοσύνη Ι» 5 o Φροντιστήριο

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

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

Αλγόριθµοι και Πολυπλοκότητα

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

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

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

5.1 Θεωρητική εισαγωγή

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

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

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

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 27/11/11, 22:00

scanf() scanf() stdin scanf() printf() int float double %lf float

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

Μη γράφετε στο πίσω μέρος της σελίδας

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Επίλυση Προβλημάτων 1


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

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

Υπολογιστικό Πρόβληµα

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

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

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

Ν. Μ. Μισυρλής. Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών. Καθηγητής: Ν. Μ. Μισυρλής 29 Μαΐου / 18

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: Τρίτη 10/11/2015, 22:00

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

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

Γράψτε ένα πρόγραμμα που θα προσομοιώνει τη ρίψη ενός νομίσματος και θα εμφανίζει στην οθόνη Κορώνα» ή «Γράμματα».

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/10, 23:59

ΘΕΜΑ Συμβολική γλώσσα 2. Γλώσσες υψηλού επιπέδου 3. Γλώσσες τέταρτής γενιάς 4. Γλώσσα μηχανής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Επίλυση προβληµάτων. Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης Αλγόριθµοι τυφλής αναζήτησης Αλγόριθµοι ευρετικής αναζήτησης

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙ ΕΣ

Κατακερµατισµός. Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετημένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Βασικές έννοιες προγραμματισμού

Ερώτημα 1. Μας δίνεται μια συλλογή από k ακολοθίες, k >=2 και αναζητούμε το πρότυπο Ρ, μεγέθους n.

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ 12 ΙΟΥΝΙΟΥ 2017 ΕΚΦΩΝΗΣΕΙΣ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

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

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Πληροφορική 2. Αλγόριθμοι

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Υπολογιστική Πολυπλοκότητα Εξέταση Ιουνίου 2017 Σελ. 1 από 5

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

ÔÏÕËÁ ÓÁÑÑÇ ÊÏÌÏÔÇÍÇ

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

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

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

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1

Πρόβλημα 37 / σελίδα 207

Ενδεικτικές Ερωτήσεις Θεωρίας

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

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

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

Πρόβλημα 29 / σελίδα 28

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

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

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

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

Επιµέλεια Θοδωρής Πιερράτος

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 11: Μη Ασυμφραστικές Γλώσσες

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ ΕΠΛ 035 - ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΓΙΑ ΗΛΕΚΤΡΟΛΟΓΟΥΣ ΜΗΧΑΝΙΚΟΥΣ ΚΑΙ ΜΗΧΑΝΙΚΟΥΣ ΥΠΟΛΟΓΙΣΤΩΝ Ακαδηµαϊκό έτος 2017-2018 Υπεύθυνος εργαστηρίου: Γεώργιος Χατζηπολλάς Εργασία 3 Δεντρικές Δοµές Δεδοµένων Οι περισσότερες γλώσσες προγραµµατισµού χρησιµοποιούν την κωδικοποίηση ASCII (Amrin Stnr Co for Informtion Intrhng). Στην κωδικοποίηση ASCII κάθε χαρακτήρας κωδικοποιείται µε τον ίδιο αριθµό από its, συγκεκριµένα 8. Αν θέλετε να δείτε την κωδικοποίηση ASCII τότε µπορείτε να επισκεφθείτε την ιστοσελίδα http://www.siitl.om/. Το επόµενο παράδειγµα δείχνει πως αντιπροσωπεύονται οι χαρακτήρες στη γλώσσα C. hr =''; printf("chr: %\tascii: %\n",, (int) ); Το αποτέλεσµα του πιο πάνω κώδικα είναι το εξής: Chr: ASCII:97 Πως όµως αποθηκεύονται οι πληροφορίες σε ένα αρχείο; Αφού κάθε χαρακτήρας µπορεί να αναπαρασταθεί από 8 its τότε σε κάθε αρχείο µε N χαρακτήρες χρειαζόµαστε Nx8its για να το αποθηκεύσουµε. Θεωρήστε το αρχείο input.txt το οποίο περιέχει αποθηκευµένη τη συµβολοσειρά. Κωδικοποίηση Χαρακτήρα Χαρακτήρας ASCII Δυαδική Μορφή 97 11100001 98 11100010 99 11100011 100 11100100 101 11100101 Για να αποθηκεύσουµε την συµβολοσειρά σε δυαδική µορφή (inry), θα χρειαστούµε να αποθηκεύσουµε το εξής: 11100001 11100010 11100001 11100001 11100011 11100010 11100100 11100001 11100011 11100101 Δηλαδή συνολικά θα χρειαστούµε 10x8its = 80 its για τη φύλαξη της συµβολοσειράς.

Υπάρχει καλύτερος τρόπος για να αποθηκεύσουµε αυτή την συµβολοσειρά; Η απάντηση είναι φυσικά ΝΑΙ και είναι η κωδικοποίηση. Αφού η συµβολοσειρά µας αποτελείται µόνο από 5 χαρακτήρες µπορούµε να δηµιουργήσουµε µία δική µας κωδικοποίηση η οποία να περιέχει κώδικες µόνο για τους 5 χαρακτήρες. Για να κωδικοποιήσουµε σε δυαδική µορφή τους αριθµούς 0 4 χρειαζόµαστε 3 its. Εφαρµόζοντας αυτό στο πιο πάνω παράδειγµα έχουµε το εξής αποτέλεσµα: Κωδικοποίηση Χαρακτήρα Χαρακτήρας Κωδικοποίηση Δυαδική Μορφή 0 000 1 001 2 010 3 011 4 100 Σε αυτή την περίπτωση για να αποθηκεύσουµε τη συµβολοσειρά σε δυαδική µορφή, θα χρειαστούµε να αποθηκεύσουµε το εξής: 000 001 000 000 010 001 011 000 010 100 Δηλαδή συνολικά θα χρειαστούµε 10x3its = 30 its. Η διαφορά είναι σηµαντική, ειδικά για µεγάλα αρχεία! Υπάρχει όµως ακόµη καλύτερος τρόπος για να αποθηκεύσουµε αυτή την συµβολοσειρά; Προσέξτε ότι χρησιµοποιήσαµε 3 its για κάθε χαρακτήρα άρα σταθερό µέγεθος. Τι θα συµβεί εάν χρησιµοποιήσουµε µεταβλητό µέγεθος κωδικοποίησης για κάθε χαρακτήρα; Η απάντηση είναι ΝΑΙ!!! Η κωδικοποίηση που θα υλοποιήσουµε βασίζεται σε ένα δέντρο κωδικοποίησης. Το δέντρο κωδικοποίησης είναι ένα δυαδικό δέντρο αναζήτησης όπου αποθηκεύει δυαδικές αναπαραστήσεις χαρακτήρων. Χρησιµοποιώντας το δέντρο αυτό, µία ακολουθία από χαρακτήρες µπορεί να κωδικοποιηθεί σε δυφία και αντίστροφα, µία ακολουθία από δυφία µπορεί να αποκωδικοποιηθεί σε χαρακτήρες. Το πλεονέκτηµα της κωδικοποίησης µε δέντρο κωδικοποίησης βρίσκεται στο γεγονός ότι δεν χρειάζεται να κωδικοποιούνται οι χαρακτήρες σε ένα σταθερό µέγεθος από its αλλά σε µεταβλητό. Σκεφτείτε το εξής τυχαίο δέντρο κωδικοποίησης.

Με αυτό το δέντρο παράγεται η εξής κωδικοποίηση: Κωδικοποίηση Χαρακτήρα Χαρακτήρας Κωδικοποίηση 01 10 000 001 11 Σε αυτή την περίπτωση για να αποθηκεύσουµε τη συµβολοσειρά σε δυαδική µορφή, θα χρειαστούµε να αποθηκεύσουµε το εξής: 01 10 01 01 000 10 001 01 000 11 Συνολικά θα χρειαστούµε 7x2its και 3x3 its = 23 its. (<30 its) Πως παράγεται όµως ένα δέντρο κωδικοποίησης; Η βασική λογική είναι ότι οι χαρακτήρες µε µεγάλη συχνότητα θα πρέπει να κωδικοποιούνται µε όσο το δυνατό λιγότερα δυφία, ώστε να µειώνεται όσο είναι δυνατό περισσότερο το τελικό αρχείο. Ο αλγόριθμος που θα υλοποιήσουμε παράγει ένα κώδικα βασισμένο στην πιθανότητα εμφάνισης του κάθε συμβόλου σε ένα κείμενο. Οι πιθανότητες εμφάνισης κάθε συμβόλου χρησιμοποιούνται για τη δημιουργία ενός πλήρους δυαδικού δέντρου από τα κάτω προς τα πάνω. Αυτός ο τρόπος εγγυάται ότι τα σύμβολα που εμφανίζονται λιγότερο συχνά θα έχουν μεγαλύτερο μέγεθος κωδικοποίησης. Στο δέντρο που θα δημιουργηθεί, τα σύμβολα (χαρακτήρες του αρχείου) θα βρίσκονται στα φύλλα, οι διακλαδώσεις σημειώνονται με 0 ή 1 και η δυαδική αναπαράσταση της διαδρομής από τη ρίζα του δέντρου μέχρι το σύμβολο είναι η συμπιεσμένη αναπαράστασή του ως σειρά δυαδικών ψηφίων. Βηματική περιγραφή Αλγόριθμου 1. Καταγραφή των χαρακτήρων του αρχείου και των αντίστοιχων συχνοτήτων εµφάνισης τους 2. Δηµιουργείται ένας κόµβος για κάθε σύµβολο στον οποίο σηµειώνεται και η αντίστοιχη συχνότητα εµφάνισης. Οι κόµβοι αυτοί εισάγονται σε µια δοµή δεδοµένων κατά αύξουσα σειρά συχνότητας εµφάνισης. Εάν δύο κόµβοι έχουν την ίδια πιθανότητα εµφάνισης προηγείται αυτός µε τη µικρότερη λεξικογραφική διάταξη 3. Επιλέγω τα 2 σύµβολα µε τις µικρότερες συχνότητες (έστω α και β). Αν υπάρχουν παραπάνω επιλογές, επιλέγω τα σύµβολα που προηγούνται λεξικογραφικά. Δηµιουργώ ένα δυαδικό δένδρο µε φύλλα αυτά τα 2 σύµβολα (τοποθετώντας αριστερά το σύµβολο με τη μικρότερη συχνότητα ή το μικρότερο λεξικογραφικά όνομα εάν η συχνότητα εμφάνισης είναι η ίδια) και πατέρα ένα καινούργιο σύµβολο µε όνοµα αβ και συχνότητα εµφάνισης το άθροισµα των συχνοτήτων εµφάνισης των συµβόλων α και β. Αφαιρώ τους κόµβους α και β από τη δοµή που φυλάγονται οι κόµβοι και προσθέτω τον κόµβο αβ 4. Επαναλαµβάνεται το 3ο βήµα µέχρι να µείνει µόνο ένας κόµβος στη δοµή (η ρίζα του δέντρου) µε πιθανότητα εµφάνισης 1.

Παράδειγµα δηµιουργίας δυαδικού δέντρου κωδικοποίησης Έστω η συµβολοσειρά εισόδου η οποία αποτελείται από 5 χαρακτήρες οι οποίοι επαναλαµβάνονται για τη δηµιουργία της. 1. Καταγραφή των χαρακτήρων του αρχείου και των αντίστοιχων συχνοτήτων εμφάνισης τους Χαρακτήρας Συχνότητα 2 2. Δημιουργείται ένας κόμβος για κάθε σύμβολο στον οποίο σημειώνεται και η αντίστοιχη συχνότητα. Οι κόμβοι αυτοί εισάγονται σε μια δομή κατά αύξουσα σειρά συχνότητας εμφάνισης. Εάν δύο κόμβοι έχουν την ίδια συχνότατα εμφάνισης προηγείται αυτός με τη μικρότερη λεξικογραφική διάταξη. Ο νέος κόμβος έχει ως όνομα τη σύνθεση των ονομάτων των δύο κόμβων που τον δημιουργούν και αριστερά στο δέντρο μπαίνει αυτός με τη μικρότερη συχνότητα ή το μικρότερο λεξικογραφικά όνομα εάν η συχνότητα εμφάνισης είναι η ίδια. 2 2 2 2 2 2 2

7/12 7/12 2 2 1 7/12 1 2 2 Σε αυτό το σηµείο έχει αποµείνει µόνο ένας κόµβος για επεξεργασία, άρα ο αλγόριθµος κωδικοποίησης έχει τερµατίσει. Για την κωδικοποίηση των συµβόλων θεωρούµε ότι κάθε µετάβαση από αριστερή ακµή συµβολίζεται µε 0 ενώ κάθε µετάβαση σε δεξιά ακµή συµβολίζεται µε 1. Ξεκινώ από τη ρίζα και σηµειώνω την ακολουθία από τα 0 και 1 µέχρις ότου καταλήξω σε ένα φύλλο. Δεδοµένου ότι τα φύλλα του δέντρου αντιπροσωπεύουν τα σύµβολα, οι ακολουθίες αυτές αποτελούν τις κωδικοποιήσεις των συµβόλων. Άρα, από το πιο πάνω δέντρο εξάγουµε την πιο κάτω κωδικοποίηση: Χαρακτήρας Συχνότητα 10 00 111 01 110

Λεπτοµέρειες Υλοποίησης 1. Το πρόγραµµά σας θα παίρνει ως παράµετρο από τη γραµµή εντολής το όνοµα του αρχείου που θα διαβαστεί/κωδικοποιηθεί (έστω input.txt) καθώς και το όνοµα του αρχείου µε τις κωδικοποιήσεις (έστω os.txt) κάθε χαρακτήρα. 2. Θα διαβάζει το αρχείο input.txt και θα εξάγει τις συχνότητες εµφάνισης κάθε χαρακτήρα που βρίσκεται σε αυτό. Θεωρείστε ότι στο αρχείο θα υπάρχουν µόνο οι χαρακτήρες του λατινικού αλφαβήτου, τα ψηφία 0 έως 9, ο χαρακτήρας της αλλαγής γραµµής και του τέλους του αρχείου. 3. Βάση των συχνοτήτων εµφάνισης θα πρέπει να δηµιουργήσετε το δέντρου κωδικοποίησης και στη συνέχεια να φυλάξετε στο αρχείο os.txt την κωδικοποίηση κάθε χαρακτήρα στη µορφή χαρακτήρας κενό κωδικοποίηση: 1001 011 001 4. Ακολουθήστε ρητά τις οδηγίες επιλογής των κόµβων για την επόµενη επανάληψη του αλγορίθµου κωδικοποίησης. Αξιολόγηση Εργασίας H προγραµµατιστική αυτή άσκηση είναι ατοµική και η µέγιστη δυνατή βαθµολογία είναι 100. Για την αξιολόγηση της προγραµµατιστικής αυτής άσκησης, θα ληφθούν οι πιο κάτω παράµετροι: 1. Δοµή Συστήµατος 5%: Το πρόγραµµά σας θα πρέπει να χρησιµοποιεί τεχνικές δοµηµένου προγραµµατισµού µε τη χρήση συναρτήσεων, αρχείων επικεφαλίδας (.h) και πολλαπλών αρχείων για καλύτερη δοµή του πηγαίου κώδικα και διαχείριση λαθών. 2. Ορθότητα Λειτουργίας 70%: Το πρόγραµµά σας θα πρέπει να υλοποιεί ορθά τις λειτουργίες του συστήµατος όπως αυτές περιγράφονται στην εκφώνηση. Ένα πρόγραµµα που δεν δίνει τη σωστή απάντηση δεν έχει καµιά αξία. Τα προγράµµατα θα πρέπει να δίνουν τη σωστή απάντηση για όλα τα στιγµιότυπα του πεδίου ορισµού του προβλήµατος που λύνουν, διαφορετικά δεν θα λάβουν (όλες) τις µονάδες που αντιστοιχούν στην ορθότητα. Βεβαιωθείτε ότι έχετε ελέγξει την ορθότητα του προγράµµατός σας πριν το παραδώσετε. 3. Επίδοση/Επεξήγηση Συστήµατος 25%: Το πρόγραµµά σας θα πρέπει να ελαχιστοποιεί τη χρήση των πόρων του συστήµατος και πιο συγκεκριµένα της µνήµης και του επεξεργαστή. Ο αλγόριθµος που χρησιµοποιείτε θα πρέπει να περιγράφεται µε σαφήνεια και ο κώδικας πρέπει να είναι καθαρά γραµµένος και να περιέχει επεξηγηµατικά σχόλια. 4. Η εργασία πιθανών να τύχει αξιολόγησης κατά τη διάρκεια του εργαστηρίου. Στην περίπτωση αυτή, θα πρέπει να είστε σε θέση να απαντήσετε σε ερωτήσεις που αφορούν την υλοποίησή σας και εάν σας ζητηθεί να αλλάξετε τον κώδικά σας έτσι ώστε να ικανοποιεί τις νέες απαιτήσεις που θα σας δοθούν κατά τη διάρκεια της εξέτασης. Αποτυχία στην απάντηση των ερωτήσεων θα οδηγήσει στον µηδενισµό της εργασίας. 5. Σε περίπτωση που το πρόγραµµά σας δεν βγάζει αποτέλεσµα ή έχει sgmnttion fult η µέγιστη βαθµολογία της εργασίας σας θα είναι 30. Οδηγίες Υποβολής Η εργασία θα παραδοθεί µόνο ηλεκτρονικά. Η παράδοση θα γίνει µέσω του BlkBor (EPL035_Ls). Προθεσµία: 4/11@23:59

Δηµιουργήστε ένα φάκελο στον υπολογιστή σας που θα έχει ως όνοµα µόνο την ταυτότητά σας. Τοποθετήστε σε αυτό τα ακόλουθα αρχεία:. Τα αρχεία µε τον πηγαίο κώδικα του προγράµµατός σας. Ένα αρχείο rm.txt το οποίο θα περιέχει τις οδηγίες χρήσης του προγράµµατός σας. Ένα αρχείο implmnttion.pf το οποίο θα περιγράφει τις επιλογές σας όσον αφορά τις δοµές δεδοµένων που έχετε επιλέξει να χρησιµοποιήσετε δικαιολογώντας τις αποφάσεις σας και τις διάφορες δυσκολίες που αντιµετωπίσατε (1-2 σελίδες). Ένα αρχείο poliplokotit.pf το οποίο θα περιέχει τη θεωρητική ανάλυση των διαδικασιών που έχετε υλοποιήσει. Για κάθε διαδικασία θα πρέπει να αναφέρεται την πολυπλοκότητα τόσο του χρόνου όσο και του χώρου που απαιτεί επεξηγώντας πλήρως τις απαντήσεις σας. ΚΑΛΗ ΕΠΙΤΥΧΙΑ