Επανάλθψθ: Δομζσ Δεδομζνων και Αλγόρικμοι

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Επανάλθψθ: Δομζσ Δεδομζνων και Αλγόρικμοι"

Transcript

1 Επανάλθψθ: Δομζσ Δεδομζνων και Αλγόρικμοι Επαναλθπτικό Υλικό Τελικϊν Εξετάςεων ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι

2 Εργαλεία Εκτίμθςθσ Πολυπλοκότθτασ Οριςμόσ: Θεωροφμε ςυνάρτθςθ Τ(n). Ορίηουμε f(n)μπορεί να είναι οποιαδιποτε ςυνάρτθςθ => n, n 2, logn. Σ(n) Ο( f (n) ), αν υπάρχουν ςτακερζσ c>0 και n 0 ϊςτε Σ(n) c f(n), για κάκε n n Σ(n) Ω( f(n) ), αν υπάρχουν ςτακερζσ c>0 και n 0 ϊςτε Σ(n) c f(n), για κάκε n n Σ(n) Θ( f(n) ), αν Τ(n) Ο(f(n)) και Τ(n) Ω(f(n)). Αν Τ(n) Ο(f (n)), τότε λζμε πωσ θ ςυνάρτθςθ Τ είναι τθσ τάξεωσ f(n). Αν Τ(n) Ω(f (n)), τότε λζμε πωσ θ Τ είναι τθσ τάξεωσ ωμζγα τθσ f (n). Αν Τ(n) Θ(f (n)), τότε λζμε πωσ θ Τ είναι τθσ τάξεωσ κιτα τθσ f (n). (λζγεται και ακριβισ τάξθ) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 2

3 Παραδείγματα Βig-O Παράδειγμα 7n-3 είναι Ο(n) Σεκμθρίωςθ Πρζπει να δείξουμε ότι υπάρχει c>0,n o ζτςι ϊςτε: 7n-3 c*n, Για c=7, n o θ παραπάνω ανιςότθτα ικανοποιείται, επομζνωσ 7n-3 είναι Ο(n) π.χ., 7*-3 7* (4 7) 7*2-3 7*2 ( 4) 7*3-3 7*3 (8 2) κοκ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 3

4 Παραδείγματα Βig-O Παράδειγμα 2 20n 3 +0nlogn+5 είναι Ο(n 3 ) Σεκμθρίωςθ Πρζπει να δείξουμε ότι υπάρχει c>0,n o ζτςι ϊςτε 20n 3 +0nlogn+5 c* n 3 20n 3 +0nlogn+5 20n 3 +0n 3 +5n 3 20n 3 +0n 3 +5n 3 35n 3 (n>) Για c=35, n o = θ παραπάνω ανιςότθτα ικανοποιείται, επομζνωσ 20n 3 +0nlogn+5 είναι Ο(n 3 ) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 4

5 Ιδιότθτεσ Big-O τισ περιςςότερεσ περιπτϊςεισ μασ ενδιαφζρει μόνο το άνω φράγμα (χείριςτθ περίπτωςθ εκτζλεςθσ ενόσ αλγορίκμου), δθλαδι το O. Θ ςυνάρτθςθ O ζχει τισ ακόλουκεσ ιδιότθτεσ:. O(X+Y) = O(X) + O(Y) max (O(X),O(Y)) 2. O(X*Y) = O(X)*O(Y) O(X * Y) 3. O(c * X) = O(X) (c ςτακερά > 0 ) Θζτύει η ακόλοσθη ζειρά < logn< n< nlogn< n 2 < n 3 < 2 n < n!< n n < είναι αζσμπηωηικά μικρόηερο Παράδειγμα Ζςτω ότι ζνασ αλγόρικμοσ ζχει τθν ακόλουκθ ςυνάρτθςθ αφξθςθσ f(n) = 6n 2 logn + 3n + 7 Σότε απλοποιοφμε τθν ςυνάρτθςθ αφξθςθσ ωσ εξισ = 6n 2 logn (διαγράφουμε τισ μικρότερεσ τιμζσ του n Κανόνασ ) = n 2 logn (διαγράφουμε τισ ςτακερζσ Κανόνασ 3) δθλαδι f(n) Ο(n 2 logn) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 5

6 Παραδείγματα Ιδιοτιτων Big-O Παραδείγματα: 5n + 32 Ο(n) 200*(n+n 7 ) Ο(n 7 ) 324 Ο() (n+n 7 )*m 2 Ο(n 7 m 2 ) 5n 2 O(n 2 ) 5nlgn + 4 Ο(nlgn) Ρροφανϊσ, κατά τθν ανάλυςθ αλγορίκμων ςτόχοσ μασ είναι αυτά τα όρια να είναι όςο το δυνατό πιο ακριβι. Εάν 7n-4 είναι Ο(n), τότε προφανϊσ 7n-4 είναι Ο(n 2 ), Ο(n 3 ), Ο(n 4 ),. Ωςτόςο, οι χαρακτθριςμοί big-o πρζπει να είναι όςο το δυνατό πιο μικρισ τάξθσ. (δθλαδι το Ο(n) είναι το πιο ςτενό άνω όριο). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 6

7 Παράδειγμα Ανάλυςθσ Υποθέστε ότι θέλετε να βρείτε την θέση κάποιοσ στοιτείοσ K σε μια λίστα Χ[] (μήκοσς n). int index( int X[],int n,int k){ int i=0; 2 while (i < n) { 3 if (X[i]==k) // item found 4 return i; 5 i+=; } 6 return error; } Μζγεκοσ δεδομζνων ειςόδου: n Χειρότερθ Περίπτωςθ: εξζταςθ όλων των ςτοιχείων (π.χ. ψάχνουμε το 5) t(n) = n => O(n) Βζλτιςτθ Περίπτωςθ: το ςτοιχείο βρίςκετε ςτθν κζςθ (π.χ. ψάχνουμε το 3) t(n) = => Ω() Άρα εκτόσ από το μζγεκοσ ειςόδου και το ίδιο το ςτιγμιότυπο ειςόδου παίηει κάποιο ςθμαντικό ρόλο ςτθν ανάλυςθ κάποιου αλγορίκμου (θ ςυνάρτθςθσ) Χ 7? => θέζη n ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 7

8 Διάλεξθ 05: Αφθρθμζνοι Τφποι Δεδομζνων τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Αφθρθμζνοι Τφποι Δεδομζνων (ΑΤΔ) - Οι ΑΤΔ Στοίβα και Ουρά - Υλοποίθςθ των ΑΤΔ Στοίβα και Ουρά ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 8

9 Λίςτεσ (ςυν.) Οι πιο ςθμαντικζσ πράξεισ ςτον οριςμό ενόσ ΑΤΔ-λίςτασ είναι θ ειςαγωγι και θ εξαγωγι κόμβων ςτα άκρα τθσ λίςτασ. Με βάςθ τθν προδιαγραφι αυτϊν των πράξεων, διακρίνουμε δφο βαςικοφσ τφπουσ λίςτασ που ζχουν πολλζσ και ςθμαντικζσ εφαρμογζσ ςε κλάδουσ επιςτθμϊν που χρθςιμοποιοφν υπολογιςτικζσ μεκόδουσ. Είναι οι ακόλουκεσ: Θ ςτοίβα (stack) που ζχει μόνο ζνα άκρο προςιτό για ειςαγωγζσ και εξαγωγζσ κόμβων. (LIFO Last In First Out) Θ ουρά (queue) όπου γίνονται ειςαγωγζσ ςτο ζνα άκρο και εξαγωγζσ από το άλλο. (FIFO First In First Out) Υπάρχουν και άλλοι ΑΤΔ-λίςτασ μικρότερθσ πρακτικισ ςθμαςίασ, όπωσ: ουρά με δφο άκρα, πολλαπλι ςτοίβα, κλπ. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 9

10 ΑΣΔ Λίςτα 3 : Κυκλικι Ουρά Για λόγουσ χϊρου μνιμθσ μποροφμε να πραγματοποιιςουμε τθν ουρά με μια κυκλικι διάταξθ των λζξεων τθσ μνιμθσ. Δθλαδι κα κεωροφμε ότι θ περιοχι μνιμθσ δεν αρχίηει με τθ λζξθ Α*0] και τελειϊνει με τθ λζξθ Α*n-], αλλά ότι μετά τθν Α*n-] ακολουκεί θ Α*0]. A[n-2] A[n-] A[0] A[]... Ζτςι μετά από μια ακολουκία ειςαγωγϊν και εξαγωγϊν θ ουρά μασ πικανόν να ζχει τθν πιο κάτω μορφι όπου κεωροφμε ότι θ αρχι τθσ ουράσ βρίςκεται ςτθ κζςθ k και το τζλοσ τθσ ουράσ ςτθ κζςθ 4. k ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 0

11 ΑΣΔ Λίςτα 4 : Ουρζσ με Δφο Άκρα Ο ΑΤΔ ουρά με δφο άκρα είναι παρόμοιοσ με το ΑΤΔ ουρά, με τθ διαφορά ότι ζχει δφο άκρα και επιτρζπει ειςαγωγζσ και εξαγωγζσ και ςτα δφο. Μια ουρά δφο άκρων ορίηεται ωσ μια λίςτα ςυνοδευόμενθ από τισ πιο κάτω πράξεισ: makeempty(), isempty() insert(x) ειςιγαγε το ςτοιχείο x ςτο μπροςτινό άκρο τθσ Q eject() διζγραψε τον κόμβο ςτο πίςω άκρο τθσ Q enqueue (x) ειςιγαγε τον ςτοιχείο x ςτο πίςω μζροσ τθσ Q. dequeue() διζγραψε τον κόμβο ςτο μπροςτινό άκρο τθσ Q front(q) δϊςε τον κόμβο ςτο μπροςτινό άκρο τθσ Q rear(q) δϊςε τον κόμβο ςτο πίςω άκρο τθσ Q ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι

12 Διάλεξθ 06: Συνδεδεμζνεσ Λίςτεσ & Εφαρμογζσ Στοιβϊν και Ουρϊν τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Υλοποίθςθ ΑΤΔ με Συνδεδεμζνεσ Λίςτεσ - Εφαρμογι Στοιβϊν : Αναδρομικζσ ςυναρτιςεισ - Εφαρμογι Στοιβϊν 2: Ιςοηυγιςμόσ Ραρενκζςεων - Εφαρμογι Στοιβϊν 3: Αντίςτροφοσ Ρολωνικόσ Συμβολ. - Εφαρμογι Ουρϊν : Διερεφνθςθ κατά Ρλάτοσ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 2

13 Size=3 head υνδεδεμζνεσ Λίςτεσ Μία απλι ςυνδεδεμζνθ λίςτα είναι μία ςυμπαγισ δομι δεδομζνων θ οποία αποτελείται από μία ακολουκία κόμβων. Κάκε κόμβοσ αποτελείται από: Δεδομζνα Δείκτθ/Αναφορά προσ τον επόμενο κόμβο τθσ λίςτασ data next node Επίςθσ μπορεί να χρθςιμοποιθκεί μία βοθκθτικι δομι που να αποκθκεφει χριςιμεσ πλθροφορίεσ, π.χ., αναφορά ςτον πρϊτο κόμβο, μζγεκοσ των ςτοιχείων, κτλ. ADT data next data next data next NULL node node node ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 3

14 Size=3 head τοίβα ωσ υνδεδεμζνθ Λίςτα Μποροφμε να υλοποιιςουμε μία τοίβα με μία απλά ςυνδεδεμζνθ λίςτα Κάκε κόμβοσ αποτελείται από ζνα ςτοιχείο (ςτοιχεία τθσ ςτοίβασ) και από ζνα δείκτθ (προσ τον επόμενο κόμβο τθσ ςτοίβασ). Θ κορυφι τθσ ςτοίβασ είναι ο πρϊτοσ κόμβοσ τθσ λίςτασ, Χρθςιμοποιοφμε μια μεταβλθτι για να φυλάγουμε ςτοιχεία ςχετικά με τθ ςτοίβα π.χ. μζγεκοσ (size) και δείκτθ προσ τθν κορυφι τθσ ςτοίβασ (head) που βρίςκεται και το ςτοιχείο top. STACK top data next data next data next NULL node node node ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 4

