Πανεπιστηµιο Πειραιως Σχολη Τεχνολογιων Πληροφορικης και Επικοινωνιων Τµηµα Ψηφιακων Συστηµατων οµές εδοµένων η Εργασία

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

4. Συνδεδεμένες Λίστες

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Δευτέρα 22 / 11 / 2017 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ. Πρώτη Σειρά ασκήσεων Ημερομηνία Παράδοσης: 24 Απριλίου 2018, 12 μ.μ.

Σύνοψη Προηγούµενου. Κανονικές Γλώσσες (1) Προβλήµατα και Γλώσσες. Σε αυτό το µάθηµα. ιαδικαστικά του Μαθήµατος.

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

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

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Τρίτη 1 / 12 / 2015 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

Στοιχειώδεις Δομές Δεδομένων

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

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

2.1 Αντικειµενοστρεφής προγραµµατισµός

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

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

Συλλογές, Στοίβες και Ουρές

Αντικειμενοστραφής Προγραμματισμός

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Κεφάλαιο 6 Ουρές Προτεραιότητας

Κεφάλαιο 10 Ψηφιακά Λεξικά

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ.

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

Ασκηση 1 [ ] Παράδοση : Τετάρτη , 13:00

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

10. Πίνακες Κατακερματισμού

Δομές Δεδομένων (Data Structures)

HY-486 Αρχές Κατανεμημένου Υπολογισμού

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

Κλάσεις και Αντικείµενα

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

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

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

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

Βασικές Έννοιες Δοµών Δεδοµένων

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

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

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

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

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

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

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

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

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

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

Πρόγραμμα όρασης. Στη συνέχεια θα περιγράψουμε πώς δουλεύει το ρομπότ.

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

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

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

Εισαγωγή στην επιστήμη των υπολογιστών. Οργάνωση εδομένων Κεφάλαιο 11ο ομές εδομένων

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Ο ΑΤΔ Λεξικό. Σύνολο στοιχείων με βασικές πράξεις: Δημιουργία Εισαγωγή Διαγραφή Μέλος. Υλοποιήσεις

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

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

Τµήµα Πληροφορικής. Υλοποίηση LRU Cache ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ - ΕΡΓΑΣΙΑ 4. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Γενικά περί Caching

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

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

Κατανεμημένα Συστήματα

Εργαστήριο Βάσεων Δεδομένων

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. DS Gomoku.

Τύποι δεδομένων, τελεστές, μεταβλητές

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

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

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

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 1 ο Μέρος

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Transcript:

