Κύρια σηµεία για µελέτη έντρα Stock Fraud Make Money Fast! Ponzi Scheme ank Robbery Ο ΑΤ του δέντρου (..1) Preorder και postorder διασχίσεις (..) Ο ΑΤ του δυαδικού δέντρου(..) Inorder διάσχιση (..) Ηδιάσχισητουuler (..) Template method pattern οµές δεδοµένων για δέντρα (..4) Εφαρµογές σε Java (http://jdsl.org) 4/11/005 4:49 PM έντρα 1 4/11/005 4:49 PM έντρα Τι είναι δέντρο Στην επιστήµη υπολογιστών, το δέντρο omputers R Us είναι ένα αφηρηµένο µοντέλο ιεραρχικής δόµησης. Ένα δέντρο αποτελείται από κόµβους µε σχέσεις πατέρα παιδιού. Sales Manufacturing Εφαρµογές σε: Χάρτες οργανισµών US International Laptops esktops Συστήµατα αρχείων urope sia anada Προγραµµατιστικά περιβάλλοντα 4/11/005 4:49 PM έντρα R& Ορολογία δέντρων Κόµβος Ρίζα: ένας κόµβος χωρίς πατέρα () Εσωτερικός κόµβος: Ένας κόµβος µε τουλάχιστον ένα παιδί (,,, F) Εξωτερικός κόµβος(ή φύλλο ): ένας κόµβος χωρίς παιδιά (, I, J, K, G, H, ) Πρόγονοι ενός κόµβου: κόµβος πατέρας,παππούς, προπάππος κλπ. Βάθος κόµβου: οαριθµός των κόµβων προγόνων. Ύψος δέντρου: το µέγιστο βάθος οποιουδήποτε κόµβου του δέντρου.() Απόγονος κόµβου: παιδί, εγγόνι. Υποδέντρο: ένα δέντρο αποτελούµενο από έναν κόµβο και τους απογόνους του. υποδέντρο 4/11/005 4:49 PM έντρα 4 F I J K G H 1
Ο ΑΤ του δέντρου Χρησιµοποιούµε θέσειςγια να γενικεύσουµε τους κόµβους. Γενικές µέθοδοι: integer size() boolean ismpty() objectiterator elements() positioniterator positions() Συµπληρωµατικές µέθοδοι: position root() position parent(p) positioniterator children(p) Μέθοδοι ερωτηµάτων: boolean isinternal(p) boolean isxternal(p) boolean isroot(p) Μέθοδοι αναβάθµισης: swaplements(p, q) object replacelement(p, o) Πρόσθετοι µέθοδοι αναβάθµισης µπορεί να ορίζονται από τις δοµές δεδοµένων που υλοποιούν τον ΑΤ του δέντρου. 4/11/005 4:49 PM έντρα 5 Preorder διάσχιση Μια διάσχιση επισκέφτεται τους κόµβους του δέντρου µε συστηµατικό τρόπο. Σε µια preorder διάσχιση, η επίσκεψη σε έναν κόµβο γίνεται πριν από την επίσκεψη στους απογόνους του. Εφαρµογή: Εκτύπωση 1 δοµηµένου εγγράφου. Make Money Fast! 5 9 1. Motivations. Methods References 4 1.1 Greed 1. vidity 6 7 8.1 Stock Fraud lgorithm preorder(v) visit(v) for each child w of v preorder (w). Ponzi Scheme. ank Robbery 4/11/005 4:49 PM έντρα 6 Postorder διάσχιση Σε µια postorder διάσχιση, η επίσκεψη σε έναν κόµβο γίνεται µετά από την επίσκεψη στους απογόνους του. Εφαρµογή: υπολογισµός του χώρου που χρησιµοποιείται από αρχεία σε έναν κατάλογο και τους υποκαταλόγους του. 1 h1c.doc K homeworks/ h1nc.doc K 9 R.java 10K cs16/ lgorithm postorder(v) for each child w of v postorder (w) visit(v) 7 programs/ 4 5 6 Stocks.java 5K Robot.java 0K todo.txt 1K 4/11/005 4:49 PM έντρα 7 8 υαδικό δέντρο υαδικό είναι ένα δέντρο µε τις ακόλουθες ιδιότητες: Κάθε εσωτερικός κόµβος έχει δύο παιδιά Τα παιδιά ενός κόµβου αποτελούν ένα διατεταγµένο δέντρο. Αποκαλούµε ταπαιδιάενός εσωτερικού κόµβου αριστερό και δεξιό παιδί. Εναλλακτικός αναδροµικός ορισµός: ένα δυαδικό δέντρο είναι είτε: Ένα δέντρο αποτελούµενο από ένα µόνο κόµβο είτε Εφαρµογές: Αριθµητικές εκφράσεις ιεργασίες αποφάσεων Αναζητήσεις Ένα δέντρο του οποίου η ρίζα έχει ένα διατεταγµένο ζευγάρι από παιδιά, το καθένα εκ των οποίων H I είναι δυαδικό δέντρο. 4/11/005 4:49 PM έντρα 8 F G
έντρα αριθµητικών εκφράσεων Σε ένα δυαδικό δέντρο που σχετίζεται µε µια αριθµητική έκφραση, Οι εσωτερικοί κόµβοι είναι: τελεστές ΟΙ εξωτερικοί κόµβοι είναι: τελεστέοι Παράδειγµα: το δέντρο αριθµητικής έκφρασης για την έκφραση ( (a 1) ( b)) είναι το παρακάτω. a 1 b έντρα Απόφασης (decision trees) Σε ένα δυαδικό δέντρο το οποίο σχετίζεται µε µια διαδικασία απόφασης Οι εσωτερικοί κόµβοι είναι: ερωτήσεις µε απάντησηναιήόχι Οι εξωτερικοί κόµβοι είναι: αποφάσεις Παράδειγµα: απόφαση για δείπνο Yes How about coffee? Want a fast meal? On expense account? Starbucks Spike s l Forno afé Paragon No Yes No Yes No 4/11/005 4:49 PM έντρα 9 4/11/005 4:49 PM έντρα 10 Ιδιότητες των δυαδικών δέντρων ΟΑΤ τουδυαδικούδέντρου Συµβολισµός n αριθµός κόµβων e αριθµός εξωτερικών κόµβων i αριθµός εσωτερικών κόµβων h ύψος δέντρου Ιδιότητες που ισχύουν: e = i 1 n = e 1 h i h (n 1)/ e h h log e h log (n 1) 1 ΟΑΤ τουδυαδικού δέντρου αποτελεί προέκταση του ΑΤ του δέντρου, κληρονοµώντας όλες τις µεθόδους του. Επιπλέον µέθοδοι: position lefthild(p) position righthild(p) position sibling(p) Μέθοδοι αναβάθµισης µπορεί να ορίζονται από τις δοµές δεδοµένων που υλοποιούν τον ΑΤ του δυαδικού δέντρου. 4/11/005 4:49 PM έντρα 11 4/11/005 4:49 PM έντρα 1
Inorder διάσχιση Σε µια Inorder διάσχιση η επίσκεψη στον κόµβο γίνεται µετά την επίσκεψη στοαριστερόυποδέντροκαι πριν την επίσκεψη στο δεξί υποδέντρο. Εφαρµογή: Ζωγραφίστε ένα δυαδικό δέντρο 6 x(v) = inorder τάξη του v y(v) = βάθος του v 1 4 5 lgorithm inorder(v) inorder (lefthild (v)) visit(v) inorder (righthild (v)) 7 9 4/11/005 4:49 PM έντρα 1 8 Εκτύπωση αριθµητικών εκφράσεων Εξειδίκευση µιας inorder διάσχισης Εκτύπωσε τον τελεστή ή τον τελεστέο όταν επισκέφτεσαι τον κόµβο εκτύπωσε ( πριν την διάσχιση του αριστερού υποδέντρου εκτύπωσε ) µετά την διάσχιση του δεξιού υποδέντρου. a 1 b lgorithm printxpression(v) print( ( ) inorder (lefthild (v)) print(v.element ()) inorder (righthild (v)) print ( ) ) (( (a 1)) ( b)) 4/11/005 4:49 PM έντρα 14 Αξιολόγηση αριθµητικών εκφράσεων Εξειδίκευση της postorder διάσχισης Μια αναδροµική µέθοδος επιστρέφει την τιµή ενός υποδέντρου. Κατά την επίσκεψη ενός εσωτερικού κόµβου, συνδυάζονται οι τιµές των υποδέντρων. 5 1 lgorithm evalxpr(v) if isxternal (v) return v.element () else x evalxpr(lefthild (v)) y evalxpr(righthild (v)) operator stored at v return x y 4/11/005 4:49 PM έντρα 15 ιάσχιση του uler Γενική διάσχιση ενός δυαδικού δέντρου. Περιλαµβάνει τις διασχίσεις preorder, postorder και inorder Γίνεται κυκλική διάσχιση του κόµβουκαιηεπίσκεψησεκάθεκόµβο γίνεται τρεις φορές: Στα αριστερά (preorder) Από κάτω (inorder) Στα δεξιά (postorder) L R 4/11/005 4:49 PM έντρα 16 5 1 4
Template Method Pattern Γενικός αλγόριθµος ο οποίος µπορεί να εξειδικευθεί µε τον επαναορισµό συσκεκριµένων βηµάτων Υλοποιείται µέσω µιας Java class Οι µέθοδοι επίσκεψης µπορούν να επαναοριστούν από υποκλάσεις Template method eulertour Καλείται αναδροµικά στο δεξί και στο αριστερό παιδί public abstract class ulertour { protected inarytree tree; protected void visitxternal(position p, Result r) { } protected void visitleft(position p, Result r) { } protected void visitelow(position p, Result r) { } protected void visitright(position p, Result r) { } protected Object eulertour(position p) { Result r = new Result(); if tree.isxternal(p) { visitxternal(p, r); } else { visitleft(p, r); r.leftresult = eulertour(tree.lefthild(p)); visitelow(p, r); r.rightresult = eulertour(tree.righthild(p)); visitright(p, r); return r.finalresult; } Ένα Result αντικείµενο µε πεδία leftresult, rightresult και finalresult ανιχνεύει το output της κλήσης της αναδροµικής συνάρτησης eulertour 4/11/005 4:49 PM έντρα 17 Εξειδικεύσεις του ulertour είχνουµε πώςνα εξειδικεύσουµε την class ulertour για αξιολόγηση αριθµητικών εκφράσεων. Υποθέσεις Οι εξωτερικοί κόµβοι αποθηκεύουν ακέραια αντικείµενα Οι εσωτερικοί κόµβοι αποθηκεύουν Operator αντικείµενα που υποστηρίζουν µεθόδους operation (Integer, Integer) public class valuatexpression extends ulertour { protected void visitxternal(position p, Result r) { r.finalresult = (Integer) p.element(); } protected void visitright(position p, Result r) { Operator op = (Operator) p.element(); r.finalresult = op.operation( (Integer) r.leftresult, (Integer) r.rightresult ); } } 4/11/005 4:49 PM έντρα 18 οµές δεδοµένων για δέντρα Ένας κόµβος αναπαρίσταται από ένα αντικείµενο στο οποίο αποθηκεύονται Ένα στοιχείο Οκόµβος πατέρας Η ακολουθία από κόµβους παιδιά Αντικείµενα κόµβων υλοποιούν τον ΑΤ της θέσης. F 4/11/005 4:49 PM έντρα 19 F οµές δεδοµένων για δυαδικά δέντρα Ένας κόµβος αναπαρίσταται από ένα αντικείµενο στο οποίο αποθηκεύονται Ένα στοιχείο Οκόµβος πατέρας Αριστερός κόµβος παιδί εξιός κόµβος παιδί Αντικείµενα κόµβων υλοποιούν τον ΑΤ της θέσης. 4/11/005 4:49 PM έντρα 0 5
Υλοποίηση σε JV Interface για δέντρο Ιnterface για δυαδικό δέντρο που επεκτείνει το δέντρο Κλάσεις υλοποιούν το δέντρο και το δυαδικό δέντρο και παρέχουν onstructors Μεθόδους αναβάθµισης Μεθόδους εκτύπωσης Παράδειγµα αναβαθνίσεων για δυαδικά δέντρα expandxternal(v) removebovexternal(w) expandxternal(v) v 4/11/005 4:49 PM έντρα 1 v w removebovexternal(w) έντρα σε JSL Η JSL είναι µια βιβλιοθήκη για δοµές δεδοµένων σε Java interfaces δέντρων σε JSL Επιθεωρήσιµο υαδικό δέντρο Επιθεωρήσιµο δέντρο υαδικό δέντρο έντρο Οι επιθεωρήσιµες εκδόσεις δεν έχουν µεθόδους αναβάθµισης Κλάσεις για δέντρα σε JSL NodeinaryTree NodeTree Η JSL αναπτύχθηκε στο: rown s enter for Geometric omputing JSL documentation and tutorials at http://jdsl.org InspectableTree InspectableinaryTree Tree inarytree 4/11/005 4:49 PM έντρα 6