15 Τλοποίθςθ τοίβασ με υνδεδεμζνθ Λίςτα Με χριςθ εςωτερικισ κλάςθσ για τουσ κόμβουσ public class Stack<E> implements IStack<E> private class StackNode<E>{ private E obj; private StackNode<E> next; StackNode(E obj, StackNode<E> head) { this.obj = obj; this.next = head; } public E getelement(){ return this.obj; } } private StackNode<E> head; private int size; public Stack() { head = null; size=0; } public boolean isempty(){ return this.size==0; } } public void makeempty(){ this.head = null; this.size=0; } public int size() { return this.size; } public E top() { return isempty()? null : head.getelement(); } public void push(e obj) { StackNode<E> newnode = new StackNode<E>(obj, head); this.head = newnode; size+=; } public void pop() { if (!isempty()) { this.head = this.head.next; size-=; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 5

16 Ουρά ωσ υνδεδεμζνθ Λίςτα Size=3 head Μποροφμε να υλοποιιςουμε μία Ουρά με μία απλά ςυνδεδεμζνθ λίςτα Κάκε κόμβοσ αποτελείται από ζνα ςτοιχείο (ςτοιχεία τθσ ουράσ) και από ζνα δείκτθ (προσ τον επόμενο κόμβο τθσ ουράσ). Το πρϊτο ςτοιχείο αποκθκεφεται ςτον πρϊτο κόμβο Κάκε νζο ςτοιχείο αποκθκεφεται ςτο πίςω μζροσ Χρθςιμοποιοφμε μια μεταβλθτι για να φυλάγουμε ςτοιχεία ςχετικά με τθν ουρά π.χ., μζγεκοσ (size) και δείκτεσ προσ τθν κορυφι τθσ ουράσ (head) ) που βρίςκεται και το ςτοιχείο front και προσ το τελευταίο ςτοιχείο τθσ ουράσ (rear). QUEUE front rear data next data next data next NULL node node node ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 6

17 Διάλεξθ 07: Λίςτεσ Ι Υλοποίθςθ & Εφαρμογζσ τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Ευκφγραμμεσ Απλά Συνδεδεμζνεσ Λίςτεσ (ειςαγωγι, εφρεςθ, διαγραφι) - Ευκφγραμμεσ Διπλά Συνδεδεμζνεσ Λίςτεσ - Σφγκριςθ Συνδεδεμζνων Λιςτϊν με Ρίνακεσ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 7

18 Διάλεξθ 08: Λίςτεσ ΙΙ Κυκλικζσ Λίςτεσ τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Κυκλικζσ Απλά Συνδεδεμζνεσ Λίςτεσ - Κυκλικζσ Διπλά Συνδεδεμζνεσ Λίςτεσ - Τεχνικζσ Μείωςθσ Χϊρου ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 8

19 Size=3 head rear Κυκλικζσ Απλά υνδεδεμζνεσ Λίςτεσ Μια κυκλικι λίςτα μπορεί να παίξει το ρόλο τθσ ουράσ, τθσ οποίασ και τα δφο άκρα είναι προςιτά με τθ βοικεια ενόσ μόνο δείκτθ. C-LIST data next data next data next node node node Το πίςω άκρο, δθλαδι το άκρο όπου γίνονται οι ειςαγωγζσ, είναι αυτό που δείχνεται από τον δείκτθ ςτθ λίςτα (rear). Άρα οι εξαγωγζσ γίνονται ακριβϊσ μετά από τον κόμβο που δείχνεται από τον δείκτθ rear. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 9

20 Σο πρόβλθμα του Josephus Titus Flavius Josephus (37 00 μ. Χ.) N άτομα τοποκετοφνται ςε ζναν κφκλο Αφαιροφμε το M-οςτό άτομο, για κάποιο δοςμζνο Μ (ξεκινϊντασ από το ) Ξεκινϊντασ από Μ+ αφαιροφμε πάλι το Μ- οςτό άτομο κ.ο.κ. μζχρι να μείνει μόνο ζνα άτομο Josephus(N,M): το άτομο που κα μείνει ςτο τζλοσ Josephus(9,5) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 20

21 Κυκλικά Απλά υνδεδεμζνθσ Λίςτα (ςυν.) Άμεςθ λφςθ με χριςθ κυκλικισ λίςτασ Καταςκευι λίςτασ N κόμβων Ο τελευταίοσ κόμβοσ δείχνει ςτον πρϊτο Διατρζχουμε τθ λίςτα μζχρι να αδειάςει Κυκλικι διάςχιςθ χωρίσ ειδικό κϊδικα Διαγράφουμε το M-οςτό ςτοιχείο κάκε φορά Εφκολθ αφαίρεςθ ςτοιχείων ακολουκϊντασ δείκτεσ Δεν υπάρχει αλλαγι ςτισ δομζσ (κλάςεισ), μόνο ςτισ ςυναρτιςεισ διαγραφισ και ειςαγωγισ Ανακζτουμε ςτον τελευταίο κόμβο να δείχνει ςτον πρϊτο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 2

22 Σο πρόβλθμα του Josephus: Τλοποίθςθ class Node { int val; Node next; Node(int v) { val = v; } } public class Josephus { public static void main(string[] args) { int N = 9; int M = 5; Node t = new Node(); Node x = t; // t ςτην αρχό for (int i = 2; i <= N; i++) { x.next = new Node(i); x = x.next; } x.next = t;// τελευταύοσ κόμβοσ δεύχνει την αρχό while (x!= x.next) { for (int i = ; i < M; i++) x = x.next; System.out.println("Executing " + x.next.val); x.next = x.next.next; // διαγραφό } System.out.println("Survivor is " + x.val); } } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 22

23 Σο πρόβλθμα του Josephus: Τλοποίθςθ (ςυν.) Γενικά μποροφμε να υλοποιοφμε λίςτεσ με πίνακεσ (δεν είναι πάντα βολικό όμωσ) Χρειαηόμαςτε 2 πίνακεσ: val[i]: ςτοιχείο κόμβου i next[i]: δείκτθσ επόμενου κόμβου Διαγραφι κόμβου γίνεται με ενθμζρωςθ του next[] next[x] = next[next[x]] ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 23

24 Διάλεξθ 09: Αλγόρικμοι Ταξινόμθςθσ I τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Οι αλγόρικμοι ταξινόμθςθσ: Α. SelectionSort Ταξινόμθςθ με Επιλογι Β. InsertionSort Ταξινόμθςθ με Ειςαγωγι Γ. MergeSort Ταξινόμθςθ με Συγχϊνευςθ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 24

25 Διάλεξθ 0: Αλγόρικμοι Ταξινόμθςθσ II τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Οι αλγόρικμοι ταξινόμθςθσ: Δ. QuickSort Γριγορθ Ταξινόμθςθ Ε. BucketSort Ταξινόμθςθ με Κάδουσ - Ζμμεςθ Ταξινόμθςθ - Εξωτερικι Ταξινόμθςθ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 25

26 Δ. Γριγορθ Σαξινόμθςθ (QuickSort) Θ γριγορθ ταξινόμθςθ (QuickSort) είναι, όπωσ ο MergeSort, διαδικαςία διαίρει και βαςίλευε (divide and conquer, δθλ. αναδρομικι διαδικαςία όπου το πρόβλθμα μοιράηεται ςε μζρθ τα οποία λφνονται ξεχωριςτά, και μετά οι λφςεισ ςυνδυάηονται). Δεν χρειάηεται βοθκθτικό πίνακα (όπωσ ςτθν MergeSort) Πρακτικά, ο πιo γριγοροσ αλγόρικμοσ. Στθ χείριςτθ περίπτωςθ ο αλγόρικμοσ QuickSort είναι Ο(n²) αλλά ςτθν καλφτερθ περίπτωςθ χρειάηεται Ω(nlogn): Τα περιςςότερα ςυςτιματα χρθςιμοποιοφν το QuickSort (π.χ., Unix) και οι περιςςότερεσ γλϊςςεσ προγραμματιςμοφ το προςφζρουν ςαν μζροσ των βαςικϊν βιβλιοκθκϊν τουσ πχ. C, JAVA, C++, etc. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 26

27 QuickSort: Αλγόρικμοσ Aν το δεδομζνο ειςόδου περιζχει 0 ι ςτοιχεία δεν κάνουμε τίποτα. Διαφορετικά, αναδρομικά:. διαλζγουμε ζνα ςτοιχείο p (ακόμα δεν ορίηουμε πιο ακριβϊσ), το οποίο ονομάηουμε το άξονα (pivot) ςτοιχείο και το αφαιροφμε από το δεδομζνο ειςόδου. 2. χωρίηουμε τον πίνακα ςε δφο μζρθ S και S2, όπου το S κα περιζχει όλα τα ςτοιχεία του πίνακα που είναι μικρότερα από το p, και το S2 κα περιζχει τα υπόλοιπα ςτοιχεία (όλα τα ςτοιχεία που είναι μεγαλφτερα ι ίςα από το p). 3. Καλοφμε αναδρομικά τον αλγόρικμο ςτο S, και παίρνουμε απάντθςθ το Σ, και ςτο S2, και παίρνουμε απάντθςθ το Σ2. 4. Επιςτρζφουμε τον πίνακα [Σ, p, T2]. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 27

28 QuickSort: Βαςικι Ιδζα [72, 2,, 34, 3, 50, 28, 6, 5, 22, 9, 73] χωρίηουμε με pivot το 28 (μποροφςε να είναι οποιοδιποτε άλλο ςτοιχείο) Θζτουμε αριςτερά του pivot τα μικρότερα και δεξιά τα μεγαλφτερα του < 28 >= 28 [2,, 3, 6, 5, 22] 28 [72,34,50,9,73] Quicksort Quicksort, 3, 5, 6, 2, 22 34, 50, 72, 73, 9 Αποτζλεςμα:, 3, 5, 6, 2, 22, 28, 34, 50, 72, 73, 9 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 28

29 QuickSort: Ψευδοκϊδικασ void Quicksort(int A[], int l, int r){ if (l>=r) return; int pivotindex = findpivotindex(a, l, r); int pivot = A[pivotIndex]; // κάνουμε swap τον pivot με το τελευταίο. swap(a, pivotindex, r); Ζςτω ότι διαλζξαμε τον μεςαίο, δθλ., (l+r)/2;. Θα μποροφςαμε να διαλζξουμε οποιονδιποτε άλλο /* H διαδικαςία partition χωρίζει τον πίνακα Α[l r-] έτςι ώςτε Α[l..k-] να περιέχει ςτοιχεία < pivot, A[k r-] να περιέχει ςτοιχεία >=pivot, και επιςτρέφει την τιμή k. */ int k = partition (A, l, r-, pivot); // κάνουμε swap τον k με το τελευταίο. swap(a, k, r); } Quicksort(A, l, k-); QuickSort(A, k+, r); A l r- r pivot ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 29

30 Διαδικαςία Partition(A, l, r, p) Με δεδομζνο ειςόδου τον πίνακα Α*l r+, και pivot p, κζλουμε να χωρίςουμε τον πίνακα ςε δφο μζρθ ωσ προσ το p. To πιο πάνω πρζπει να επιτευχκεί χωρίσ τθ χριςθ δεφτερου πίνακα (το sorting κα γίνει επί τόπου). Βαςικι Ιδζα:. Επαναλαμβάνουμε τα εξισ μζχρισ ότου τα l και r να ςυναντθκοφν. 2. Ρροχϊρα το r προσ τα αριςτερά όςο τα ςτοιχεία που βρίςκεισ είναι μεγαλφτερα (ι ίςα) του p, 3. Ρροχϊρα το l προσ τα δεξιά όςο τα ςτοιχεία που βρίςκεισ είναι μικρότερα του p, 4. αντάλλαξε τα ςτοιχεία που δείχνονται από τα l και r. A l r- r pivot ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 30

31 Παράδειγμα Εκτζλεςθσ Partition Δεδομζνο Ειςόδου: index pivot = 48, μετακίνθςθ του pivot ςτο τζλοσ (swap(4, 8)): l r εκτζλεςθ του Partition(A, l, r, 48): l r l r l r r l pivot ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 3

32 Quicksort: Τλοποίθςθ public static void QuickSort(int A[], int l, int r) { int pivot, pivotindex; A if (l >= r) return; // Διαλϋγουμε το pivot pivotindex = findpivotindex(l, r); pivot = A[pivotIndex]; // Κϊνουμε swap το pivot με το τελευταύο swap(a, pivotindex, r); /* H διαδικαςύα partition χωρύζει τον πύνακα Α[l r-] ϋτςι ώςτε * Α[l..k-] να περιϋχει ςτοιχεύα < pivot, A[k r-] να περιϋχει ςτοιχεύα * >=pivot, και επιςτρϋφει την τιμό k. */ int k = partition(a, l, r -, pivot); // Κϊνουμε swap το k με το τελευταύο if (A[r] < A[k]) swap(a, k, r); l r- r pivot } QuickSort(A, l, k - ); QuickSort(A, k +, r); ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 32

33 Quicksort: Τλοποίθςθ (ςυν.) public static int findpivotindex(int l, int r) { return (l + r) / 2; } public static void swap(int A[], int pivot, int r) { int tmp = A[pivot]; A[pivot] = A[r]; A[r] = tmp; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 33

34 Quicksort: Τλοποίθςθ (ςυν.) public static int partition(int A[], int l, int r, int pivot) { while (l < r) { // προχωρούμε από l ςτο r μϋχρι να χρειαςτεύ ϋνα swap while (A[l] < pivot && l < r) l++; // leave <pivot on left // προχωρούμε από r ςτο l μϋχρι να χρειαςτεύ ϋνα swap while (pivot <= A[r] && l < r) r--; // leave >=pivot on right if (l == r) break; A } // τώρα κϊνε το swap l r- r pivot if (A[l] >= pivot) swap(a, l, r); // move >= to the right } // επϋςτρεψε το ςημεύο ςτο οπούο θϋλουμε να γύνει η // ειςαγωγό του pivot return l; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 34

35 Παράδειγμα Εκτζλεςθσ QuickSort BEFORE:[72,6,37,48,30,42,83,75] Index: ** QuickSort [0,7] [72,6,37,48,30,42,83,75,] PivotIndex: 3(48) => Swapping 48, 75 [72,6,37,75,30,42,83,48,] Partitioning [0,6] Swapping 72, 42 [42,6,37,75,30,72,83,48,] Swapping 75, 30 [42,6,37,30,75,72,83,48,] Inserting Pivot at Position:4 Swapping 75, 48 [42,6,37,30,48,72,83,75,] ** QuickSort [0,3] [42,6,37,30,48,72,83,75,] PivotIndex: (6) => Swapping 6, 30 [42,30,37,6,48,72,83,75,] Partitioning [0,2] Inserting Pivot at Position:0 Swapping 42, 6 ** QuickSort [,3] [6,30,37,42,48,72,83,75,] PivotIndex: 2(37) => Swapping 37, 42 [6,30,42,37,48,72,83,75,] Partitioning [,2] Inserting Pivot at Position:2 Swapping 42, 37 ** QuickSort [,] -> RETURN ** QuickSort [3,3] -> RETURN ** QuickSort [5,7] [6,30,37,42,48,72,83,75,] PivotIndex: 6(83) => Swapping 83, 75 [6,30,37,42,48,72,75,83,] Partitioning [5,6] with pivot:83 Inserting Pivot at Position:6 ** QuickSort [5,5] -> RETURN ** QuickSort [7,7] -> RETURN AFTER:[6,30,37,42,48,72,75,83,] ** QuickSort [0,-] -> RETURN ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 35

36 Ανάλυςθ του Χρόνου Εκτζλεςθσ Θ εφρεςθ του pivot απαιτεί χρόνο Ο() και θ διαδικαςία Partition(Α, l, r, p) εκτελείται ςε χρόνο O(n) ςε κάκε επίπεδο τθσ αναδρομισ. Θ αναδρομικι εκτζλεςθ του QuickSort παίρνει ςτθν χείριςτθ περίπτωςθ χρόνο O(n) και ςτθν καλφτερθ περίπτωςθ χρόνο Ω(logn) Χείριςτθ περίπτωςθ: Κάκε φορά που επιλζγουμε τον pivot όλα τα ςτοιχεία τυγχάνει να ταξινομοφνται είτε μόνο αριςτερά του (δθλαδι <pivot) ι μόνο δεξιά του (δθλαδι >=pivot) πχ 9,9,9,9,9,9,9 Συνολικόσ χρόνοσ εκτζλεςθσ Σ(n) O(n²). Βζλτιςτθ περίπτωςθ: Κάκε φορά που επιλζγουμε τον pivot τα μιςά ςτοιχεία ταξινομοφνται αριςτερά του (δθλαδι <pivot) και τα υπόλοιπα μιςά δεξιά του (δθλαδι >=pivot) πχ,2,3,4,5,6,7 υνολικόσ χρόνοσ εκτζλεςθσ Σ(n) Ω(n log n). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 36

37 Ανάλυςθ Μζςθσ Περίπτωςθσ Θεωροφμε όλεσ τισ πικανζσ περιπτϊςεισ τθσ ςυμπεριφοράσ τθσ μεκόδου Partition(A, i, j, p), όπου j-i = n-. Υπάρχουν n τζτοιεσ περιπτϊςεισ: το αριςτερό κομμάτι του partition μπορεί να ζχει από 0 μζχρι n- ςτοιχεία. Ασ υποκζςουμε πωσ οι n αυτζσ περιπτϊςεισ είναι ιςοπίκανεσ, δθλαδι θ κάκε μια ζχει πικανότθτα /n. Τότε θ μζςθ περίπτωςθ του Τ(n) δίνεται ωσ Επίλυςθ τθσ αναδρομικισ ςχζςθσ δίνει T(n) O(n log n). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι ) ( 2 )] ( ) ( [ ) ( n i n i i T n n c i n T i T n n c n T

38 Παρατθριςεισ Ρωσ δουλεφει θ μζκοδοσ Partition με δεδομζνο ειςόδου πίνακα με πολλά ςτοιχεία ίςα με το pivot; Υπάρχουν άλλεσ ςτρατθγικζσ για επιλογι του pivot; pivot = mid(a[], A[n], A[n/2]) Επζλεξε τυχαία κάποιο ςτοιχείο του πίνακα Στθν πράξθ, για δεδομζνα ειςόδου μικροφ μεγζκουσ το InsertionSort δουλεφει πιο αποδοτικά. Επομζνωσ μια καλι ςτρατθγικι κα ιταν να ςυνδυάςουμε τουσ δφο αλγόρικμουσ ϊςτε ςε μικροφσ πίνακεσ (π.χ. n 0) να χρθςιμοποιείται το ΙnsertionSort και ςε μεγάλουσ το Quicksort: ςτθ μζκοδοσ Quicksort ανταλλάξτε τθν πρϊτθ γραμμι με τθν εξισ: if (j-i)<= 0 InsertionSort(A[i j], j-i); Ακόμα ζνασ πικανόσ τρόποσ βελτίωςθσ του χρόνου εκτζλεςθσ είναι θ χριςθ ςτοίβασ αντί αναδρομισ. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 38

39 Κάτω φράγμα για αλγόρικμουσ ταξινόμθςθσ Ξζρουμε πωσ το πρόβλθμα ταξινόμθςθσ μπορεί να λυκεί ςε χρόνο Ο(n log n) (QuickSort και MergeSort). Υπάρχει πιο αποδοτικόσ αλγόρικμοσ ταξινόμθςθσ; Θα δείξουμε πωσ κάκε αλγόρικμοσ ταξινόμθςθσ είναι Ω(n log n). Ωσ μονάδα μζτρθςθσ αποδοτικότθτασ κα χρθςιμοποιιςουμε τον αρικμό ςυγκρίςεων που απαιτεί κάποιοσ αλγόρικμοσ. Υποκζτουμε ότι κάκε ςτοιχείο του πίνακα που κζλουμε να ταξινομιςουμε είναι διαφορετικό από όλα τα άλλα. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 39

40 ειριακι διάταξθ ςτοιχείων και ταξινόμθςθ Θ ςυμπεριφορά ενόσ αλγόρικμου ταξινόμθςθσ εξαρτάται μόνο από τθ ςχετικι ςειρά μεταξφ των ςτοιχείων που ταξινομοφμε και όχι από τα ςυγκεκριμζνα ςτοιχεία. Δθλαδι: αν Α και Β είναι δφο πίνακεσ τζτοιοι ϊςτε για κάκε i και j, A[i] < A[j+ αν και μόνο αν Β[i] < B[j], τότε ο αρικμόσ των βθμάτων (όπωσ και ο αρικμόσ των ςυγκρίςεων) που κα εκτελζςει κάποιοσ αλγόρικμοσ με δεδομζνο ειςόδου Α κα είναι ο ίδιοσ με τον ανάλογο αρικμό που κα εκτελζςει με δεδομζνο ειςόδου Β. Άρα, θ ςειριακι διάταξθ των ςτοιχείων του δεδομζνου ειςόδου Α, Α[], Α[2],, Α[n+, ζχει κφρια ςθμαςία. Υπάρχουν n! διαφορετικζσ τοποκετιςεισ n ξεχωριςτϊν ςτοιχείων. Άρα υπάρχουν n! διαφορετικά δεδομζνα ειςόδου. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 40

41 Ανάλυςθ Αλγόρικμων Σαξινόμθςθσ Θα περιγράψουμε τθ ςυμπεριφορά ενόσ αλγόρικμου ωσ ζνα δζνδρο αποφάςεων (decision tree). Στθ ρίηα επιτρζπονται όλεσ οι διαφορετικζσ ςειρζσ των ςτοιχείων. Ασ υποκζςουμε πωσ ο αλγόρικμοσ ςυγκρίνει τα δφο πρϊτα ςτοιχεία Α*+ και Α*2+. Τότε το αριςτερό παιδί του δζνδρου αντιςτοιχεί ςτθν περίπτωςθ Α[] < Α*2+ και το δεξί παιδί τθσ ρίηασ ςτθν περίπτωςθ Α[2] < Α[]. Σε κάκε κόμβο, μια ςειρά ςτοιχείων είναι νόμιμθ αν ικανοποιεί όλεσ τισ ςυγκρίςεισ ςτο μονοπάτι από τθ ρίηα ςτον κόμβο. Τα φφλλα αντιςτοιχοφν ςτον τερματιςμό του αλγόρικμου και κάκε φφλλο περιζχει το πολφ μια νόμιμθ ςειρά ςτοιχείων. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 4

42 Δζνδρο αποφάςεων για 3 ςτοιχεία b<c a<b<c a<c<b c<a<b a<b a<b<c a<c<b b<a<c b<c<a c<a<b c<b<a b<a b<a<c b<c<a c<b<a c<b b<c c<b a<b<c a<c<b c<a<b b<a<c b<c<a c<b<a a<c c<a a<c c<a a<c<b c<a<b b<a<c b<c<a ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 42

43 Κάτω φράγμα Ζςτω P ζνασ αλγόρικμόσ ταξινόμθςθσ, και ζςτω T το δζνδρο αποφάςεων του P με δεδομζνο ειςόδου μεγζκουσ n. Ο αρικμόσ των φφλλων του Τ είναι n! Το φψοσ του Τ είναι ζνα κάτω φράγμα του χείριςτου χρόνου εκτζλεςθσ του αλγόρικμου P. Ζνα δυαδικό δζνδρο φψουσ d ζχει το πολφ 2 d φφλλα. Άρα το Τ ζχει φψοσ το λιγότερο log n! υμπζραςμα: P Ω(log n!) = Ω(n log n). H μζςθ περίπτωςθ είναι επίςθσ n log n. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 43

44 Ε. Σαξινόμθςθ με Κάδουσ - BucketSort Ζςτω ότι ο πίνακασ A n ςτοιχείων περιζχει ςτοιχεία που ανικουν ςτο διάςτθμα *..m]. O αλγόρικμοσ BucketSort βαςίηεται πάνω ςτα ακόλουκα βιματα:. Δθμιουργοφμε ζνα πίνακα buckets μικουσ m και κζτουμε buckets[i]=0, για όλα τα i (Αυτά κα είναι τα buckets - κάδοι) 2. Διαβάηουμε τον πίνακα Α ξεκινϊντασ από το πρϊτο ςτοιχείο. Αν διαβάςουμε το ςτοιχείο α, τότε αυξάνουμε τθν τιμι του buckets*α+ κατά ζνα. Επαναλαμβάνουμε το βιμα μζχρι το τελευταίο ςτοιχείο. 3. Τζλοσ, διαβάηουμε γραμμικά τον πίνακα buckets, o oποίοσ περιζχει αναπαράςταςθ του ταξινομθμζνου πίνακα, και κζτουμε τα ςτοιχεία του πίνακα Α με τθν ταξινομθμζνθ ακολουκία. BUCKETS ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 44

45 BucketSort: Βαςικι Ιδζα Δεδομζνο Ειςόδου: Τα ςτοιχεία είναι ςτο εφροσ m=[0,4], n= n- Μετά τθν θ εκτζλεςθ του Bucketsort (Ειςαγωγι του ) BUCKETS Μετά τθ 2 θ εκτζλεςθ του Bucketsort (Ειςαγωγι του ) m BUCKETS Μετά τθ 3 θ εκτζλεςθ του Bucketsort (Ειςαγωγι του ) BUCKETS Μετά τθν 8ι εκτζλεςθ του Bucketsort BUCKETS m m m ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 45

46 BucketSort: Τλοποίθςθ // Α: Πύνακασ για ταξινόμηςη μεγϋθουσ n // Buckets: Βοηθητικόσ πύνακασ μεγϋθουσ m void BucketSort(int A[], int buckets[], int n, int m){ int i, j, k=0; } // Κατανομό ςτοιχεύων ςτουσ ςωςτούσ κϊδουσ for (i=0; i<n; i++) { buckets[a[i]]++; } // Αντιγραφό ςτοιχεύων από πύνακα BUCKETS // ςτον πύνακα A for (i=0; i<m; i++) { for (j=0; j<buckets[i]; j++) { A[k] = i; k++; } } Ο(n) Ο(n+m) υνολικά περνάμε φορά από τα ςτοιχεία του πίνακα BUCKETS (m) και μια φορά από αυτά του A (n) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 46

47 BucketSort: Χρόνοσ Εκτζλεςθσ O αλγόρικμοσ BucketSort πετυχαίνει ταξινόμθςθ του Α ςε χρόνο Θ(n+m) θμαίνει ότι ο αλγόρικμοσ είναι καλφτεροσ από τον MergeSort Θ(nlogn); Αυτό διαψεφδει το κάτω φράγμα Ω(n log n); (κυμεικείτε ότι ζχουμε αποδείξει ότι όλοι οι αλγόρικμοι ταξινόμθςθσ, με δυαδικι ςφγκριςθ, ζχουν ςαν κάτω φράγμα Ω(n log n)) ΟΧΙ, γιατί το μοντζλο είναι διαφορετικό. Μζχρι τϊρα υποκζςαμε ότι θ μόνθ πράξθ που μποροφμε να εφαρμόςουμε ςτα δεδομζνα είναι θ δυαδικι ςφγκριςθ ι ανταλλαγι ςτοιχείων. Ο αλγόρικμοσ BucketSort όμωσ ςτο Βιμα 2 ουςιαςτικά εφαρμόηει m-αδικι (m-ary) ςφγκριςθ, ςε χρόνο Ο(). Αυτό μασ υπενκυμίηει πωσ ςχεδιάηοντασ ζνα αλγόρικμο και λαμβάνοντασ υπόψθ κάποια αποδεδειγμζνα κάτω φράγματα πρζπει πάντα να αναλφουμε το μοντζλο ςτο οποίο δουλεφουμε. Θ φπαρξθ και αξιοποίθςθ περιςςότερων πλθροφοριϊν πικανόν να επιτρζπουν τθ δθμιουργία αποδοτικότερων αλγορίκμων. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 47

48 Διάλεξθ : Δζντρα Ι - Ειςαγωγι ςε Δενδρικζσ Δομζσ Δεδομζνων τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Ειςαγωγι ςε δενδρικζσ δομζσ δεδομζνων, - Οριςμοί και πράξεισ - Αναπαράςταςθ δενδρικϊν δομϊν δεδομζνων ςτθ μνιμθ - Διάςχιςθ Δζντρων ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 48

49 Διάςχιςθ Δζνδρων Αν κζλουμε να επιςκεφκοφμε όλουσ τουσ κόμβουσ ενόσ δζνδρου, μποροφμε να χρθςιμοποιιςουμε ζνα από τουσ πιο κάτω τρόπουσ, οι οποίοι διαφζρουν ςτθ ςειρά με τθν οποία εξετάηουν τουσ κόμβουσ.. Προκεματικι Διάςχιςθ: (Preorder Traversal) επιςκεπτόμαςτε (εκτυπϊνουμε) πρϊτα τθ ρίηα και φςτερα τα παιδιά τθσ. Αναδρομικά θ πράξθ ορίηεται ωσ εξισ: Print_Preorder(treenode u) Print u; foreach child v of u Print_Preorder(v) 2. Μετακεματικι Διάςχιςθ: (Postorder Traversal) επιςκεπτόμαςτε (εκτυπϊνουμε) πρϊτα τα παιδιά και φςτερα τθ ρίηα του δζνδρου. Αναδρομικά θ πράξθ ορίηεται ωσ εξισ: Print_Postorder(treenode u) foreach child v of u Print_Postorder(v) Print u; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 49

50 Παράδειγμα Διάςχιςθσ δζνδρου A B Γ Δ Ε Η Θ Θ Ι Print_Preorder(treenode u) Print u; foreach child v of u Print_Preorder(v) Print_Postorder(treenode u) foreach child v of u Print_Postorder(v) Print u; Προκεματικι Διάςχιςθ (Preorder) : Α Β Ε Γ Δ Η Θ Θ Ι Μετακεματικι Διάςχιςθ (Postorder) : Ε Β Γ Η Θ Θ Ι Δ Α ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 50

51 Διάλεξθ 2: Δζντρα ΙΙ - Δυαδικά Δζντρα τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Δυαδικά Δζνδρα - Δυαδικά Δζνδρα Αναηιτθςθσ (ΔΔΑ) - Εφρεςθ Τυχαίου, Μζγιςτου, Μικρότερου ςτοιχείου - Ειςαγωγι ςτοιχείου - Διαγραφι Μικρότερου και Τυχαίου ςτοιχείου - Σφγκριςθ 2 ΔΔΑ, Διάςχιςθ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 5

52 Δυαδικά Δζνδρα Ζνα δζνδρο είναι δυαδικό αν όλοι οι κόμβοι του ζχουν βακμό 2. Οριςμόσ: Δυαδικό δζνδρο λζγεται ζνα δζνδρο το οποίο : είτε είναι κενό, ι αποτελείται από μια ρίηα και δφο δυαδικά υπόδενδρα. Αναφερόμαςτε ςτα δφο υποδζνδρα ωσ το αριςτερό και το δεξιό υπόδενδρο. Το φψοσ ενόσ δυαδικοφ δζνδρου με n κόμβουσ μπορεί να είναι το πολφ : n- (ςυνδεδεμζνθ λίςτα) και το λιγότερο lg n. 6 h=2 3 2 floor(lg 4)= 2 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 52

53 Αναπαράςταςθ Δζνδρων ςτθ Μνιμθ Αφοφ κάκε κόμβοσ ςε ζνα δυαδικό δζνδρο ζχει το πολφ δφο παιδιά, μποροφμε να κρατοφμε δείκτεσ ςτο κακζνα από αυτά. Δθλαδι, ζνασ κόμβοσ μπορεί να υλοποιθκεί ωσ μια εγγραφι TreeNode με τρία πεδία (παρόμοια με κόμβο διπλά ςυνδεδεμζνθσ λίςτασ).. key, όπου αποκθκεφουμε τo κλειδί του κόμβου, 2. left, τφπου pointer, ο οποίοσ δείχνει το αριςτερό, υπόδενδρο που ριηϊνει ςτον ςυγκεκριμζνο κόμβο, και 3. right, τφπου pointer, ο οποίοσ δείχνει το δεξιό υπόδενδρο που ριηϊνει ςτον ςυγκεκριμζνο κόμβο διάφορα άλλα χριςιμα ςτοιχεία private class TreeNode<E> { E key; BinaryTreeNode<E> left; BinaryTreeNode<E> right; } //other useful fields boolean isleaf, isinternal, isroot; Object data; // data BinaryTreeNode(E key){ this.key = key; this.left = null; this.right = null; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 53

54 Αναπαράςταςθ Δζνδρων ςτθ Μνιμθ (ςυν.) Ζτςι, ζνα δυαδικό δζνδρο υλοποιείται ωσ ζνα δείκτθσ προσ τθ ρίηα του δζνδρου, δθλαδι μία αναφορά ςε εγγραφι τφπου TreeNode. Επίςθσ μπορεί να υλοποιθκεί ςαν μία ξεχωριςτι δομι Tree θ οποία να περιλαμβάνει και πλθροφορίεσ όπωσ μζγεκοσ, φψοσ, κ.τ.λ. Ραρόμοια με Λίςτεσ, Στοίβεσ, Ουρζσ, κτλ. public class Tree<E extends Comparable>{ private class TreeNode<E> {...} private BinaryTreeNode<E> head; private int size; private int height; public void makeempty() { this.head=null; this.size=0; } public boolean isempty() { return this.size==0; } public int size() { return this.size; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 54

55 Δυαδικά Δζνδρα Αναηιτθςθσ ΔΔΑ (Binary Search Trees) Το πιο ςθμαντικό πλεονζκτθμα τθσ χριςθσ δυαδικϊν δζνδρων θ αποδοτικι αναηιτθςθ ςε ζνα ςφνολο ςτοιχείων Υποκζτουμε τθν φπαρξθ μιασ ςχζςθσ ςτο ςφνολο των ςτοιχείων που επεξεργαηόμαςτε, ζςτω τθ ςχζςθ < πάνω ςτο ςφνολο των ακεραίων. Ζνα δυαδικό δζνδρο αναηιτθςθσ (ΔΔΑ) είναι ζνα δυαδικό δζνδρο κάκε κόμβοσ u του οποίου ικανοποιεί τα εξισ:. τα κλειδιά του αριςτεροφ υποδζνδρου του u είναι μικρότερα από το κλειδί του u 2. τα κλειδιά του δεξιοφ υποδζνδρου του u είναι μεγαλφτερα (ι ίςο) από το κλειδί του u. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 55

56 Διαδικαςία Εφρεςθσ Συχαίου τοιχείου: Τλοποίθςθ public BinaryTreeNode<E> find(e key) { } return this.find(key, this.head); private BinaryTreeNode<E> find(e key, BinaryTreeNode<E> node) { if(node==null){ return null; } else if (key.compareto(node.key) == 0) { return node; } else if (key.compareto(node.key) < 0) { return find(key, node.left); } else { return find(key, node.right); } } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 56

57 Διαδικαςία Εφρεςθσ Ελαχίςτου/Μεγίςτου ςτοιχείου τόχοσ: να επιςτραφεί ο κόμβοσ που περιζχει το μικρότερο (μεγαλφτερο) κλειδί ςτο δζνδρο. Αλγόρικμοσ: Ξεκινάμε από τθ ρίηα και πθγαίνουμε αριςτερά (δεξιά) όςο υπάρχει ζνα αριςτερό (δεξιό) παιδί. Το ςθμείο που ςταματάμε είναι το 6 μικρότερο (μεγαλφτερο) ςτοιχείο Χρόνοσ Εκτζλεςθσ; Ραρόμοια με find 7 9 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 57

58 Διαδικαςία Εφρεςθσ Ελαχ./Μεγίςτ.: Τλοποίθςθ public E findmin(){ BinaryTreeNode<E> tmp = this.findmin(this.head); if(tmp!=null) return tmp.key; return null; } public BinaryTreeNode<E> findmin(binarytreenode<e> node){ if(node!=null) while(node.left!=null) node = node.left; return node; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 58

59 Διαδικαςία Ειςαγωγισ Σθμαντικό: παίηει ρόλο θ ςειρά ειςαγωγισ Ραραδείγματα Α. Ειςαγωγι 37, 24, 42, 6, 40, 60 Β. Ειςαγωγι 60, 42, 6, 24, 37, ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 59

60 Διαδικαςία Ειςαγωγισ Κόμβου Διαςχίηουμε το δζντρο, όπωσ κα κάναμε με τθ find Εάν το X βρεκεί, δεν κάνουμε καμία ενζργεια Διαφορετικά, ειςάγουμε το X ςτο τελευταίο ςθμείο του μονοπατιοφ που διαςχίςτθκε Χρονικι πολυπλοκότθτα= O(h - φψοσ του δζνδρου) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 60

61 Διαδικαςία Ειςαγωγισ Κόμβου: Τλοποίθςθ public void insert(e key) { this.head = this.insert(key, this.head); this.size++; } private BinaryTreeNode<E> insert(e key,binarytreenode<e> node) { if(node==null){ node = new BinaryTreeNode<E>(key); } else if (key.compareto(node.key) < 0) { node.left = insert(key, node.left); } else if (key.compareto(node.key) > 0) { node.right = insert(key, node.right); } return node; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 6

62 Εξαγωγι του μικρότερου κόμβου DeleteMin(). Ακολουκοφμε τουσ αριςτεροφσ δείκτεσ όςο μποροφμε, φκάνοντασ ςτον κόμβο με το μικρότερο ςτοιχείο, u. 2. Βρίςκουμε τον πατζρα v του u και αλλάηουμε τον αριςτερό δείκτθ του v ϊςτε να δείχνει ςτο δεξιό παιδί του u. v u ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 62

63 Διαδικαςία Διαγραφισ τοιχείου Για να αφαιρζςουμε ζνα κλειδί i από ζνα ΔΔΑ:. Βρίςκουμε τον κόμβο u που περιζχει το i. Ασ υποκζςουμε πωσ v είναι ο πατζρασ του u. 2. Αν u είναι φφλλο, τότε αλλάηουμε τον δείκτθ του v που δείχνει ςτο u, ϊςτε να γίνει null. 3. Αν ο u ζχει ζνα παιδί, τότε αλλάηουμε τον δείκτθ του v που δείχνει τον u, ϊςτε να δείχνει ςτο παιδί του u. 4. Αν ο u ζχει δφο παιδιά, αλλάηουμε το κλειδί του u ϊςτε να γίνει το μικρότερο από τα κλειδιά όλων των απογόνων του που ζχουν κλειδιά μεγαλφτερα του i. καλοφμε τθ μζκοδο deletemin ςτο αριςτερό παιδί του u. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 63

64 Διαγραφι ςτοιχείου με δφο απογόνουσ Βρίςκουμε το μικρότερο ςτοιχείο (min) ςτο δεξιό υπόδεντρο του κόμβου που κζλουμε να διαγράψουμε Αντικακιςτοφμε το ςτοιχείο που κζλουμε να διαγράψουμε με το min και τϊρα ζχουμε το ίδιο ςτοιχείο 2 φορζσ ςτο δζντρο μασ Εφαρμόηουμε τθν deletemin ςτο δεξιό υπόδεντρο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 64

65 φγκριςθ Δυαδικϊν Δζνδρων Θ ςφγκριςθ 2 ΔΔΑ επιτυγχάνεται μθν διάςχιςθ του κάκε κόμβου αναδρομικά. Αν όλοι οι κόμβοι ζχουν το ίδιο κλειδί τότε επιςτρζφει true και false ςτθν αντίκετθ περίπτωςθ public boolean sametree(binarytree<e> t) { return this.sametree(this.head, t.head); } private boolean sametree(binarytreenode<e> a, BinaryTreeNode<E> b) { // και τα δυο δϋνδρα εύναι κενϊ => ϊρα επιςτρϋφουμε true if (a == null && b == null) return true; // και τα δυο δϋνδρα δεν εύναι κενϊ ςυγκρύνουμε τισ ρύζεσ τουσ else if (a!= null && b!= null) 3 return ((a.key.compareto(b.key) == 0) && sametree(a.left, b.left) && sametree(a.right, b.right)); // το ϋνα εκ των δυο υπό-δϋνδρων εύναι κενό => επιςτρϋφουμε false else return false; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 65

66 Διάςχιςθ ΔΔΑ Αν κζλουμε να επιςκεφκοφμε όλουσ τουσ κόμβουσ ενόσ δζνδρου, μποροφμε να χρθςιμοποιιςουμε ζνα από τουσ πιο κάτω τρόπουσ, οι οποίοι διαφζρουν ςτθ ςειρά με τθν οποία εξετάηουν τουσ κόμβουσ.. Προκεματικι Διάςχιςθ: (Preorder Traversal) επιςκεπτόμαςτε (εκτυπϊνουμε) πρϊτα κάποιο κόμβο και μετά τα παιδιά του. 2. Μετακεματικι Διάςχιςθ: (Postorder Traversal) επιςκεπτόμαςτε (εκτυπϊνουμε) πρϊτα τα παιδιά και φςτερα τον κόμβο. 3. Ενδοκεματικι Διάςχιςθ: (Inorder Traversal) επιςκεπτόμαςτε (εκτυπϊνουμε) πρϊτα τα αριςτερά παιδιά, μετά τον κόμβο και μετά τα δεξιά παιδιά. PreOrder: PostOrder: InOrder: ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 66

67 Διάςχιςθ ΔΔΑ: Τλοποίθςθ public void preorder() { this.preorder(this.head); } private void preorder(binarytreenode<e> node) { if (node!= null) { System.out.print(node.key + " "); preorder(node.left); preorder(node.right); } public void postorder() { this.postorder(this.head); } } private void postorder(binarytreenode<e> node) { if (node!= null) { postorder(node.left); postorder(node.right); System.out.print(node.key + " "); } } public void inorder() { this.inorder(this.head); } private void inorder(binarytreenode<e> node) { if (node!= null) { inorder(node.left); System.out.print(node.key + " "); inorder(node.right); } } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 67

68 Διάλεξθ 3: Δζντρα ΙΙΙ - Ιςοηυγιςμζνα Δζντρα, AVL Δζντρα τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Ιςοηυγιςμζνα Δζντρα - Υλοποίθςθ AVL-δζντρων - Ειςαγωγι Κόμβων και Ρεριςτροφζσ ςε AVL δζντρα ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 68

69 Ειςαγωγι Στθν προθγοφμενθ διάλεξθ μιλιςαμε για Δυαδικά Δζνδρα Αναηιτθςθσ (ΔΔΑ). Αυτά ζχουν φψοσ ίςο με log 2 n (ςτθν καλφτερθ περίπτωςθ) και n- ςτθν χειρότερθ περίπτωςθ. Άρα για να βροφμε αν υπάρχει ζνα ςτοιχείο ςτο δζνδρο (δθλαδι για να κάνουμε μια αναηιτθςθ) χρειαηόμαςτε να περάςουμε από log 2 n (καλφτερθ περίπτωςθ) ι n ςτοιχεία (χειρότερθ περίπτωςθ). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 69

70 Ιδζα Λφςθσ Βαςικά κζλουμε να περιορίςουμε το φψοσ του δζνδρου όςο το δυνατό περιςςότερο. Αυτό μπορεί να γίνει με:. Σωςτι αξιοποίθςθ όλων των παιδιϊν. Θέλοσμε να αποθύγοσμε ασηό ηο δένδρο Το τζλειο δζνδρο είναι θ ιδανικι περίπτωςθ! 2. Να αυξιςουμε τον αρικμό των παιδιϊν ςε κάκε κόμβο χωρίσ να αυξθκεί πάρα πολφ. Γιατί; Διότι κα καταλιξουμε ςε ζνα πίνακα ςτο τζλοσ οπότε θ αναηιτθςθ κάποιου ςτοιχείου κα πάρει O(n) χρόνο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 70

71 Ιςοηυγιςμζνα Δζνδρα Ζνα τζλειο δζνδρο προχποκζτει ότι υπάρχει ο κατάλλθλοσ αρικμόσ κόμβων. π.χ. ζνα τζλειο δυαδικό δζνδρο πρζπει να ζχει ι 2 ι 4 ι 8. κόμβουσ Για αυτό περιοριηόμαςτε ςτο να κρατάμε το δζνδρο ιςοηυγιςμζνο αντί τζλειο. Ιςοηυγιςμζνο Δζνδρο (Balanced Tree) Ζνα δζνδρο ςτο οποίο όλα τα φφλλα ζχουν το ίδιο βάκοσ. Μθ-γεμάτο, Ιςοηυγιςμζνο Γεμάτο, Μθ- Ιςοηυγιςμζνο Γεμάτο, Ιςοηυγιςμζνο, Σζλειο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 7

72 AVL Δζνδρα Είναι δυνατό να οργανϊςουμε ζνα δυαδικό δζνδρο αναηιτθςθσ ζτςι ϊςτε το φψοσ του να είναι το μικρότερο δυνατό; (τάξεωσ Ο(lοg 2 n)) Iδζα: για να ζχουμε μικρό φψοσ, αν u είναι ζνασ κόμβοσ του δζνδρου τότε και τα δφο του υπόδενδρα ζχουν περίπου τον ίδιο αρικμό κόμβων.. Πρϊτθ προςπάκεια: για κάκε κόμβο και τα δυο του υπόδενδρα ζχουν το ίδιο φψοσ τζλεια δζνδρα δζνδρα με αρικμό κόμβων 2h+-. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 72

73 AVL Δζνδρα 2. Δεφτερθ προςπάκεια: Ζνα δυαδικό δζνδρο είναι AVL-δζνδρο (Adelson-Velskii and Landis) αν για κάκε κόμβο του u τα φψθ των παιδιϊν του u διαφζρουν το πολφ κατά. (υποκζτουμε το φψοσ του κενοφ δζνδρου= ) Θα δοφμε ότι: το φψοσ ενόσ AVL-δζνδρου με n κόμβουσ είναι O(log n) διαδικαςίεσ ειςαγωγισ και εξαγωγισ κόμβων μποροφν να διατυπωκοφν ζτςι ϊςτε θ AVL-ςυνκικθ να διατθρείται. Ζνα πλιρεσ δζνδρο είναι και AVL-δζνδρο. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 73

74 Σο φψοσ ενόσ AVL-δζνδρου Ζςτω ότι Ν(h) είναι ο ελάχιςτοσ αρικμόσ κόμβων ενόσ AVLδζνδρου φψουσ h. Ζχουμε: N(0) =, N() = 2. Για h 2, ζνα AVL-δζνδρο πρζπει: να ζχει μια ρίηα, ζνα από τα δφο του υπόδενδρα να ζχει φψοσ h-, τα φψθ των δφο υποδζνδρων να διαφζρουν, το πολφ κατά. Άρα, Ν(h) = N(h-) + N(h-2) + Θ αναδρομικι ςχζςθ κυμίηει Fibonacci. Ππωσ αυτι, θ Ν μεγαλϊνει εκκετικά, δθλ. N(h) Θ(ch). Eπομζνωσ: Θεϊρθμα: Σο φψοσ ενόσ AVL-δζνδρου με n κόμβουσ είναι τθσ τάξθσ Ο(log n) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 74

75 Τλοποίθςθ AVL δζντρων Θ παράςταςθ ενόσ κόμβου AVL-δζνδρου είναι παρόμοια με αυτι ενόσ κόμβου ΔΔA, με τθν προςκικθ ενόσ επιπλζον πεδίου, που καταγράφει το φψοσ του δζνδρου που ριηϊνει ςτον ςυγκεκριμζνο κόμβο. Δθλαδι, ζνασ κόμβοσ μπορεί να υλοποιθκεί ωσ μια εγγραφι AVLNode με τζςςερα πεδία. key: το κλειδί κόμβου height (int): το φψοσ του κόμβου left (pointer): δείχνει το αριςτερό υπόδενδρο που ριηϊνει ςτον ςυγκεκριμζνο κόμβο right (pointer): δείχνει το δεξί υπόδενδρο που ριηϊνει ςτον ςυγκεκριμζνο κόμβο Το πεδίο height χρθςιμοποιείται για τθ διακρίβωςθ ανιςοηυγίασ (με ςφγκριςθ των ανάλογων πεδίων των παιδιϊν κάκε κόμβου). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 75

76 Ειςαγωγι κόμβου. H ειςαγωγι κόμβου γίνεται όπωσ ακριβϊσ και ςε ζνα δυαδικό δζνδρο αναηιτθςθσ, με τθ διαφορά ότι καταγράφουμε τθ διαδρομι που ακολουκείται (από τθ ρίηα προσ τα φφλλα). 2. Στθ ςυνζχεια, ακολουκοφμε τθ διαδρομι προσ τα πίςω και δίνουμε ςτα πεδία height των κόμβων τισ νζεσ τουσ τιμζσ. 3. Αν αυτό προκαλζςει κάποια ανιςοηυγία, δθλαδι, αν ζχει ςαν αποτζλεςμα κάποιοσ κόμβοσ να ζχει παιδιά που το φψοσ τουσ διαφζρει κατά τιμι >, τότε αναπροςαρμόηουμε τα υποδζνδρα ϊςτε το δζνδρο να γίνει ξανά AVL. Οι αναπροςαρμογζσ ονομάηονται περιςτροφζσ (rotations) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 76

77 Παράδειγμα Ειςαγωγι 72,26,9 ςτο κενό AVL δζνδρο με αυτι τθ ςειρά: NULL height(left) =2 26 height(right) =0 9 height(left)-height(right)> ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 77

78 Αριςτερι Περιςτροφι Πριν τθν ειςαγωγι: τα δζνδρα R,S,T ζχουν το ίδιο φψοσ, h. Μετά τθν ειςαγωγι: ζςτω ότι ο κόμβοσ ειςάγεται ςτο δζνδρο R με αποτζλεςμα το φψοσ του να γίνει h+. Θ αριςτερι περιςτροφι υλοποιεί το εξισ: h+ h+2 B h+2 h+3 h+ A h+ C h h+2 B h+2 h+ A h+ C h h+ R h S T h+ R h S T h ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 78

79 Διαδικαςία Α-περιςτροφισ Αριςτερι περιςτροφι του (A,B) ςθμαίνει. Α.left = Β.right 2. Β.right = Α 3. Α.height = C.height + 4. Β.height = C.height + 2 Ρριν τθν περιςτροφι ο Α ιταν ο πατζρασ του Β, και μετά, ο Β είναι ο πατζρασ του Α. Το δζνδρο παραμζνει δυαδικό δζνδρο αναηιτθςθσ. Μετά τθν περιςτροφι το δζνδρο είναι AVL: Α.height = h + = φψοσ του R. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 79

80 Παράδειγμα Α-περιςτροφισ Ανιζοζσγία ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 80

81 Δεξιά Περιςτροφι υμμετρικι προσ τθν αριςτερι περιςτροφι Πριν τθν ειςαγωγι: τα δζνδρα R,S,T ζχουν το ίδιο φψοσ, h. Μετά τθν ειςαγωγι: ζςτω ότι ο κόμβοσ ειςάγεται ςτο δζνδρο Τ με αποτζλεςμα το φψοσ του να γίνει h+. Θ δεξιά περιςτροφι υλοποιεί το εξισ: A B C B A C R S T R S T ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 8

82 Διαδικαςία Δ-περιςτροφισ Δεξιά περιςτροφι του (A,B) ςθμαίνει. Α.right= C.left 2. C.left = Α 3. Α.height = B.height + 4. C.height = B.height + 2 Ρριν τθν περιςτροφι ο Α ιταν ο πατζρασ του C, και μετά, ο C είναι ο πατζρασ του Α. Το δζνδρο παραμζνει δυαδικό δζνδρο αναηιτθςθσ. Μετά τθν περιςτροφι το δζνδρο είναι AVL: C.height = h + = φψοσ του T. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 82

83 ΑΔ-Περιςτροφι Τα δζνδρα Χ και W ζχουν φψοσ h. Μετά από κάποια ειςαγωγι, το w ζχει φψοσ h+, προκαλϊντασ ανιςοηυγία ςτο u. h X v Y u w h Z W AΔ περιζηροθή h+ v w h+ X Y Z W u h+ ΕΠΛ 23 Δομζσ Δεδομζνων και Αλγόρικμοι 7-84

84 Παράδειγμα ΑΔ-περιςτροφισ Με τθν ειςαγωγι των ςτοιχείων 72, 26, 9, 2, 2, 25 ςε ζνα ΑVLδζνδρο, δθμιουργείται ανιςοηυγία ςτον κόμβο 26. Με εφαρμογι ΑΔ περιςτροφισ ζχουμε: ΑΝΘΟΖΤΓΘΑ ΑΔ ΠΕΡΘΣΡΟΦΗ ΕΠΛ 23 Δομζσ Δεδομζνων και Αλγόρικμοι 7-85

85 ΔA-Περιςτροφι Τα δζνδρα Χ και W ζχουν φψοσ h. Μετά από κάποια ειςαγωγι, το w ζχει φψοσ h+, προκαλϊντασ ανιςοηυγία ςτο u. u ΔΑ περιζηροθή w h X v u h+ v h+ h+ w W h X Y Z W Y Z ΕΠΛ 23 Δομζσ Δεδομζνων και Αλγόρικμοι 7-87

86 Παράδειγμα ΔΑ περιςτροφισ 4 2 ΔΑ ΠΕΡΘΣΡΟΦΗ 6 ΑΝΘΟΖΤΓΘΑ ΕΠΛ 23 Δομζσ Δεδομζνων και Αλγόρικμοι 7-88

87 Διαδικαςίεσ ΑΔ και ΔΑ-περιςτροφισ ΑΔ περιςτροφι του (u,v,w) υλοποιείται ωσ εξισ:. v.right = w.left, 2. u.left = w.right, 3. w.left = v, 4. w.right = u, 5. v.height, u.height, w.height = ΔΑ περιςτροφι του (u,v,w) υλοποιείται ωσ εξισ:. v.left = w.right, 2. u.right = w.left, 3. w.left = u, 4. w.right = v, και 5. v.height, u.height, w.height =. Οι περιςτροφζσ δεν παραβιάηουν τθ ΔΔΑ ςυνκικθ. Το δζνδρο που δθμιουργείται είναι AVL-δζνδρο (οι κόμβοι v και u ζχουν φψοσ h+). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 89

88 Εφαρμογι περιςτροφϊν Ππωσ ζχουμε περιγράψει θ διαδικαςία ειςαγωγισ κόμβου ςε AVL-δζνδρο γίνεται ωσ εξισ:. Ειςάγουμε το ςτοιχείο ςτο κατάλλθλο φφλλο όπωσ ακριβϊσ ςε ζνα δυαδικό δζνδρο αναηιτθςθσ. Καταγράφουμε τθ διαδρομι που ακολουκιςαμε, δθλαδι αν r είναι θ ρίηα και u είναι το φφλλο που προςκζςαμε τότε παίρνουμε διαδρομι με μορφι: u = v, v,, v k = r 2. Ακολουκοφμε τθ διαδρομι προσ τα πίςω και δίνουμε ςτα πεδία height των κόμβων τισ νζεσ τουσ τιμζσ. 3. Αν ςε κάποιο ςθμείο αυτό προκαλζςει ανιςοηυγία και μόλισ ςυμβεί αυτό, (δθλ. αν ζχει ςαν αποτζλεςμα κάποιοι κόμβοι να ζχουν παιδιά που το φψοσ τουσ διαφζρει κατά τιμι >), τότε εφαρμόηουμε ςτον κόμβο αυτό, ζςτω vi, τθν κατάλλθλθ περιςτροφι. Επιλζγουμε τθν περιςτροφι ωσ εξισ: ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 90

89 Εφαρμογι περιςτροφϊν i. αν ο v i- είναι αριςτερό παιδί του v i και ο v i-2 αριςτερό παιδί του v i- τότε εφαρμόηουμε τθν A-περιςτροφι, ii. iii. iv. αν ο v i- είναι δεξιό παιδί του v i και ο v i-2 δεξιό παιδί του v i- τότε εφαρμόηουμε τθ Δ-περιςτροφι, αν ο v i- είναι αριςτερό παιδί του v i και ο v i-2 δεξιό παιδί του v i- τότε εφαρμόηουμε τθν AΔ-περιςτροφι, αν ο v i- είναι δεξιό παιδί του v i και ο v i-2 αριςτερό παιδί του v i- τότε εφαρμόηουμε τθ ΔA-περιςτροφι. 4. Ενθμερϊνουμε τον πατζρα του vi για το ποιο είναι το παιδί του ωσ αποτζλεςμα τθσ περιςτροφισ, ι, αν ο vi είναι θ ρίηα του δζνδρου, ενθμερϊνουμε τθν καλοφςα ςυνάρτθςθ για τθ νζα ρίηα. ΠΡΟΟΧΘ: H περιςτροφι εφαρμόηεται ςτον πιο χαμθλό κόμβο που παρουςιάηει ανιςοηυγία. Ζνα AVL-δζνδρο είναι ΔΔΑ! ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 9

90 Διάλεξθ 4: Δζντρα IV - B-Δζνδρα τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: Δζνδρα, Ειςαγωγι και άλλεσ πράξεισ - Άλλα Δζντρα: Β-δζνδρα, Β+-δζντρα, R-δζντρα ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 92

91 2-3 (2 ι 3 παιδιά) Δζνδρα Γενίκευςθ των δυαδικϊν δζνδρων αναηιτθςθσ. Οριςμόσ Κάκε κόμβοσ περιζχει ζνα ι δφο κλειδιά. Ζνασ εςωτερικόσ κόμβοσ u με ζνα κλειδί, k ζχει δφο παιδιά (υπόδενδρα): το αριςτερό, u.left, το οποίο περιζχει κλειδιά < k, και το μεςαίο, u.center, το οποίο περιζχει κλειδιά > k. Ζνασ εςωτερικόσ κόμβοσ u με δφο κλειδιά, k < k 2, ζχει τρία παιδιά, το αριςτερό, u.left, το μεςαίο, u.center, και το δεξί, u.right. Πλα τα κλειδιά του υποδζνδρου u.left είναι < k, όλα τα κλειδιά του u.center είναι k < και < k 2 και όλα τα κλειδιά του u.right είναι > k 2. Όλα τα φφλλα βρίςκονται ςτο ίδιο επίπεδο. k < k > k k k 2 < k > k 2 k < x< k 2 Κόμβος με κλειδί Κόμβος με 2 κλειδιά Σθμείωςθ: Θεωριςτε ότι ςε περίπτωςθ ιςότθτασ με το κλειδί, θ ειςαγωγι κα γίνεται αριςτερά (αντί ςτα δεξιά όπωσ ίςχυε με το ΔΔΑ) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 93

92 Παραδείγματα 2-3 Δζνδρων Πλα τα 2-3 δζνδρα είναι ιςοηυγιςμζνα. Δθλαδι όλα τα φφλλα ζχουν τθν ίδια απόςταςθ από τθν ρίηα ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 94

93 Τλοποίθςθ 2-3 Δζνδρων Ζνασ κόμβοσ 2-3 Δζνδρου μπορεί να παραςτακεί ωσ μια εγγραφι με 6 πεδία:. numkeys, τφπου int, που δθλϊνει τον αρικμό των κλειδιϊν που περιζχει ο κόμβοσ, 2. key, όπου αποκθκεφεται το πρϊτο κλειδί, 3. key2, όπου αποκθκεφεται το δεφτερο κλειδί, αν υπάρχει, 4. left, τφπου δείκτθ, που δείχνει ςτο αριςτερό παιδί του κόμβου, 5. center, τφπου δείκτθ, που δείχνει ςτο μεςαίο παιδί του κόμβου, 6. right, τφπου δείκτθ, που δείχνει ςτο δεξί παιδί του κόμβου αν υπάρχει. Ζνα δζνδρο αναπαρίςταται ωσ ζνασ δείκτθσ ςε κόμβο 2-3 δζνδρου (που δείχνει ςτθ ρίηα) και επιτρζπει τισ πράξεισ ειςαγωγισ, διαγραφι και αναηιτθςθσ. NODE *root; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 95

94 Ιδιότθτεσ 2-3 δζνδρου Αν Ν(h) είναι ο μικρότεροσ αρικμόσ κλειδιϊν ενόσ 2-3 δζνδρου φψουσ h, τότε Ν(0) =, Ν(h) = + 2 N(h-) Αν M(h) είναι ο μεγαλφτεροσ αρικμόσ κλειδιϊν ενόσ 2-3 δζνδρου φψουσ h, τότε M(0) = 2, M(h) = M(h-) Ο αρικμόσ κλειδιϊν ενόσ 2-3 δζνδρου φψουσ h είναι το πολφ 3 h+ και το λιγότερο 2 h+. Επομζνωσ, το φψοσ ενόσ 2-3 δζνδρου με n κόμβουσ είναι O(log n). Θ διαδικαςία εφρεςθσ ςτοιχείου ςε ζνα 2-3 δζνδρο είναι εφκολθ (παρόμοια με αυτι ενόσ ΔΔΑ). Ο χρόνοσ εκτζλεςθσ τθσ είναι τάξθσ O(log 2 n). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 96

95 Ειςαγωγι κόμβου ςε ζνα 2-3 δζνδρο Θ ειςαγωγι κάποιου κλειδιοφ k ςε ζνα 2-3 Δζνδρο μπορεί να χωριςτεί ςτισ ακόλουκεσ τρεισ λογικζσ φάςεισ. Κακοδικι Φάςθ (Downward Phase) Σε αυτι τθν φάςθ διανφουμε αναδρομικά το δζνδρο μζχρι να φκάςουμε ςε τερματικό κόμβο (δθλαδι κάποιο φφλλο). Δθλαδι: αν k<u.key τότε προχϊρα ςτον κόμβο u.left αν k>u.key2 τότε προχϊρα ςτον κόμβο u.right αν u.key < k < u.key2 τότε προχϊρα ςτον κόμβο u.center. 2. Σερματικι Φάςθ (Terminal Phase) Πταν φτάςουμε ςε φφλλο τότε προςπακοφμε να κάνουμε τθν ειςαγωγι Αν δεν ζχει αρκετό χϊρο τότε διαςπάται το φφλλο και «αναςθκϊνουμε» (kick up) αναδρομικά το μεςαίο ςτοιχείο ςτον πατζρα. 3. Ανοδικι Φάςθ (Upward Phase) Σε αυτι τθν φάςθ κάνουμε τθν ειςαγωγι αναδρομικά ςτον γονζα αν δεν πετφχαμε ειςαγωγι ςτθν τερματικι φάςθ. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 97

96 Περιγραφι Κάποιων υμβολιςμϊν Στισ επόμενεσ διαφάνειεσ κα χρθςιμοποιιςουμε τουσ ακόλουκουσ ςυμβολιςμοφσ Σο ζηοιτείο ηο οποίο θέλοσμε να ειζάγοσμε Ο κόμβος Υ Σο σπόδενδρο r Σερμαηικός Κόμβος με 2 κενούς δείκηες ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 98

97 ) Κακοδικι Φάςθ (Downward Phase) Ειςαγωγι του ςτοιχείου v Θ ρίηα περιζχει ςτοιχείο insert insert Ειςαγωγι του ςτοιχείου v θ ρίηα περιζχει 2 ςτοιχεία Ρροςοχι: ε αυτι τθν φάςθ απλά ηθτάμε ςε ζνα από τα υποδζνδρα να χειριςτεί τθν ειςαγωγι αλλά δεν κάνουμε τθν ειςαγωγι ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 99

98 Κακοδικι Φάςθ (ςυν.) Αν u.numkeys =, τότε αν k<u.key τότε προχϊρα ςτον κόμβο u.left αν k>u.key τότε προχϊρα ςτον κόμβο u.center αν k=u.key τότε ςταμάτα. Αν u.numkeys = 2, τότε αν k<u.key τότε προχϊρα ςτον κόμβο u.left αν k>u.key2 τότε προχϊρα ςτον κόμβο u.right αν u.key < k < u.key2 τότε προχϊρα ςτον κόμβο u.center. διαφορετικά, ςταμάτα. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 00

99 2) Σερματικι Φάςθ (Terminal Phase) Α. Πταν φτάςουμε ςε τερματικό κόμβο και υπάρχει χϊροσ τότε μποροφμε να κάνουμε τθν ειςαγωγι κατευκείαν. Δθλαδι: Αν ΔΕΝ υπάρχει χϊροσ τότε διαςπάται (split) ο τερματικόσ κόμβοσ και προάγεται (kick-up) το μεςαίο ςτοιχείο ςτον πατζρα (δεσ επόμενθ διαφάνεια) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 0

100 2) Σερματικι Φάςθ (Terminal Phase) (ςυν.) Αναλυτικά οι υπό-φάςεισ τθσ Διάςπαςθσ (Split) και Προαγωγισ (Kick-up) Kick up insert Kick up split split insert Kick up split ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 02

101 Σερματικι Φάςθ (ςυν.) Ζςτω ότι προςκζτουμε το κλειδί k ςτο φφλλο u. Αν u.numkeys =, k = u.key, τότε u.key = min (k, k), u.key2 = max (k, k), u.numkeys = 2 Αν u.numkeys = 2, k = u.key, k 2 =u.key2, τότε u.key = min (k, k 2, k), u.numkeys =, p.numkeys =, p.key = max(k, k 2,k). προχϊρα ςτθν ανοδικι φάςθ με παραμζτρουσ p, mid(k, k 2,k) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 03

102 3: Ανοδικι Φάςθ (Upward Phase) Πταν φτάςουμε ςτον πατζρα και υπάρχει χϊροσ τότε μποροφμε να κάνουμε τθν ειςαγωγι κατευκείαν. Δθλαδι: Kick up Kick up Αν ΔΕΝ υπάρχει χϊροσ τότε πρζπει να διαςπαςτεί ο πατζρασ και να προαχκεί (kick-up) το μεςαίο ςτοιχείο ςτον πατζρα του πατζρα (δεσ επόμενθ διαφάνεια) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 04

103 3: Ανοδικι Φάςθ (Upward Phase) ςυνζχεια Πταν φτάςουμε ςτον πατζρα και δεν υπάρχει χϊροσ τότε αναδρομικά διαςπάμε τον πατζρα μζχρι να ειςαχκεί το ςτοιχείο. Αν διαςπαςτεί θ ρίηα τότε αυξάνεται και το φψοσ του δζνδρου κατά! : w <= X < Y X < w <= Y Y < w ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 05

104 Ανοδικι Φάςθ (ςυν.) Ζςτω ότι προςκζτουμε το κλειδί k και τθν αναφορά p ςτον κόμβο u. Αν u.numkeys =, k = u.key, τότε αν k > k, u.key2 = k, u.right = p, αν k < k, u.key = k, u.key2 = k, u.right = u.center, u.center = p. u.nunkeys = 2. Αν u.numkeys = 2, k = u.key, k 2 = u.key2, u.left = p, u.center = p 2, u.right = p 3, τότε υπάρχουν 3 περιπτϊςεισ που εξαρτϊνται από τθ ςχζςθ των κλειδιϊν k, k, k 2. Aσ αςχολθκοφμε με τθν περίπτωςθ k < k (οι άλλεσ δφο είναι παρόμοιεσ). Τότε u.key = k, u.center = p, u.numkeys =, q.numkeys =, q.key = k 2, q.left = p2, q.center = p3 αν ο u είναι θ ρίηα τότε προχϊρα ςτθ φάςθ 3, διαφορετικά επανάλαβε τθ φάςθ 2(β) με παραμζτρουσ (q, k ) ςτον πατζρα του u. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 06

105 Ολοκλθρωμζνο Παράδειγμα Ειςαγωγισ Ραράδειγμα ειςαγωγισ τθσ λζξθσ A L G O R I T H M S (γράμμα-γράμμα) ςε ζνα κενό 2-3 δζνδρο. ςυνζχεια ςτθν επόμενθ διαφάνεια ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 07

106 Ολοκλθρωμζνο Παράδειγμα Ειςαγωγισ (ςυν.) Προσοχή σε αυτό το σημείο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 08

107 Διαδικαςία Ειςαγωγισ Κόμβου: Χρόνοσ Εκτζλεςθσ Θ αναδρομικι διαδικαςία ειςαγωγισ κόμβου, παίρνει παραμζτρουσ:. τθν αναφορά ςτον κόμβο όπου κα γίνει θ ειςαγωγι, 2. το κλειδί που κζλουμε να προςκζςουμε (κατά τθν κάκοδο ςτο δζνδρο), και επιςτρζφει το ηεφγοσ (αναφορά ςε παιδί, κλειδί) που κζλουμε να προςκζςουμε (κατά τθν άνοδο ςτο δζνδρο). Θ διαδικαςία εξαγωγισ κλειδιϊν χρθςιμοποιεί παρόμοιεσ ιδζεσ. Σ αυτι όμωσ τθν περίπτωςθ, αντί διάςπαςθ κόμβου ζχουμε ςυγχϊνευςθ κόμβων. Πλεσ οι διαδικαςίεσ ζχουν χρόνο εκτζλεςθσ ανάλογο με το φψοσ του δζνδρου. Άρα είναι τάξθσ Θ(log n). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 09

108 Διαδικαςία Εξαγωγισ Κόμβου Θ διαδικαςία εξαγωγισ κλειδιϊν χρθςιμοποιεί παρόμοιεσ ιδζεσ. Δθλαδι υπάρχουν πάλι οι τρεισ φάςεισ αλλά αντί διάςπαςθ κόμβου ζχουμε ςυγχώνευςθ κόμβων. Πλεσ οι διαδικαςίεσ ζχουν χρόνο εκτζλεςθσ ανάλογο με το φψοσ του δζνδρου. Άρα είναι τάξθσ Ο(log n). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 0

109 Διάλεξθ 6: Σωροί τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Ουρζσ Ρροτεραιότθτασ - Ο ΑΤΔ Σωρόσ, Υλοποίθςθ και πράξεισ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι

110 Ουρά Προτεραιότθτασ Θ δομι δεδομζνων Ουρά (Queue) υποςτθρίηει FIFO (first-in first-out) ςτρατθγικι για ειςαγωγζσ και διαγραφζσ ςτοιχείων. Σε διάφορεσ εφαρμογζσ, όμωσ, υπάρχει θ ανάγκθ επιλογισ ςτοιχείων από κάποιο ςφνολο ςφμφωνα με κάποια ςειρά προτεραιότθτασ (π.χ., ςε λειτουργικά ςυςτιματα). Σε ουρζσ προτεραιότθτασ κφρια ςθμαςία ζχει θ προτεραιότθτα του κάκε ςτοιχείου, πρϊτο βγαίνει πάντα το ςτοιχείο με τθ μεγαλφτερθ προτεραιότθτα. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 2

111 Ουρά Προτεραιότθτασ (ςυν.) Ουρά Ρροτεραιότθτασ Ο ΑΤΔ ουρά προτεραιότθτασ ορίηεται ωσ μια ακολουκία ςτοιχείων ςυνοδευόμενθ από τισ πράξεισ: Delete_Min*: Διαγράφει το ελάχιςτο ςτοιχείο Θεωροφμε ότι το μικρότερο κλειδί ζχει τθ μεγαλφτερθ προτεραιότθτα Insert: Ειςάγει ζνα καινοφριο ςτοιχείο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 3

112 Τλοποίθςθ Ουράσ Προτεραιότθτασ Πικανζσ υλοποιιςεισ:. υνδεδεμζνθ λίςτα Insert: Ο(), Delete_Min: O(n) 2. Σαξινομθμζνθ ςυνδεδεμζνθ λίςτα Insert: Ο(n), Delete_Min: O() 3. Δυαδικό δζνδρο αναηιτθςθσ Insert, Delete_Min: O(log n) Ερϊτθςθ: Τπάρχει καλφτερθ υλοποίθςθ; Ναι, μια ενδιαφζρουςα τάξθ δυαδικϊν δζνδρων, οι ςωροί. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 4

113 Ο ΑΣΔ ωρόσ ωρόσ ελαχίςτων (MinHeap) είναι ζνα δυαδικό δζνδρο που ικανοποιεί: δομικι ιδιότθτα: είναι πλιρεσ ιδιότθτα ςειράσ: το κλειδί ενόσ κόμβου είναι μικρότερο από τα κλειδιά των παιδιϊν του Σε κάκε υπόδενδρο, το μικρότερο ςτοιχείο βρίςκεται ςτθ ρίηα. Δεν υπάρχει καμιά ςχζςθ μεταξφ κλειδιϊν αδελφϊν. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 5

114 Πλιρθ Δυαδικά Δζντρα Σε ζνα πλιρεσ δυαδικό δζνδρο, ςτο επίπεδο k υπάρχουν το πολφ 2 k- κόμβοι. Σε ζνα πλιρεσ δυαδικό δζνδρο φψουσ h όλα τα επίπεδα μζχρι το h-οςτό είναι εντελϊσ γεμάτα, και το επίπεδο h+ είναι γεμάτο από τα αριςτερά ςτα δεξιά. Ο αρικμόσ των κόμβων μζχρι το επίπεδο h δίνεται από το άκροιςμα h 2 (i ) = 2 h i= Επομζνωσ, ζνα πλιρεσ δζνδρο φψουσ h ζχει μεταξφ 2 h και 2 h+ κόμβουσ. Ζνα πλιρεσ δζνδρο με n κόμβουσ ζχει φψοσ Ο(log n). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 6

115 Τλοποίθςθ με πίνακεσ Ζνα πλιρεσ δυαδικό δζνδρο μπορεί να αποκθκευτεί ςε πίνακα ωσ εξισ: ςτθ κζςθ βάηουμε το ςτοιχείο τθσ ρίηασ αν κάποιοσ κόμβοσ u βρίςκεται ςτθ κζςθ i, τότε τοποκετοφμε το αριςτερό του παιδί ςτθ κζςθ 2i, και το δεξιό του παιδί ςτθ κζςθ 2i +. Ο πατζρασ ενόσ κόμβου ςτθ κζςθ i (εκτόσ από τθ ρίηα) βρίςκεται ςτθ κζςθ i/2. Πλεονζκτθμα: Δεν χρειάηονται δείκτεσ, ζτςι εξοικονομοφμε μνιμθ και ζχουμε πιο απλζσ διαδικαςίεσ. Μειονζκτθμα: πρζπει να γνωρίηουμε από τθν αρχι το μζγιςτο μζγεκοσ του ςωροφ. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 7

116 Παράδειγμα αναπαράςταςθσ ςωροφ Θέζη Σηοιτείο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 8

117 Παράδειγμα αναπαράςταςθσ ςωροφ Α Β Γ Γ Δ Ε Ζ Θ Η Κ Θέζη Σηοιτείο 0 Α Β Γ Δ Ε Ζ Η Θ Ι Κ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 9

118 Τλοποίθςθ ωροφ Ζνασ ςωρόσ μπορεί να υλοποιθκεί ωσ μια εγγραφι Θeap με τρία πεδία:. size (τφπου int): αποκθκεφει το μζγεκοσ του ςωροφ. 2. maxsize (τφπου int): το μζγιςτο μζγεκοσ του πίνακα, 3. contents (τφπου πίνακα): τα ςτοιχεία του ςωροφ. Αυτι θ δομι κα πρζπει να υποςτθρίηει τισ πράξεισ: makeεmpty, isempty, isfull, insert, deletemin. public class Heap { } } private int contents[]; private int size; private int maxsize; public Heap(int n) { this.contents = new int[n]; this.size = 0; this.maxsize = n-; public boolean isempty(){ return this.size==0; } public boolean isfull(){ return this.size==this.maxsize; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 20

119 Ειςαγωγι κόμβου Σε ζνα πλιρεσ δυαδικό δζνδρο υπάρχει μία μόνο κζςθ όπου μπορεί να ειςαχκεί κόμβοσ και θ ειςαγωγι να διατθριςει το δζνδρο πλιρεσ. Αυτι θ κζςθ είναι θ πιο δεξιά ςτο τελευταίο επίπεδο του δζνδρου, και αντιςτοιχεί ςτθ κζςθ size+ του πίνακα. Για να ειςάγουμε ζνα κλειδί k ςε ζνα ςωρό ςκεφτόμαςτε ωσ εξισ: Ρικανόν το k να μθν μπορεί να μπει ςτθν κενι κζςθ size+, γιατί μια τζτοια ειςαγωγι να παραβιάηει τθ δεφτερθ ιδιότθτα του ςωροφ. Ζςτω ότι θ κενι κζςθ είναι θ x, o πατζρασ αυτισ τθσ κζςθσ είναι ο u, και kϋ είναι το κλειδί του u. Τότε εφαρμόηουμε τα εξισ:. αν k>kϋ, ι, θ κζςθ x αντιςτοιχεί ςτθ ρίηα, τότε contents[x] = k 2. αν k<kϋ, τότε βάλε το kϋ ςτθ κζςθ x, και ανάλαβε να γεμίςεισ τθ κζςθ u, δθλαδι contents[x] =kϋ; x=u; και 3. επανάλαβε τθ διαδικαςία. Αυτι θ διαδικαςία ςφγκριςθσ με τον πατρικό κόμβο και αναρρίχθςθσ μπορεί να ςυνεχιςτεί μζχρι τθ ρίηα του δζνδρου. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 2

120 ωρόσ με τατικι Δζςμευςθ Μνιμθσ: Τλοποίθςθ υνάρτθςθ public void insert(int k); : public void insert(int k) { if (this.size < this.maxsize) { int index = this.size + ; while (index > && this.contents[(index / 2)] > k) { this.contents[index] = this.contents[(index / 2)]; index = index / 2; } this.contents[index] = k; this.size++; } } this.contents[0] = this.size; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 22

121 Παράδειγμα : Ειςαγωγι ςε ωρό Insert <29 Move root=3 32 3<27 Move ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 23

122 Παράδειγμα 2: Ειςαγωγι ςε ωρό Insert <29 Move > Save ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 24

123 Διαγραφι Ελάχιςτου τοιχείου Το ελάχιςτο ςτοιχείο βρίςκεται πάντοτε ςτθν κορυφι και θ διαγραφι του προκαλεί μια κενι κζςθ ςτθ ρίηα. Θα πρζπει να κατεβάςουμε αυτι τθν κενι κζςθ προσ τα κάτω και δεξιά. Σε κάκε βιμα ελζγχουμε τα παιδιά τθσ εκάςτοτε κενισ κζςθσ. Ζςτω ότι x είναι θ κενι κζςθ:. Αν το κλειδί που βρίςκεται ςτθν τελευταία κζςθ του ςωροφ είναι μικρότερο από τα κλειδιά των παιδιϊν του x τότε μεταφζρουμε το κλειδί αυτό ςτθν κενι κζςθ και μειϊνουμε το μζγεκοσ του ςωροφ contents [x] = contents [size]; size--; και τερματίηουμε τθ διαδικαςία. 2. Διαφορετικά, διαλζγουμε το παιδί u του x το οποίο ζχει το μικρότερο κλειδί, μεταφζρουμε το κλειδί του u ςτο x και κάνουμε κενι κζςθ τθ u: contents[x] = u; x = u 3. Eπαναλαμβάνουμε τθ διαδικαςία. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 25

124 ωρόσ με τατικι Δζςμευςθ Μνιμθσ: Τλοποίθςθ υνάρτθςθ public int deletemin() : public int deletemin() { int min = 0, last; int x =, child = 0; } if (!isempty()) { min = this.contents[]; last = this.contents[this.size]; this.size--; this.contents[0] = this.size; while ((x * 2) <= this.size) { child = x * 2; if (child!= this.size && this.contents[child + ] < this.contents[child]) child++; if (last > this.contents[child]) { this.contents[x] = this.contents[child]; x = child; } else break; } this.contents[x] = last; } return min; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 26

125 Παράδειγμα 3: Εξαγωγι από ωρό 3 Delete Min Last 28 22<27 22:Move up Last Decrease Size <44, Last>26 26:Move up Reached Leaf Set to last ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 27

126 Παράδειγμα 4: Εξαγωγι από ωρό 3 Delete Min Last 22<27 22:Move up Decrease Size Last <09, Last<04 Last:Move up BREAK ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 28

127 Μερικά χόλια Ο χρόνοσ εκτζλεςθσ των διαδικαςιϊν InsertHeap και DeleteMin είναι τθσ τάξθσ O(h) δθλαδι Ο(log n). (h: φψοσ, n: αρικμόσ κόμβων) Ροιο είναι το όφελοσ τθσ δομισ ςε ςφγκριςθ με δυαδικά δζνδρα αναηιτθςθσ; Οι ςωροί χρθςιμοποιοφνται ευρζωσ ςε λειτουργικά ςυςτιματα, ςυςτιματα όπου γίνεται διαμεριςμόσ του χρόνου του υπολογιςτι ςε > εργαςίεσ (task scheduling) και ςε μεταγλωττιςτζσ. Συμμετρικά, μποροφμε να ορίςουμε τθ δομι maxheap, όπου θ ρίηα περιζχει το μζγιςτο ςτοιχείο. Εκτόσ από δυαδικοφσ ςωροφσ, μποροφμε να ορίςουμε τουσ δ-ςωροφσ (d-heaps), όπου κάκε κόμβοσ ζχει d παιδιά. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 29

128 Διάλεξθ 7: O Αλγόρικμοσ Ταξινόμθςθσ HeapSort τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Θ διαδικαςία PercolateDown, Δθμιουργία Σωροφ - O Αλγόρικμοσ Ταξινόμθςθσ HeapSort - Υλοποίθςθ, Ραραδείγματα - Ραραλλαγζσ Σωρϊν ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 30

129 Διαδικαςία Κακόδου PercolateDown Ζςτω ζνασ πίνακασ Α*..n+ και μια τιμι i, κα ορίςουμε διαδικαςία PercoladeDown(i), θ οποία μετακινεί το ςτοιχείο Α*i+ μζςα ςτον ςωρό προσ τα κάτω όςο χρειάηεται. Ζςτω ότι Α*i] = k. Θεωροφμε πωσ θ i είναι άδεια κζςθ. Αν θ άδεια κζςθ ζχει παιδί που περιζχει ςτοιχείο μικρότερο του k και x είναι το μικρότερο τζτοιο παιδί, τότε μετακινοφμε το ςτοιχείο του x ςτθν κενι κζςθ και μετακινοφμε τθν κενι κζςθ ςτο x. Επαναλαμβάνουμε τθν ίδια διαδικαςία μζχρι τθ ςτιγμι που θ κενι κζςθ δεν ζχει παιδιά με ςτοιχεία μικρότερα του k. Τότε αποκθκεφουμε το k ςτθν κζςθ αυτι. Ο χρόνοσ εκτζλεςθσ είναι ανάλογοσ του φψουσ του κόμβου που αντιςτοιχεί ςτθ κζςθ i του ςωροφ. Δθλαδι, ςτθ χείριςτθ περίπτωςθ, όπου i=n, Ο(lg n). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 3

130 Διαδικαςία Κακόδου PercolateDown (ςυν.) Μθ αναδρομικι διαδικαςία PercolateDown public static void PercolateDown(int A[], int n, int i) { int k = A[i]; int j; } while (2 * i <= n) { j = 2 * i; if (j < n && A[j + ] < A[j]) j++; if (k > A[j]) { A[i] = A[j]; i = j; } else break; } A[i] = k; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 32

131 Παράδειγμα Εκτζλεςθσ PercolateDown int A[]={-, 3, 8, 5, 4, 7, 20, 8, 5, 2}; i=2, n=9, PercolateDown(A, 9, 2); k=8 Aν φανταςτοφμε τον πίνακα ςαν δυαδικό δζντρο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 33

132 Διαδικαςία DeleteMin (2) Αφαιροφμε το ςτοιχείο τθσ ρίηασ (είναι το μικρότερο κλειδί του ςωροφ). Μεταφζρουμε το τελευταίο κλειδί ςτθ ρίηα, και εφαρμόηουμε τθ διαδικαςία PercoladeDown(A, n, ): public static int deletemin(heap h) { int min = 0; int swap = 0; if (!h.isempty()) { min = h.contents[]; // swap(contents[],contents[size]) swap = h.contents[]; h.contents[] = h.contents[h.size]; h.contents[h.size] = swap; h.size--; PercolateDown(h.contents, h.size, ); } return min; } Χρόνοσ Εκτζλεςθσ: O(h) = Ο(log n) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 34

133 Παράδειγμα DeleteMin(2) 3 Delete Min Swap with last 28 Percolate Down <27, 28>22 22: Move up 22 26<44, 28>26 26: Move up break Set to 28 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 35

134 Από πίνακεσ ςε ςωροφσ Ζςτω πίνακασ Α*..n]. Μποροφμε να κεωριςουμε τον πίνακα ωσ ζνα πλιρεσ δυαδικό δζνδρο με n κόμβουσ. Αν για μια τιμι i το αριςτερό και το δεξί υπόδενδρο του i ικανοποιοφν τισ ιδιότθτεσ ενόσ ςωροφ, τότε, αν καλζςουμε τθ διαδικαςία PercolateDown(A, n, i) κα ζχουμε ςαν αποτζλεςμα το υπόδενδρο που ριηϊνει ςτθ κζςθ i να ικανοποιεί τισ ιδιότθτεσ ενόσ ςωροφ. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 36

135 Κτίςιμο ςωροφ από ζνα πίνακα Μποροφμε να μετατρζψουμε ζνα πίνακα Α*..n+ ςε ζνα ςωρό με διαδοχικι εφαρμογι τθσ διαδικαςίασ PercoladeDown() από κάτω προσ τα πάνω. Παρατιρθςθ: οι κζςεισ > n/2 αντιςτοιχοφν ςε φφλλα. public static void BuildHeap(int A[], int n) { for (int i = n / 2; i > 0; i--) PercolateDown(A, n, i); } Ορκότθτα (αποδεικνφεται με τθ μζκοδο τθσ επαγωγισ): μετά από τθν εφαρμογι τθσ διαδικαςίασ PercoladeDown(A,n,i), τα υπόδενδρα που ριηϊνουν ςτισ κζςεισ i,..., n, ικανοποιοφν τισ ιδιότθτεσ ςωροφ. Ανάλυςθ του Χρόνου Εκτζλεςθσ: Ο ολικόσ χρόνοσ εκτζλεςθσ είναι ανάλογοσ του ακροίςματοσ των υψϊν όλων των εςωτερικϊν κόμβων, το οποίο είναι Ο(n). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 37

136 Σι κάνει ο πιο κάτω αλγόρικμοσ; public static void mystery(int A[], int n) { BuildHeap(A, n); int swap; for (int i = n; i > ; i--) { // swap (A[], A[i]); swap = A[]; A[] = A[i]; A[i] = swap; PercolateDown(A, i -, ); } } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 38

137 Ο αλγόρικμοσ ταξινόμθςθσ HeapSort H διαδικαςία mystery ταξινομεί ζνα πίνακα ςε φκίνουςα ςειρά. Αρχικά δθμιουργεί ζνα ςωρό ςε χρόνο Ο(n). Στθ ςυνζχεια επαναλαμβάνει το εξισ: αφαιρεί το μικρότερο ςτοιχείο (τθσ ρίηασ του ςωροφ) και το μετακινεί ςτο τζλοσ (εκτελεί τθν PercolateDown). Κάκε εκτζλεςθ τθσ PercoladeDown χρειάηεται χρόνο τθσ τάξθσ Ο(log n). Ολικόσ Χρόνοσ Εκτζλεςθσ: Ο(n log n) O αλγόρικμοσ ονομάηεται Heapsort Μποροφμε εφκολα να αλλάξουμε τον κϊδικα ϊςτε να επιςτρζφεται θ λίςτα ςε αφξουςα ςειρά. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 39

138 Άλλεσ διαδικαςίεσ ςε ςωροφσ Ραρόλο που εφρεςθ του ελάχιςτου κλειδιοφ ςε ζνα ςωρό μπορεί να πραγματοποιθκεί ςε ςτακερό χρόνο, θ εφρεςθ τυχαίου ςτοιχείου ςτθ χειρότερθ περίπτωςθ επιβάλλει διερεφνθςθ ολόκλθρθσ τθσ δομισ (δθλαδι, είναι τθσ τάξθσ Ο(n)). Αν όμωσ γνωρίηουμε τθ κζςθ ςτοιχείων με κάποιο άλλο τρόπο, διαδικαςίεσ ςε ςωροφσ πραγματοποιοφνται εφκολα, π.χ. οι πιο κάτω εκτελοφνται ςε χρόνο λογαρικμικό. Increase_Key(P,Δ), αυξάνει τθν προτεραιότθτα του κλειδιοφ P, κατά Δ. Χρθςιμοποιείται από χειριςτζσ λειτουργικϊν ςυςτθμάτων για αφξθςθ τθσ προτεραιότθτασ ςθμαντικϊν διεργαςιϊν. Θ ςυμμετρικι διαδικαςία Decrease_Key(P,Δ) ςυχνά εκτελείται αυτόματα ςε λειτουργικά ςυςτιματα ςε περίπτωςθ που κάποια δουλειά χρθςιμοποιεί υπερβολικά μεγάλθ ποςότθτα χρόνου του CPU. Remove(I), αφαιρεί τον κόμβο τθσ κζςθσ Ι (χριςιμθ ςε περίπτωςθ τερματιςμοφ διαδικαςίασ). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 40

139 υγχϊνευςθ ωρϊν (Merge Heap) Υποκζςτε τθν φπαρξθ των δυαδικϊν ςωρϊν h και h2. Ρωσ μποροφν να ςυγχωνευτοφν ςε ζνα καινοφριο ςωρό h; Προςπάκεια Α: Ρρόςκεςε όλα τα ςτοιχεία του ςωροφ h ςτον h2. Χρόνοσ Εκτζλεςθσ; Προςπάκεια Β: Βρεσ τον πιο μικρό από τουσ δφο ςωροφσ (ζςτω h2) και πρόςκεςε όλα τα ςτοιχεία του ςωροφ h2 ςτον h. Χρόνοσ Εκτζλεςθσ; Προςπάκεια Γ: Συνζνωςε τουσ δφο ςωροφσ (δθλ., δθμιοφργθςε ζνα καινοφριο πίνακα και αποκικευςε τα ςτοιχεία του ςωροφ h πρϊτα και μετά τα ςτοιχεία του ςωροφ h2) και μετά τρζξε τθ διαδικαςία BuildHeap. Χρόνοσ Εκτζλεςθσ; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 4

140 Προςπάκεια Δ: Leftist Heaps Ιδζα: Θ ςυντιρθςθ τθσ ςωροφ να γίνεται ςε ζνα μικρό μζροσ τθσ ςωροφ Τα περιςςότερα ςτοιχεία βρίςκονται ςτα αριςτερά Θ διαδικαςία τθσ ςυγχϊνευςθσ γίνεται ςτα δεξιά Ρωσ το επιτυγχάνουμε; Οριςμόσ Null Path Length Null Path Length (npl) κάποιου κόμβου u: ο αρικμόσ των κόμβων μεταξφ του u και μίασ κενισ αναφοράσ (null) ςε κάποιο από τα υποδζντρα του Εναλλακτικόσ οριςμόσ: Ελάχιςτθ απόςταςθ ενόσ κόμβου από κάποιο απόγονο που ζχει 0 ι παιδιά ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 42

141 Ιδιότθτεσ Leftist Heap Ιδιότθτα ειράσ (ωροφ) Θ τιμι κάποιου κόμβου είναι μικρότερθ από αυτι των παιδιϊν του Αποτζλεςμα: ο μικρότεροσ κόμβοσ είναι θ ρίηα Ιδιότθτα Leftist Για κάκε κόμβο u npl(u.left) npl(u.right) Αποτζλεςμα: για κάκε κόμβο το αριςτερό του υποδζντρο είναι τουλάχιςτον τόςο βαρφ όςο το δεξί του υποδζντρο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 43

142 Τπολογιςμόσ Null Path Length (npl) npl(null) = - NULL npl( u ) =? u? npl( u ) =? u?? 0?? 0 npl( u ) =? u ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 44

143 Γιατί χρειαηόμαςτε τθν ιδιότθτα Leftist Επειδι εγγυάται τα ακόλουκα: Το δεξί μονοπάτι είναι «κοντό» ςε ςχζςθ με τον αρικμό των κόμβων ςτο δζντρο Ζνασ ςωρόσ leftist με Ν κόμβουσ ζχει δεξί μονοπάτι με το πολφ log (N+) κόμβουσ Αποτζλεςμα: κάνε τισ αλλαγζσ ςτο δεξί «κοντό» υποδζντρο Ρωσ κα εκτελεςτεί θ Συγχϊνευςθ δφο ςωρϊν h και h2; Βαςικι Ιδεά: Το πιο μικρό ςτοιχείο από h και h2 πρζπει να είναι θ καινοφρια ρίηα (ζςτω του h) Το αριςτερό υποδζντρο του h παραμζνει αριςτερά Αναδρομικά ςυγχϊνευςε το δεξί υποδζντρο με το h2 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 45

144 υγχϊνευςθ δφο Leftist ωρϊν MergeHeaps(h, h2): επιςτρζφει ζνα leftist ςωρό που περιζχει τα ςτοιχεία (διακριτά ςτοιχεία) των leftist ςωρϊν h και h2. merge h a a merge h2 L b R a < b L R b L2 R2 L2 R2 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 46

145 υγχϊνευςθ δφο Leftist ωρϊν (ςυν.) a a npl(l) < npl(r ) L R swap R L Χρονική Πολσπλοκόηηηα Σσγτώνεσζης; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 47

146 Παράδειγμα MergeHeaps npl < merge 5< ? merge <2 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 48

147 Παράδειγμα MergeHeaps (ςυν.) npl(5) > npl(7) swap ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 49

148 Παρατθριςεισ Θ χρονικι πολυπλοκότθτα τθσ MergeHeaps είναι O(log n) Θ χρονικι πολυπλοκότθτα τθσ Insert ςε leftist ςωρό με n ςτοιχεία; Χριςθ τθσ merge με h=τον ςωρό και τον καινοφριο κόμβο ςαν ςωρό h2 Θ χρονικι πολυπλοκότθτα τθσ Delete ςε leftist ςωρό με n ςτοιχεία; Αφαίρεςθ τθσ ρίηασ και ςυγχϊνευςθ του αριςτεροφ και δεξιοφ υποδζντρου με χριςθ τθσ merge Ρροβλιματα leftist ςωρϊν: Μνιμθ; Ρολυπλοκότθτα; Το δεξιό υποδζντρο είναι ςυνικωσ πιο «βαρετό» και χρειάηεται αλλαγι. Τι ςθμαίνει αυτό ςε επίπεδο πίνακα; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 50

149 Διάλεξθ 8: Γράφοι I - Ειςαγωγι τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Γράφοι - οριςμοί και υλοποίθςθ - Διάςχιςθ Γράφων ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 5

150 Ειςαγωγι ςτουσ Γράφουσ Θ πιο γενικι μορφι δομισ δεδομζνων, με τθν ζννοια ότι όλεσ οι προθγοφμενεσ δομζσ μποροφν να κεωρθκοφν ωσ περιπτϊςεισ γράφων. Ζνασ γράφοσ G(V,E) αποτελείται από ζνα ςφνολο V κορυφϊν (vertices), ι ςθμείων, ι κόμβων, και ζνα ςφνολο Ε ακμϊν (edges), ι τόξων, ι γραμμϊν. Μια ακμι είναι ζνα ηεφγοσ (u,v) από κορυφζσ. Ραράδειγμα γράφου: Α C D Β E F G ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 52

151 Γράφοι Οι γράφοι προςφζρουν μια χριςιμθ μζκοδο για τθ διατφπωςθ και λφςθ πολλϊν προβλθμάτων, ςε δίκτυα και ςυςτιματα τθλεπικοινωνιϊν (π.χ. το Internet), χάρτεσ - επιλογι δρομολογίων, προγραμματιςμό εργαςιϊν (scheduling), ανάλυςθ προγραμμάτων (flow charts). Θ κεωρία των γράφων κεωρείται ότι ξεκίνθςε από τον Euler ςτισ αρχζσ του 8ου αιϊνα (736). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 53

152 Οριςμοί Ζνασ γράφοσ ονομάηεται κατευκυνόμενοσ (directed graph, digraph) αν κάκε μια από τισ ακμζσ του είναι προςανατολιςμζνθ προσ μία κατεφκυνςθ. (πχ: ζνα οδικό δίκτυο με λωρίδεσ μονισ κατεφκυνςθσ) Α Β D E C F G Ζνασ γράφοσ ονομάηεται μθκατευκυνόμενοσ (undirected) αν οι ακμζσ του δεν είναι προςανατολιςμζνεσ.(πχ: ζνα οδικό δίκτυο με λωρίδεσ διπλισ κατεφκυνςθσ) Α Β D E C F G Αν (u,v) είναι ακμι τότε λζμε ότι οι κορυφζσ u και v είναι γειτονικζσ (adjacent) ι ότι γειτνιάηουν. Α B ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 54

153 Οριςμοί Μονοπάτι ι διαδρομι (path) ενόσ γράφου μικουσ n, είναι μια ακολουκία κόμβων v 0, v,, v n, όπου για κάκε i, 0 i < n, (v i, v i+ ) είναι ακμι του γράφου. Μικοσ ενόσ μονοπατιοφ είναι ο αρικμόσ ακμϊν που περιζχει (εκτόσ και εάν ορίηεται διαφορετικά) Α C Μικοσ = 3 F G Βραχφτερο Μονοπάτι μεταξφ δυο κορυφϊν (Shortest Path): To μονοπάτι μεταξφ δυο κορυφϊν που ζχει το ελάχιςτο μικοσ. Α D C Μια διαδρομι ενόσ γράφου ονομάηεται απλι (simple path) αν όλεσ οι κορυφζσ τθσ είναι διαφορετικζσ μεταξφ τουσ, εκτόσ από τθν πρϊτθ και τθν τελευταία οι οποίεσ μποροφν να είναι οι ίδιεσ. Κυκλικι Διαδρομι (cycle) ονομάηεται μια διαδρομι με μικοσ > οπου v 0 = v n. Β Β Α C ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 55

154 Οριςμοί Ζνασ γράφοσ που δεν περιζχει κφκλουσ ονομάηεται άκυκλοσ (acyclic graph) Α C Ζςτω G=(V,E) και G = (V, E ) γράφοι, όπου Vϋ V και Eϋ E. Tότε ο γράφοσ G είναι υπογράφοσ (subgraph) του γράφου G. Β D E F G Απόςταςθ Κορυφϊν (Vertex Distance): Tο μικοσ τθσ ςυντομότερθσ διαδρομισ που οδθγεί από τθ μια κορυφι ςτθν άλλθ. Α Β D C ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 56

155 Οριςμοί υνεκτικόσ Γράφοσ (Connected Graph): Ζνασ μθ-κατευκυνόμενοσ γράφοσ ςτον οποίο υπάρχει τουλάχιςτο μια διαδρομι μεταξφ όλων των κορυφϊν. Α Β D C Ιςχυρά υνεκτικόσ Γράφοσ (Strongly Connected Graph): Ζνασ κατευκυνόμενοσ γράφοσ ςτον οποίο υπάρχει μια διαδρομι από οποιαδιποτε κορυφι ςε οποιανδιποτε άλλθ. Α Β D C Ελαφρά υνεκτικόσ Γράφοσ (Weakly Connected Graph): Ζνασ κατευκυνόμενοσ (ςυνεκτικόσ) γράφοσ ςτον οποίο δεν υπάρχει μια διαδρομι από οποιαδιποτε κορυφι ςε οποιανδιποτε άλλθ. Α Β D C ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 57

156 Οριςμοί Ρόςεσ ακμζσ μπορεί να ζχει ζνασ γράφοσ με n κορυφζσ; A) Κατευκυνόμενοσ: nx(n-) B) Μθ-κατευκυνόμενοσ: nx(n-)/2 Αραιόσ Γράφοσ (Sparse Graph): Αν ο αρικμόσ των ακμϊν του είναι τθσ τάξθσ Ο(n), όπου n είναι ο αρικμόσ κορυφϊν του, διαφορετικά λζγεται Πυκνόσ Γράφοσ (Dense Graph) Γράφοσ με Βάρθ (Weighted Graph): Συχνά ςυςχετίηουμε κάκε ακμι ενόσ γράφου με κάποιο βάροσ (weight). Ροιεσ ιδιότθτεσ ικανοποιοφν οι πιο κάτω γράφοι; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 58

157 Αναπαράςταςθ γράφων ςτθν Μνιμθ Αναπαράςταςθ γράφων με Πίνακεσ Γειτνίαςθσ (Adjacency Matrix) Ζνασ γράφοσ G=(V,E) με n κορυφζσ μπορεί να αναπαραςτακεί ωσ ζνασ n n πίνακασ που περιζχει τισ τιμζσ 0 και, και όπου αν θ (i,j) είναι ακμι τότε A[(i,j)+=, διαφορετικά A[(i,j)]=0. Αν ο γράφοσ είναι γράφοσ με βάρθ, και το βάροσ κάκε ακμισ είναι τφπου t, τότε για τθν αναπαράςταςθ του γράφου μπορεί να χρθςιμοποιθκεί πίνακασ τφπου t με Α*(i,j)+ = βάροσ(i,j), αν υπάρχει ακμι (i,j) A[(i,j)] =, αν δεν υπάρχει ακμι (i,j) Αυτι θ αναπαράςταςθ απαιτεί χϊρο Θ(n 2 ), όπου n= V. Αν ο γράφοσ είναι αραιόσ (δθλαδι τάξθσ Ο(n)) θ μζκοδοσ οδθγεί ςε ςπάταλθ χϊρου. 0 Πίνακασ Γειτνίαςθσ (Adjacency Matrix) Γράφοσ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 59

158 Αναπαράςταςθ γράφων ςτθν Μνιμθ Αναπαράςταςθ γράφων με Λίςτεσ Γειτνίαςθσ (Adjacency Lists) Ζνασ γράφοσ G=(V,E) αναπαρίςταται ωσ ζνασ μονοδιάςτατοσ πίνακασ Α. Για κάκε κορυφι v, Α*v] είναι ζνασ δείκτθσ ςε μια ςυνδεδεμζνθ λίςτα ςτθν οποία αποκθκεφονται οι κορυφζσ που γειτνιάηουν με τθν v. Θ μζκοδοσ απαιτεί χϊρο Θ( V + Ε ). Επιτυγχάνεται εξοικονόμθςθ χϊρου για αραιοφσ γράφουσ. Στθν περίπτωςθ γράφων με βάρθ ςτθ λίςτα γειτνίαςθσ αποκθκεφουμε επίςθσ το βάροσ κάκε ακμισ. Πίνακασ Γειτνίαςθσ (Adjacency Matrix) Γράφοσ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 60

159 Διάςχιςθ Γράφων Αν κζλουμε να επιςκεφτοφμε όλουσ τουσ κόμβουσ ενόσ γράφου μποροφμε να χρθςιμοποιιςουμε ζναν από πολλοφσ τρόπουσ, οι οποίοι διαφζρουν ςτθ ςειρά με τθν οποία εξετάηουν τουσ κόμβουσ. Διαδικαςίεσ διάςχιςθσ χρθςιμοποιοφνται για τθ διακρίβωςθ φπαρξθσ μονοπατιοφ μεταξφ δφο κόμβων κ.α. Άλλα Παραδείγματα. Οι μθχανζσ αναηιτθςθσ (search engines π.χ. Google), χρθςιμοποιοφν προγράμματα τα οποία ονομάηονται crawlers, για να διαςχίςουν όλεσ τισ ιςτοςελίδεσ του WWW. Αυτζσ εκτελοφνε αναδρομικά τθν εξισ διαδικαςία: a) Κατζβαςε τθν ςελίδα Χ, b) Βρεσ όλουσ του επόμενουσ ςυνδζςμουσ (links) από τθν X, c) Για κάκε ςφνδεςμο εκτζλεςε τα βιματα a-c. 2. Προγράμματα ανταλλαγισ αρχείων (P2P File-sharing Systems, π.χ. Gnutella), χρθςιμοποιοφνε αλγόρικμουσ διάςχιςθσ για να μποροφνε οι χριςτεσ να αποςτζλλουν τθν αναηιτθςθ τουσ (query) ςτουσ κόμβουσ του δικτφου. Αν κάποιοσ κόμβοσ ζχει κάποιο αρχείο το οποίο ψάχνουμε τότε ςτζλνει κάποια απάντθςθ ςτο query. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 6

160 Διάςχιςθ Γράφων Οι πιο διαδεδομζνοι τφποι διάςχιςθσ είναι:. Κατά Βάκοσ Διάςχιςθ(Depth-First Search (DFS)) 2. Κατά Ρλάτοσ Διάςχιςθ (Breadth-First Search (BFS)) Depth-First Search Γενίκευςθ τθσ προκεματικισ διάςχιςθσ δζνδρων: Ξεκινϊντασ από ζνα κόμβο v, επιςκεπτόμαςτε πρϊτα τον v και φςτερα καλοφμε αναδρομικά τθ διαδικαςία ςτο κακζνα από τα παιδιά του. Δθλαδι: Print_Preorder(treenode u) Output data at u; for each child v of u Print_Preorder(v) Σε ζνα δζνδρο δεν ζχουμε κυκλικζσ διαδρομζσ. Σε ζνα γράφο όμωσ ζχουμε κυκλικζσ διαδρομζσ. Άρα πωσ κα διαςχίςουμε τον γράφο; Θα διατθριςουμε ζνα πίνακα Visited ο οποίοσ κα κρατά πλθροφορίεσ ωσ προσ το ποιουσ κόμβουσ ζχουμε επιςκεφκεί ανά πάςα ςτιγμι. Δεν κα επιςκεπτόμαςτε ξανά τον ίδιο κόμβο ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 62

161 Διαδικαςία Προκεματικισ Διάςχιςθσ DepthFirstSearch(graph G,vertex v){ for each vertex w in G visited[w] = False; DFS(v); } Γράφοσ DFS(vertex v){ visited[v] = True; print Visited node v for each w adjacent to v if (visited[w]==false) DFS(w) } Χρόνοσ Εκτζλεςθσ: Θ( V + E ) Θα επιςκεφτοφμε ακριβϊσ μια φορά όλεσ τισ κορυφζσ και ακμζσ Υπόκεςθ: O γράφοσ είναι ςυνεκτικόσ (connected). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 63

162 Προκεματικι Διάςχιςθ Αν ο γράφοσ δεν είναι ςυνεκτικόσ (disconnected) αυτι θ ςτρατθγικι πικανό να αγνοιςει μερικοφσ κόμβουσ. Αν ο ςτόχοσ μασ είναι να επιςκεφκοφμε όλουσ τουσ κόμβουσ τότε μετά το τζλοσ τθσ εκτζλεςθσ του DFS(v) κα πρζπει να ελζγξουμε τον πίνακα Visited να βροφμε τουσ κόμβουσ που δεν ζχουμε επιςκεφκεί και να καλζςουμε ςε αυτοφσ τθ διαδικαςία DFS: DepthFirstSearch(graph G,vertex v){ for each vertex w in G Visited[w] = False; DFS(v); for each vertex w in G if (Visited[w]== False) DFS(w); } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 64

163 Παράδειγμα Depth-First-Search ςε Κατευκυνόμενο Γράφο Γράφοσ DFS(G, ) =,2,3, Πίνακασ Γειτνίαςθσ (Adjacency Matrix) τον αρχικό γράφο δεν υπάρχει μια διαδρομι μεταξφ όλων των ηευγϊν Π.χ. ->0 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 65

164 Παράδειγμα Depth-First-Search ςε Μθ-Κατευκυνόμενο Γράφο Γράφοσ DFS(G, 0) = 0,2,,4,3 Πίνακασ Γειτνίαςθσ (Adjacency Matrix) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 66

165 Μερικά χόλια Θ διαδικαςία καλείται ςε κάκε κόμβο το πολφ μια φορά. Χρόνοσ Εκτζλεςθσ: Θ( V + E ), δθλαδι γραμμικόσ ωσ προσ τον αρικμό των ακμϊν και κορυφϊν. Αρίκμθςθ DFS των κορυφϊν ενόσ γράφου ονομάηεται θ ςειρά με τθν οποία επιςκζπτεται θ διαδικαςία DepthFirstSearch τισ κορυφζσ του γράφου. Θ διαδικαςία μπορεί να κλθκεί και για μθ-κατευκυνόμενουσ και για κατευκυνόμενουσ γράφουσ. Αντί με αναδρομι θ διαδικαςία μπορεί να υλοποιθκεί, ωσ ςυνικωσ, με τθ χριςθ ςτοιβϊν. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 67

166 Breadth-First Search (BFS) Ξεκινϊντασ από ζνα κόμβο v, επιςκεπτόμαςτε πρϊτα το v, φςτερα τουσ κόμβουσ που γειτνιάηουν με τον v, φςτερα τουσ κόμβουσ που βρίςκονται ςε απόςταςθ 2 από τον v, και οφτω κακεξισ. Α C D Β E F G Διάςχιςθ με BFS Α 2 C Β 3 D 6 E 4 F 5 G ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 68

167 BFS: Παράδειγμα 0 A B C D 0 A B C D E F G H E F G H I J K L I J K L M N O P 0 2 A B C D M N O P A B C D E F G H E F G H I J K L I J K L M N O P A B C D M N O P A B C D E F G H E F G H I J K L 4 I J K L 4 M N O P M N O P 5 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 69

168 Διαδικαςία Breadth-First Search Διάςχιςθ Γράφου G ξεκινϊντασ από το v Ψευδοκϊδικασ BFSearch(graph G, vertex v){ Q=MakeEmptyQueue(); for each w in G Visited[w]=False; } Visited[v]= True; Enqueue(v,Q); while (!IsEmpty(Q)){ w = Dequeue(Q); Print(w); for each u adjacent to w if (Visited[u]==False){ Visited[u]=True; Enqueue(u,Q); } Τλοποίθςθ BFS με χριςθ ουράσ Χρόνοσ Εκτζλεςθσ: O( V + E ) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 70

169 Παράδειγμα Εκτζλεςθσ BFS A C D E F H Ουρά Q D C,F F, A A, E, H E, H, B H, B B, G Ζξοδοσ Διαδικαςίασ D C F A E H B G G B G { } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 7

170 Διάλεξθ 9: Γράφοι II - Τοπολογικι Ταξινόμθςθ τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Τοπολογικι Ταξινόμθςθ - Εφαρμογζσ, Ραραδείγματα, Αλγόρικμοι ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 72

171 Σοπολογικι Σαξινόμθςθ (Topological Sort) Δίνεται ζνα ςφνολο εργαςιϊν και κζλουμε να ορίςουμε τθ ςειρά με τθν οποία πρζπει να εκτελζςει τισ εργαςίεσ ζνασ επεξεργαςτισ, δεδομζνθσ τθσ φπαρξθσ περιοριςμϊν ωσ προσ τθν προτεραιότθτά τουσ. Κάκε εργαςία ζχει ζνα ςφνολο προαπαιτοφμενων εργαςιϊν, δθλαδι δεν μπορεί να εκτελεςκεί προτοφ ςυμπλθρωκεί κάκε μια από τισ προαπαιτοφμενεσ. Μποροφμε να παραςτιςουμε το πρόβλθμα ωσ ζναν κατευκυνόμενο γράφο: Οι κορυφζσ του γράφου αντιςτοιχοφν ςε κάκε μια από τισ εργαςίεσ, και θ φπαρξθ ακμισ από τθν κορυφι Α ςτθν κορυφι Β δθλϊνει ότι θ εργαςία Α πρζπει να εκτελεςτεί πριν από τθ Β. Τοπολογικι ταξινόμθςθ του γράφου είναι μια ςειρά των κορυφϊν του, v,, v n,, ϊςτε αν (v i, v j ) είναι ακμι του γράφου τότε i εκτελείται πριν το j (δθλαδι i<j). Α Β ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 73

172 Αλγόρικμοσ για Σοπολογικι Σαξινόμθςθ Βακμόσ ειςόδου (in-degree): ενόσ κόμβου είναι ο αρικμόσ των ακμϊν που καταλιγουν ςτον κόμβο. (Στο πρόβλθμα μασ, ο αρικμόσ των προαπαιτοφμενων εργαςιϊν) Για κάκε κορυφι u ζςτω I[u] ο βακμόσ ειςόδου (αρικμόσ γονζων) τθσ u. ΠΑΡΑΔΕΙΓΜΑ ΑΛΓΟΡΙΘΜΟ Επαναλαμβάνουμε τα εξισ βιματα:. διαλζγουμε κορυφι Α με I*Α+=0, 2. τυπϊνουμε τθν Α, 3. για όλεσ τισ κορυφζσ Β, όπου υπάρχει θ ακμι (Α,Β) μειϊνουμε τθν τιμι Ι*Β+ κατά. ΑΠΟΣΕΛΕΜΑTA(Υπάρχουν αρκετζσ τοπολογικζσ ταξινομιςεισ) 7,5,3,,8,2,9,0 7,5,,2,3,0,8,9.. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 74

173 Κατευκυνόμενοι Μθ-Κυκλικοί Γράφοι Ωςτόςο θ τοπολογικι ταξινόμθςθ δουλεφει μόνο για μια ειδικι κλάςθ γράφων θ οποία ονομάηεται DAGs DAG: Directed Acyclic Graphs (Κατευκυνόμενοι Μθ-Κυκλικοί Γράφοι): Ζνασ γράφοσ ςτο οποίο κανζνα μονοπάτι δεν ξεκινά και τελειϊνει ςτον ίδιο κόμβο. Directed Acyclic Graph Directed Cyclic Graph To γεγονόσ ότι δουλεφει μόνο για DAGs είναι αναμενόμενο διότι αν υπιρχαν κυκλικά μονοπάτια τότε δεν κα υπιρχε κάποια ςειρά (ordering) μεταξφ των ςτοιχείων (αφοφ δεν κα ξζραμε ποια είναι θ αρχι) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 75

174 (Ψευδό)-Τλοποίθςθ topsort( graph G ){ // αξρηθνπνίεζε πίλαθα κεγέζνπο V int I[ V ] = {}; // μέηρηζη in-degree για κάθε κόμβο for each vertex u for each edge (u,v) O( V + E ) I[v]++; // προζπέλαζη ηοσ γράθοσ for (i=; i <= V ; i++){ v = FindVertexOfIndegree0; Ο( V ) if (v == NULL) {// δελ ππάξρεη θόκβνο //κε in-degree=0 Error( Graph has a cycle ); return; } print v; // εκηύπωζη κόμβοσ for each edge (v,w) // μείωζη in-degree I[w]--; // για κάθε παιδί } Χρόνοσ Εκτζλεςθσ: Ο( V 2 +Ε) Ο( V 2 + E ) O( Ε ) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 76

175 (Ψευδό)-Τλοποίθςθ 2 (Με Χριςθ Ουράσ) topologicalsort( graph G ){ Queue Q; // νξηζκόο βνεζεηηθήο νπξάο // αρτικοποίηζη πίνακα μεγέθοσς V int I[ V ] = {}; // μέηρηζη indegree για κάθε κόμβο for each vertex u for each edge (u,v) Θ( V + E ) I[v]++; // ηοποθέηηζε κάθε ζηοιτείο με indegree=0 ζε μια οσρά for each vertex u if (I[u]==0) Enqueue(u, Q); Θ( V ) Χρόνοσ Εκτζλεςθσ: Θ( V + E ) while (! IsEmpty(Q)){ u = Dequeue(Q); output u; number_of_outputs++; for each (u,v) { I[v]--; Θ( V + E ) if (I[v]==0) Enqueue (v, Q); } } // Εάν δεν εκησπώθηκαν όλοι οι κόμβοι ηόηε είτε κύκλο o γράθος γιαηί κάποιοι κόμβοι δεν πήραν ποηέ indegree = 0; if (number_of_outputs!= V ) Error( Graph has a cycle ); ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 77

176 φνοψθ Ο χρόνοσ εκτζλεςθσ τθσ TopologicalSort είναι Για υλοποίθςθ με λίςτεσ γειτνίαςθσ: Ο( V + Ε ) Για υλοποίθςθ με πίνακεσ γειτνίαςθσ: Ο( V 2 ) Για αραιοφσ γράφουσ όπου Ε Ο( V ) θ πολυπλοκότθτα αυτι μεταφράηεται ςε: Ο( V ), για υλοποίθςθ με λίςτεσ γειτνίαςθσ, ενϊ για υλοποίθςθ με πίνακεσ γειτνίαςθσ παραμζνει Ο( V 2 ). Για πυκνοφσ γράφουσ όπου Ε Ο( V 2 ) θ πολυπλοκότθτα αυτι μεταφράηεται ςε: Ο( V 2 ), για υλοποίθςθ με λίςτεσ γειτνίαςθσ, και για υλοποίθςθ με πίνακεσ γειτνίαςθσ παραμζνει Ο( V 2 ). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 78

177 Διάλεξθ 20: Γράφοι III - Ελάχιςτα Γεννθτορικά Δζντρα τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Ελάχιςτα Γεννθτορικά Δζνδρα (ΕΓΔ) Minimum Spanning Trees - Ο αλγόρικμοσ του Prim για εφρεςθ ΕΓΔ ςε γράφουσ - Ο αλγόρικμοσ του Kruskal για εφρεςθ ΕΓΔ ςε γράφουσ - Ραραδείγματα Εκτζλεςθσ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 79

178 Ελάχιςτα Γεννθτορικά Δζνδρα (ΕΓΔ) - Σο πρόβλθμα Υποκζςτε ότι ζχουμε το weighted γράφο G(V,E), ο οποίοσ εκφράηει τισ ςυνδζςεισ ςε ζνα δίκτυο (το βάροσ κάκε ακμισ εκφράηει κάποιο κόςτοσ π.χ. κακυςτζρθςθ μετάδοςθσ). Επίςθσ υποκζςτε ότι κζλουμε να ςτείλουμε από ζνα κόμβο (server) ζνα video stream ςτισ υπόλοιπεσ τερματικζσ κορυφζσ του γράφου. Ζνασ τρόποσ κα ιταν να ςτείλουμε ζνα video stream ανά κορυφι παραλιπτθ (unicast) Πμωσ αυτό κα ιταν πολφ ακριβό. Ιδανικά κα κζλαμε να φτιάξουμε ζνα μονοπάτι (δζνδρο) προσ όλουσ τουσ τερματικοφσ κόμβουσ ζτςι ϊςτε το ςυνολικό άκροιςμα των ακμϊν να είναι ελάχιςτο. Ζνα τζτοιο δζνδρο κα μασ επζτρεπε να ςτείλουμε τθν ταινία προσ όλουσ με το ελάχιςτο κόςτοσ. Σιμερα κα μελετιςουμε τζτοια Ελάχιςτα Γεννθτορικά Δζνδρα ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 80

179 Ελάχιςτα Γεννθτορικά Δζνδρα (ΕΓΔ) Ζςτω ζνασ μθ-κατευκυνόμενοσ γράφοσ με βάρθ, G(V,E). Γεννθτορικό δζνδρο (spanning tree, ΓΔ) του G ονομάηουμε κάκε δζνδρο T που περιζχει όλουσ τουσ κόμβουσ του G και κάκε ακμι του οποίου είναι και ακμι του G. Σε ζνα ΓΔ, όλεσ οι κορυφζσ καλφπτονται, γι αυτό το δζνδρο ονομάηεται και δζνδρο ςκελετόσ (spanning tree: the tree spans all the vertices) Ζνα γεννθτορικό δζνδρο γράφου με n κορυφζσ ζχει n- ακμζσ. Βάροσ ενόσ ΓΔ είναι το άκροιςμα των βαρϊν όλων των ακμϊν του Ελάχιςτο ΓΔ (ΕΓΔ) είναι το ΓΔ με το μικρότερο βάροσ. Ζνασ γράφοσ δυνατό να ζχει περιςςότερα από ζνα ΕΓΔ. (Εάν ο γράφοσ δεν είχε βάρθ τότε οποιονδιποτε δζνδρο που ενϊνει όλεσ τισ ακμζσ = ΕΓΔ) Το πρόβλθμα εφρεςθσ ενόσ ΓΔ μπορεί να εκφραςτεί και για κατευκυνόμενουσ γράφουσ αλλά είναι κάπωσ δυςκολότερθ θ υλοποίθςθ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 8

180 Παραδείγματα Γεννθτορικϊν Δζνδρων 9 Α D Γράθος G ΓΓ-: Βάρος=9 7 B 2 6 E 2 5 C Α B F D 9 E 2 F C 6 ΓΓ-2: Βάρος=6 Α 7 B 5 C Κατ ακρίβεια αυτό το δζνδρο είναι ζνα Ελάχιςτο ΓΔ (όπωσ κα δοφμε ςτθν ςυνζχεια) D E 2 F Τπάρχουν άλλα; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 82

181 Ιδιότθτεσ ΕΓΔ Υποκζτουμε ςτθν ςυνζχεια ότι οι γράφοι που μελετάμε είναι ςυνεκτικοί (δθλαδι υπάρχει τουλάχιςτο μια διαδρομι μεταξφ όλων των κορυφϊν). Δεν κάνει νόθμα να βροφμε ζνα ΕΓΔ ενόσ μθ-ςυνεκτικοφ γράφου γιατί ο οριςμόσ του ΕΓΔ προχποκζτει ότι το δζνδρο καλφπτει όλεσ τισ κορυφζσ. Θ εφρεςθ ΕΓΔ είναι γνωςτό και βακιά μελετθμζνο πρόβλθμα ςτθν επεξεργαςία γράφων. Ζχει ποικίλεσ εφαρμογζσ. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 83

182 Ο αλγόρικμόσ του Prim Αρχικά το δζνδρο περιζχει ακριβϊσ μία κορυφι, θ οποία επιλζγεται τυχαία. Για να κτίςουμε το δζνδρο, ςε κάκε βιμα ςυνδζουμε ακόμα μια κορυφι ςτο παρόν δζνδρο με τθν επιλογι και ειςαγωγι μιασ καινοφριασ ακμισ (από τισ ακμζσ του γράφου). Ρωσ μποροφμε να επιλζξουμε τθν κατάλλθλθ ακμι; Στθν περίπτωςθ αυτοφ του αλγόρικμου, αν S είναι το ςφνολο των κορυφών του παρόντοσ δζνδρου, επιλζγουμε Σθν ακμι με το μικρότερο βάροσ,. Σθν ακμι θ οποία μπορεί να μεγαλϊςει το δζνδρο κατά ζνα κόμβο 2. Σθν ακμι θ οποία δεν κα δθμιουργιςει κάποιο κφκλο Ο αλγόρικμοσ του Prim είναι ζνασ Άπλθςτοσ Αλγόρικμοσ (Greedy Algorithm). Σε κάκε βιμα κάνει τθν κίνθςθ που ικανοποιεί όλεσ τισ ςυνκικεσ και ζχει το πιο λίγο κόςτοσ. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 84

183 Παράδειγμα Εκτζλεςθσ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 85 Α D E F B C Γράθος G Ξεκινούμε διαλέγονηας ησταία μια κορσθή Α 2 3 Α D E F B C Α D E F B C Α D E F B C

184 Παράδειγμα Εκτζλεςθσ (ςυν.) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 86 Α D E F B C Γράθος G Α D E F B C Α D E F B C Α D E F B C 7 2 5

185 Τλοποίθςθ Αλγόρικμου Prim Για να υλοποιιςουμε τον αλγόρικμο Prim κα χρθςιμοποιιςουμε παράλλθλουσ πίνακεσ Α) visited[n] : Κορυφζσ από τισ οποίεσ περάςαμε. B) closest[n] : Θ κοντινότερθ κορυφι κάκε κόμβου ςτο δζνδρο (μια δεδομζνθ ςτιγμι) C) distance[n] : Θ απόςταςθ του κάκε επί μζρουσ κόμβου ςτο (Β) Αρχικοποίθςθ visited: closest: distance: A Β C D E F ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 87

186 Τλοποίθςθ Αλγόρικμου Prim (ςυν.) Μζτα τθν ειςαγωγι του Α ςτο Δζνδρο visited: closest: distance: A Β C D E F A 0 A Μζτα τθν ειςαγωγι του Β ςτο Δζνδρο 9 Α D 7 B E F C 6 visited: closest: distance: A Β C D E F A B A B B Ρροςπακοφμε να μεγαλϊςουμε το δζνδρο με άπλθςτο τρόπο (διατθρϊντασ το ςυνδεδεμζνο) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 88

187 Τλοποίθςθ Αλγόρικμου Prim (ςυν.) Μζτα τθν ειςαγωγι του E ςτο Δζνδρο visited: closest: distance: A Β C D E F A B E B B Α D 7 B E F C 6 Δυο τρόποι να πάμε ςτο F, διατθροφμε τον ζνα. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 89

188 Θ Τλοποίθςθ του Αλγόρικμου Prim Prim(graph G){ int visited[n]={}; // Κνξπθέο πνπ πξνζηέζεθαλ ζην δέλδξν (Απσικά όλα 0 ) int closest[n]={}; // «Πην Κνληηλόο Γείηνλαο» γηα θάζε i: Αρτικά κανένας int distance[n]=, // Απόζηαζε από «Κνληηλ. Γείηνλα» γηα θάζε i: Απσικά άπειπο Tree = {}; // Το ΕΓΔ ποσ θέλοσμε να κτίσοσμε (περιέτει ακμές (α,β)) // επηινγή αξρηθήο θνξπθήο Δηάιεμε ηπραία θνξπθή v; visited[v] = ; // Τώπα ηο v ανήκει ζηο δένδπο γηα θάζε θνξπθή v { // ελεκέξωζε πηλάθωλ distance & closest για κάθε w γείηονα ηος v { weight(a,b) : βάροσ ακμισ a-b if (weight(v,w) < distance[w]) { distance[w] = weight(v,w); // απόζηαζε θνληηλόηεξνπ closest[w] = v; // ηαπηόηεηα θνληηλόηεξνπ } } // εύπεζη επόμενηρ κοπςθήρ με μικπόηεπη απόζηαζη) v = minvertex(visited, distance); visited[v]=; // επιλογή κόμβος } } Tree = Tree {(closest[v],v)}; //πποζθήκη ακμήρ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 90

189 Θ βοθκθτικι ςυνάρτθςθ minvertex H βοθκθτικι διαδικαςία minvertex βρίςκει μεταξφ όλων των κορυφϊν που δεν προςτζκθκαν ςτο MST (Minimum Spanning Tree) τθν πιο κοντινι κορυφι. Δθλαδι: vertex minvertex(int visited[], int distance[]){ min = ; for (i=0; i< V ; i++) { } if (visited[i] == ) continue; // skip nodes already in MST if (distance[i] < distance[min]) min = i; return min; // Return the minimum among all distances } visited: closest: distance: A Β C D E F A B A B B ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 9

190 Ανάλυςθ Χρόνου Εκτζλεςθσ Θ διαδικαςία minvertex απαιτεί χρόνο Ο( V ), όπου V είναι ο αρικμόσ των κορυφϊν του γράφου. Ο χρόνοσ εκτζλεςθσ του βρόχου τθσ εντολισ while ςτον αλγόρικμο Prim είναι και αυτόσ Ο( V ). (Και για υλοποίθςθ με πίνακα γειτνίαςθσ και για υλοποίθςθ με λίςτα γειτνίαςθσ.) Άρα ο ολικόσ χρόνοσ εκτζλεςθσ είναι Θ( V ²). Μποροφμε να βελτιϊςουμε τον αλγόρικμο; Ναι με τθν χριςθ ςωρϊν Με τθν χριςθ ςωρϊν ο αλγόρικμοσ μπορεί να υλοποιθκεί ςε Ο( Ε log E ), όπου E οι ακμζσ του γράφου. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 92

191 Τλοποίθςθ με ωροφσ Θεωροφμε υλοποίθςθ γράφου με λίςτα γειτνίαςθσ. Οι πίνακεσ C και P μπορεί να αντικαταςτακοφν από ζνα ςωρό που περιζχει ςτοιχεία τθσ μορφισ (d, u, v), όπου d είναι το βάροσ τθσ ακμισ (u,v). Κάκε φορά που προςτίκεται μια καινοφρια κορυφι ςτο δζνδρο, προςκζτουμε ςτον ςωρό πλθροφορία για κάκε γειτονικι τθσ ακμι, θ οποία ςυγκρατεί το βάροσ τθσ ακμισ. Άρα ο ςωρόσ κα κρατά περιςςότερεσ από μια πλθροφορία για κάκε κορυφι. Θ επιλογι καινοφριασ ακμισ κα γίνεται με τθ μζκοδο ςωρϊν DeleteMin. Αφοφ όμωσ υπάρχουν περιςςότερεσ από μια πλθροφορίεσ για κάκε ακμι, και αφοφ θ DeleteMin αφαιρεί μόνο τθν πλθροφορία που αντιςτοιχεί ςτθν ακμι με το μικρότερο βάροσ, κα πρζπει να είμαςτε προςεκτικοί οφτωσ ϊςτε να μθν προςκζτουμε ακμζσ μεταξφ κορυφϊν που ιδθ γνωρίηουμε. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 93

192 Θ Τλοποίθςθ του Αλγόρικμου Prim 2 Prim(graph G){ int visited[n]={}; // Κνξπθέο πνπ πξνζηέζεθαλ ζην δέλδξν (Απσικά όλα 0 ) int closest[n]={}; // «Πην Κνληηλόο Γείηνλαο» γηα θάζε i: Αρτικά κανένας int distance[n]=, // Απόζηαζε από «Κνληηλ. Γείηνλα» γηα θάζε i: Απσικά άπειπο Tree = {}; // Το ΕΓΔ ποσ θέλοσμε να κτίσοσμε (περιέτει ακμές (α,β)) // επηινγή αξρηθήο θνξπθήο Δηάιεμε ηπραία θνξπθή v; visited[v] = ; // Τώπα ηο v ανήκει ζηο δένδπο γηα θάζε θνξπθή v { // ελεκέξωζε πηλάθωλ distance & closest για κάθε w γείηονα ηος v { weight(a,b) : βάροσ ακμισ a-b Insert((weight(w,v),w,v), H); (d,v,u) = DeleteMin(H); while (visited[v] == ) (d,v,u) = DeleteMin(H); visited[v]=; Αν E = αριθμός ηων ακμών ηοσ G, } } //πποζθήκη ακμήρ Tree = Tree {(closest[v],v)}; ο τρόνος εκηέλεζης ηων Ηnsert και DeleteMin είναι log E. O ολικός τρόνος εκηέλεζης είναι Ο( Δ log E )= Ο( Δ log V ). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 94

193 Ο αλγόρικμοσ του Kruskal Ακόμα ζνασ άπλθςτοσ (greedy) αλγόρικμοσ που υπολογίηει το Ελάχιςτο Γεννθτορικό Δζνδρο (ΕΓΔ). Ενϊ ο αλγόρικμοσ του Prim επεξεργάηεται μια-μια τισ κορυφζσ, ο αλγόρικμοσ του Kruskal επεξεργάηεται μια-μια τισ ακμζσ του γράφου. Επίςθσ, ενϊ ςε κάκε βιμα του αλγόρικμου του Prim οι επιλεγμζνεσ ακμζσ ςχθματίηουν ζνα δζνδρο, ςτθν περίπτωςθ του αλγόρικμου Kruskal, ςχθματίηουν ζνα δάςοσ (ζνα ςφνολο από δζνδρα). Κεντρικι ιδζα. Αρχικά το δάςοσ Τ είναι άδειο. Επεξεργαηόμαςτε μια-μια τισ ακμζσ, ςε αφξουςα ςειρά βάρουσ. Aν θ ειςαγωγι τθσ e ςτο Τ δεν προκαλεί κφκλο, τότε προςκζτουμε τθν e ςτο Τ, δθλαδι Τ := Τ {e}. ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 95

194 Παράδειγμα Εκτζλεςθσ Σαξινομθμζνεσ Ακμζσ με το Βάροσ ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 96 Α D E F B C Γράθος G E B D E 2 F B 2 3 E F 2 4 B C 5 5 F C 6 6 Α B 7 7 Α D 9 8

195 Παράδειγμα Εκτζλεςθσ Αρχικι Κατάςταςθ ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 97 Α D E F B C Γράθος G E B D E 2 F B 2 E F 2 4 B C 5 5 F C 6 6 Α B 7 7 Α D Σαξινομθμζνεσ Ακμζσ Α B C D E F Μετά από επιλογι τθσ πρϊτθσ ακμισ (Β,Ε) Α B C D E F

196 Παράδειγμα Εκτζλεςθσ ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 98 Α D E F B C Γράθος G E B D E 2 F B 2 E F 2 4 B C 5 5 F C 6 6 Α B 7 7 Α D Σαξινομθμζνεσ Ακμζσ Μετά από επιλογι τθσ πρϊτθσ ακμισ (D,Ε) Α B C E F D

197 Παράδειγμα Εκτζλεςθσ ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 99 Α D E F B C Γράθος G E B D E 2 F B 2 E F 2 4 B C 5 5 F C 6 6 Α B 7 7 Α D Σαξινομθμζνεσ Ακμζσ Μετά από επιλογι τθσ τρίτθσ ακμισ (Β,F) Α B C E D F 2

198 Παράδειγμα Εκτζλεςθσ ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 200 Α D E F B C Γράθος G E B D E 2 F B 2 E F 2 4 B C 5 5 F C 6 6 Α B 7 7 Α D Σαξινομθμζνεσ Ακμζσ Μετά από επιλογι τθσ τζταρτθσ ακμισ (Β,C) Α B C E D F 2 5

199 Παράδειγμα Εκτζλεςθσ ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 20 Α D E F B C Γράθος G E B D E 2 F B 2 E F 2 4 B C 5 5 F C 6 6 Α B 7 7 Α D Σαξινομθμζνεσ Ακμζσ Μετά από επιλογι τθσ τζταρτθσ ακμισ (Β,C) Α B C E D F 2 5 7

200 Αποδοτικι Εξάλειψθ Κφκλων H ταξινόμθςθ των Άκμων είναι απλι, δθλαδι ταξινομοφμε μια φορά όλεσ τισ ακμζσ με κάποιο αλγόρικμο ταξινόμθςθσ. Βαςικό Πρόβλθμα: Το πρόβλθμα που απομζνει είναι πωσ κα βρίςκουμε αποδοτικά εάν μια ακμι μπορεί να δθμιουργιςει κφκλο Λφςθ 2 Θα χρθςιμοποιιςουμε ζνα πίνακα TID[n] (TreeID) ο οποίοσ μασ υποδεικνφει για κάκε κορυφι v ςε πιο δζνδρο ανικει θ v. Π.χ. εάν κζλω να προςκζςω μια ακμι (u,v) και u & v ανικουν ςτο ίδιο δζνδρο (TID[u]==ΣID[v]), τότε αυτι θ ακμι κα δθμιουργιςει κφκλο. Επομζνωσ δε κα προςκζςω τθν (u,v) 2 w u To (u,v) κα δθμιουργιςει κφκλο γιατί και τα δυο ανικουν ςτο ίδιο TID (i.e., ) To (u,w) δεν κα δθμιουργιςει κφκλο γιατί οι δυο κόμβο ανικουν ςε διαφορετικά ΣΙD (i.e., και 2) ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 202

201 Τλοποίθςθ του Αλγορίκμου Kruskal Kruskal(graph G(V,E)){ Tree = {}; // Το ΕΓΔ: Ένα ζύνολο ακμών (αρτικά κενό) TID[ V ] = {} // Πίλαθαο πνπ θξαηά ην TreeID ηνπ θάζε θόκβνπ Count = 0; // Μεηπηηήρ πος κπαηά από πόζερ κοπςθέρ πέπαζα sortedges(e); // Ταξινόμηζη Άκμων ζε σπόνο O( E.log E ) // Δημιοςπγούμε ένα δάζορ από δένδπα μεγέθοςρ for (i=0; i< V ; i++) // ρξόλν Θ( V ) TID[i] = i; for (i=0; i< E ; i++) { // ρξόλν O( E ) // ανάκηηζη επόμενηρ (μικπόηεπηρ) ακμήρ (u,v) = nextedge(); // ρξόλν Θ() If (TID[u]!= TID[v]) { // Αλ αλήθνπλ ζε δηαθνξεηηθά δέλδξα Tree = Tree {(u,v)}; // Πξνζζήθε Αθκήο // Μεηξνύκε πνηνο από ηνπο u,v εκθαλίδεηαη πεξηζζόηεξν ζην TID // θαη επηζηξέθνπκε ηνλ κεγαιύηεξν ζαλ TreeID x x = occurence(tid, u, v); // ρξόλν O( V ) } } // Αλάζεζε TreeID x ζε όινπο πνπ έρνπλ TID[u] ή TID[v] count = merge(tid[u],tid[v],x); } if (count == V ) break; Σσνολικός τρόνος: O( E.log E + V + E * V ) TID V ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 203

202 Εκτζλεςθ τθσ Τλοποίθςθσ Kruskal 9 Α D Γράθος G 7. Nextedge => (B,E) 2. TID[B]!= TID[E]? => YES, Επομζνωσ Tree = {} {(Β,Ε)}; 3. Merge(TID[B],TID[E],); 4. Nextedge => (D,Ε) B E 5. TID[D]!= TID[E]? => YES, Επομζνωσ Tree={(Β,Ε)} {(D,Ε)}; 6. Merge(TID[D],TID[E],); F C 6 Σαξινομθμζνεσ Ακμζσ { B-E=, D-Ε=, Β-F=2, Ε-F=2, Β-C=5, C-F=6, Α-Β=7, Α-D=9 } TID TID TID A B C D E F A B C D E F A B C D E F ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 204

203 Εκτζλεςθ τθσ Τλοποίθςθσ Kruskal 9 Α D Γράθος G 7 7. Nextedge => (B,F) 8. TID[B]!= TID[F]? => YES,Επομζνωσ Tree = {(Β,Ε),(D,Ε)} {(Β,F)}; 9. Merge(TID[B],TID[F],); 0. Nextedge => (Ε,F) B E F Σαξινομθμζνεσ Ακμζσ { B-E=, D-Ε=, Β-F=2, Ε-F=2, Β-C=5, C-F=6, Α-Β=7, Α-D=9 }. TID[Ε]!= TID[F]? => ΝΟ, Επομζνωσ δεν χρθςιμοποιοφμε το (Ε,F); C 6 TID TID TID A B C D E F 0 2 A B C D E F 0 2 A B C D E F ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 205

204 Εκτζλεςθ τθσ Τλοποίθςθσ Kruskal 9 Α D Γράθος G 7 2. Nextedge => (B,C) 3. TID[B]!=TID[C]? => YES,Επομζνωσ Tree = {(Β,Ε),(D,Ε), (Β,F)} {(Β,C)}; 4. Merge(TID[B],TID[C],); 5. Nextedge => (C,F) B E F Σαξινομθμζνεσ Ακμζσ { B-E=, D-Ε=, Β-F=2, Ε-F=2, Β-C=5, C-F=6, Α-Β=7, Α-D=9 } 6. TID[Ε]!= TID[F]? => ΝΟ, Επομζνωσ δεν χρθςιμοποιοφμε το (C,F); C 6 TID TID TID 0 2 A B C D E F 0 A B C D E F 0 A B C D E F ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 206

205 Εκτζλεςθ τθσ Τλοποίθςθσ Kruskal 9 Α D Γράθος G 7 7. Nextedge => (Α,Β) B E 2 8. TID[Α]!= TID[Β]? => YES, 5 2 Επομζνωσ Tree = {(Β,Ε),(Δ,Ε), (Β,Η), (Β,Γ)} {(Α,Β)}; F C 6 Σαξινομθμζνεσ Ακμζσ { B-E=, D-Ε=, Β-F=2, Ε-F=2, Β-C=5, C-F=6, Α-Β=7, Α-D=9 } TID 0 A B C D E F TID A B C D E F Εδϊ βρικαμε V vertices, επομζνωσ διακόπτουμε τθν αναηιτθςθ. TO ΕΓΔ είναι το {(Β,Ε),(Δ,Ε), (Β,Η), (Β,Γ),(Α,Β)}; ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 207

206 Παράδειγμα Εκτζλεςθσ 2 Α D Γράθος G B E Αρχικι Κατάςταςθ F C Α B C D E F Σαξινομθμζνεσ Ακμζσ { A-D=, C-F=, Β-F=2, Ε-F=2, Β-C=5, D-E=6, Α-Β=7, B-E=9 } 0. TID A B C D E F TID. {A-D} TID 2. {C-F} TID 3. {B-F} TID 4. {E-F} 5. TID 6. {D-E} A B C D E F A B C D E F A B C D E F A B C D E F {B-C} = ηίποηα 7. break A B C D E F ΕΠΛ035 Δομζσ Δεδομζνων και Αλγόρικμοι για Θλ. Μθχ. Και Μθχ. Τπολ. 208

207 Μερικά χόλια Θ ορκότθτα του αλγόρικμου μπορεί να αποδειχκεί όπωσ και ςτθν περίπτωςθ του αλγόρικμου του Prim. To ςφνολο των ακμϊν μπορεί να διατθρθκεί ωσ μία ςωρόσ. Για να ελζγξουμε αν μια ακμι μπορεί να προςτεκεί, διατθροφμε ζνα partition Ρ όλων των κορυφϊν: Δυο κορυφζσ βρίςκονται ςτο ίδιο υποςφνολο του Ρ αν υπάρχει μονοπάτι μεταξφ τουσ. Αρχικά κάκε υποςφνολο του Ρ περιζχει ακριβϊσ μια κορυφι. Στθ ςυνζχεια, μια ακμι (u,v) μπορεί να προςτεκεί αν οι κορυφζσ u και v βρίςκονται ςε διαφορετικά υποςφνολα του Ρ. Με τθν προςκικθ μιασ ακμισ (u,v), υποςφνολα του Ρ που περιζχουν τισ κορυφζσ u και v, ενϊνονται. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 209

208 Διάλεξθ 2: Γράφοι IV - Βραχφτερα Μονοπάτια ςε Γράφουσ τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Βραχφτερα Μονοπάτια ςε γράφουσ - Ο αλγόρικμοσ Dijkstra για εφρεςθ τθσ βραχφτερθσ απόςταςθσ - Ο αλγόρικμοσ Dijkstra για εφρεςθ του βραχφτερου μονοπατιοφ & απόςταςθσ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 20

209 Βραχφτερα Μονοπάτια ςε Γράφουσ Με δεδομζνο ζνα κατευκυνόμενο γράφο με βάρθ G=(V,E), κζλουμε να βροφμε τα μονοπάτια με το ελάχιςτο δυνατό βάροσ από κάποιο κόμβο A προσ οποιονδιποτε κόμβο Χ. Οριςμόσ: Βραχφτερο μονοπάτι μεταξφ ενόσ ςυνόλου από μονοπάτια είναι το μονοπάτι με το ελάχιςτο βάροσ. Υπενκφμιςθ: Το βάροσ w(p) ενόσ μονοπατιοφ p δίνεται ωσ εξισ: Aν τότε p v o... v Σε αυτι τθν διάλεξθ κα δοφμε ακόμα ζνα άπλθςτο αλγόρικμο (greedy algorithm) του Δανοφ Edsger Dijkstra ( ) για τθν επίλυςθ αυτοφ του προβλιματοσ. Ζνασ τζτοιοσ αλγόρικμοσ ζχει πολλζσ εφαρμογζσ (π.χ. εφρεςθ μικρότερθσ διαδρομισ ςε ζνα οδικό δίκτυο, ςε δίκτυα υπολογιςτϊν κτλ). v w( p ) w( vi k i,v i k ) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 2

210 Θ δομι τθσ βζλτιςτθσ λφςθσ Λιμμα Ζςτω κατευκυνόμενοσ γράφοσ με βάρθ G=(V,E) και ζςτω p u v το βραχφτερο μονοπάτι μεταξφ των κόμβων u και v. Τότε κάκε υπο-μονοπάτι του p είναι βραχφτερο.... v k v Ασ δοφμε τθν λογικι πίςω από το Λιμμα. 9 Α D 8 6 B E F C ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 22

211 Θ δομι τθσ βζλτιςτθσ λφςθσ (ςυν.) Συμβολιςμόσ: Θα γράφουμε w(u,v) για το βάροσ του βραχφτερου μονοπατιοφ από τθν κορυφι u ςτθν κορυφι v. Λιμμα (Tριγωνικι ανιςότθτα) Για κάκε τριάδα κορυφϊν u, v, x, w(u,v) w(u,x) + w(x,v) u v x Απόδειξθ Τo ελάχιςτο μονοπάτι από τον u ςτον v δεν είναι μακρφτερο από οποιοδιποτε άλλο μονοπάτι από τον u ςτο v εν προκειμζνω, το μονοπάτι που παίρνει πρϊτα το ελάχιςτο μονοπάτι από τον u ςτον κόμβο x και ςτθ ςυνζχεια από τον x ςτον v. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 23

212 Αναςκόπθςθ του Αλγόρικμου Dijkstra Ζςτω ότι κζλουμε να βροφμε το/α βραχφτερα μονοπάτια από κάποιο κόμβο A προσ όλουσ τουσ υπόλοιπουσ κόμβουσ ςε κάποιο γράφο G(V,E) 9 Α D 8 6 B E. Ροιο είναι το κόςτοσ του βραχφτερου μονοπατιοφ από D προσ C; 2. Ροιο είναι το ακριβζσ μονοπάτι; Ο αλγόρικμοσ του Dijkstra είναι ζνασ single source shortest path algorithm (δθλαδι αναφζρεται ςυγκεκριμζνα ςε μια κορυφι εκκίνθςθσ) για γράφουσ με μθ-αρνθτικά βάρθ F C 4 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 24

213 Αρνθτικά Βάρθ ςτον Αλγόρικμο του Dijkstra Σθμειϊςτε ότι όταν υπάρχουν αρνθτικά βάρθ, τότε είναι δυνατό αυτά να μασ κζςουν τθν μικρότερθ απόςταςθ, αναδρομικά, ίςθ με -. Α 8 B 5 C Παράδειγμα: D Ροια είναι θ βραχφτερθ απόςταςθ μεταξφ (B,Γ); Ρρϊτθ Εκτζλεςθ 5: B=>C Δεφτερθ Εκτζλεςθ -5: B=>C=>F=>B=>C Τρίτθ Εκτζλεςθ -5: B=>C=>F=>B=>C=>F=>Β=>C.. E 4 F ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 25

214 Παράδειγμα Εκτζλεςθσ Αλγορίκμου Dijkstra /4 Ράρε ςαν παράμετρο κάποια κορυφι, ζςτω θ κορυφι Α Α D 8 B E Αρχικοποίθςε ζνα πίνακα distance και κζςε τθν απόςταςθ όλων των κορυφϊν από τθν κορυφι Α είναι ίςθ με. Εκτζλεςθ S d(a) d(b) d(c) d(d) d(e) d(f) S= 0 Αρχικοποίθςε ζνα πίνακα visited όπου κα ςθμειϊνει από ποιεσ κορυφζσ ζχουμε περάςει ιδθ F C 9 6 Εκτζλεςθ S v(a) v(b) v(c) v(d) v(e) v(f) S= ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 26

215 Παράδειγμα Εκτζλεςθσ Αλγορίκμου Dijkstra 2/4 Αρχικοποίθςε τον πίνακα distance με τισ ακμζσ τθσ κορυφισ ειςόδου. 9 Α D 8 6 B E 4 5 F Εκτζλεςθ S d(a) d(b) d(c) d(d) d(e) d(f) S= 0 2 S={A} Σε κάκε βιμα του αλγόρικμου, επίλεξε «άπλθςτα» τθν κορυφι με τθν ελάχιςτθ απόςταςθ που δεν ζχεισ επιςκεφκεί C Κορσθές ποσ έτοσμε επιζκεθθεί (visited=) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 27

216 Παράδειγμα Εκτζλεςθσ Αλγορίκμου Dijkstra 3/4 9 Α D 8 6 B E 4 5 F C Εκτζλεςθ S d(a) d(b) d(c) d(d) d(e) d(f) S= 0 2 S={A} S={A,E} Χ Κορσθές ποσ έτοσμε επιζκεθθεί (visited=) Δπιλογή ηης ελάτιζηης απόζηαζης Μείωζη από ηην προηγούμενη απόζηαζη Θ Ε (απόςταςθ=6) ζχει ακμζσ με Β,D(6+=7) και F(6+4=0) Αφοφ οι αποςτάςεισ αυτζσ είναι μικρότερεσ από τισ υπάρχουςεσ τότε ενθμερϊνεται ο πίνακασ ανάλογα. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 28

217 Παράδειγμα Εκτζλεςθσ Αλγορίκμου Dijkstra 4/4 9 Α D 8 6 B E 4 5 F C Εκτζλεςθ S d(a) d(b) d(c) d(d) d(e) d(f) S= 0 2 S={A} S={A,E} S={A,E,B} S={A,E,B,D} S={A,E,B,D,F} S={A,E,B,D,F, C} Χ Κορσθές ποσ έτοσμε επιζκεθθεί (visited=) Δπιλογή ηης ελάτιζηης απόζηαζης Μείωζη από ηην προηγούμενη απόζηαζη ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 29

218 Τλοποίθςθ του Αλγόρικμου Dijkstra // A: Σημεύο Εκκύνηςησ. G(V,E): Ο Γρϊφοσ dijkstra( G(V,E), vertex Α){ distance[ V ]={ }; // Απόςταςη κορυφόσ i από κορυφό Α visited[ V ]={}; // Σημειώνει αν περϊςαμε η όχι από κορυφό count = 0; // Μετρητόσ κορυφών που επιςκεφθόκαμε // Αρχικοπούηςη ςημεύου εκκύνηςησ distance[a]=0; visited[a]=; while (count < V ){ // ςε χρόνο O( V ) // Προχωρούμε ςτον επόμενο κόμβο u=minvertex(v); // Άπληςτη επιλογό ςε χρόνο O( V ) } // Ενημέρωςη αποςτάςεων γειτόνων προσ Α για κϊθε γεύτονα v του u { if (distance[v] > distance[u] + w(u,v)) distance[v] = distance[u] + w(u,v); } count++; } υνολικόσ Χρόνοσ Εκτζλεςθσ: O( V 2 ) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 220

219 Dijkstra για εφρεςθ του Βραχφτερου Μονοπατιοφ Αν εκτόσ από το μικοσ του μονοπατιοφ μασ ενδιαφζρει και το ακριβζσ μονοπάτι (οι κόμβοι του) τότε μποροφμε να ακολουκιςουμε τθν ίδια βαςικι ιδζα με τθν εξισ προςκικθ Για κάκε κορυφι αποκθκεφουμε ςε ζνα πίνακα P, τον γείτονα που κα μασ δϊςει το βραχφτερο μονοπάτι προσ τον κόμβο εκκίνθςθσ. Σε αυτι τθν περίπτωςθ μποροφμε με τον τερματιςμό του αλγόρικμου να καταςκευάςουμε από τον πίνακα P το μζγιςτο μονοπάτι από τον κόμβο εκκίνθςθσ προσ κάποιον άλλο κόμβο Χ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 22

220 Αλγόρικμοσ Dijkstra για εφρεςθ Βραχ. Μονοπατιοφ 9 Α D 8 6 B E 4 5 F C Εκτζλεςθ S d(a) d(b) d(c) d(d) d(e) d(f) S= 0,-,-,-,-,-,- 2 S={A} 0,- 8,Α 9,Α 6,Α 3 S={A,E} 0,- 7,Ε 7,Ε 6,Α 0,Ε 4 S={A,E,B} 0,- 7,Ε 2,Β 7,Ε 6,Α 8,Β 5 S={A,E,B,D} 0,- 7,Ε 2,Β 7,Ε 6,Α 8,Β 6 S={A,E,B,D,F} 0,- 7,Ε 9,F 7,Ε 6,Α 8,Β 7 S={A,E,B,D,F, C} 0,- 7,Ε 9,F 7,Ε 6,Α 8,Β Χ Κορσθές ποσ έτοσμε επιζκεθθεί (visited=) Δπιλογή ηης ελάτιζηης απόζηαζης Μείωζη από ηην προηγούμενη απόζηαζη ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 222

221 Τλοποίθςθ του Αλγόρικμου Dijkstra // A: Σημεύο Εκκύνηςησ. G(V,E): Ο Γρϊφοσ dijkstra( G(V,E), vertex Α){ distance[ V ]={ }; // Απόςταςη κορυφόσ i από κορυφό Α visited[ V ]={}; // Σημειώνει αν περϊςαμε η όχι από κορυφό shortest[ V ]={}; // Σημειώνει το βραχύτερο μονοπϊτι count = 0; // Μετρητόσ κορυφών που επιςκεφθόκαμε // Αρχικοπούηςη ςημεύου εκκύνηςησ distance[a]=0; visited[a]=; } while (count < V ){ // ςε χρόνο O( V ) // Προχωρούμε ςτον επόμενο κόμβο u=minvertex(v); // Άπληςτη επιλογό ςε χρόνο O( V ) // Ενημέρωςη αποςτάςεων γειτόνων προσ Α για κϊθε γεύτονα v του u { if (distance[v] > distance[u] + w(u,v)) { distance[v] = distance[u] + w(u,v); shortest[v] = u; } } count++; } ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 223

222 Διάλεξθ 22: Τεχνικζσ Κατακερματιςμοφ I (Hashing) τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Αναςκόπθςθ Ρροβλιματοσ και Ρροκαταρκτικϊν Λφςεων Bit-Διανφςματα - Τεχνικζσ Κατακερματιςμοφ & Συναρτιςεισ Κατακερματιςμοφ - Διαχείριςθ Συγκροφςεων με Αλυςίδωςθ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 224

223 Ειςαγωγι Σο πρόβλθμα Σο Πρόβλθμα Ζχουμε ζνα ςτοιχείο u. Θζλουμε κάποια αποδοτικι δομι θ οποία κα μασ επιτρζψει να εκτελζςουμε τισ ακόλουκεσ δυο πράξεισ ςε ςτακερό χρόνο Ο(). Εφρεςθ ςτοιχείου u ςε μια ςυλλογι S (δθλ. Find(u,S)). Ειςαγωγι του u ςτθν ςυλλογι S (δθλ. Insert(u, S)) Παράδειγμα Θ ςυλλογι S περιζχει μια μεγάλθ λίςτα φοιτθτϊν. Θζλουμε να βροφμε αν ο u= Νεόφυτοσ Χαραλάμπουσ είναι μζροσ αυτισ τθσ λίςτασ. Aν δεν είναι ςτθν λίςτα, τότε κζλουμε να τον ειςάγουμε. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 225

224 Ειςαγωγι Αναςκόπθςθ Λφςεων II Τπάρχει πιο αποδοτικι μζκοδοσ από τθ χριςθ ιςοηυγιςμζνων δζνδρων; Ναι, δεδομζνου ότι υπάρχει μια ςυνάρτθςθ θ οποία μασ επιτρζπει για κάκε ςτοιχείο u, να βροφμε τθν ακριβι κζςθ του u ςτον πίνακα. Ζχουμε χρθςιμοποιιςει αντίςτοιχθ ιδζα ςτον αλγόρικμο ταξινόμθςθσ BucketSort. Μια απλι λφςθ είναι να απεικονίςουμε το ςφνολο S U (όπου U είναι το πεδίο οριςμοφ τθσ S) με ζνα διάνυςμα διφίων (διάνυςμα δυαδικϊν ψθφίων, bit-vector). Ραρόμοια δομι χρθςιμοποιιςαμε και ςτον αλγόρικμο ταξινόμθςθσ bucketsort. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 226

225 Bit vectors (Διανφςματα Διφφων) Ζνα bit-vector είναι μονοδιάςτατοσ πίνακασ με n bits, Bits[..n], τζτοιοσ ϊςτε: Bits[u] =, αν u S και Bits[u] = 0, αν u S Για παράδειγμα αν U =,,,9- τότε το ςφνολο S = {, 3, 7} αναπαρίςταται ωσ το bit-vector: Bits = [,0,,0,0,0,,0,0] Ο χρόνοσ εφρεςθσ και ειςαγωγισ / αναηιτθςθσ κάποιου ςτοιχείου είναι ςε χρόνο Ο()! Πρόβλθμα: Αν το U είναι πολφ μεγαλφτερο από το S τότε ςπαταλάμε πάρα πολφ χϊρο! Λφςθ: ο Κατακερματιςμόσ (hashing) που είναι μια οικογζνεια μεκόδων που αντιςτοιχεί ζνα κλειδί ςε μία κζςθ ενόσ πίνακα (keyto-address transformation). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 227

226 Βαςικι Ιδζα Κατακερματιςμοφ Ζςτω το ςφνολο ακεραίων S από το πεδίο οριςμοφ U S= {0,, 2, 3, 4, 5, 8, 30, 57} (U=[0..99]) Θα φτιάξουμε ζνα Πίνακα Κατακερματιςμοφ (Hash Table), o οποίοσ ςτο παράδειγμα μασ ζχει μζγεκοσ hsize=5 (το μζγεκοσ είναι ςυνικωσ ςυναρτιςει του διακζςιμου χϊρου) Χρθςιμοποιϊντασ κάποια ςυνάρτθςθ κατακερματιςμοφ (hashing function) h(key), κα ειςάγουμε τα ςτοιχεία του S ςτο hashtable. Παράδειγμα (hsize: 5) H data Hash Function h(key): key mod hsize 0 0, 5, 30 To mod (%) είναι το υπόλοιπο τθσ διαίρεςθσ Κλειδί u h(u) Αν ψάχνουμε το key=2, τότε ξζρω ότι πρζπει να ψάξω ςτθν κζςθ (2 mod 5) Αν ψάχνω το key=4;, 2 2, , 8 4 4, ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 228

227 Κατακερματιςμόσ Οριςμοί Πίνακασ κατακερματιςμοφ (hash table) είναι μια δομι δεδομζνων που υποςτθρίηει τισ διαδικαςίεσ insert και find ςε (ςχεδόν) ςτακερό χρόνο O(). Ζνασ πίνακασ κατακερματιςμοφ χαρακτθρίηεται από. το μζγεκοσ του, hsize, και 2. κάποια ςυνάρτθςθ κατακερματιςμοφ h θ οποία αντιςτοιχεί κλειδιά ςτο ςφνολο των ακεραίων *0,, hsize + (εφόςον εφαρμοςτεί το MOD) Tα δεδομζνα αποκθκεφονται ςτον πίνακα H*0,, hsize ]: το κλειδί k αποκθκεφεται ςτον H ςτθ κζςθ H[h(k)]. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 229

228 Κατακερματιςμόσ Ερωτιματα Ωςτόςο τα hashtable δεν είναι ιδανικό για να ανακτοφμε τα ςτοιχεία ταξινομθμζνα, ι γενικότερα, για αναηθτιςεισ ςε κάποιο εφροσ (range queries). π.χ. Αν ψάχνω κλειδιά μεταξφ 2-0 (range query); κα πρζπει δυςτυχϊσ να κοιτάξω ςε όλεσ τισ κζςεισ του πίνακα. Επίςθσ, δθμιουργοφνται δφο νζα ςθμαντικά ερωτιματα:. ποια είναι καλι επιλογι για τθ ςυνάρτθςθ κατακερματιςμοφ h; 2. τι κα πρζπει να γίνεται αν πολλά κλειδιά είναι ςτο ίδιο bucket (κάδο). Τζτοιου είδουσ ςυγκροφςεισ (collisions), είναι πολφ πικανό να ςυμβοφν. Δθλαδι για δφο κλειδιά k, k 2, με k k 2, το bucket να είναι ο ίδιοσ h(k ) = h(k 2 ) ; ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 230

229 ) Επιλογι υνάρτθςθσ Κατακερματιςμοφ Ιδιότθτεσ μιασ καλισ ςυνάρτθςθσ κατακερματιςμοφ:. Θα πρζπει να χρθςιμοποιεί ολόκλθρο τον πίνακα *0 hsize ]. 2. Θα πρζπει να ςκορπίηει ομοιόμορφα τα κλειδιά ςτον πίνακα Θ. 3. Θα πρζπει να υπολογίηεται εφκολα. Θ ςυνάρτθςθ h αρχικά αντιςτοιχίηει το κλειδί ςε κάποιο ακζραιο αρικμό a και ςτθ ςυνζχεια παίρνει τθν τιμι «a mod hsize». Ρρζπει επίςθσ να μποροφμε να υπολογίηουμε τθν ςυνάρτθςθ κατακερματιςμοφ για ςυμβολοςειρζσ! ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 23

230 Παράδειγμα υνάρτθςθσ Κατακερματιςμοφ // Η ζπλάξηεζε θαηαθεξκαηηζκνύ αζξνίδεη όινπο ηνπο ραξαθηήξεο ηνπ string s, θαη ζηελ ζπλέρεηα βξίζθεη ην ππόινηπν από ηελ δηαίξεζε κε ην hsize int hash(char *s, int hsize) { int hash = 0; } while ((*s)!= '\0') { hash += (*s); s++; } return (hash % hsize); int main() { char *name = "cat"; char *name2 = "car"; char *name3 = "cap"; Κλειδί u h(u) H data 0 car printf("%s hashes to bucket %d\n", name, hash(name, 5)); printf("%s hashes to bucket %d\n", name2, hash(name2, 5)); printf("%s hashes to bucket %d\n", name3, hash(name3, 5)); 2 cat 3 cap 4 } return 0; Output> car hashes to bucket 2 cat hashes to bucket 0 cap hashes to bucket 3 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 232

231 ) Επιλογι υνάρτθςθσ Κατακερματιςμοφ Ζςτω ότι το κλειδί είναι αλυςίδα από 3 χαρακτιρεσ s[0]..s[2]. Ραραδείγματα ςυνάρτθςθσ κατακερματιςμοφ είναι: A) Function (Απλι ςυνάρτθςθ): Tο άκροιςμα των κωδικϊν ASCII των χαρακτιρων s[0] + s[] + s[2] Πρόβλθμα: Λζξεισ μποροφν να ζχουν το ίδιο άκροιςμα π.χ. Οι λζξεισ cat και tac κα ζχουν το άκροιςμα == B) Function 2 (Βελτιωμζνθ Λφςθ): (Τποκζςτε ότι οι χαρακ. είναι Ascii-7bit) (s[0]+27*0) + (s[]+27*) + (s[]+27*2) Τϊρα κάκε επί-μζρουσ άκροιςμα απζχει το πιο λίγο κατά 28 από το επόμενο. Ωςτόςο εάν ζχουμε χαρακτιρεσ ςε κάποια άλλθ κωδικοποίθςθ π.χ. UNICODE-6bit τότε αυτό μασ δίδει πολφ μεγάλουσ αρικμοφσ. C) Function 3 (Θ ςυνάρτθςθ hashcode() ςτθν γλϊςςα JAVA) s[n-] * s[n-2] * s*+*3 (n-2) + s[0]*3 (n-) Ππου n είναι to μικοσ του string. Tο hash κάποιου κενοφ string είναι 0. π.χ. cat => n=3 => (t)99 + (a)97*3 + (c)6* 3 2 = 4,582 H επιλογι του 3 δεν είναι τυχαία. Είναι Prime & επίςθσ υπολογίηεται αποδοτικά με ζνα shift (a * 3 == (a << 5 - ) (Άλλοι αρικμοί που ζχουν τζτοιεσ ιδιότθτεσ 7,3,27, ) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 233

232 . υνάρτθςθ Κατακερματιςμοφ (ςυνζχεια) υνάρτθςθ Κατακερματιςμοφ Ρολλζσ φορζσ οι ςυμβολοςειρζσ μπορεί να είναι πολφ μεγάλεσ «304 Lincoln Ave, Alameda, 9450, CA, USA», που κα κάνει ακριβό τον υπολογιςμό τθσ ςυνάρτθςθσ κατακερματιςμοφ. Για αυτό μπορεί να χρθςιμοποιοφνται επιλεκτικά κάποιοι χαρακτιρεσ (π.χ. κάκε 0οσ) Μζγεκοσ Πίνακα Κατακερματιςμοφ Αν το μζγεκοσ του πίνακα κατακερματιςμοφ είναι πολφ μεγάλο (π.χ. 0,000) και οι τιμζσ παράγονται όλεσ ςε κάποιο μικρό-διάςτθμα τότε κα υπάρχουν πολλζσ ςυγκροφςεισ. Παράδειγμα: Ζνα ςφνολο λζξεων όπου κάκε λζξθ αποτελείται από 0 χαρακτιρεσ ASCII- 7bit. Το ςυνολικό άκροιςμα τθσ κάκε λζξθσ είναι το πολφ 0x27=,270. Άρα όλεσ οι πικανζσ 27^0 γραμματοςειρζσ κα βρίςκονται ςτισ πρϊτεσ 270%0000=270 κζςεισ του πίνακα και οι υπόλοιπεσ =8730 κα είναι άδειεσ παρόλο που χρθςιμοποιιςαμε το MODulo. To κζμα τθσ εφρεςθσ τθσ πιο κατάλλθλθσ ςυνάρτθςθσ κατακερματιςμοφ είναι δφςκολο. Πάντοτε κα είναι πικανι θ φπαρξθ ςυγκροφςεων! Πωσ γίνεται θ διαχείριςθ ςυγκρουόμενων κλειδιϊν; Οι τεχνικζσ λφςεισ διακρίνονται ςε 2 κατθγορίεσ: μζκοδοι με Αλυςίδωςθ (Chaining) και μζκοδοι Ανοικτισ Διεφκυνςθσ (Open Addressing) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 234

233 Διαχείριςθ ςυγκροφςεων με Αλυςίδωςθ (Chaining) Αφοφ περιςςότερα από ζνα κλειδιά μποροφν να πάρουν τθν ίδια τιμι από τθ ςυνάρτθςθ κατακερματιςμοφ, μποροφμε να κεωριςουμε ότι κάκε κζςθ του πίνακα δείχνει ςε μια ευκφγραμμθ απλά ςυνδεδεμζνθ λίςτα. Για κάκε i, ςτθ κζςθ Θ*i+ του πίνακα βρίςκουμε λίςτα που περιζχει όλα τα κλειδιά που απεικονίηονται από τθ ςυνάρτθςθ h ςτθ κζςθ αυτι. Για να βροφμε κάποιο κλειδί k, πρζπει να ψάξουμε ςτθ λίςτα που δείχνεται ςτθ κζςθ H[h(k)]. Ειςαγωγζσ και εξαγωγζσ ςτοιχείων μποροφν να γίνουν εφκολα με βάςθ τισ διαδικαςίεσ ςυνδεδεμζνων λιςτϊν. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 235

234 Παράδειγμα Διαχείριςθσ με Αλυςίδωςθ hsize = ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 236

235 Ανάλυςθ τθσ Σεχνικισ Αλυςίδωςθσ Ειςαγωγι τοιχείου: απαιτεί χρόνο Ο(). (προςκικθ ςτθν αρχι) Εφρεςθ/διαγραφι Κλειδιοφ k ςυνεπάγεται τθ διζλευςθ τθσ λίςτασ H[h(k)]. Για να αναλφςουμε τον χρόνο εκτζλεςθσ των πιο πάνω διαδικαςιϊν ορίηουμε τον ςυντελεςτι φορτίου (load factor) λ του πίνακα H ωσ τον λόγο λ = (αρικμόσ των ςτοιχείων που αποκθκεφει ο πίνακασ ) / hsize π.χ. 00 τιμζσ ςε 5 buckets => λ=20.0 Δθλαδι, κατά μζςο όρο, κάκε λίςτα του πίνακα ζχει μικοσ λ. Εφρεςθ bucket To ςτοιχείο δεν υπάρχει (χειρίςτθ περίπτωςθ): O(+λ) Αναηιτθςθ Λίςτασ To ςτοιχείο υπάρχει (μζςθ περίπτωςθ): O(+λ/2) Όπου Ο() κόςτοσ για εφρεςθ του bucket και Ο(λ) & Ο(λ/2) αντίςτοιχα για ανάλυςθ των ςτοιχείων τθσ λίςτασ. Ιδανικά κα κζλαμε ο λόγοσ λ να ζχει ςτακερι τιμι (ςυνικωσ κοντά ςτο ), ϊςτε οι διαδικαςίεσ να εκτελοφνται ςε ςτακερό χρόνο. Στθν ςυνζχεια κα δοφμε τεχνικζσ δυναμικισ αφξθςθσ / μείωςθσ του πίνακα ςε ςυνδυαςμό με διαδικαςίεσ επανακερματιςμοφ, ζτςι ϊςτε το μζγεκοσ του πίνακα να είναι πάντα ανάλογο του αρικμοφ των ςτοιχείων. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 237

236 Διάλεξθ 23: Τεχνικζσ Κατακερματιςμοφ II (Hashing) τθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Διαχείριςθ Συγκροφςεων με Ανοικτι Διεφκυνςθ a) Linear Probing, b) Quadratic Probing c) Double Hashing - Διατεταγμζνοσ Κατακερματιςμόσ (Ordered Hashing) - Επανακατακερματιςμόσ (Rehashing) - Εφαρμογζσ Κατακερματιςμοφ ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 238

237 Διαχείριςθ υγκροφςεων με ανοικτι διεφκυνςθ H αντιμετϊπιςθ ςυγκροφςεων με αλυςίδωςθ περιλαμβάνει επεξεργαςία δεικτϊν και δυναμικι χοριγθςθ μνιμθσ. Επίςθσ δθμιουργοφνται overflow chains, τα οποία κα κάνουν τισ αναηθτιςεισ ακριβότερεσ ςτθν ςυνζχεια Θ ςτρατθγικι ανοικτισ διεφκυνςθσ επιτυγχάνει τθν αντιμετϊπιςθ ςυγκροφςεων χωρίσ τθ χριςθ δεικτϊν. Τα ςτοιχεία αποκθκεφονται κατ ευκείαν ςτον πίνακα κατακερματιςμοφ ωσ εξισ: Για να ειςαγάγουμε το κλειδί k ςτον πίνακα:. υπολογίηουμε τθν τιμι i=h(k), και 2. αν θ κζςθ Θ*i+ είναι κενι τότε αποκθκεφουμε εκεί το k, 3. διαφορετικά, δοκιμάηουμε τισ κζςεισ f(i), f(f(i)),, για κάποια ςυνάρτθςθ f, μζχρισ ότου βρεκεί κάποια κενι κζςθ όπου και τοποκετοφμε το k. Για τθν αναηιτθςθ κάποιου κλειδιοφ k μζςα ςτον πίνακα:. υπολογίηουμε τθν τιμι i=h(k), και 2. κάνουμε διερεφνθςθ τθσ ακολουκίασ, i, f(i), f(f(i)),, μζχρι, είτε να βροφμε το κλειδί, είτε να βροφμε κενι κζςθ, ι να περάςουμε από όλεσ τισ κζςεισ του πίνακα. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 239

238 Γραμμικι Αναηιτθςθ Ανοικτισ Διεφκυνςθσ (Linear Probing) H αρχικι ςυνάρτθςθ κατακερματιςμοφ είναι f(x) = x mod hsize Πταν υπάρξει ςφγκρουςθ (collision) δοκιμάηουμε αναδρομικά τθν επόμενθ ςυνάρτθςθ μζχρι να βρεκεί κενι κζςθ: f(x)= (f(x) +i) mod hsize (i=,2,3, ) Δθλαδι θ αναηιτθςθ κενισ κζςθσ γίνεται ςειριακά, και θ αναηιτθςθ ονομάηεται γραμμικι (linear probing). Ραράδειγμα: hsize =, ειςαγωγι, 2, 5, 9, 26, collision 26 collision 48 collision 48 ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 240

239 χόλια για το Linear Probing Ειςαγωγι Εφόςον ο πίνακασ κατακερματιςμοφ δεν είναι γεμάτοσ, είναι πάντα δυνατό να ειςάγουμε κάποιο καινοφριο κλειδί. Αν γεμίςει κα κάνουμε rehash τον πίνακα (κα το δοφμε ςτθν ςυνζχεια) Αν οι γεμάτεσ κζςεισ του πίνακα είναι μαηεμζνεσ (clustered) τότε ακόμα και αν ο πίνακασ είναι ςχετικά άδειοσ, πικανόν να χρειαςτοφν πολλζσ δοκιμζσ για εφρεςθ κενισ κζςθσ (κατά τθν εκτζλεςθ διαδικαςίασ insert), ι για εφρεςθ ςτοιχείου. Αναηιτθςθ Θ αναηιτθςθ γίνεται όπωσ και τθν ειςαγωγι (ςταματάμε όταν βροφμε κενι κζςθ). Μπορεί να αποδειχκεί ότι για ζνα πίνακα μιςογεμάτο (δθλαδι λ = 0.5) και μια ομοιόμορφθ κατανομι τότε:. Ανεπιτυχι Διερεφνθςθ: O αρικμόσ βθμάτων είναι ~ Επιτυχι Διερεφνθςθ: O αρικμόσ βθμάτων είναι ~.5. Αν το λ πλθςιάηει το, τότε οι πιο πάνω αναμενόμενοι αρικμοί βθμάτων αυξάνονται εκκετικά. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 24

240 χόλια για το Linear Probing Εξαγωγι Ρρζπει να είμαςτε προςεκτικοί με τισ εξαγωγζσ ςτοιχείων. μια κζςθ από τθν οποία ζχει αφαιρεκεί ςτοιχείο δεν μπορεί να κεωρθκεί ωσ άδεια (γιατί;) διότι ςτθν find δεν κα ξζρουμε που να ςταματιςουμε 2. ζτςι μαρκάρουμε τθ κζςθ ωσ deleted, και 3. κατά τθ διαδικαςία find, αγνοοφμε κζςεισ deleted, και προχωροφμε μζχρισ ότου είτε να βροφμε το κλειδί που ψάχνουμε, είτε να βροφμε (πραγματικά) μια άδεια κζςθ είτε να ςαρϊςουμε ολόκλθρο τον πίνακα). ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 242

241 Δευτεροβάκμια Αναηιτθςθ Ανοικτισ Διεφκυνςθσ Δευτεροβάκμια Αναηιτθςθ Ανοικτισ Διεφκυνςθσ (Quadratic Probing) H αρχικι ςυνάρτθςθ κατακερματιςμοφ είναι και πάλι: f(x) = x mod hsize Πταν υπάρξει ςφγκρουςθ (collision) δοκιμάηουμε αναδρομικά τθν επόμενθ ςυνάρτθςθ μζχρι να βρεκεί κενι κζςθ: f(x)= (f(x) + i²) mod hsize (i=,2,3, ) τόχοσ: αποφυγι των μαηεμζνων κλειδιϊν (clusters) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 243

242 Παράδειγμα Quadratic Probing Ραράδειγμα: hsize =, ειςαγωγι, 2, 5, 9, 26, collision OK collision 48 collision 48 collision 48 ((X+3 2 )% ) d (X % ) ((X+ 2 )% ) ((X+2 2 )% ) a b c Στο linear probing ιταν εγγυθμζνθ θ ειςαγωγι (εφόςον ο πίνακασ δεν ζχει γεμίςει) Και εδϊ μπορεί να αποδειχκεί ότι : Θεϊρθμα: Αν το μζγεκοσ hsize είναι πρϊτοσ (prime) αρικμόσ (>3) τότε οποιοδιποτε καινοφριο κλειδί μπορεί να ειςαχκεί ςτον πίνακα εφόςον ο πίνακασ ζχει λ 0.5. ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 244

243 θμαντικότθτα Μεγζκουσ Πίνακα Αν το μζγεκοσ του πίνακα δεν είναι prime τότε μπορεί να δθμιουργθκεί το φαινόμενο του Funneling Ασ υποκζςουμε ότι κζλουμε να ειςάγουμε το {0,,4,8} ςε ζνα πίνακα μεγζκουσ hsize = 8. Θ ειςαγωγι του 0,,4 γίνεται κανονικά. Το 8 ωςτόςο δεν μπορεί να ειςαχκεί χρθςιμοποιϊντασ το quadratic probing. Συγκεκριμζνα ζχουμε αλλεπάλλθλεσ ςυγκροφςεισ (collisions) : ) 8%8=0 (X) 2) (8+)%8= (X) 3) (8+4)%8=4 (X) 4) (8+9)%8= (X) 4) (8+6)%8=0 (X) 5) (8+25)%8= (X) 6) (8+36)%8=4 (X) 7) (8+49)%8= (X).. Τϊρα ασ υποκζςουμε ότι κζλουμε να ειςάγουμε το {0,,4,8} ςε ζνα πίνακα μεγζκουσ hsize = 7 (PRIME). Ράλι θ ειςαγωγι του 0,,4 γίνεται κανονικά Επίςθσ το 8 μετά από ζνα collision τοποκετείται ςτον πίνακα ) 8%7= (X) 2) (8+)%7=2 (OK!) ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 245