Πανεπιστηµιο Πειραιως Σχολη Τεχνολογιων Πληροφορικης και Επικοινωνιων Τµηµα Ψηφιακων Συστηµατων οµές εδοµένων 2015-2016 1η Εργασία Χρήστος ουλκερίδης Ορέστης Τελέλης 1 Περιγραφή Στην εργασία καλείστε να υλοποιήσετε µία δοµή Πολυσυνδεδεµένης Λίστας (Miltilinked List MlList) ειδικού σκοπού. Μια MlList είναι µια συλλογή κόµβων που συνδέονται «γραµµικά» σε δοµή (απλά συνδεδεµένης) λίστας µε πάνω από έναν τρόπους, ώστε να σχηµατίζουν ισάριθµες διαφορετικές λίστες. Ενα τετριµένο παράδειγµα MlList είναι η ιπλά Συνδεδεµένη Λίστα που συζητήθηκε στο µάθηµα, η οποία συνδέει τους κόµβους σε µια διάταξη και στην αντίστροφή της. Η MlList της εργασίας είναι τριπλά συνδεδεµένη λίστα µε κεφαλή: αναπαριστά τρεις (3) διαφορετικές (απλά συνδεδεµένες) λίστες επί της ίδιας συλλογής κόµβων. Καθεµία λίστα αναπα- ϱιστά το αποτέλεσµα µίας από τις πράξεις ένωση :, τοµή :, συµµετρική διαφορά :, επί υποτιθέµενης συλλογής k 1 δυναµικών συνόλων (δηλαδή, συνόλων στα οποία εισάγονται και από τα οποία διαγράφονται στοιχεία). Η ένωση είναι το σύνολο που περιέχει όλα τα στοιχεία των k συνόλων. Η τοµή είναι το υποσύνολο των κοινών στοιχείων όλων των k συνόλων. Η συµµετρική διαφορά είναι το υποσύνολο των στοιχείων που ανήκουν σε περιττό πλήθος από τα k σύνολα. 1 Στη γενική περίπτωση, µια δοµή τύπου Ml- List δεν αναπαριστά τα σύνολα καθεαυτά, 2 πα- ϱά µόνο τα αποτελέσµατα των συνολοθεωρητικών πράξεων σε αυτά. Ωστόσο, έχει εσωτερικά αποθηκευµένο σε ένα πεδίο µόνο το πλήθος (ακέραιος k) των συνόλων, για τα οποία αναπαρι- C στά έκαστη από τις συνολοθεωρητικές πράξεις. A B A B C Ενα παράδειγµα µιας MlList για k = 3 σύνολα απεικονίζεται στο Σχ. 1. Η MlList υποστηρίζει τρεις ϐασικές λειτουργίες : Εισαγωγή Στοιχείου : Καλείται από τον χρήστη της δοµής MlList οποτεδήποτε αυτός εισάγει ένα C στοιχείο σε ένα από τα k σύνολα. Κάθε διαφο- A B A B C ϱετική κλήση εισαγωγής στην MlList του ίδιου στοιχείου, ϑεωρούµε ότι αντιστοιχεί σε εισαγωγή του στοιχείου σε ένα διαφορετικό από τα k 1 Γενίκευση της πράξης Αποκλειστικό Η (Exclusive OR - XOR) σε περισσότερα από 2 σύνολα. 2 Εκτός αν k = 1: τότε έκαστη από τις τρεις λίστες µιας MlList περιέχει τα στοιχεία του µοναδικού συνόλου. 1

