Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Σχετικά έγγραφα
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αφηρηµένοι Τύποι Δεδοµένων Κεφάλαιο 4 ( , ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Δοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

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

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

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

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

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

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

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

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Εισαγωγή. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δοµές Δεδοµένων. 8η Διάλεξη: Ταξινόµηση. Ε. Μαρκάκης

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

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

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

Δοµές Δεδοµένων. 5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθµων. Ε. Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

Περιεχόμενα. Περιεχόμενα

Βασικές Δομές Δεδομένων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Διορθώσεις σελ

Δοµές Δεδοµένων. 13η Διάλεξη Πίνακες Συµβόλων. Ε. Μαρκάκης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

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

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

Επανάληψη για τις Τελικές εξετάσεις

Στοίβες με Δυναμική Δέσμευση Μνήμης

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

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

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

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

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

ιαφάνειες παρουσίασης #11

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

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

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

ENOTHTA 3 ΟΜΕΣ Ε ΟΜΕΝΩΝ

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εξωτερική Αναζήτηση και Β-δέντρα Κεφάλαιο 16. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού

Δομές Δεδομένων & Αλγόριθμοι. Στοίβες. Εργαστήριο Γνώσης & Ευφυούς Πληροφορικής 1

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

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

Δοµές Δεδοµένων. 17η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

Οι δομές δεδομένων στοίβα και ουρά

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

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

Περίγραμμα. Διαδικαστικά. Εργαστήρια Τεχνικών Προγραμματισμού 21/2/2017. ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού

Transcript:

Δοµές Δεδοµένων 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων Ε. Μαρκάκης

Περίληψη Χρήση αναδροµικών εξισώσεων στην ανάλυση αλγορίθµων Αφηρηµένοι τύποι δεδοµένων Συλλογές στοιχείων Στοίβα ώθησης προς τα κάτω Παραδείγµατα πελατών για στοίβες Υλοποιήσεις στοίβας Γενικές υλοποιήσεις Δοµές Δεδοµένων 06-2

Παραδείγµατα ανάλυσης αλγορίθµων Σύγκριση ακολουθιακής και δυαδικής αναζήτησης Έστω ένας πίνακας ακεραίων µε Ν στοιχεία Ψάχνουµε τη θέση ενός στοιχείου στον πίνακα Πόσες πράξεις σύγκρισης χρειάζονται; Ακολουθιακή αναζήτηση (Sequential Search) Ψάχνουµε από το ένα άκρο του πίνακα ως το άλλο Κατάλληλη και για µη ταξινοµηµένο πίνακα Το εύρος του πίνακα που ψάχνουµε δίνεται µε τις παραµέτρους p, r static int search(int a[], int v, int p, int r) { int i; for (i = p; i <= r; i++) if (v == a[i]) return i; return -1; } Δοµές Δεδοµένων 06-3

Παραδείγµατα ανάλυσης αλγορίθµων Ανάλυση ακολουθιακής αναζήτησης Έστω Ν το εύρος του πίνακα που ψάχνουµε (Ν = r-p+1) Ο χρόνος εκτέλεσης εξαρτάται από τα δεδοµένα Χειρότερη δυνατή περίπτωση: η αναζήτηση ανεπιτυχής ή το στοιχείο είναι στην τελευταία θέση: Ο(Ν) βήµατα Μέσο κόστος επιτυχούς αναζήτησης: Υποθέτουµε ότι όλες οι θέσεις είναι εξίσου πιθανοί στόχοι Μέσο κόστος = (1 + 2 + + N) / N = (N+1)/2 N/2 Καλύτερο από τη χειρότερη περίπτωση αλλά και πάλι Ο(Ν) Αν ο πίνακας είναι ταξινοµηµένος; Η αναζήτηση δεν εξαντλεί απαραίτητα τον πίνακα Μέσο κόστος N/2 βήµατα, µέγιστο κόστος N βήµατα Δοµές Δεδοµένων 06-4

Παραδείγµατα ανάλυσης αλγορίθµων Δυαδική αναζήτηση (Binary Search) Μόνο για ταξινοµηµένο πίνακα Εξετάζει το µεσαίο στοιχείο του πίνακα Συνεχίζει µε το κατάλληλο µισό του πίνακα (αναδροµή) static int search(int a[], int v, int p, int r) { while (r >= p) { int m = (p+r)/2; if (v == a[m]) return m; if (v < a[m]) r = m-1; else p = m+1; } return -1; } Δοµές Δεδοµένων 06-5

Παραδείγµατα ανάλυσης αλγορίθµων Ανάλυση δυαδικής αναζήτησης Σε κάθε έλεγχο µένει ο µισός πίνακας Χειρότερη περίπτωση: TN # T +! N / 2 O(1) " Για να βρούµε την πολυπλοκότητα πρέπει να λύσουµε την αναδροµική σχέση Όχι πάντα εύκολο αλλά επιλύσιµο για πολλές κατηγορίες αναδροµικών εξισώσεων Δοµές Δεδοµένων 06-6

Βασικές αναδροµικές εξισώσεις Ακολουθούν την αποσύνθεση ενός προβλήµατος Ο χρόνος εκτέλεσης ορίζεται ως συνάρτηση του χρόνου εκτέλεσης σε µικρότερα προβλήµατα Τελικά φτάνουµε σε στοιχειώδη προβλήµατα Η λύση δίνει έναν τύπο για το χρόνο εκτέλεσης Παράδειγµα 1 Βρόχος στα δεδοµένα εισόδου και απαλοιφή ενός στοιχείου πριν την επόµενη επανάληψη C N =C N-1 +N, C 1 =1 Λύση: C Ν = C N-1 +N = C N-2 +(N-1)+Ν = C N-3 + (Ν-2)+ (N-1)+ Ν = 1+2+3+...+Ν = Ν(Ν+1)/2, δηλαδή O(N 2 ) Δοµές Δεδοµένων 06-7

Βασικές αναδροµικές εξισώσεις Παράδειγµα 2 Κάθε βρόχος διχοτοµεί τα δεδοµένα, επόµενη επανάληψη κοιτάζει τα µισά δεδοµένα C N =C N/2 +1, C 1 =1 Τέτοιες σχέσεις είναι χρήσιµο να τις αναλύουµε πρώτα για δυνάµεις του 2, έστω ότι Ν = 2 n C N = C + 1 = C n! 1 + 1 = ( C n! =... = C N / 2 2 2 2 1 + 1+ 1+... + 1 = n + 1 + 1) + 1 Άρα C Ν = lοgn+1, δηλαδή O(lοgN) Όταν το Ν δεν είναι δυναµη του 2, αποδεικνύεται µε επαγωγή ότι C Ν lοgn+1 Άρα για κάθε Ν, C N = O(lοgN) Πόρισµα: Ο αλγόριθµος δυαδικής αναζήτησης τρέχει σε χρόνο Ο(logN) Δοµές Δεδοµένων 06-8

Βασικές αναδροµικές εξισώσεις Με ίδια τεχνική αναλύονται πολλά άλλα προβλήµατα Παράδειγµα 3 (προσοχή: λάθος τύπος στο βιβλιο, σελ. 74!) Κάθε βρόχος διχοτοµεί τα στοιχεία αφού τα εξετάσει Ορισµός: C N =C N/2 +N, C 1 =1 Λύση: C Ν = 2Ν, δηλαδή O(N) Παράδειγµα 4 Κάθε βρόχος εξετάζει, διχοτοµεί και κάνει αναδροµικές κλήσεις και στα 2 υποπροβλήµατα µεγέθους Ν/2 Ορισµός: C N =2C N/2 +Ν, C 1 =1 Λύση: C Ν = NlοgN, δηλαδή O(NlοgN) Παράδειγµα 5 Κάθε βρόχος διχοτοµεί και κάνει αναδροµική κλήση και για τα 2 υποπροβλήµατα Ορισµός: C N =2C N/2 +1, C 1 =1 Λύση: C Ν = 2Ν, δηλαδή O(N) Δοµές Δεδοµένων 06-9

Όρια ανάλυσης αλγορίθµων Εγγύηση: άνω φράγµα χρόνου εκτέλεσης Χρόνος εκτέλεσης στη χειρότερη περίπτωση Χρησιµοποιούµε το χειρότερο δυνατό σύνολο εισόδου Πόσο πιθανή είναι η χειρότερη περίπτωση; Ένας αλγόριθµος µπορεί να είναι σχεδόν πάντα γρήγορος Πρόβλεψη: µέσος χρόνος εκτέλεσης Χρόνος εκτέλεσης κατά µέσο όρο Χρησιµοποιούµε ένα «τυχαίο» σύνολο εισόδου Πόσο αντιπροσωπευτικό είναι το σύνολο αυτό; Πόσο τυχαία είναι πραγµατικά η είσοδος; Περιορισµός: κάτω φράγµα χρόνου εκτέλεσης Απόδειξη ότι κάθε αλγόριθµος θέλει τουλάχιστον τόσο χρόνο Γενικά πολύ πιο δύσκολη η απόδειξη κάτω φραγµάτων Δοµές Δεδοµένων 06-10

Κεφάλαιο 4 Αφηρηµένοι Τύποι Δεδοµένων Δοµές Δεδοµένων 06-11

Αφηρηµένοι τύποι δεδοµένων Όλα τα υπολογιστικά συστήµατα βασίζονται σε στρώσεις αφαίρεσης (layers of abstraction) Το µοντέλο του bit: 0 ή 1 (χωρίς να µας απασχολεί πως επιτυγχάνεται, π.χ. τσιπ πυριτίου) Γλώσσα προγραµµατισµού: ο προγραµµατιστής χρειάζεται να γνωρίζει τις διαθέσιµες δοµές δεδοµένων και εντολές της γλώσσας και όχι απαραίτητα πώς υλοποιείται ο compiler Σχεδίαση αλγορίθµων: ανεξάρτητο από γλώσσα προγραµµατισµού (συνήθως) Σε κάθε επίπεδο υπάρχει διαχωρισµός µεταξύ υλοποίησης και χρήσης Δοµές Δεδοµένων 06-12

Αφηρηµένοι Τύποι Δεδοµένων ΑΤΔ: πελάτης, υλοποίηση και διεπαφή (ή διασύνδεση) Διεπαφή: περιγραφή τύπου δεδοµένων και πράξεων Πελάτης: πρόγραµµα που χρησιµοποιεί τις πράξεις Υλοποίηση: κώδικας που υλοποιεί τις πράξεις Προσοχή: Τα προγράµµατα πελάτες δεν µπορούν να προσπελάσουν τα δεδοµένα παρά µόνο µέσω των µεθόδων που παρέχει η διασύνδεση Διαχωρισµός διεπαφής και υλοποίησης Επιτρέπει το χτίσιµο επιπέδων αφαίρεσης Επαναχρησιµοποίηση λογισµικού Παραδείγµατα: στοίβες, ουρές, πίνακες συµβόλων Δοµές Δεδοµένων 06-13

Αφηρηµένοι Τύποι Δεδοµένων ΑΤΔ: πελάτης, υλοποίηση και διεπαφή (ή διασύνδεση) Διεπαφή: περιγραφή τύπου δεδοµένων και πράξεων Πελάτης: πρόγραµµα που χρησιµοποιεί τις πράξεις Υλοποίηση: κώδικας που υλοποιεί τις πράξεις Προσοχή: Τα προγράµµατα πελάτες δεν µπορούν να προσπελάσουν τα δεδοµένα παρά µόνο µέσω των µεθόδων που παρέχει η διασύνδεση Πλεονεκτήµατα ΑΤΔ Ο πελάτης µπορεί να χρησιµοποιήσει διάφορες υλοποιήσεις Η υλοποίηση µπορεί να χρησιµοποιηθεί από διάφορους πελάτες Σχεδίαση αρθρωτού (άρα επαναχρησιµοποιήσιµου) κώδικα Επιτρέπει τη χρήση της πλέον βελτιστοποιηµένης υλοποίησης Δοµές Δεδοµένων 06-14

Αφηρηµένοι τύποι δεδοµένων Παράδειγµα: ας επανέλθουµε στην τάξη Point για επεξεργασία σηµείων στο επίπεδο Περιέχει δεδοµένα και µεθόδους class Point { double x, y; Point() { x = Math.random(); y = Math.random(); } Point(double x, double y) {this.x = x;this.y = y;} double r() { return Math.sqrt(x*x + y*y); } double theta() { return Math.atan2(y, x); } double distance(point p) { double dx = x - p.x, dy = y - p.y; return Math.sqrt(dx*dx + dy*dy); } public String tostring() { return "(" + x + "," + y + ")"; } } Δοµές Δεδοµένων 06-15

Αφηρηµένοι τύποι δεδοµένων Οι χρήστες (προγράµµατα-πελάτες) δεν χρειάζεται να γνωρίζουν πώς αποθηκεύονται τα σηµεία Χειρισµός σηµείων µέσω µεθόδων και µόνο Γνωρίζουµε ποιες είναι οι µέθοδοι αλλά όχι πώς λειτουργούν Διεπαφή ΑΤΔ σηµείων Περιλαµβάνει µόνο τα δηµόσια µέλη της τάξης class Point { Point() Point(double, double) double x() double y() double r() double theta() double distance(point) public String tostring() } Δοµές Δεδοµένων 06-16

Αφηρηµένοι τύποι δεδοµένων Υλοποίηση 1: χρήση καρτεσιανών συντεταγµένων class Point { private double x, y; Point() { x = Math.random(); y = Math.random(); } Point(double x, double y) {this.x = x; this.y = y;} double x() { return x; } double y() { return y; } double r() { return Math.sqrt(x*x + y*y); } double theta() { return Math.atan2(y, x); } double distance(point p) { double dx = x - p.x(); double dy = y - p.y(); return Math.sqrt(dx*dx + dy*dy); } public String tostring() { return "(" + x + ","+y+")"; } } Δοµές Δεδοµένων 06-17

Αφηρηµένοι τύποι δεδοµένων Διαφορές µε πριν: Τα δεδοµένα είναι private 2 νέες µέθοδοι x(), y() Σε ιδιωτικά µέλη µπορεί να γίνει αναφορά µόνο µέσα από την ίδια την κλάση Πρόσβαση στα δεδοµένα από το πρόγραµµα πελάτη γίνεται µόνο µέσω των µεθόδων x(), y() Έστω τώρα ότι θέλουµε να αλλάξουµε την αναπαράσταση σε πολικές συντεταγµένες αντί για καρτεσιανές Πρέπει να αλλάξουν και όλα τα προγράµµατα-πελάτες? Δοµές Δεδοµένων 06-18

Αφηρηµένοι τύποι δεδοµένων Υλοποίηση 2: χρήση πολικών συντεταγµένων class Point { private double r, theta; Point() { double x = Math.random(), y = Math.random(); this = new Point(x, y); } Point(double x, double y) { r = Math.sqrt(x*x + y*y); theta = Math.atan2(y, x); } double r() { return r; } double theta() { return theta; } double x() { return r*math.cos(theta); } double y() { return r*math.sin(theta); } double distance(point p) { double dx = x - p.x(); double dy = y - p.y(); return Math.sqrt(dx*dx + dy*dy); } public String tostring() { return "(" + x() + ", " + y() + ")"; } } Δοµές Δεδοµένων 06-19

Αφηρηµένοι τύποι δεδοµένων Όσοι πελάτες χρησιµοποιούσαν τις x(), y() πριν, µπορούν να εξακολουθήσουν να τις χρησιµοποιούν και τώρα Καµία απολύτως αλλαγή στον κώδικα του πελάτη Μας επιτρέπει να κάνουµε αλλαγές στην αναπαράσταση προς βελτιστοποίηση της υλοποίησης Διόρθωση σφαλµάτων χωρίς αλλαγές στους πελάτες Δοµές Δεδοµένων 06-20

Συλλογές στοιχείων Γενικευµένες ουρές: θεµελιώδεις δοµές δεδοµένων Τιµές: σύνολα αντικειµένων (άγνωστος τρόπος αποθήκευσης), µπορεί να είναι int, char, Object, Πράξεις: εισαγωγή νέου στοιχείου, αποµάκρυνση στοιχείου, έλεγχος αν το σύνολο είναι κενό Υλοποίηση µε λίστες ή πίνακες Η σηµασία της εισαγωγής είναι προφανής Ποιο αντικείµενο επιστρέφει η αποµάκρυνση; (π.χ. Αυτό που έχει µείνει περισσότερη ώρα, λιγότερη ώρα, το 3 ο από το τέλος,...) Κάθε κριτήριο αποµάκρυνσης νέα δοµή δεδοµένων Δοµές Δεδοµένων 06-21

Στοίβα (Stack) Συλλογές στοιχείων Αποµακρύνουµε το αντικείµενο που εισήχθη πιο πρόσφατα Αναλογία: πλύσιµο πιάτων, στοίβα των δίσκων στο εστιατόριο Ορολογία: push (εισαγωγή) και pop (αποµάκρυνση) Αναφέρεται και ως ουρά LIFO (Last In First Out) Δοµές Δεδοµένων 06-22

Ουρά (Queue) Συλλογές στοιχείων Αποµακρύνουµε το αντικείµενο που εισήχθη πιο παλιά Αναλογία: ουρά στο κυλικείο Ορολογία: enqueue (εισαγωγή) και dequeue (αποµάκρυνση) Αναφέρεται συνήθως ως ουρά FIFO (First In First Out) Δοµές Δεδοµένων 06-23

Στοίβα ώθησης προς τα κάτω Πράξεις στοίβας Pop(): αποµάκρυνση του αντικειµένου που εισήχθη τελευταίο Push(): εισαγωγή ενός αντικειµένου στη στοίβα isempty(): είναι άδεια η στοίβα; Παράδειγµα: στοίβα χαρακτήρων Χαρακτήρας: Push, Αστερίσκος: Pop Δοµές Δεδοµένων 06-24

Στοίβα ώθησης προς τα κάτω Διεπαφή στοίβας ακεραίων Ο πελάτης µπορεί να δίνει και το µέγιστο πλήθος στοιχείων class intstack { // υλοποιήσεις και ιδιωτικά μέλη κρυμμένα intstack(int) boolean isempty() void push(int) int pop() } Δοµές Δεδοµένων 06-25

Παραδείγµατα πελατών για στοίβες Πολλές σηµαντικές εφαρµογές Υπολογισµός αριθµητικών παραστάσεων Εικονική µηχανή Java Λειτουργίες Undo και Back Γλώσσα περιγραφής σελίδων PostScript Υπολογισµός αριθµητικών παραστάσεων Έστω ότι θέλουµε να υπολογίσουµε την παράσταση 5 * ( ( ( 9 + 8 ) * ( 4 * 6 ) ) + 7 ) Η παράσταση αυτή είναι σε ενθεµατική µορφή (infix) Μετατροπή σε µεταθεµατική µορφή (postfix) 5 9 8 + 4 6 * * 7 + * Κάθε τελεστής ακολουθεί τα ορίσµατά του Δεν χρειάζονται παρενθέσεις Δοµές Δεδοµένων 06-26