244 Διπλόσ Κατακερματιςμόσ Ανοικτισ Διεφκυνςθσ Διπλόσ Κατακερματιςμόσ Ανοικτισ Διεφκυνςθσ (Double Hashing) O τελευταίοσ τρόποσ αποφυγισ ςυγκροφςεων χρθςιμοποιεί δυο ςυναρτιςεισ κατακερματιςμοφ. Δθλαδι ςε περίπτωςθ αρχικισ αποτυχίασ ειςαγωγισ / εφρεςθσ ςτοιχείου οι κζςεισ που επιλζγουμε για να διερευνιςουμε ςτθ ςυνζχεια (probe sequence) είναι ανεξάρτθτεσ από τθν πρϊτθ. f(x,0) = h (x) // θ αρχικι ςυνάρτθςθ κατακερματιςμοφ Αυτό επιτυγχάνεται με τθ χριςθ μιασ δεφτερθσ ςυνάρτθςθσ κατακερματιςμοφ, h 2, ωσ εξισ: f(x,n) = ( h (x) + n h 2 (x) ) mod hsize Στθν πράξθ δουλεφει αποδοτικά ωςτόςο είναι πιο ακριβό να υπολογίηουμε δυο ςυναρτιςεισ κάκε φορά ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 246

245 Καλι Επιτυχία!!! ΕΠΛ23 Δομζσ Δεδομζνων και Αλγόρικμοι 247

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου Εισαγωγή στοιχείου

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Δέντρα ΙΙ -Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης(ΔΔΑ) - Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου - Εισαγωγή