A = { 1, 3, 5, 6 }, B = { 2, 3, 4, 6, 7 }, C = { 1, 3, 5, 6, 7 } head 1 4 2 5 3 6 7 Σχήµα 1: Παράδειγµα µιας MlList για τρία δεδοµένα σύνολα A, B, C. Οι σύνδεσµοι µεταξύ των κόµβων είναι επισηµειωµένοι µε τη συνολοθεωρητική πράξη της οποίας τη λίστα υλοποιούν. Η σειρά των κόµβων στις λίστες δεν είναι σηµαντική. σύνολα. Ωστόσο, η MlList περιέχει µόνο έναν κόµβο για το στοιχείο αυτό, που δηµιουργείται την πρώτη ϕορά εισαγωγής του στοιχείου. Σε κάθε κόµβο υπάρχει ένας µετρητής, που µετρά το πλήθος των διαφορετικών πράξεων εισαγωγής που έχουν συµβεί για το ίδιο στοιχείο που απο- ϑηκεύει ο κόµβος. Εφόσον κληθεί εισαγωγή του ίδιου στοιχείου περισσότερες από k ϕορές, η πράξη εισαγωγής της MlList απλώς «αποτυγχάνει» (επιστρέφοντας µια κατάλληλη τιµή στο χρήστη). Μία «επιτυχηµένη» πράξη πολλοστής εισαγωγής του ίδιου στοιχείου, ενηµερώνει την τιµή του µετρητή και, ανάλογα µε τη (νέα) τρέχουσα τιµή του, ϑα πρέπει να συνδέει/αποσυνδέει τον κόµβο του στοιχείου κατάλληλα στις/από τις τρεις αναπαριστώµενες λίστες της MlList. ηλαδή, την πρώτη ϕορά εισαγωγής του στοιχείου στην MlList, δηµιουργείται ένας κόµβος για αυτό, µε µετρητή που έχει τιµή 1, και συνδέεται στη λίστα ένωσης. Οταν το στοιχείο έχει εισαχθεί k ϕορές στην MlList, ϑα πρέπει ο κόµβος του να συνδέεται στη λίστα τοµής (στην k-στή εισαγωγή). Οταν το στοιχείο έχει εισαχθεί περιττό πλήθος ϕορών, ϑα πρέπει ο κόµβος του να συνδέεται στη λίστα συµµετρικής διαφοράς ϑα πρέπει να αποσυνδέεται από τη λίστα αυτή, όταν το πλήθος ϕορών εισαγωγής του στοιχείου γίνεται άρτιος. ιαγραφή Στοιχείου : Καλείται από τον χρήστη της δοµής MlList οποτεδήποτε αυτός διαγράφει το στοιχείο από κάποιο από τα k σύνολα. Κάθε διαφορετική κλήση της διαγραφής του ίδιου στοιχείου ϑεωρούµε ότι αντιστοιχεί σε διαγραφή του στοιχείου από διαφορετικό σύνολο. Ο µετρητής σε κάθε κόµβο της MlList χρησιµοποιείται µε αντίστροφο τρόπο, από ότι στην πράξη εισαγωγής της MlList. Ο κόµβος της MlList που αποθηκεύει το στοιχείο δε διαγράφεται από τη λίστα ένωσης, εκτός αν ο µετρητής γίνει 0. Σε κάθε άλλη περίπτωση, ο µετρηρής µειώνεται κατά 1 και ο κόµβος αποσυνδέεται ή συνδέεται από τις/στις λίστες τοµής και συµµετρικής διαφοράς, ανάλογα µε την τρέχουσα (νέα) τιµή του µετρητή. Αυτές ϑεωρούνται «επιτυχηµένες» διαγραφές. Εφόσον η διαγραφή ενός συγκεκριµένου στοιχείου κληθεί περισσότερες από k ϕορές ή από όσες ϕορές έχει κληθεί η εισαγωγή του ίδιου στοιχείου, η διαγραφή απλώς «αποτυγχάνει» (επιστρέφοντας µια κατάλληλη ενδεικτική τιµή στο χρήστη). Αναζήτηση Στοιχείου : Η αναζήτηση ενός στοιχείου µπορεί να γίνει από τον χρήστη σε ο- ποιαδήποτε από τις τρεις αναπαριστώµενες λίστες, ένωσης, τοµής, ή συµµετρικής διαφοράς. Ο χρήστης της λειτουργίας αυτής µπορεί να προσδιορίζει τη λίστα στην οποία ϑα γίνει η αναζήτηση και το στοιχείο που αναζητά σε αυτήν. 2