Διαβάστε περισσότερα

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Δ. QuickSort Γρήγορη Ταξινόμηση Ε. BucketSort

Διαβάστε περισσότερα

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ισοζυγισμένα Δέντρα Υλοποίηση AVL δέντρων Εισαγωγή Κόμβων και Περιστροφές σε AVL δέντρα

Διαβάστε περισσότερα

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ισοζυγισμένα Δέντρα - Υλοποίηση AVL-δέντρων

Διαβάστε περισσότερα

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ισοζυγισμένα Δέντρα Υλοποίηση AVL δέντρων Εισαγωγή Κόμβων και Περιστροφές σε AVL δέντρα

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 10: Αλγόριθμοι ΤαξινόμησηςII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Δ. QuickSort Γρήγορη Ταξινόμηση Ε. BucketSort Ταξινόμηση με Κάδους - Έμμεση Ταξινόμηση

Διαβάστε περισσότερα

Ιςοηυγιςμζνα δζντρα και Β- δζντρα. Δομζσ Δεδομζνων

Ιςοηυγιςμζνα δζντρα και Β- δζντρα. Δομζσ Δεδομζνων Ιςοηυγιςμζνα δζντρα και Β- δζντρα Δομζσ Δεδομζνων Περιεχόμενα Ιςοηυγιςμζνα δζντρα Μζκοδοι ιςοηφγιςθσ δζντρων Μονι Περιςτροφι Διπλι Περιςτροφι Β - δζντρα Ιςοηυγιςμζνα δζντρα Η μορφι ενόσ δυαδικοφ δζντρου

Διαβάστε περισσότερα

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

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 14: Δέντρα IV B Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: 2 3 Δένδρα, Εισαγωγή και άλλες πράξεις Άλλα Δέντρα: Β δένδρα, Β+ δέντρα, R δέντρα Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ231

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα

Διδάσκων: Κωνσταντίνος Κώστα Διάλεξη Ε4: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, Δυαδικά Δένδρα Αναζήτησης Ισοζυγισμένα Δένδρα & 2-3 Δένδρα Διδάσκων: Κωνσταντίνος

Διαβάστε περισσότερα

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Διάλεξη 14: Δέντρα IV - B-Δένδρα ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 14: Δέντρα IV - B-Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - 2-3 Δένδρα, Εισαγωγή και άλλες πράξεις - Άλλα Δέντρα: Β-δένδρα, Β+-δέντρα,

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 23: Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ισοζυγισμένα Δέντρα - Υλοποίηση AVL-δέντρων - Εισαγωγή Κόμβων και Περιστροφές σε AVL δέντρα Διδάσκων:

Διαβάστε περισσότερα

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

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1 B-Δένδρα Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: 2-3 Δένδρα, Υλοποίηση και πράξεις Β-δένδρα ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1 2-3 Δένδρα Γενίκευση των δυαδικών δένδρων αναζήτησης.