2 Ζητούµενα Εργασίας Υλοποίηση. Θα επαυξήσετε δεδοµένο κώδικα για την υλοποίηση της δοµής MlList που πε- ϱιγράφηκε, ο οποίος επεξηγείται στο σύντοµο Παράρτηµα της εκφώνησης. Συγκεκριµένα, ϑα χρειαστεί να υλοποιήσετε τις ακόλουθες µεθόδους της κλάσης MLList: public boolean insert(int id, Object data); Εισάγει στην MlList τα δεδοµένα του χρήστη (data) µε κλειδί id. Να υποθέσετε ότι κάθε διαφορετικό ακέραιο κλειδί id προσδιορίζει µοναδικά το αντικείµενο data, ώστε όλοι οι έλεγχοι που απαιτούνται για την πράξη της εισαγωγής (και της διαγραφής, παρακάτω) ϑα γίνονται µε ϐάση το δεδοµένο κλειδί id. Σε περίπτωση επιτυχίας της πράξης εισαγωγής, η insert ϑα επιστρέφει true, διαφορετικά, ϑα επιστρέφει false. Ενηµερώνει τις τρεις αναπαριστώµενες λίστες κατάλληλα, όπως περιγράφηκε προηγουµένως. public Object delete(int id); ιαγράφει (µία ϕορά) από την MlList το στοιχείο µε κλειδί id. Αν δεν υπάρχει κόµβος στην MlList µε το δεδοµένο κλειδί id, απλώς επιστρέφει null. ιαφορετικά, ενηµερώνει τις τρεις αναπαριστώµενες λίστες κατάλληλα, όπως περιγράφηκε προηγουµένως, και επιστρέφει τα δεδοµένα του χρήστη (τύπου Object) που είναι συσχετισµένα µε το κλειδί id και αποθηκεύονται στον σχετικό κόµβο της MlList. public Object find(mllnode.ltype ltype, int id); Αναζητά σε µία από τις 3 λίστες της MlList που προσδιορίζεται από το όρισµα ltype (δείτε Παράρτηµα για τον ορισµό του), τον κόµβο µε κλειδί id. Επιστρέφει αναφορά τύπου Object στα δεδοµένα του χρήστη, αν εντοπίσει τον κόµβο, διαφορετικά επιστρέφει null. Σηµαντικές Παρατηρήσεις : ίνονται οι κλάσεις MLLNode, που υλοποιεί τύπο κόµβου της MlList, και MLList, που υλοποιεί τον τύπο της MlList (δείτε το Παράρτηµα). Στην υλοποίησή σας : 1. δε ϑα τροποποιήσετε την κλάση MLLNode. 2. δε ϑα προσθέσετε πεδία ή public µεθόδους στην κλάση MLList. 3. µπορείτε να προσθέσετε private µεθόδους στην κλάση MLList. 4. µπορείτε να τροποποιήσετε τη main της (επίσης δεδοµένης) κλάσης MLListApp όπως επι- ϑυµείτε, προκειµένου να πειραµατιστείτε µε τον κώδικά σας. Τεχνική Αναφορά. Θα καταγράψετε σε ψευδοκώδικα την υλοποίηση των µεθόδων σας, ϑα ε- πεξηγήσετε τη λειτουργία τους και ϑα δικαιολογήσετε/σχολιάσετε αναλυτικά την πολυπλοκότητά τους. Συγκεκριµένα, η αναφορά ϑα περιλαµβάνει : 1. Εξώφυλλο, µε Ονοµατεπώνυµο, Αριθµό Μητρώου, Τίτλο Μαθήµατος, Τίτλο Εργασίας. 2. Για καθεµία από τις µεθόδους, µία ενότητα µε τίτλο, που ϑα περιέχει : τον ψευδοκώδικα (και για οποιαδήποτε «ϐοηθητική» private µέθοδο γράψατε), επεξηγήσεις στον ψευδοκώδικα και στη λειτουργία της υλοποίησής σας, ανάλυση πολυπλοκότητας, προτάσεις για ϐελτίωση του (ϑεωρητικού ή πρακτικού) χρόνου εκτέλεσης, εφόσον πιστεύετε ότι ϐελτιώνεται µέσω εναλλακτικών επιλογών στην υλοποίηση της δοµής, ή δικαιολόγηση της αντίθετης άποψης. Για την εκπόνηση της τεχνικής αναφοράς συστήνεται να ακολουθήσετε το πρότυπο που παρέχεται µαζί µε την εκφώνηση της εργασίας και τον δεδοµένο κώδικα. 3