Διαβάστε περισσότερα

Αλγόριθμοι ταξινόμησης

Αλγόριθμοι ταξινόμησης Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης BuubleSort, SelectionSort, InsertionSort, Merger Sort, Quick Soft ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι

Διαβάστε περισσότερα

Διάλεξη 18: B-Δένδρα

Διάλεξη 18: B-Δένδρα Διάλεξη 18: B-Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή & Ισοζυγισμένα Δένδρα 2-3 Δένδρα, Περιγραφή Πράξεων της Εισαγωγής και άλλες πράξεις Β-δένδρα Διδάσκων: Κωνσταντίνος

Διαβάστε περισσότερα

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 0: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 20: Αλγόριθμοι ΤαξινόμησηςIII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Ε. QuickSort Γρήγορη Ταξινόμηση - Έμμεση Ταξινόμηση - Εξωτερική Ταξινόμηση Διδάσκων:

Διαβάστε περισσότερα

Δζντρα. Δομζσ Δεδομζνων

Δζντρα. Δομζσ Δεδομζνων Δζντρα Δομζσ Δεδομζνων Περιεχόμενα Δζντρα Γενικζσ ζννοιεσ Κόμβοσ ενόσ δζντρου Δυαδικά δζντρα αναηιτθςθσ Αναηιτθςθ Κόμβου Ειςαγωγι ι δθμιουργία κόμβου Δζντρα Γενικζσ ζννοιεσ Οι προθγοφμενεσ δομζσ που εξετάςτθκαν

Διαβάστε περισσότερα

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων 15. Πίνακεσ ΙI Ιωάννθσ Κατάκθσ Σιμερα o Ειςαγωγι o Διλωςθ o Αρχικοποίθςθ o Πρόςβαςθ o Παραδείγματα Πίνακεσ - Επανάλθψθ o Στθν προθγοφμενθ διάλεξθ κάναμε μια

Διαβάστε περισσότερα

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, AVL- ένδρα Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Υλοποίηση ΑVL-δένδρων Εισαγωγή κόµβων και περιστροφές ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 7-1 AVL ένδρα Είναι δυνατό

Διαβάστε περισσότερα

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

Διάλεξη 08: ΛίστεςΙΙ Κυκλικές Λίστες. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 0: ΛίστεςΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες Λίστες - Τεχνικές Μείωσης Χώρου Διδάσκων:

Διαβάστε περισσότερα

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, B- ένδρα Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: 2-3 ένδρα, Υλοποίηση και πράξεις Β-δένδρα ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 8-1 2-3 ένδρα Γενίκευση των δυαδικών

Διαβάστε περισσότερα

Δομζσ Δεδομζνων. Αναηιτθςθ και Ταξινόμθςθ Διάλεξθ 3

Δομζσ Δεδομζνων. Αναηιτθςθ και Ταξινόμθςθ Διάλεξθ 3 Δομζσ Δεδομζνων Αναηιτθςθ και Ταξινόμθςθ Διάλεξθ 3 Περιεχόμενα Αλγόρικμοι αναηιτθςθσ Σειριακι αναηιτθςθ Αναηιτθςθ κατά ομάδεσ Δυαδικι Αναηιτθςθ Ταξινόμθςθ Ταξινόμθςθ με παρεμβολι (insertion sort) Ταξινόμθςθ

Διαβάστε περισσότερα

Δομζσ Δεδομζνων Πίνακεσ

Δομζσ Δεδομζνων Πίνακεσ Δομζσ Δεδομζνων Πίνακεσ Διάλεξθ 2 Περιεχόμενα Πίνακεσ: Οριςμοί, Γενικζσ ζννοιεσ Αποκικευςθ πινάκων Ειδικζσ μορφζσ πινάκων Αλγόρικμοι Αναηιτθςθσ Σειριακι Αναηιτθςθ Δυαδικι Αναηιτθςθ Οριςμοί, Γενικζσ ζννοιεσ

Διαβάστε περισσότερα

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2 Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2 Δρ. Χρήζηος Ηλιούδης Μθ Προςθμαςμζνοι Ακζραιοι Εφαρμογζσ (ςε οποιαδιποτε περίπτωςθ δεν χρειάηονται αρνθτικοί αρικμοί) Καταμζτρθςθ. Διευκυνςιοδότθςθ.

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 14: Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης 3) Mergesort Ταξινόμηση με Συγχώνευση 4) BucketSort Ταξινόμηση με Κάδους Διδάσκων:

Διαβάστε περισσότερα

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V Σ ΤΑΤ Ι Σ Τ Ι Κ Η i Statisticum collegium V Στατιςτική Συμπεραςματολογία Ι Σημειακζσ Εκτιμήςεισ Διαςτήματα Εμπιςτοςφνησ Στατιςτική Συμπεραςματολογία (Statistical Inference) Το πεδίο τθσ Στατιςτικισ Συμπεραςματολογία,

Διαβάστε περισσότερα

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων (ΑΤΔ) Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά ΕΠΛ231 Δομές Δεδομένων

Διαβάστε περισσότερα

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν: Μζθοδος Simplex Η πλζον γνωςτι και περιςςότερο χρθςιμοποιουμζνθ μζκοδοσ για τθν επίλυςθ ενόσ γενικοφ προβλιματοσ γραμμικοφ προγραμματιςμοφ, είναι θ μζκοδοσ Simplex θ οποία αναπτφχκθκε από τον George Dantzig.

Διαβάστε περισσότερα

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι Παράςταςη κινητήσ υποδιαςτολήσ ςφμφωνα με το πρότυπο ΙΕΕΕ Δρ. Χρήστος Ηλιούδης το πρότυπο ΙΕΕΕ 754 ζχει χρθςιμοποιθκεί ευρζωσ ςε πραγματικοφσ υπολογιςτζσ. Το πρότυπο αυτό κακορίηει δφο βαςικζσ μορφζσ κινθτισ

Διαβάστε περισσότερα

HY437 Αλγόριθμοι CAD

HY437 Αλγόριθμοι CAD HY437 Αλγόριθμοι CAD Διδάςκων: Χ. Σωτηρίου http://inf-server.inf.uth.gr/courses/ce437/ 1 Περιεχόμενα Κανονικζσ Μορφζσ Οριςμόσ των Δυαδικών Διαγραμμάτων Αποφάςεων (Binary Decision Diagrams BDDs) Αναπαράςταςθ

Διαβάστε περισσότερα

Αςκιςεισ ςε (i) Δομζσ Ευρετθρίων και Οργάνωςθ Αρχείων (ii) Κανονικοποίθςθ