3 ιαδικαστικά Θέµατα ΠΑΡΑ ΟΤΕΑ Θα πρέπει να παραδώσετε ένα αρχείο ΑΜ_Επώνυµο_ Ονοµα.zip (όπου ΑΜ ο α- ϱιθµός µητρώου) που ϑα περιλαµβάνει 2 αρχεία µόνο : 1. Το αρχείο πηγαίου κώδικα MLList.java, επαρκώς σχολιασµένο. Προσοχή : σχόλια στα ελληνικά, µόνο σε κωδικοποίηση UTF-8. Άλλες κωδικοποιήσεις (ISO-8859-7, Windows-1253) απορρίπτονται από τον Java Compiler. Eclipse/Netbeans: δεξί click στο Project, επιλογή Properties και, στην ιδιότητα «Encoding», επιλέγετε UTF-8. 2. Την τεχνική αναφορά σας σε µορφή pdf. ΘΑ ΑΓΝΟΗΘΕΙ κάθε άλλη µορφή εγγράφου. ΠΑΡΑ ΟΣΗ αποκλειστικά µέσω της πλατφόρµας «ΕΥ ΟΞΟΣ» του τµήµατος, έως και την 11/12/2015, 23:59. Ανεβάστε το ΑΜ_Επώνυµο_ Ονοµα.zip στην περιοχή «Εργασίες». ΕΡΩΤΗΣΕΙΣ/ΑΠΟΡΙΕΣ/ ΙΕΥΚΡΙΝΙΣΕΙΣ αποκλειστικά µέσα από την Περιοχή Συζήτησης «ΕΡ- ΓΑΣΙΑ 1» της πλατφόρµας «ΕΥ ΟΞΟΣ». ε ϑα απαντηθούν Email µε απορίες. ΕΡΓΑΣΙΕΣ ΠΟΥ ΘΑ ΠΑΡΑ ΟΘΟΥΝ ΕΚΠΡΟΘΕΣΜΑ Η ΜΕ ΑΛΛΟ ΤΡΟΠΟ (Email, CD κ.λ.π.) Ε ΘΑ ΑΞΙΟΛΟΓΗΘΟΥΝ. ΒΑΘΜΟΛΟΓΗΣΗ Καθεµία από τις λειτουργίες εισαγωγής και διαγραφής συνεισφέρει 40% στο ϐαθµό της εργασίας. Η λειτουργία αναζήτησης συνεισφέρει 20%. Η εργασία µετρά 20% στον τελικό ϐαθµό (εφόσον το γραπτό σας ϐαθµολογηθεί µε τουλάχιστον 4). Φτωχή / υσανάγνωστη τεκµηρίωση ή έλλειψη αυτής στην αναφορά, για κάποια λειτουργία, επιφέρει άµεση απώλεια 50% του µέγιστου δυνατού ϐαθµού για τη λειτουργία αυτή. Η τεχνική αναφορά ή τµήµατα αυτής δε ϑα ληφθούν υπόψην στη ϐαθµολόγηση αν δε συνοδεύονται από κώδικα που µεταγλωττίζεται και εκτελείται. Η εργασία είναι αυστηρά ατοµική. Αντιγραφή στον κώδικα και/η στην τεχνική αναφο- ϱά επιφέρει άµεσο µηδενισµό της εργασίας. Οι εργασίες ϑα ελεγχθούν (όλες ανά Ϲεύγη). 4 Παράρτηµα : Τεκµηρίωση εδοµένου Κώδικα Ακολουθεί σύντοµος σχολιασµός του δεδοµένου κώδικα. Παρακάτω προβάλλονται µόνο πεδία και µέθοδοι των κλάσεων που ϑα χρειαστείτε (ή που ίσως χρειαστείτε). εν προβάλλεται επιπλέον δεδοµένος κώδικας που υλοποιεί λειτουργικότητα : επισηµειώνεται µε /*... */. Στα σηµεία που επισηµειώνονται µε /* your code */ ϑα πρέπει να εισάγετε τον δικό σας κώδικα. Κλάση Κόµβου της MlList Η κλάση MLLNode αναπαριστά έναν κόµβο της MlList. Περιέχει τα public πεδία id (κλειδί, τύπου int), data (δεδοµένα, τύπου Object) και count (µετρητής, τύπου int), και µια ειδική private δοµή τριών αναφορών σε αντικείµενα τύπου MLLNode (δεν προβάλλεται). Καθεµία από αυτές τις αναφορές δείχνει στον επόµενο του κόµβου, σε µία από τις τρεις αναπαριστώµενες λίστες : ένωσης, τοµής, συµµετρικής διαφοράς. Μπορείτε να προσβαίνετε και να µεταβάλλετε τις αναφορές αυτές µε χρήση των µεθόδων getnext και setnext αντίστοιχα. Για να διευκρινίσετε τη λίστα (από τις τρεις αναπαριστώµενες) για την οποία χρειάζεστε πρόσβαση στον επόµενο ενός δεδοµένου κόµβου, χρησιµοποιείτε τις τιµές τύπου MLLNode.LType. Π.χ.: MLLNode nextnode = node.getnext(mllnode.ltype.any); [επόµενος στην ένωση] MLLNode nextnode = node.getnext(mllnode.ltype.all); [επόµενος στην τοµή] MLLNode nextnode = node.getnext(mllnode.ltype.xor); [επόµενος στη συµ. διαφορά] 4

class MLLNode { public enum LType {ANY, ALL, XOR}; public int id; public Object data; public int count; /*... */ public static MLLNode create(int id, Object data) { /*... */ } public MLLNode getnext(ltype type) { /*... */ } public MLLNode setnext(ltype type, MLLNode node) { /*... */ } public void display() { /*... */ } } Με παρόµοιο τρόπο µε τη getnext µπορείτε να χρησιµοποιείτε και τη setnext. Αν node1, node2 είναι δύο αντικείµενα τύπου MLLNode, µπορείτε π.χ. να γράψετε : node1.setnext(mllnode.ltype.xor, node2); ώστε να ϑέσετε τον node2 σαν επόµενο του node1 στη λίστα συµµετρικής διαφοράς. Για τη δηµιουργία νέου κόµβου αποθήκευσης ενός στοιχείου µε κλειδί id και δεδοµένα data ϑα πρέπει να χρησιµοποιείτε τη static µέθοδο create, όπως π.χ. ακολούθως : MLLNode newnode = MLLNode.create(id,data); Προσοχή : ο constructor της κλάσης είναι private, δεν επιτρέπεται η χρήση του. Τέλος, δίνεται και µια µέθοδος display για την εκτύπωση των περιεχοµένων του κόµβου. Κλάση Υλοποίησης της MlList Η κλάση MLList έχει 2 private πεδία. Ο ακέραιος nbsets κρατά το πλήθος των συνόλων για τα οποία η MlList αναπαριστά τις πράξεις,,. Το αντικείµενο head είναι ο κόµβος-κεφαλή. class MLList { private int nbsets; private MLLNode head; } public MLList(int _nbsets) { /*... */ } public boolean isempty(mllnode.ltype ltype) { /*... */ } public void display(mllnode.ltype ltype) { /*... */ } /* your code (private methods only) */ public Object find(mllnode.ltype ltype, int id) { /* your code */ } public boolean insert(int id, Object data) { /* your code */ } public Object delete(int id) { /* your code */ } ίνονται υλοποιηµένες οι µέθοδοι isempty, display που δέχονται σαν όρισµα τιµή τύπου MLLNode.LType και ο constructor της κλάσης. Η isempty επιστρέφει true αν η λίστα που προσδιορίζεται από το όρισµα ltype είναι κενή, διαφορετικά επιστρέφει false. Η display εκτυπώνει τα περιεχόµενα της λίστας που προσδιορίζεται από το όρισµα ltype (για κάθε κόµβο, το id ακόλουθούµενο από το count εντός παρενθέσεως). Ενα παράδειγµα εκτύπωσης της display: [ 2 (1) 18 (1) 17 (1) 0 (1) 14 (1) 9 (2) 8 (1) 12 (2) 5 (1) ] Κλάση Εφαρµογής MLListApp ίνεται µια κλάση εφαρµογής MLListApp, που περιέχει µια main µέθοδο. Η main απλώς κατασκευάζει ένα αντικείµενο τύπου MLList, εκτελεί τυχαίες πράξεις εισγωγής και διαγραφής σε αυτό και το εκτυπώνει. Μπορείτε να τη µεταβάλλετε όπως ϐολεύει καλύτερα, για την ανάπτυξη του κώδικά σας. 5