Αςκιςεισ ςε (i) Δομζσ Ευρετθρίων και Οργάνωςθ Αρχείων (ii) Κανονικοποίθςθ Αςκιςεισ ςε (i) Δομζσ Ευρετθρίων και Οργάνωςθ Αρχείων (ii) Κανονικοποίθςθ Δεκζμβριοσ 2016 Άςκθςθ 1 Θεωρείςτε ότι κζλουμε να διαγράψουμε τθν τιμι 43 ςτο Β+ δζντρο τθσ Εικόνασ 1. Η διαγραφι αυτι προκαλεί

Διαβάστε περισσότερα

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8 Δείκτεσ Διαχείριςθ Μνιμθσ Βαγγζλθσ Οικονόμου Διάλεξθ 8 Δείκτεσ Κάκε μεταβλθτι ςχετίηεται με μία κζςθ ςτθν κφρια μνιμθ του υπολογιςτι. Κάκε κζςθ ςτθ μνιμθ ζχει τθ δικι τθσ ξεχωριςτι διεφκυνςθ. Με άμεςθ

Διαβάστε περισσότερα

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -

Διαβάστε περισσότερα

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

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 7: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου Διδάσκων:

Διαβάστε περισσότερα

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

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 22: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης - Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου

Διαβάστε περισσότερα

ΑΝΣΙΣΡΟΦΗ ΤΝΑΡΣΗΗ. f y x y f A αντιςτοιχίηεται ςτο μοναδικό x A για το οποίο. Παρατθριςεισ Ιδιότθτεσ τθσ αντίςτροφθσ ςυνάρτθςθσ 1. Η. f A τθσ f.

ΑΝΣΙΣΡΟΦΗ ΤΝΑΡΣΗΗ. f y x y f A αντιςτοιχίηεται ςτο μοναδικό x A για το οποίο. Παρατθριςεισ Ιδιότθτεσ τθσ αντίςτροφθσ ςυνάρτθςθσ 1. Η. f A τθσ f. .. Αντίςτροφθ ςυνάρτθςθ Ζςτω θ ςυνάρτθςθ : A θ οποία είναι " ". Τότε ορίηεται μια νζα ςυνάρτθςθ, θ μζςω τθσ οποίασ το κάκε ιςχφει y. : A με Η νζα αυτι ςυνάρτθςθ λζγεται αντίςτροφθ τθσ. y y A αντιςτοιχίηεται

Διαβάστε περισσότερα

Γράφοι. Δομζσ Δεδομζνων Διάλεξθ 9

Γράφοι. Δομζσ Δεδομζνων Διάλεξθ 9 Γράφοι Δομζσ Δεδομζνων Διάλεξθ 9 Περιεχόμενα Γράφοι Γενικζσ ζννοιεσ, οριςμόσ, κτλ Παραδείγματα Γράφων Αποκικευςθ Γράφων Βαςικοί Οριςμοί Γράφοι και Δζντρα Διάςχιςθ Γράφων Περιοδεφων Πωλθτισ Γράφοι Οριςμόσ:

Διαβάστε περισσότερα

Παράςταςη ςυμπλήρωμα ωσ προσ 1

Παράςταςη ςυμπλήρωμα ωσ προσ 1 Δρ. Χρήστος Ηλιούδης Θζματα διάλεξησ ΣΤ1 Προςθεςη αφαίρεςη ςτο ΣΤ1 2 ή ΣΤ1 Ονομάηουμε ςυμπλιρωμα ωσ προσ μειωμζνθ βάςθ R ενόσ μθ προςθμαςμζνου αρικμοφ Χ = ( Χ θ-1 Χ θ-2... Χ 0 ) R ζναν άλλον αρικμό Χ'

Διαβάστε περισσότερα

17. Πολυδιάςτατοι πίνακεσ

17. Πολυδιάςτατοι πίνακεσ Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων 17. Πολυδιάςτατοι πίνακεσ Ιωάννθσ Κατάκθσ Πολυδιάςτατοι πίνακεσ o Μζχρι τϊρα μιλοφςαμε για μονοδιάςτατουσ πίνακεσ ι int age[5]= 31,28,31,30,31; o Για παράλλθλουσ

Διαβάστε περισσότερα

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

Διάλεξη 24: B-Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 24: B-Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Εισαγωγή & Ισοζυγισμένα Δένδρα - 2-3 Δένδρα, Εισαγωγή και άλλες πράξεις -Β-δένδρα Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές

Διαβάστε περισσότερα

16. Πίνακεσ και Συναρτήςεισ

16. Πίνακεσ και Συναρτήςεισ Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων 16. Πίνακεσ και Συναρτήςεισ Ιωάννθσ Κατάκθσ Σιμερα o Κλιςθ με τιμι o Κλιςθ με αναφορά o Πίνακεσ και ςυναρτιςεισ o Παραδείγματα Ειςαγωγι o Στισ προθγοφμενεσ

Διαβάστε περισσότερα

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ ελιδοποίθςθ (1/10) Σόςο θ κατάτμθςθ διαμεριςμάτων ςτακεροφ μεγζκουσ όςο και θ κατάτμθςθ διαμεριςμάτων μεταβλθτοφ και άνιςου μεγζκουσ δεν κάνουν

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Αλγόριθµοι Ταξινόµησης

Αλγόριθµοι Ταξινόµησης Αλγόριθµοι Ταξινόµησης Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οι αλγόριθµοι ταξινόµησης SelectionSort, InsertionSort, Mergesort, QuickSort, BucketSort Κάτω φράγµα της αποδοτικότητας

Διαβάστε περισσότερα

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εισαγωγή, εύρεση, διαγραφή) Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες

Διαβάστε περισσότερα

ΜΑΘΗΜΑΤΙΚΑ Α Γυμνασίου

ΜΑΘΗΜΑΤΙΚΑ Α Γυμνασίου ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΜΑΘΗΜΑΤΙΚΑ Α Γυμνασίου Ενότητα 1β: Ισότητα - Εξίσωση ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΤΙΤΟΥΤΟ ΥΠΗΡΕΣΙΑ ΑΝΑΠΤΥΞΗΣ ΠΡΟΓΡΑΜΜΑΤΩΝ ΜΑΘΗΜΑΤΙΚΑ Α Γυμνασίου Ενότητα 1β: Ισότητα - Εξίσωση Συγγραφή:

Διαβάστε περισσότερα

ΦΥΕ 14 ΑΚΑΔ. ΕΤΟΣ Η ΕΡΓΑΣΙΑ. Ημερομηνία παράδοςησ: 12 Νοεμβρίου (Όλεσ οι αςκιςεισ βακμολογοφνται ιςοτίμωσ με 10 μονάδεσ θ κάκε μία)

ΦΥΕ 14 ΑΚΑΔ. ΕΤΟΣ Η ΕΡΓΑΣΙΑ. Ημερομηνία παράδοςησ: 12 Νοεμβρίου (Όλεσ οι αςκιςεισ βακμολογοφνται ιςοτίμωσ με 10 μονάδεσ θ κάκε μία) ΦΥΕ ΑΚΑΔ. ΕΤΟΣ 007-008 Η ΕΡΓΑΣΙΑ Ημερομηνία παράδοςησ: Νοεμβρίου 007 (Όλεσ οι αςκιςεισ βακμολογοφνται ιςοτίμωσ με 0 μονάδεσ θ κάκε μία) Άςκηςη α) Να υπολογιςκεί θ προβολι του πάνω ςτο διάνυςμα όταν: (.

Διαβάστε περισσότερα

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα Αυτζσ οι οδθγίεσ ζχουν ςτόχο λοιπόν να βοθκιςουν τουσ εκπαιδευτικοφσ να καταςκευάςουν τισ δικζσ τουσ δραςτθριότθτεσ με το μοντζλο του Άβακα. Παρουςίαςη

Διαβάστε περισσότερα

Λαμβάνοντασ υπόψη ότι κατά την πρόςθεςη δφο δυαδικϊν ψηφίων ιςχφει: Κρατοφμενο

Λαμβάνοντασ υπόψη ότι κατά την πρόςθεςη δφο δυαδικϊν ψηφίων ιςχφει: Κρατοφμενο Αριθμητικά κυκλώματα Ημιαθροιστής (Half Adder) Ο ημιαθροιςτήσ είναι ζνα κφκλωμα το οποίο προςθζτει δφο δυαδικά ψηφία (bits) και δίνει ωσ αποτζλεςμα το άθροιςμά τουσ και το κρατοφμενο. Με βάςη αυτή την

Διαβάστε περισσότερα

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Γ. MergeSort Ταξινόμηση με Συγχώνευση Δ. BucketSort Ταξινόμηση με Κάδους Διδάσκων:

Διαβάστε περισσότερα

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

Διάλεξθ 22: Τεχνικζσ Κατακερματιςμοφ I (Hashing) Διάλεξθ 22: Τεχνικζσ Κατακερματιςμοφ I (Hashing) Στθν ενότθτα αυτι κα μελετθκοφν τα εξισ επιμζρουσ κζματα: - Αναςκόπθςθ Προβλιματοσ και Προκαταρκτικϊν Λφςεων Bit-Διανφςματα - Τεχνικζσ Κατακερματιςμοφ &

Διαβάστε περισσότερα

ςυςτιματα γραμμικϊν εξιςϊςεων

ςυςτιματα γραμμικϊν εξιςϊςεων κεφάλαιο 7 Α ςυςτιματα γραμμικϊν εξιςϊςεων αςικζσ ζννοιεσ Γραμμικά, λζγονται τα ςυςτιματα εξιςϊςεων ςτα οποία οι άγνωςτοι εμφανίηονται ςτθν πρϊτθ δφναμθ. Σα γραμμικά ςυςτιματα με δφο εξιςϊςεισ και δφο

Διαβάστε περισσότερα

8 τριγωνομετρία. βαςικζσ ζννοιεσ. γ ςφω. εφω και γ. κεφάλαιο

8 τριγωνομετρία. βαςικζσ ζννοιεσ. γ ςφω. εφω και γ. κεφάλαιο κεφάλαιο 8 τριγωνομετρία Α βαςικζσ ζννοιεσ τθν τριγωνομετρία χρθςιμοποιοφμε τουσ τριγωνομετρικοφσ αρικμοφσ, οι οποίοι ορίηονται ωσ εξισ: θμω = απζναντι κάκετθ πλευρά υποτείνουςα Γ ςυνω = εφω = προςκείμενθ

Διαβάστε περισσότερα

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

Οντοκεντρικόσ Ρρογραμματιςμόσ Οντοκεντρικόσ Ρρογραμματιςμόσ Ενότθτα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομζσ Δεδομζνων Ιωάννθσ Χατηθλυγεροφδθσ Ρολυτεχνικι Σχολι Τμιμα Μθχανικών Η/Υ & Ρλθροφορικισ Δομζσ Δεδομζνων Ειςαγωγι Δομζσ ςτακεροφ

Διαβάστε περισσότερα

Ποσοτικές Μέθοδοι Δρ. Χάϊδω Δριτσάκη

Ποσοτικές Μέθοδοι Δρ. Χάϊδω Δριτσάκη Ποσοτικές Μέθοδοι Δρ. Χάϊδω Δριτσάκη MSc Τραπεζική & Χρηματοοικονομική Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Western Macedonia University of Applied Sciences Κοίλα Κοζάνης 50100 Kozani GR

Διαβάστε περισσότερα

Αυτόνομοι Πράκτορες. Αναφορά Εργασίας Εξαμήνου. Το αστέρι του Aibo και τα κόκαλα του

Αυτόνομοι Πράκτορες. Αναφορά Εργασίας Εξαμήνου. Το αστέρι του Aibo και τα κόκαλα του Αυτόνομοι Πράκτορες Αναφορά Εργασίας Εξαμήνου Το αστέρι του Aibo και τα κόκαλα του Jaohar Osman Η πρόταςθ εργαςίασ που ζκανα είναι το παρακάτω κείμενο : - ξ Aibo αγαπάει πάρα πξλύ ρα κόκαλα και πάμρα ρα

Διαβάστε περισσότερα

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1 ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4. Να γίνει πρόγραμμα το οποίο να επιλφει το Διαγώνιο Σφςτθμα: A ι το ςφςτθμα : ι ςε μορφι εξιςώςεων το ςφςτθμα : Αλγόρικμοσ m(). Διαβάηουμε τθν τιμι του ( θ διάςταςθ του Πίνακα Α )..

Διαβάστε περισσότερα

Αλγόριθµοι Ταξινόµησης

Αλγόριθµοι Ταξινόµησης Αλγόριθµοι Ταξινόµησης Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οι αλγόριθµοι ταξινόµησης SelectionSort, InsertionSort, Mergesort, QuickSort, BucketSort Κάτω φράγµα της αποδοτικότητας

Διαβάστε περισσότερα

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν Ειςαγωγι ςτθν Python Γ Μζροσ Modules, Αντικειμενοςτραφισ Προγραμματιςμόσ ςτθν Python, Classes, Objects, Αλλθλεπίδραςθ με αρχεία Ειςαγωγι αρκρωμάτων (modules): import

Διαβάστε περισσότερα

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M Δοµές Δεδοµένων & Ανάλυση Αλγορίθµων 3ο Εξάµηνο Δέντρα Δυαδικά Δέντρα Δυαδικά Δέντρα Αναζήτησης (inary Search Trees) http://aetos.it.teithe.gr/~demos/teaching_r.html Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Διαβάστε περισσότερα

Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό. μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ

Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό. μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ Για τθν ανάδειξθ του κζματοσ κα λφνουμε κάποια προβλιματα

Διαβάστε περισσότερα

Βάςεισ Δεδομζνων Ι. Ενότητα 12: Κανονικοποίηςη. Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικών Πλθροφορικισ ΤΕ

Βάςεισ Δεδομζνων Ι. Ενότητα 12: Κανονικοποίηςη. Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικών Πλθροφορικισ ΤΕ Βάςεισ Δεδομζνων Ι Ενότητα 12: Κανονικοποίηςη Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικών Πλθροφορικισ ΤΕ Άδειεσ Χρήςησ Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χριςθσ Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

Διπλωματικι Εργαςία. Τλοποίθςθ και Οπτικοποίθςθ Δενδρικϊν Δομϊν Δεδομζνων. Κεςςόπουλοσ Αναςτάςιοσ. Επιβλζπων Κακθγθτισ: Παπαδόπουλοσ Απόςτολοσ

Διπλωματικι Εργαςία. Τλοποίθςθ και Οπτικοποίθςθ Δενδρικϊν Δομϊν Δεδομζνων. Κεςςόπουλοσ Αναςτάςιοσ. Επιβλζπων Κακθγθτισ: Παπαδόπουλοσ Απόςτολοσ Τλοποίθςθ και Οπτικοποίθςθ Δενδρικϊν Δομϊν Δεδομζνων Κεςςόπουλοσ Αναςτάςιοσ ΑΕΜ : 617 Επιβλζπων Κακθγθτισ: Παπαδόπουλοσ Απόςτολοσ χολι Θετικϊν Επιςτθμϊν Σμιμα Πλθροφορικισ 1 Κεφάλαιο 0. Περιεχόμενα Κεφάλαιο

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό

Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό Τίτλος Μαθήματος: Εισαγωγή στον Προγραμματισμό Ενότητα: Εφαρμογές σε ταξινομήσεις και αναζήτηση στοιχείων Διδάσκων: Λέκτορας Xάρης Παπαδόπουλος Τμήμα: Μαθηματικών 343 Ειςαγωγι ςτον Προγραμματιςμό Τμιμα

Διαβάστε περισσότερα

Ειδικά Θζματα Βάςεων Δεδομζνων

Ειδικά Θζματα Βάςεων Δεδομζνων Ειδικά Θζματα Βάςεων Δεδομζνων Ενότθτα 12: Ευρετιρια Δρ. Τςιμπίρθσ Αλκιβιάδθσ Τμιμα Μθχανικϊν Πλθροφορικισ ΤΕ Άδειεσ Χριςθσ Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χριςθσ Creative Commons. Για

Διαβάστε περισσότερα

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Υλικό από τις σηµειώσεις Ν. Παπασπύρου, 2006 Δέντρα δυαδικής αναζήτησης Δενδρικές δοµές δεδοµένων στις οποίες Όλα τα στοιχεία στο αριστερό υποδέντρο της ρίζας είναι

Διαβάστε περισσότερα

Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ

Διαχείριςθ του φακζλου public_html ςτο ΠΣΔ Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ Οι παρακάτω οδθγίεσ αφοροφν το χριςτθ webdipe. Για διαφορετικό λογαριαςμό χρθςιμοποιιςτε κάκε φορά το αντίςτοιχο όνομα χριςτθ. = πατάμε αριςτερό κλικ ςτο Επιςκεφκείτε

Διαβάστε περισσότερα

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, ορισμοί, πράξεις και αναπαράσταση στη μνήμη ΔυαδικάΔένδρακαιΔυαδικάΔένδραΑναζήτησης ΕΠΛ 231 Δομές

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών με Σχεςιακέσ Βάςεισ Δεδομένων

Ανάπτυξη Εφαρμογών με Σχεςιακέσ Βάςεισ Δεδομένων Ανάπτυξη Εφαρμογών με Σχεςιακέσ Βάςεισ Δεδομένων Δρ. Θεοδώρου Παύλοσ theodorou@uoc.gr Περιεχόμενα Τι είναι οι Βάςεισ Δεδομζνων (DataBases) Τι είναι Σφςτθμα Διαχείριςθσ Βάςεων Δεδομζνων (DBMS) Οι Στόχοι

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ Φιλιοποφλου Ειρινθ Προςθήκη νζων πεδίων Ασ υποκζςουμε ότι μετά τθ δθμιουργία του πίνακα αντιλαμβανόμαςτε ότι ζχουμε ξεχάςει κάποια πεδία. Είναι ζνα πρόβλθμα το οποίο

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ Αρχείο (File) Φάκελοσ (Folder) Διαχειριςτισ Αρχείων (File Manager) Τφποι Αρχείων Σε τι εξυπθρετεί θ οργάνωςθ των εργαςιϊν μασ ςτουσ υπολογιςτζσ; Πϊσ κα οργανϊςουμε

Διαβάστε περισσότερα

Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ

Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ Ειςαγωγό Όπωσ είδαμε, ο χϊροσ εικονικϊν διευκφνςεων μνιμθσ που χρθςιμοποιεί κάκε διεργαςία, είναι αρκετά μεγαλφτεροσ από το χϊρο των φυςικϊν διευκφνςεων.

Διαβάστε περισσότερα

Ιδιότθτεσ πεδίων Γενικζσ.

Ιδιότθτεσ πεδίων Γενικζσ. Οι ιδιότθτεσ των πεδίων διαφζρουν ανάλογα με τον τφπο δεδομζνων που επιλζγουμε. Ορίηονται ςτο κάτω μζροσ του παρακφρου ςχεδίαςθσ του πίνακα, ςτθν καρτζλα Γενικζσ. Ιδιότθτα: Μζγεκοσ πεδίου (Field size)

Διαβάστε περισσότερα

ΚΥΠΡΙΑΚΗ ΜΑΘΗΜΑΤΙΚΗ ΕΤΑΙΡΕΙΑ

ΚΥΠΡΙΑΚΗ ΜΑΘΗΜΑΤΙΚΗ ΕΤΑΙΡΕΙΑ ΚΥΠΡΙΑΚΗ ΜΑΘΗΜΑΤΙΚΗ ΕΤΑΙΡΕΙΑ Α ΔΙΑΓΩΝΙΣΜΟΣ ΕΠΙΛΟΓΗΣ IMC (Key Stage II) 9 Μαρτίου 2016 ΧΡΟΝΟΣ: 2 ΩΡΕΣ Λύςεισ : Πρόβλημα 1 (α) Να βρείτε τθν τιμι του για να ιςχφει θ πιο κάτω ςχζςθ: (β) Ο Ανδρζασ τελειϊνει

Διαβάστε περισσότερα

Θεςιακά ςυςτιματα αρίκμθςθσ

Θεςιακά ςυςτιματα αρίκμθςθσ Θεςιακά ςυςτιματα αρίκμθςθσ Δρ. Χρήστος Ηλιούδης αρικμθτικό ςφςτθμα αρίκμθςθσ (Number System) Αξία (value) παράςταςθ Οι αξίεσ (π.χ. το βάροσ μιασ ποςότθτασ μιλων) μποροφν να παραςτακοφν με πολλοφσ τρόπουσ

Διαβάστε περισσότερα

HY437 Αλγόριθμοι CAD

HY437 Αλγόριθμοι CAD HY437 Αλγόριθμοι CAD Διδϊςκων: Χ. Σωτηρύου http://inf-server.inf.uth.gr/courses/ce437/ 1 Περιεχόμενα Στόχοι τθσ Τεχνολογικισ Απεικόνιςθσ Περιγραφι σ ωσ Βαςικοί Γράφοι Μεταςχθματιςμόσ Δυαδικοφ Κυκλϊματοσ

Διαβάστε περισσότερα

Ιςίδωροσ Ροδομαγουλάκθσ Αλγόρικμοι Δικτφων και Πολυπλοκότθτα K-median

Ιςίδωροσ Ροδομαγουλάκθσ Αλγόρικμοι Δικτφων και Πολυπλοκότθτα K-median Ιςίδωροσ Ροδομαγουλάκθσ Αλγόρικμοι Δικτφων και Πολυπλοκότθτα 00-0 K-median Επιςκόπθςθ του κεφαλαίου 5 από το βιβλίο «Approximation algorithms» του V. Vazirani 56 c c 6 c c Metric Uncapacitated Facility

Διαβάστε περισσότερα

Η θεωρία τησ ςτατιςτικήσ ςε ερωτήςεισ-απαντήςεισ Μέροσ 1 ον (έωσ ομαδοποίηςη δεδομένων)

Η θεωρία τησ ςτατιςτικήσ ςε ερωτήςεισ-απαντήςεισ Μέροσ 1 ον (έωσ ομαδοποίηςη δεδομένων) 1)Πώσ ορύζεται η Στατιςτικό επιςτόμη; Στατιςτικι είναι ζνα ςφνολο αρχϊν και μεκοδολογιϊν για: το ςχεδιαςμό τθσ διαδικαςίασ ςυλλογισ δεδομζνων τθ ςυνοπτικι και αποτελεςματικι παρουςίαςι τουσ τθν ανάλυςθ

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών Σε Προγραμματιςτικό Περιβάλλον

Ανάπτυξη Εφαρμογών Σε Προγραμματιςτικό Περιβάλλον Γραπτι Εξζταςθ ςτο μάκθμα Ανάπτυξη Εφαρμογών Σε Προγραμματιςτικό Περιβάλλον Όνομα: Επϊνυμο: Τμιμα: Ημερομθνία: 20/02/11 Θζμα 1 ο Α. Να χαρακτθρίςετε κακεμιά από τισ παρακάτω προτάςεισ ωσ Σωςτι (Σ) ι Λάκοσ

Διαβάστε περισσότερα

ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO

ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO Το Micro Worlds Pro είναι ζνα ολοκλθρωμζνο περιβάλλον προγραμματιςμοφ. Χρθςιμοποιεί τθ γλϊςςα προγραμματιςμοφ Logo (εξελλθνιςμζνθ) Το Micro Worlds Pro περιλαμβάνει

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 23: οµές εδοµένων και Αλγόριθµοι Ενδιάµεση Εξέταση Ηµεροµηνία : ευτέρα, 3 Νοεµβρίου 2008 ιάρκεια : 2.00-4.00 ιδάσκουσα : Άννα Φιλίππου Ονοµατεπώνυµο: ΣΚΕΛΕΤΟΙ

Διαβάστε περισσότερα

Πωσ δθμιουργώ φακζλουσ;

Πωσ δθμιουργώ φακζλουσ; Πωσ δθμιουργώ φακζλουσ; Για να μπορζςετε να δθμιουργιςετε φακζλουσ ςτο χαρτοφυλάκιό ςασ ςτο Mahara κα πρζπει να μπείτε ςτο ςφςτθμα αφοφ πατιςετε πάνω ςτο ςφνδεςμο Mahara profiles από οποιοδιποτε ςελίδα

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΤΟΤ. Φιλιοποφλου Ειρινθ

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΤΟΤ. Φιλιοποφλου Ειρινθ ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΤΟΤ Φιλιοποφλου Ειρινθ Βάςθ Δεδομζνων Βάζη δεδομένων είναι μια οπγανωμένη ζςλλογή πληποθοπιών οι οποίερ πποζδιοπίζοςν ένα ζςγκεκπιμένο θέμα.χπηζιμεύοςν ζηην Σςλλογή

Διαβάστε περισσότερα

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

Συλλογές, Στοίβες και Ουρές Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει

Διαβάστε περισσότερα

Άςκθςθ 1θ: Να γραφεί αλγόρικμοσ που κα δθμιουργεί με τθ βοικεια διπλοφ επαναλθπτικοφ βρόχου, τον ακόλουκο διςδιάςτατο πίνακα:

Άςκθςθ 1θ: Να γραφεί αλγόρικμοσ που κα δθμιουργεί με τθ βοικεια διπλοφ επαναλθπτικοφ βρόχου, τον ακόλουκο διςδιάςτατο πίνακα: 2 ο Σετ Ασκήσεων Δομές Δεδομένων - Πίνακες Άςκθςθ 1θ: Να γραφεί αλγόρικμοσ που κα δθμιουργεί με τθ βοικεια διπλοφ επαναλθπτικοφ βρόχου, τον ακόλουκο διςδιάςτατο πίνακα: 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8

Διαβάστε περισσότερα

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

ΕΡΓΑΣΗΡΙΟ ΕΦΑΡΜΟΜΕΝΗ ΠΛΗΡΟΦΟΡΙΚΗ Στο εργαςτιριο αυτό κα δοφμε πωσ μποροφμε να προςομοιϊςουμε μια κίνθςθ χωρίσ τθ χριςθ εξειδικευμζνων εργαλείων, παρά μόνο μζςω ενόσ προγράμματοσ λογιςτικϊν φφλλων, όπωσ είναι το Calc και το Excel. Τα δφο

Διαβάστε περισσότερα

Πανεπιςτιμιο Κφπρου ΟΙΚ 223: Μακθματικά για οικονομολόγουσ ΙΙ Διδάςκων:

Πανεπιςτιμιο Κφπρου ΟΙΚ 223: Μακθματικά για οικονομολόγουσ ΙΙ Διδάςκων: Πανεπιςτιμιο Κφπρου ΟΙΚ 3: Μακθματικά για οικονομολόγουσ ΙΙ Διδάςκων: Φάμπιο Αντωνίου τοιχεία Επικοινωνίασ: email: fantoniou@aueb.gr ; fabio@ucy.ac.cy Σθλ:893683 Προςωπικι Ιςτοςελίδα: fantoniou.wordpress.com

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ Αυτζσ οι οδθγίεσ ζχουν ςτόχο να βοθκιςουν τουσ εκπαιδευτικοφσ να καταςκευάςουν τισ δικζσ τουσ δραςτθριότθτεσ με το μοντζλο τθσ Αρικμογραμμισ.

Διαβάστε περισσότερα

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

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

Διαβάστε περισσότερα

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα Περιεχόμενα Ζννοια δομισ Οριςμόσ δομισ Διλωςθ μεταβλθτϊν Απόδοςθ Αρχικϊν τιμϊν Αναφορά ςτα μζλθ μιασ δομισ Ζνκεςθ Δομισ Πίνακεσ Δομϊν Η ζννοια τθσ δομισ Χρθςιμοποιιςαμε

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 8: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων (ΑΤΔ) Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά με Στατική Δέσμευση

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό Βαγγζλθσ Οικονόμου Περιεχόμενα Πλθροφορίεσ Μακιματοσ Δομθμζνοσ Προγραμματιςμόσ (Οριςμοί, Γενικζσ Ζννοιεσ) Αλγόρικμοι και Ψευδοκϊδικασ Γλϊςςα προγραμματιςμοφ C Πλθροφορίεσ

Διαβάστε περισσότερα

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο) Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο) Ιοφνιοσ 2013 Περιεχόμενα: Ειςαγωγή... 3 1.Εθνικό Τυπογραφείο... 3 1.1. Είςοδοσ... 3 1.2. Αρχική Οθόνη... 4 1.3. Διεκπεραίωςη αίτηςησ...

Διαβάστε περισσότερα

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

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων Κατ οίκον Εργασία 3 Σκελετοί Λύσεων Άσκηση 1 (α) Έστω Α(n) και Κ(n) ο αριθμός των ακμών και ο αριθμός των κόμβων ενός αυστηρά δυαδικού δένδρου με n φύλλα. Θέλουμε να αποδείξουμε για κάθε n 1 την πρόταση

Διαβάστε περισσότερα