1.1 Αλγόριθµοι Ένα ενδεικτικό πρόβληµα: συνδετικότητα Αλγόριθµοι ένωσης-εύρεσης Προοπτική Σύνοψη θεµάτων 47

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

Download "1.1 Αλγόριθµοι Ένα ενδεικτικό πρόβληµα: συνδετικότητα Αλγόριθµοι ένωσης-εύρεσης Προοπτική Σύνοψη θεµάτων 47"

Transcript

1 Περιεχόµενα ΜΕΡΟΣ ΕΝΑ Θεµελιώδεις έννοιες 23 ΚΕΦΑΛΑΙΟ ΕΝΑ. Εισαγωγή Αλγόριθµοι Ένα ενδεικτικό πρόβληµα: συνδετικότητα Αλγόριθµοι ένωσης-εύρεσης Προοπτική Σύνοψη θεµάτων 47 ΚΕΦΑΛΑΙΟ ΥΟ. Αρχές ανάλυσης αλγορίθµων Υλοποίηση και εµπειρική ανάλυση Ανάλυση αλγορίθµων Αύξηση συναρτήσεων Συµβολισµός µεγάλου όµικρον Βασικές αναδροµικές εξισώσεις Παραδείγµατα ανάλυσης αλγορίθµων Εγγυήσεις, προβλέψεις, και περιορισµοί 82 Βιβλιογραφικές αναφορές για το Μέρος Ένα 87 17

2 18 ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ ΥΟ οµές δεδοµένων 89 ΚΕΦΑΛΑΙΟ ΤΡΙΑ. Στοιχειώδεις δοµές δεδοµένων οµικά στοιχεία Πίνακες Συνδεδεµένες λίστες Στοιχειώδης επεξεργασία λιστών Κατανοµή µνήµης για λίστες Αλφαριθµητικά Σύνθετες δοµές δεδοµένων 140 ΚΕΦΑΛΑΙΟ ΤΕΣΣΕΡΑ. Αφηρηµένοι τύποι δεδοµένων Αφηρηµένα αντικείµενα και συλλογές αντικειµένων Αφηρηµένος τύπος δεδοµένων στοίβας ώθησης προς τα κάτω Παραδείγµατα πελατών για στοίβες Υλοποιήσεις ΑΤ στοίβας ηµιουργία νέου αφηρηµένου τύπου δεδοµένων Ουρές FIFO και γενικευµένες ουρές ιπλά στοιχεία και στοιχεία αριθµοδείκτη Αφηρηµένοι τύποι δεδοµένων πρώτης κλάσης Παράδειγµα αφηρηµένου τύπου δεδοµένων βασισµένου σε εφαρµογή Προοπτική 219 ΚΕΦΑΛΑΙΟ ΠΕΝΤΕ. Αναδροµή και δένδρα Αναδροµικοί αλγόριθµοι ιαίρει και βασίλευε υναµικός προγραµµατισµός ένδρα Μαθηµατικές ιδιότητες των δυαδικών δένδρων ιάσχιση δένδρου Αναδροµικοί αλγόριθµοι δυαδικού δένδρου ιάσχιση γράφου Προοπτική 287 Βιβλιογραφικές αναφορές για το Μέρος ύο 289

3 ΠΕΡΙΕΧΟΜΕΝΑ 19 ΜΕΡΟΣ ΤΡΙΑ Ταξινόµηση 291 ΚΕΦΑΛΑΙΟ ΕΞΙ. Στοιχειώδεις µέθοδοι ταξινόµησης Οι κανόνες του παιχνιδιού Ταξινόµηση µε επιλογή Ταξινόµηση µε εισαγωγή Ταξινόµηση φυσαλίδας Χαρακτηριστικά επιδόσεων των στοιχειωδών ταξινοµήσεων Ταξινόµηση shellsort Ταξινόµηση άλλων τύπων δεδοµένων Ταξινόµηση µε αριθµοδείκτη και δείκτη Ταξινόµηση συνδεδεµένων λιστών Καταµέτρηση µε αριθµοδείκτη κλειδιού 342 ΚΕΦΑΛΑΙΟ ΕΠΤΑ. Ο αλγόριθµος quicksort Ο βασικός αλγόριθµος Χαρακτηριστικά επιδόσεων του αλγορίθµου quicksort Μέγεθος στοίβας Μικρά υποαρχεία ιαµέριση µε διάµεσο των τριών ιπλά κλειδιά Αλφαριθµητικά και διανύσµατα Επιλογή 372 ΚΕΦΑΛΑΙΟ ΟΚΤΩ. Συγχώνευση και ο αλγόριθµος mergesort ιµερής συγχώνευση Αφηρηµένη επιτόπου συγχώνευση Αναλυτική ταξινόµηση µε συγχώνευση Βελτιώσεις του βασικού αλγορίθµου Συνθετική ταξινόµηση µε συγχώνευση Χαρακτηριστικά επιδόσεων του αλγορίθµου mergesort Υλοποιήσεις του αλγορίθµου mergesort µε συνδεδεµένες λίστες Και πάλι η αναδροµή 399

4 20 ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ ΕΝΝΕΑ. Ουρές προτεραιότητας και ο αλγόριθµος heapsort Στοιχειώδεις υλοποιήσεις οµή δεδοµένων σωρού Αλγόριθµοι σε σωρούς Ο αλγόριθµος heapsort Αφηρηµένος τύπος δεδοµένων ουράς προτεραιότητας Ουρές προτεραιότητας για στοιχεία αριθµοδεικτών ιωνυµικές ουρές 439 ΚΕΦΑΛΑΙΟ ΕΚΑ. Ταξινόµηση βάσης Bit, byte, και λέξεις υαδική ταξινόµηση quicksort Ταξινόµηση βάσης MSD Τριµερής ταξινόµηση quicksort βάσης Ταξινόµηση βάσης LSD Χαρακτηριστικά επιδόσεων των ταξινοµήσεων βάσης Ταξινοµήσεις υπογραµµικού χρόνου 485 ΚΕΦΑΛΑΙΟ ΕΝ ΕΚΑ. Ειδικές µέθοδοι ταξινόµησης Αλγόριθµος mergesort περιττού-άρτιου του Batcher ίκτυα ταξινόµησης Εξωτερική ταξινόµηση Υλοποιήσεις ταξινόµησης-συγχώνευσης Παράλληλη ταξινόµηση-συγχώνευση 522 Βιβλιογραφικές αναφορές για το Μέρος Τρία 527 ΜΕΡΟΣ ΤΕΣΣΕΡΑ Αναζήτηση 529 ΚΕΦΑΛΑΙΟ Ω ΕΚΑ. Πίνακες συµβόλων και δένδρα δυαδικής αναζήτησης Αφηρηµένος τύπος δεδοµένων πίνακα συµβόλων Αναζήτηση µε αριθµοδείκτη κλειδιού Ακολουθιακή αναζήτηση υαδική αναζήτηση ένδρα δυαδικής αναζήτησης Χαρακτηριστικά επιδόσεων των Α Υλοποιήσεις ευρετηρίων µε πίνακες συµβόλων Εισαγωγή στη ρίζα δένδρων δυαδικής αναζήτησης Υλοποιήσεις άλλων συναρτήσεων ΑΤ µε Α 577

5 ΠΕΡΙΕΧΟΜΕΝΑ 21 ΚΕΦΑΛΑΙΟ ΕΚΑΤΡΙΑ. Ισορροπηµένα δένδρα Τυχαιοποιηµένα Α Στρεβλά Α Καθοδικά δένδρα ένδρα κόκκινου-µαύρου Λίστες παράλειψης Χαρακτηριστικά επιδόσεων 631 ΚΕΦΑΛΑΙΟ ΕΚΑΤΕΣΣΕΡΑ. Κατακερµατισµός Συναρτήσεις κατακερµατισµού Χωριστή αλυσίδωση Γραµµική διερεύνηση ιπλός κατακερµατισµός υναµικοί πίνακες κατακερµατισµού Προοπτική 668 ΚΕΦΑΛΑΙΟ ΕΚΑΠΕΝΤΕ. Αναζήτηση βάσης ένδρα ψηφιακής αναζήτησης Trie Patricia trie Πολυµερή trie και trie τριαδικής αναζήτησης Αλγόριθµοι ευρετηρίων αλφαριθµητικών κειµένου 715 ΚΕΦΑΛΑΙΟ ΕΚΑΕΞΙ. Εξωτερική αναζήτηση Οι κανόνες του παιχνιδιού Ακολουθιακή πρόσβαση µε ευρετήριο Β-δένδρα Επεκτάσιµος κατακερµατισµός Προοπτική 753 Βιβλιογραφικές αναφορές για το Μέρος Τέσσερα 756 Eυρετήριο 759

6 Πρόλογος Α ΥΤΟ ΤΟ ΒΙΒΛΙΟ, στην πρωτότυπη αµερικανική του έκδοση, είναι το πρώτο από µια σειρά τριών τόµων που έχουν σκοπό τη µελέτη των σηµαντικότερων αλγορίθµων που χρησιµοποιούνται σήµερα στους υπολογιστές. Ο πρώτος τόµος (Μέρη 1-4) καλύπτει τις θε- µελιώδεις έννοιες (Μέρος 1), τις δοµές δεδοµένων (Μέρος 2), τους αλγορίθµους ταξινόµησης (Μέρος 3), και τους αλγορίθµους αναζήτησης (Μέρος 4). Ο δεύτερος τόµος (Μέρος 5) καλύπτει τους γράφους και τους αλγορίθµους γράφων, ενώ ο τρίτος τόµος (Μέρη 6-8) ο οποίος δεν είχε κυκλοφορήσει ακόµη όταν µεταφραζόταν αυτό το βιβλίο καλύπτει τα αλφαριθµητικά (Μέρος 6), την υπολογιστική γεωµετρία (Μέρος 7), και προηγµένους αλγορίθµους και εφαρµογές (Μέρος 8). Τα συγκεκριµένα βιβλία είναι χρήσιµα ως συγγράµµατα σχετικά νωρίς στο πρόγραµµα µαθηµάτων της επιστήµης των υπολογιστών, αφού αποκτήσουν οι σπουδαστές βασικές προγραµµατιστικές δεξιότητες και οικειότητα µε τα συστήµατα υπολογιστών, αλλά πριν αρχίσουν να παρακολουθούν εξειδικευµένα µαθήµατα σε προηγµένους τοµείς της επιστήµης των υπολογιστών ή των εφαρµογών υπολογιστών. Τα βιβλία είναι επίσης χρήσιµα και ως µέσα αυτοδιδασκαλίας ή ως οδηγοί αναφοράς για τα άτοµα που ασχολούνται µε την ανάπτυξη συστηµάτων υπολογιστών ή προγραµµάτων εφαρµογών, επειδή περιέχουν υλοποιήσεις χρήσι- µων αλγορίθµων και λεπτοµερείς πληροφορίες για τα χαρακτηριστικά επιδόσεων αυτών των αλγορίθµων. Η ευρεία προοπτική που ακολουθείται κάνει αυτή τη σειρά βιβλίων κατάλληλη ως εισαγωγή στο συγκεκριµένο γνωστικό πεδίο. Στο σύνολό τους, οι τρεις τόµοι αποτελούν την Τρίτη Αµερικανική Έκδοση ενός βιβλίου το οποίο χρησιµοποιείται ευρέως από σπουδαστές και προγραµµατιστές σε ολόκληρο τον κόσµο για πολλά χρόνια. Έχω ξαναγράψει από την αρχή το κείµενο αυτής της έκδοσης και έχω προσθέσει χιλιάδες νέες ασκήσεις, εκατοντάδες νέες εικόνες, δεκάδες νέα προγράµµατα, και λεπτοµερή σχόλια σε όλες τις εικόνες και τα προγράµµατα. Στόχος µου µε την προσθήκη αυτού του νέου υλικού ήταν να καλύψω νέα θέµατα αλλά και να εξηγήσω αναλυτικότερα πολλούς από τους κλασικούς αλγορίθµους. Η έµφαση που δίνεται (σε όλα τα βιβλία) στους αφηρηµένους τύπους δεδοµένων, κάνει τα προγράµµατα χρήσιµα σε ένα µεγαλύτερο εύρος εφαρµογών και κατάλληλα για σύγχρονα αντικειµενοστρεφή περιβάλλοντα προγραµµατισµού. Οι αναγνώστες που έχουν διαβάσει τις προηγούµενες εκδόσεις θα βρουν σε αυτή τη νέα έκδοση αρκετές νέες πληροφορίες, και όλοι οι αναγνώστες θα βρουν πλούσιο διδακτικό υλικό που παρέχει αποτελεσµατική πρόσβαση στις βασικές έννοιες. Αυτά τα βιβλία δεν είναι κατάλληλα µόνο για προγραµµατιστές και σπουδαστές της επιστήµης των υπολογιστών. Όλοι όσοι χρησιµοποιούν υπολογιστές θέλουν τα προγράµµατα που χρησιµοποιούν να εκτελούνται ταχύτερα ή να λύνουν µεγαλύτερα προβλήµατα. Οι αλγόριθµοι που παρουσιάζουµε αντιπροσωπεύουν γνώσεις οι οποίες αναπτύχθηκαν τα τελευταία 5

7 6 ΠΡΟΛΟΓΟΣ 50 χρόνια και αποτελούν τη βάση για αποδοτική χρήση του υπολογιστή σε µια ευρεία κλίµακα εφαρµογών. Από τα προβλήµατα προσοµοίωσης του προβλήµατος των Ν σωµάτων στη φυσική µέχρι τα προβλήµατα των γενετικών ακολουθιών στη µοριακή βιολογία, οι βασικές µέθοδοι που περιγράφονται εδώ έχουν γίνει απαραίτητες στην επιστηµονική έρευνα επίσης, από τα συστήµατα βάσεων δεδοµένων µέχρι της µηχανές αναζήτησης στο ιαδίκτυο, έχουν γίνει απαραίτητα τµήµατα των σύγχρονων συστηµάτων λογισµικού. Καθώς το πεδίο των ε- φαρµογών υπολογιστών γίνεται όλο και µεγαλύτερο, ταυτόχρονα αυξάνεται και η επίδραση των βασικών αλγορίθµων. Στόχος του παρόντος βιβλίου είναι να λειτουργήσει ως πηγή αναφοράς, έτσι ώστε οι σπουδαστές και οι επαγγελµατίες να γνωρίσουν αυτούς τους θεµελιώδεις αλγορίθµους προκειµένου να µπορούν να τους χρησιµοποιούν µε έξυπνους τρόπους όποτε παρουσιάζεται ανάγκη, σε οποιαδήποτε εφαρµογή υπολογιστή. Στόχοι του βιβλίου Το βιβλίο Αλγόριθµοι σε C++, Τρίτη αµερικανική έκδοση, Μέρη 1-4, αποτελείται από 16 κεφάλαια τα οποία έχουν οµαδοποιηθεί σε τέσσερα κύρια µέρη: θεµελιώδεις έννοιες, δοµές δεδοµένων, ταξινόµηση, και αναζήτηση. Το βιβλίο έχει στόχο να δώσει στους αναγνώστες τη δυνατότητα να κατανοήσουν τις βασικές ιδιότητες όσο το δυνατό περισσότερων θεµελιωδών αλγορίθµων. Οι αλγόριθµοι που περιγράφονται χρησιµοποιούνται ευρέως για πολλά χρόνια, και αντιπροσωπεύουν ένα βασικό τµήµα γνώσης τόσο για τον ασκούµενο προγραµµατιστή όσο και για το σπουδαστή της επιστήµης των υπολογιστών. Περιγράφονται πολλές έξυπνες µέθοδοι, από τις διωνυµικές ουρές έως τα patricia trie, οι οποίες σχετίζονται µε βασικά παραδείγµατα που βρίσκονται στην καρδιά της επιστήµης των υπολογιστών. Ο δεύτερος τόµος είναι αφιερωµένος σε αλγορίθµους γράφων, και ο τρίτος αποτελείται από τέσσερα µέρη που καλύπτουν τα αλφαριθµητικά, τη γεωµετρία, και προχωρηµένα θέµατα. Ο κύριος στόχος µου στη συγγραφή αυτών των βιβλίων ήταν να συγκεντρώσω τις θεµελιώδεις µεθόδους αυτών των τοµέων της επιστήµης των υπολογιστών, έτσι ώστε να κάνω προσιτές τις καλύτερες γνωστές µεθόδους για την επίλυση προβληµάτων µε υπολογιστή. Θα εκτιµήσετε ακόµη περισσότερο το υλικό του βιβλίου αν έχετε ήδη παρακολουθήσει ένα ή δύο προηγούµενα µαθήµατα της επιστήµης των υπολογιστών ή διαθέτετε αντίστοιχη εµπειρία στον προγραµµατισµό: ένα µάθηµα στον προγραµµατισµό σε γλώσσα υψηλού επιπέδου όπως η C, η C++, ή η Java, και ίσως ένα ακόµη µάθηµα στο οποίο διδάσκονται οι θε- µελιώδεις έννοιες των συστηµάτων προγραµµατισµού. Κατά συνέπεια, το βιβλίο απευθύνεται σε όλους εκείνους που έχουν επαφή µε κάποια σύγχρονη γλώσσα προγραµµατισµού και σε εκείνους που ασχολούνται µε τα βασικά χαρακτηριστικά των σύγχρονων συστηµάτων υπολογιστών. Επίσης, στο κείµενο θα βρείτε παραποµπές σε βιβλιογραφία που ίσως σας βοηθήσει να καλύψετε κάποια κενά στα θέµατα που περιγράφονται. Επειδή το µεγαλύτερο µέρος της ύλης των µαθηµατικών µε το οποίο υποστηρίζονται τα αναλυτικά αποτελέσµατα είναι αυτοτελές (ή επισηµαίνεται ότι ξεφεύγει από τους στόχους του βιβλίου), δεν χρειάζεται πολλή προετοιµασία στα µαθηµατικά για το µεγαλύτερο τµήµα του βιβλίου αν και η µαθηµατική ωριµότητα οπωσδήποτε είναι χρήσιµη.

8 ΠΡΟΛΟΓΟΣ 7 Χρήση του βιβλίου ως διδακτέας ύλης Υπάρχει µεγάλη ευελιξία σε ό,τι αφορά τον τρόπο µε τον οποίο µπορεί να διδαχθεί η ύλη του βιβλίου εξαρτάται από τον καθηγητή και την προετοιµασία των σπουδαστών του. Γίνεται επαρκής κάλυψη της βασικής ύλης, έτσι ώστε να µπορεί το βιβλίο να χρησιµοποιηθεί για τη διδασκαλία αρχαρίων στις δοµές δεδοµένων, ενώ ταυτόχρονα παρέχονται επαρκείς λεπτοµέρειες και κάλυψη του προχωρηµένου υλικού προκειµένου να µπορεί να χρησιµοποιηθεί και στη διδασκαλία της σχεδίασης και ανάλυσης αλγορίθµων σε σπουδαστές πιο προχωρηµένου επιπέδου. Μερικοί καθηγητές µπορεί να προτιµήσουν να δώσουν έµφαση στις υλοποιήσεις και στα πρακτικά θέµατα, ενώ κάποιοι άλλοι µπορεί να επιθυµούν να δώσουν έµφαση στην ανάλυση και τις θεωρητικές έννοιες. Σε ένα εισαγωγικό µάθηµα στις δοµές δεδοµένων και τους αλγορίθµους, θα µπορούσε να δοθεί έµφαση στις βασικές δοµές δεδοµένων του Μέρους 2 και τη χρήση τους στις υλοποιήσεις των Μερών 3 και 4. Σε ένα µάθηµα σχεδίασης και ανάλυσης αλγορίθµων θα µπορούσε να δοθεί έµφαση στο θεµελιώδες υλικό του Μέρους 1 και στο Κεφάλαιο 5, και στη συνέχεια να µελετηθούν οι τρόποι µε τους οποίους οι αλγόριθµοι των Μερών 3 και 4 επιτυγχάνουν καλές ασυµπτωτικές επιδόσεις. Σε ένα µάθηµα τεχνολογίας λογισµικού, θα µπορούσε να παραλειφθεί η ύλη των µαθηµατικών καθώς και η προχωρηµένη ύλη των αλγορίθµων, και να δοθεί έµφαση στους τρόπους ολοκλήρωσης των υλοποιήσεων που περιλαµβάνονται στο βιβλίο σε µεγάλα προγράµµατα ή συστήµατα. Τέλος, σε ένα µάθηµα µε θέµα τους αλγορίθ- µους, θα µπορούσε να ακολουθηθεί µια γενική προσέγγιση και να εισαχθούν έννοιες από ό- λους τους παραπάνω τοµείς. Οι προηγούµενες εκδόσεις του βιβλίου, οι οποίες βασίζονται σε άλλες γλώσσες προγραµµατισµού, έχουν χρησιµοποιηθεί σε πάρα πολλά κολέγια και πανεπιστήµια ως διδακτέα ύλη για το δεύτερο ή τρίτο µάθηµα στην επιστήµη των υπολογιστών, και ως βοηθητικό εγχειρίδιο για άλλα µαθήµατα. Στο Princeton, έχουµε διαπιστώσει ότι η ύλη που καλύπτει το βιβλίο παρέχει στους σπουδαστές µας µια εισαγωγή στην επιστήµη των υπολογιστών η οποία µπορεί να επεκταθεί σε µεταγενέστερα µαθήµατα που αφορούν την ανάλυση αλγορίθµων, τον προγραµµατισµό συστηµάτων, και τη θεωρητική επιστήµη των υπολογιστών από την άλλη µεριά, παρέχει στην αυξανόµενη οµάδα των σπουδαστών από άλλους επιστηµονικούς κλάδους ένα ευρύ σύνολο τεχνικών τις οποίες µπορούν να χρησιµοποιήσουν αµέσως. Οι ασκήσεις από τις οποίες σχεδόν όλες είναι καινούργιες σε αυτή την τρίτη έκδοση ανήκουν σε διάφορους τύπους. Μερικές έχουν στόχο να ελέγξουν αν έγινε κατανοητή η ύλη του βιβλίου, και απλώς ζητούν από τους αναγνώστες να εργαστούν σε κάποιο παράδειγ- µα ή να εφαρµόσουν βασικές έννοιες που περιγράφονται στο βιβλίο. Άλλες περιλαµβάνουν την υλοποίηση και τη συναρµολόγηση των αλγορίθµων, ή την εκτέλεση πειραµατικών µελετών µε στόχο τη σύγκριση διαφόρων παραλλαγών των αλγορίθµων και την καλύτερη κατανόηση των ιδιοτήτων τους. Κάποιες άλλες, πάλι, είναι ένας θησαυρός σηµαντικών πληροφοριών, σε επίπεδο λεπτοµέρειας το οποίο δεν είναι κατάλληλο για το βιβλίο. Η µελέτη και η διερεύνηση των ασκήσεων θα βοηθήσουν σε µεγάλο βαθµό τον αναγνώστη να κατανοήσει τα θέµατα που περιγράφονται στο βιβλίο.

9 8 ΠΡΟΛΟΓΟΣ Αλγόριθµοι πρακτικής χρήσης Οποιοσδήποτε θέλει να χρησιµοποιήσει τον υπολογιστή του αποτελεσµατικότερα µπορεί να χρησιµοποιήσει αυτό το βιβλίο ως οδηγό αναφοράς ή για αυτοδιδασκαλία. Όσοι έχουν πείρα στον προγραµµατισµό µπορούν να βρουν στα κεφάλαια του βιβλίου πληροφορίες που αφορούν συγκεκριµένα θέµατα. Ως ένα µεγάλο βαθµό, µπορείτε να διαβάσετε κάθε κεφάλαιο του βιβλίου ανεξάρτητα από τα υπόλοιπα, παρά το γεγονός ότι, σε µερικές περιπτώσεις, ορισµένοι αλγόριθµοι ενός κεφαλαίου χρησιµοποιούν µεθόδους από κάποιο προηγούµενο κεφάλαιο. Το βιβλίο είναι προσανατολισµένο στη µελέτη των αλγορίθµων που είναι πιθανό να έ- χουν πρακτική χρήση. Παρέχονται πληροφορίες σχετικά µε τα εργαλεία του εµπορίου, έτσι ώστε οι αναγνώστες να µπορούν µε βεβαιότητα να υλοποιήσουν, να αποσφαλµατώσουν, και να χρησιµοποιήσουν στην πράξη αλγορίθµους για την επίλυση ενός προβλήµατος ή την προσθήκη επιπλέον λειτουργιών σε κάποια εφαρµογή. Περιλαµβάνονται πλήρεις υλοποιήσεις των µεθόδων που εξετάζονται, όπως επίσης και περιγραφές των λειτουργιών αυτών των προγραµµάτων σε ένα συνεπές σύνολο παραδειγµάτων. Επειδή εργαζόµαστε µε πραγµατικό κώδικα αντί να γράφουµε ψευδοκώδικα, µπορείτε να χρησιµοποιήσετε αυτά τα προγράµµατα στην πράξη πολύ γρήγορα. Τα προγράµµατα είναι διαθέσιµα και στην ηλεκτρονική σελίδα του βιβλίου στο ιαδίκτυο. Μπορείτε να χρησιµοποιήσετε αυτά τα προγράµµατα µε πολλούς τρόπους προκειµένου να σας βοηθήσουν στη µελέτη των αλγορίθµων. ιαβάστε τα για να ελέγξετε πόσο έχετε κατανοήσει τις λεπτοµέρειες ενός αλγορίθµου, ή για να δείτε κάποιον τρόπο χειρισµού ανάθεσης αρχικών τιµών, οριακών συνθηκών, και άλλων περίεργων καταστάσεων που αποτελούν συχνά προγραµµατιστικές προκλήσεις. Εκτελέστε τα για να δείτε τους αλγορίθµους σε δράση, να µελετήσετε πειραµατικά τις επιδόσεις τους, και να ελέγξετε τα αποτελέσµατά σας σε σχέση µε τους πίνακες που περιέχονται στο βιβλίο, ή να δοκιµάσετε τις δικές σας τροποποιήσεις. Μια από τις πρακτικές εφαρµογές των αλγορίθµων είναι και η χρήση τους για την παραγωγή των εκατοντάδων εικόνων που περιλαµβάνονται σε αυτό το βιβλίο. Πολλοί αλγόριθµοι αποκαλύπτονται σε διαισθητικό επίπεδο µέσω της οπτικοποιηµένης τους διάστασης η οποία παρέχεται από αυτές τις εικόνες. Στο βιβλίο εξετάζονται λεπτοµερώς τα χαρακτηριστικά των αλγορίθµων και των περιπτώσεων στις οποίες µπορεί να είναι χρήσιµοι, ενώ παράλληλα γίνονται συνδέσεις µε την ανάλυση αλγορίθµων και τη θεωρητική επιστήµη των υπολογιστών. Όποτε κρίνεται απαραίτητο, παρουσιάζονται πειραµατικά και αναλυτικά αποτελέσµατα προκειµένου να διασαφηνιστεί ο λόγος για τον οποίο προτιµούνται κάποιοι συγκεκριµένοι αλγόριθµοι. Όποτε παρουσιάζει ενδιαφέρον, περιγράφεται και η σχέση των πρακτικών αλγορίθµων που εξετάζονται µε αµιγώς θεωρητικά αποτελέσµατα. Επίσης, οι ειδικές πληροφορίες σχετικά µε τα χαρακτηριστικά επιδόσεων των αλγορίθµων και των υλοποιήσεων συγκεντρώνονται, ενσωµατώνονται στο κείµενο, και αναλύονται σε ολόκληρο το βιβλίο.

10 ΠΡΟΛΟΓΟΣ 9 Γλώσσα προγραµµατισµού Η γλώσσα προγραµµατισµού που χρησιµοποιείται για όλες τις υλοποιήσεις των αλγορίθµων είναι η C++. Στα προγράµµατα χρησιµοποιείται µια ευρεία κλίµακα καθιερωµένων ιδιωµατισµών της C++, και στο βιβλίο περιλαµβάνονται περιεκτικές περιγραφές κάθε κατασκευής. Ο Chris Van Wyk και εγώ αναπτύξαµε ένα στυλ προγραµµατισµού σε C++ το οποίο βασίζεται σε κλάσεις, πρότυπα, και υπερφορτωµένους τελεστές νοµίζουµε ότι είναι ένας αποτελεσµατικός τρόπος για να παρουσιάζουµε τους αλγορίθµους και τις δοµές δεδοµένων ως πραγµατικά προγράµµατα. Κάναµε αρκετή προσπάθεια για να δώσουµε κοµψές, συµπαγείς, αποδοτικές, και φορητές υλοποιήσεις. Το στυλ προγραµµατισµού παρουσιάζει συνέπεια όποτε αυτό είναι δυνατό, έτσι ώστε τα προγράµµατα που είναι παρόµοια να φαίνονται και παρό- µοια. Στην περίπτωση πολλών από τους αλγορίθµους του βιβλίου, οι οµοιότητες ισχύουν ανεξάρτητα από τη γλώσσα: ο αλγόριθµος ταξινόµησης quicksort είναι πάντοτε ο αλγόριθµος ταξινόµησης quicksort (για να επιλέξουµε ένα εξέχον παράδειγµα), ανεξάρτητα από το αν εκφράζεται σε Ada, Algol-60, Basic, C, C++, Fortran, Java, Mesa, Modula-3, Pascal, Post- Script, Smalltalk, ή σε οποιαδήποτε από τις αµέτρητες άλλες γλώσσες προγραµµατισµού και περιβάλλοντα όπου έχει αποδειχθεί ότι είναι µια αποτελεσµατική µέθοδος ταξινόµησης. Από τη µια πλευρά, ο κώδικάς µας παίρνει πληροφορίες από τις εµπειρίες υλοποίησης αλγορίθµων σε αυτές και σε πολλές άλλες γλώσσες προγραµµατισµού (υπάρχουν εκδόσεις του βιβλίου και για τις γλώσσες C και Java) από την άλλη, ορισµένες από τις ιδιότητες µερικών από αυτές τις γλώσσες εµπλουτίζονται από την εµπειρία των σχεδιαστών τους σε µερικούς από τους αλγορίθµους και τις δοµές δεδοµένων που εξετάζουµε σε αυτό το βιβλίο. Το Κεφάλαιο 1 αποτελεί λεπτοµερές παράδειγµα αυτής της προσέγγισης στην ανάπτυξη αποδοτικών υλοποιήσεων των αλγορίθµων µας σε C++, ενώ στο Κεφάλαιο 2 περιγράφεται η προσέγγιση που ακολουθούµε για την ανάλυσή τους. Τα Κεφάλαια 3 και 4 είναι αφιερωµένα στην περιγραφή και την αιτιολόγηση των βασικών µηχανισµών που χρησιµοποιούµε στις υλοποιήσεις τύπων δεδοµένων και αφηρηµένων τύπων δεδοµένων (ΑΤ ). Αυτά τα τέσσερα κεφάλαια αποτελούν τα θεµέλια για τα επόµενα κεφάλαια του βιβλίου.

11 10 ΠΡΟΛΟΓΟΣ Ευχαριστίες Η ανταπόκριση πολλών ανθρώπων από τις παλιότερες εκδόσεις αυτού του βιβλίου ήταν ιδιαίτερα χρήσιµη. Πιο συγκεκριµένα, εκατοντάδες φοιτητές των πανεπιστηµίων Princeton και Brown υπέστησαν τις προκαταρκτικές εκδόσεις για αρκετά χρόνια. Θα ήθελα να εκφράσω ιδιαίτερες ευχαριστίες στην Trina Avery και τον Tom Freeman για τη βοήθειά τους στη δη- µιουργία της πρώτης έκδοσης στην Janet Incerpi για τη δηµιουργικότητα και την εξυπνάδα της που της επέτρεψαν να πειθαναγκάσει το πρωτόγονο υλικό και λογισµικό συγγραφής κει- µένου που χρησιµοποιούσαµε προκειµένου να δηµιουργήσουν την πρώτη έκδοση στον Marc Brown για τη συµµετοχή του στην έρευνα οπτικοποίησης των αλγορίθµων, η οποία οδήγησε στη δηµιουργία πολλών από τις εικόνες του βιβλίου και στους Dave Hanson και Andrew Appel για την προθυµία που έδειξαν να απαντήσουν σε όλες τις ερωτήσεις µου σχετικά µε τις γλώσσες προγραµµατισµού. Θα ήθελα επίσης να ευχαριστήσω όλους τους αναγνώστες που έκαναν σχόλια σχετικά µε τις διάφορες εκδόσεις του βιβλίου, µεταξύ των οποίων είναι και οι Guy Almes, Jon Bentley, Marc Brown, Jay Gischer, Allan Heydon, Kennedy Lemke, Udi Manber, Dana Richards, John Reif, M. Rosenfeld, Stephen Seidman, Michael Quinn, και William Ward. Για να δηµιουργήσω αυτή τη νέα έκδοση είχα την ευχαρίστηση να συνεργαστώ µε τους Peter Gordon, Debbie Lafferty, και Helen Goldstein της Addison-Wesley, οι οποίοι και καθοδήγησαν µε υποµονή αυτό το έργο καθώς εξελισσόταν. Επίσης, είχα την ευχαρίστηση να συνεργαστώ µε πολλά άλλα µέλη του εξειδικευµένου προσωπικού της Addison-Wesley. Η φύση του έργου έκανε το βιβλίο µια, κατά κάποιον τρόπο, ασυνήθιστη πρόκληση για πολλούς από αυτούς, και εκτιµώ ιδιαίτερα την υποµονή τους. Κέρδισα και τρεις νέους µέντορες κατά τη συγγραφή αυτού του βιβλίου, και θα ήθελα να εκφράσω ιδιαίτερα την εκτίµησή µου σε αυτούς. Ο πρώτος ήταν ο Steve Summit, ο οποίος έλεγξε προσεκτικά τις πρώτες εκδόσεις του βιβλίου σε τεχνικό επίπεδο και έκανε κυριολεκτικά χιλιάδες λεπτοµερή σχόλια, ιδιαίτερα για τα προγράµµατα. Ο Steve κατάλαβε ξεκάθαρα το στόχο µου να δώσω κοµψές, αποδοτικές, και αποτελεσµατικές υλοποιήσεις, και τα σχόλιά του, όχι µόνο µε βοήθησαν να προσφέρω ένα µέτρο συνέπειας κατά τις υλοποιήσεις, αλλά και να βελτιώσω σηµαντικά πολλές από αυτές. Ο δεύτερος ήταν η Lyn Dupré που έκανε και αυτή χιλιάδες λεπτοµερή σχόλια, τα οποία ήταν ανεκτίµητης αξίας και µε βοήθησαν, όχι µόνο να διορθώσω και να αποφύγω γραµµατικά λάθη, αλλά επίσης που είναι ακόµη σηµαντικότερο να βρω ένα περιεκτικό και συνεπές στυλ συγγραφής το οποίο µε βοήθησε να συναρµολογήσω το µεγάλο όγκο του τεχνικού υλικού. Ο τρίτος ήταν ο Chris Van Wyk που υλοποίησε και αποσφαλµάτωσε όλους τους αλγορίθµους µου στη C++, απάντησε σε αναρίθµητες ερωτήσεις µου σχετικά µε τη C++, βοήθησε στην ανάπτυξη ενός κατάλληλου στυλ προγραµµατισµού σε C++, και διάβασε µε µεγάλη προσοχή το κείµενο και, µάλιστα, δύο φορές. Ο Chris έδειξε επίσης µεγάλη υποµονή όσο "διαµέλιζα" πολλά από τα προγράµµατά του της C++ στα "εξ ων συνετέθησαν" αργότερα, καθώς µάθαινα όλο και περισσότερα πράγµατα από αυτόν για τη C++, έπρεπε να τα "συναρµολογήσω" και πάλι, µε τον ίδιο σχεδόν τρόπο µε τον οποίο τα είχε γράψει εκείνος. Είµαι εξαιρετικά ευγνώµων για την ευκαιρία που µου δόθηκε να µάθω πολλά πράγµατα από τους Steve, Lyn, και Chris η προσφορά τους ήταν ζωτικής σηµασίας για την ανάπτυξη αυτού του βιβλίου.

12 ΠΡΟΛΟΓΟΣ 11 Πολλά από αυτά που γράφονται στο βιβλίο τα έµαθα από τη διδασκαλία και τα γραπτά του Don Knuth, που ήταν ο επιβλέπων καθηγητής µου στο Πανεπιστήµιο Stanford. Παρά το γεγονός ότι ο Don δεν είχε άµεση επίδραση σε αυτή τη δουλειά, η παρουσία του γίνεται αισθητή σε αυτό το βιβλίο επειδή ήταν εκείνος που έθεσε τη µελέτη των αλγορίθµων στην επιστηµονική βάση η οποία καθιστά δυνατή µια δουλειά σαν αυτή. Ο φίλος και συνάδελφός µου Philippe Flajolet, ο οποίος αποτέλεσε βασικό παράγοντα για την ανάπτυξη της ανάλυσης αλγορίθµων ως ενός ώριµου τοµέα ερευνών, είχε και αυτός παρόµοια επίδραση σε αυτό το έργο. Θα ήθελα να εκφράσω τις βαθιές µου ευχαριστίες για την υποστήριξη που είχα από το Πανεπιστήµιο Princeton, το Πανεπιστήµιο Brown, και το Εθνικό Ινστιτούτο Έρευνας στην Πληροφορική και τον Αυτοµατισµό (Institut National de Recherche en Informatique et Automatique, INRIA), όπου έκανα το µεγαλύτερο µέρος της έρευνας για το βιβλίο το ίδιο ισχύει και για το Ινστιτούτο Αναλύσεων Άµυνας (Institute for Defense Analyses) καθώς και για το Ερευνητικό Κέντρο της Xerox στο Palo Alto (Xerox Palo Alto Research Center), όπου έκανα ένα µέρος της δουλειάς όσο ήµουν επισκέπτης. Πολλά µέρη του βιβλίου βασίζονται σε έρευνες που υποστηρίχθηκαν γενναιόδωρα από το Εθνικό Ίδρυµα Ερευνών (National Science Foundation) και το Γραφείο Ναυτικών Ερευνών (Office of Naval Research). Τέλος, ευχαριστώ τους Bill Bowen, Aaron Lemonick, και Neil Rudenstine για την υποστήριξή τους στη δηµιουργία ακαδηµαϊκού περιβάλλοντος στο Princeton, στο οποίο είχα τη δυνατότητα να ε- τοιµάσω αυτό το βιβλίο παρά τις πολλές άλλες υποχρεώσεις µου. Robert Sedgewick Marly-le-Roi, Γαλλία, 1983 Princeton, New Jersey, 1990, 1992 Jamestown, Rhode Island, 1997 Princeton, New Jersey, 1998

13 12 ΠΡΟΛΟΓΟΣ Πρόλογος συµβούλου σε θέµατα C++ Οι αλγόριθµοι ήταν η αιτία που µε οδήγησε να ασχοληθώ µε την επιστήµη των υπολογιστών. Για να µελετήσει κανείς τους αλγορίθµους είναι απαραίτητο να µπορεί να σκέφτεται µε πολλούς τρόπους: δηµιουργικά, για να ανακαλύψει µια ιδέα µε την οποία θα λύσει ένα πρόβληµα λογικά, ώστε να µπορεί να αναλύσει την ορθότητά της µαθηµατικά, για να αναλύσει την αποτελεσµατικότητά της και επιµελώς, προκειµένου να εκφράσει την ιδέα µε τη µορφή µιας διαδοχικής σειράς λεπτοµερών βηµάτων έτσι ώστε να µπορεί να µετατραπεί σε λογισµικό. Επειδή, λοιπόν, η µεγαλύτερη ικανοποίηση που αντλώ από τη µελέτη των αλγορίθµων προέρχεται από την αντίληψή τους ως ολοκληρωµένων προγραµµάτων για υπολογιστή τα οποία να λειτουργούν και να δίνουν αποτελέσµατα, άδραξα πραγµατικά την ευκαιρία να συνεργαστώ µε τον Bob Sedgewick σε ένα βιβλίο για τους αλγορίθµους το οποίο βασίζεται σε προγράµµατα C++. Σε συνεργασία µε τον Bob, γράψαµε τα παραδείγµατα προγραµµάτων αυτού του βιβλίου χρησιµοποιώντας τις κατάλληλες κάθε φορά δυνατότητες της C++ µε τρόπο σαφή και ξεκάθαρο. Χρησιµοποιήσαµε κλάσεις για να διαχωρίσουµε τις προδιαγραφές ενός αφηρηµένου τύπου δεδοµένων από τις λεπτοµέρειες της υλοποίησής του χρησιµοποιήσαµε πρότυπα και υπερφορτωµένους τελεστές έτσι ώστε τα προγράµµατά µας να µπορούν να χρησιµοποιηθούν χωρίς καµία αλλαγή για πολλούς και διάφορους τύπους δεδοµένων. Από την άλλη µεριά, πάντως, αφήσαµε να χαθεί η ευκαιρία να επιδείξουµε πολλές άλλες τεχνικές της C++. Για παράδειγµα, τις περισσότερες φορές παραλείψαµε τουλάχιστον µερικές από τις κατασκευάστριες συναρτήσεις που ήταν απαραίτητες προκειµένου να µετατραπεί µια κλάση σε "πρώτη κλάση" (αλλά στο Κεφάλαιο 4 µπορείτε να µάθετε πώς να το κάνετε αυτό) στις περισσότερες κατασκευάστριες συναρτήσεις χρησιµοποιήσαµε απλή ανάθεση τιµών αντί για ανάθεση αρχικών τιµών για την αποθήκευση τιµών σε δεδοµένα-µέλη χρησιµοποιήσαµε αλφαριθµητικά χαρακτήρων του στυλ της C αντί να βασιστούµε στα αλφαριθµητικά της βιβλιοθήκης της C++ δεν χρησιµοποιήσαµε τις πιο "ελαφριές" κλάσεις συσκευασίας που θα µπορούσαµε και χρησιµοποιήσαµε απλούς, αντί για "έξυπνους", δείκτες. Κάναµε ενσυνείδητα τις περισσότερες από αυτές τις επιλογές προκειµένου να διατηρήσουµε στο επίκεντρο της µελέτης σας τους αλγορίθµους, και να µη σας αποσπάσουµε την προσοχή µε λεπτοµέρειες τεχνικών οι οποίες χρησιµοποιούνται αποκλειστικά στη C++. Από τη στιγµή, όµως, που θα έχετε κατανοήσει τον τρόπο λειτουργίας των προγραµµάτων αυτού του βιβλίου, θα είστε κατάλληλα καταρτισµένοι για να µάθετε οποιαδήποτε από αυτές τις τεχνικές της C++, έτσι ώστε να εκτιµήσετε τα πλεονεκτήµατα που προσφέρουν σε ό,τι αφορά τις επιδόσεις και να θαυµάσετε την εφευρετικότητα των σχεδιαστών της καθιερωµένης βιβλιοθήκης προτύπων (Standard Template Library) της C++. Είτε ασχολείστε µε τη µελέτη των αλγορίθµων για πρώτη φορά είτε έχετε στόχο να "φρεσκάρετε" γνώσεις που είχατε αποκτήσει στο παρελθόν, σας εύχοµαι να το απολαύσετε τουλάχιστον τόσο όσο απήλαυσα εγώ τη συνεργασία µου µε τον Bob Sedgewick κατά τη συγγραφή των προγραµµάτων. Ευχαριστώ τους Jon Bentley, Brian Kernighan, και Tom Szymanski οι οποίοι µου δίδαξαν πολλά από αυτά που γνωρίζω για τον προγραµµατισµό, την Debbie Lafferty η οποία µου πρότεινε να ασχοληθώ µε αυτό το έργο, καθώς και τα εργαστήρια της Bell, το Πανεπιστήµιο Drew, και το Πανεπιστήµιο Princeton για την υποστήριξη που µου παρείχαν. Christopher Van Wyk Chatham, New Jersey, 1998

14 274 ΚΕΦΑΛΑΙΟ ΠΕΝΤΕ 5.7 Αναδροµικοί αλγόριθµοι δυαδικού δένδρου Οι αλγόριθµοι διάσχισης δένδρου που εξετάσαµε στην Ενότητα 5.6 αποτελούν χαρακτηριστικό δείγµα του βασικού λόγου που µας οδηγεί να µελετήσουµε τους αναδροµικούς αλγορίθ- µους για δυαδικά δένδρα, λόγω της φύσης των δυαδικών δένδρων ως αναδροµικών δοµών. Σε πολλές εργασίες υιοθετούνται άµεσοι αναδροµικοί αλγόριθµοι "διαίρει και βασίλευε", οι ο- ποίοι στην ουσία γενικεύουν τους αλγορίθµους διάσχισης. Επεξεργαζόµαστε ένα δένδρο επεξεργαζόµενοι τον κόµβο της ρίζας και (αναδροµικώς) τα υποδένδρα της ρίζας, και έχουµε τη δυνατότητα να εκτελέσουµε τους υπολογισµούς πριν τις αναδροµικές κλήσεις, µεταξύ των αναδροµικών κλήσεων, ή µετά από αυτές (ή πιθανόν και µε τους τρεις τρόπους). Συχνά χρειάζεται να βρούµε τις τιµές διαφόρων δοµικών παραµέτρων ενός δένδρου, µε δεδοµένο µόνο ένα σύνδεσµο προς το δένδρο. Για παράδειγµα, το Πρόγραµµα 5.17 αποτελείται από αναδροµικές συναρτήσεις υπολογισµού του πλήθους των κόµβων τους οποίους περιέχει κάποιο δένδρο, καθώς και του ύψους του δένδρου. Οι συναρτήσεις προκύπτουν άµεσα από τον Ορισµό 5.6. Καµία από αυτές τις συναρτήσεις δεν εξαρτάται από τη σειρά µε την οποία γίνεται η επεξεργασία των αναδροµικών κλήσεων για παράδειγµα, αν εναλλάξουµε τις αναδροµικές κλήσεις, οι συναρτήσεις θα επεξεργαστούν όλους τους κόµβους του δένδρου και θα επιστρέψουν την ίδια απάντηση. Πάντως, δεν υπολογίζονται τόσο εύκολα και οι τρεις παράµετροι για παράδειγµα, ένα πρόγραµµα για τον αποδοτικό υπολογισµό του µήκους της εσωτερικής διαδροµής ενός δυαδικού δένδρου αποτελεί σαφώς µεγαλύτερη πρόκληση (δείτε τις Ασκήσεις 5.88 έως 5.90). Μια άλλη συνάρτηση, η οποία είναι χρήσιµη όποτε γράφουµε προγράµµατα επεξεργασίας δένδρων, είναι εκείνη που τυπώνει ή σχεδιάζει τα δένδρα. Για παράδειγµα, το Πρόγραµµα 5.18 είναι µια αναδροµική διαδικασία που εµφανίζει στην οθόνη (ή τυπώνει) ένα δένδρο µε τη µορφή που φαίνεται στην Εικόνα Μπορούµε να χρησιµοποιήσουµε την ίδια βασική αναδροµική µέθοδο για να σχεδιάσουµε και πιο σύνθετες αναπαραστάσεις δένδρων, σαν αυτές που χρησιµοποιούνται στις εικόνες του βιβλίου (δείτε την Άσκηση 5.85). Πρόγραµµα 5.17 Υπολογισµός παραµέτρων δένδρου Μπορούµε να χρησιµοποιήσουµε απλές αναδροµικές διαδικασίες, όπως αυτές που φαίνεται εδώ, για να µάθουµε τις βασικές δοµικές ιδιότητες ενός δένδρου. int count(link h) { if (h == 0) return 0; return count(h->l) + count(h->r) + 1; } int height(link h) { if (h == 0) return -1; int u = height(h->l), v = height(h->r); if (u > v) return u+1; else return v+1; }

15 ΑΝΑ ΡΟΜΗ ΚΑΙ ΕΝ ΡΑ 275 H * E G D * B A * * F * * C E * * * D * * H B C F * * G * * A * * * Εικόνα 5.29 Εκτύπωση ενός δένδρου (ενδοδιατεταγµένη και προδιατεταγµένη διάσχιση) Η έξοδος στα αριστερά είναι αποτέλεσµα της χρήσης του Προγράµµατος 5.18 µε το παράδειγµα δένδρου της Εικόνας 5.26 και παρουσιάζει τη δοµή του δένδρου µε τρόπο παρόµοιο µε τη γραφική αναπαράσταση που έχουµε χρησιµοποιήσει µέχρι τώρα, αλλά περιστρεµµένη κατά 90 µοίρες. Η έξοδος στα δεξιά είναι από το ίδιο πρόγραµµα, αλλά η εντολή εκτύπωσης έχει µετακινηθεί στην αρχή παρουσιάζει τη δοµή του δένδρου σε µια οικεία µορφή διάρθρωσης. Πρόγραµµα 5.18 Γρήγορη συνάρτηση εκτύπωσης δένδρου Αυτό το αναδροµικό πρόγραµµα παρακολουθεί το ύψος του δένδρου και χρησιµοποιεί αυτή την πληροφορία για τη ρύθµιση των περιθωρίων κατά την εκτύπωση µιας αναπαράστασης του δένδρου, την οποία µπορούµε να χρησιµοποιήσουµε για την αποσφαλµάτωση προγραµµάτων επεξεργασίας δένδρων (δείτε την Εικόνα 5.29). Στο πρόγραµµα θεωρούµε ότι τα στοιχεία των κόµβων είναι τύπου Item, για τον οποίο και έχει οριστεί µέσω υπερφόρτωσης ο τελεστής operator<<. void printnode(item x, int h) { for (int i = 0; i < h; i++) cout << " "; cout << x << endl; } void show(link t, int h) { if (t == 0) { printnode('*', h); return; } show(t->r, h+1); printnode(t->item, h); show(t->l, h+1); } Στο Πρόγραµµα 5.18 γίνεται ενδοδιατεταγµένη διάσχιση του δένδρου αν τυπώσουµε το στοιχείο πριν από τις αναδροµικές κλήσεις, θα πάρουµε µια προδιατεταγµένη διάσχιση η οποία παρουσιάζεται επίσης στην Εικόνα Αυτή η µορφή µάς είναι οικεία και µπορούµε να τη χρησιµοποιήσουµε, για παράδειγµα, σε κάποιο οικογενειακό δένδρο, ή για την παρουσίαση αρχείων σε ένα σύστηµα αρχείων που βασίζεται σε δένδρα, ή για τη διάρθρωση ενός εγγράφου. Για παράδειγµα, µε µια προδιατεταγµένη διάσχιση του δένδρου της Εικόνας 5.19 µπορούµε να πάρουµε µια έκδοση του πίνακα περιεχοµένων αυτού του βιβλίου.

16 276 ΚΕΦΑΛΑΙΟ ΠΕΝΤΕ Το πρώτο µας παράδειγµα προγράµµατος που κατασκευάζει µια ρητή δοµή δυαδικού δένδρου σχετίζεται µε την εφαρµογή εύρεσης του µέγιστου στοιχείου την οποία εξετάσαµε στην Ενότητα 5.2. Στόχος µας είναι να δηµιουργήσουµε ένα τουρνουά: ένα δυαδικό δένδρο στο οποίο το στοιχείο κάθε εσωτερικού κόµβου είναι αντίγραφο του µεγαλύτερου από τα στοιχεία των δύο παιδιών αυτού του κόµβου. Πιο συγκεκριµένα, το στοιχείο στη ρίζα είναι αντίγραφο του µεγαλύτερου στοιχείου του τουρνουά. Τα στοιχεία στα φύλλα (κόµβοι χωρίς παιδιά) είναι τα δεδοµένα που µας ενδιαφέρουν, ενώ το υπόλοιπο δένδρο είναι µια δοµή δεδοµένων που µας επιτρέπει να βρίσκουµε αποδοτικά το µεγαλύτερο από τα στοιχεία. Το Πρόγραµµα 5.19 είναι ένα αναδροµικό πρόγραµµα που δηµιουργεί ένα τουρνουά από τα στοιχεία του πίνακα. Επειδή αποτελεί επέκταση του Προγράµµατος 5.6, χρησιµοποιεί και αυτό µια στρατηγική "διαίρει και βασίλευε". Για τη δηµιουργία ενός τουρνουά µε ένα και µοναδικό στοιχείο, δηµιουργούµε (και επιστρέφουµε) ένα φύλλο που περιέχει αυτό το στοιχείο. Για τη δηµιουργία ενός τουρνουά µε Ν > 1 στοιχεία, χρησιµοποιούµε τη στρατηγική "διαίρει και βασίλευε" διχοτοµούµε τα στοιχεία, δηµιουργούµε ένα τουρνουά για καθένα από τα µισά, και µετά δηµιουργούµε ένα νέο κόµβο µε συνδέσµους προς τα δύο τουρνουά και µε ένα στοιχείο που είναι αντίγραφο του µεγαλύτερου από τα στοιχεία που βρίσκονται στις ρίζες των δύο τουρνουά. Πρόγραµµα 5.19 ηµιουργία τουρνουά Αυτή η αναδροµική συνάρτηση διαιρεί έναν πίνακα a[l],, a[r] σε δύο µέρη a[l],, a[m] και a[m+1],, a[r], δηµιουργεί από ένα τουρνουά για τα δύο µέρη (αναδροµικώς), και κατασκευάζει και ένα τουρνουά για ολόκληρο τον πίνακα ορίζοντας σε ένα νέο κόµβο συνδέσµους προς τα αναδροµικώς κατασκευασµένα τουρνουά και αναθέτοντάς του τη µεγαλύτερη από τις τιµές που περιέχονται στις ρίζες των δύο αναδροµικώς κατασκευασµένων τουρνουά. struct node { Item item; node *l, *r; node(item x) { item = x; l = 0; r = 0; } }; typedef node* link; link max(item a[], int l, int r) { int m = (l+r)/2; link x = new node(a[m]); if (l == r) return x; x->l = max(a, l, m); x->r = max(a, m+1, r); Item u = x->l->item, v = x->r->item; if (u > v) x->item = u; else x->item = v; return x; }

17 ΑΝΑ ΡΟΜΗ ΚΑΙ ΕΝ ΡΑ 277 Η Εικόνα 5.30 αποτελεί παράδειγµα µιας ρητής δοµής δένδρου που έχει κατασκευαστεί από το Πρόγραµµα Η δηµιουργία µιας αναδροµικής δοµής δεδοµένων όπως αυτή είναι ενδεχοµένως προτιµότερη για την εύρεση του µέγιστου στοιχείου µε σάρωση των δεδοµένων, όπως στο Πρόγραµµα 5.6, επειδή η δοµή δένδρου µάς παρέχει την ευελιξία να εκτελούµε άλλες πράξεις. Η βασική πράξη που χρησιµοποιούµε για να δηµιουργήσουµε το τουρνουά είναι ένα σηµαντικό παράδειγµα αν έχουµε δύο τουρνουά, µπορούµε να τα συνδυάσουµε σε ένα και µοναδικό τουρνουά σε σταθερό χρόνο, δηµιουργώντας ένα νέο κόµβο, κάνοντας τον αριστερό σύνδεσµο του κόµβου να δείχνει στο ένα από τα τουρνουά και το δεξιό σύνδεσµο να δείχνει στο άλλο τουρνουά, και παίρνοντας το µεγαλύτερο από τα δύο στοιχεία (στις ρίζες των δύο τουρνουά) ως το µεγαλύτερο στοιχείο του συνδυασµένου τουρνουά. Επίσης, µπορούµε να εξετάσουµε τη δυνατότητα χρήσης αλγορίθµων προσθήκης στοιχείων, αφαίρεσης στοιχείων, και εφαρµογής άλλων λειτουργιών. εν πρόκειται να ασχοληθούµε εδώ µε τέτοιες πράξεις, επειδή θα εξετάσουµε παρόµοιες δοµές δεδοµένων µε αυτή την ευελιξία στο Κεφάλαιο 9. Στην πραγµατικότητα, οι υλοποιήσεις πολλών από τους γενικευµένους αφηρηµένους τύπους δεδοµένων (ΑΤ ) ουρών που βασίζονται σε δένδρα, τις οποίες εξετάσαµε στην Ενότητα 4.6, αποτελούν κυρίαρχο θέµα σε ένα µεγάλο µέρος του βιβλίου. Πιο συγκεκριµένα, πολλοί από τους αλγορίθµους των Κεφαλαίων 12 έως 15 βασίζονται σε δένδρα δυαδικής αναζήτησης (binary search trees), τα οποία είναι ρητές δοµές δένδρων που αντιστοιχούν στη δυαδική αναζήτηση, έχοντας σχέση ανάλογη µε τη σχέση ανάµεσα στη ρητή δοµή της Εικόνας 5.30 και τον αναδροµικό αλγόριθµο εύρεσης του µέγιστου (δείτε την Εικόνα 5.6). Η δυσκολία στην υλοποίηση και τη χρήση τέτοιων δοµών είναι να διασφαλίσουµε ότι οι αλγόριθµοί µας θα παραµένουν αποδοτικοί ακόµη και µετά την εκτέλεση µιας µακράς ακολουθίας λειτουργιών εισαγωγής, αφαίρεσης, και άλλων. Το δεύτερο παράδειγµα προγράµµατος που κατασκευάζει ένα δυαδικό δένδρο είναι µια τροποποίηση του προγράµµατος υπολογισµού προθεµατικών παραστάσεων που είδαµε στην Ενότητα 5.1 (Πρόγραµµα 5.4) για την κατασκευή ενός δένδρου αναπαράστασης µιας προθε- µατικής παράστασης αντί απλώς του υπολογισµού της (δείτε την Εικόνα 5.31). Το Πρόγραµ- µα 5.20 χρησιµοποιεί την ίδια αναδροµική διαδικασία µε το Πρόγραµµα 5.4, αλλά η αναδρο- µική συνάρτηση επιστρέφει ένα σύνδεσµο προς ένα δένδρο, αντί για κάποια τιµή. Για κάθε Εικόνα 5.30 Ρητό δένδρο για την εύρεση του µέγιστου (τουρνουά) Σε αυτή την εικόνα παρουσιάζεται η ρητή δοµή δένδρου που κατασκευάζεται από το Πρόγραµµα 5.19 για τα δεδοµένα εισόδου A M P L E. Τα στοιχεία δεδοµένων βρίσκονται στα φύλλα. Κάθε εσωτερικός κόµβος περιέχει ένα αντίγραφο του µεγαλύτερου από τα στοιχεία των δύο παιδιών του, οπότε, επαγωγικά, το µεγαλύτερο στοιχείο βρίσκεται στη ρίζα.

18 278 ΚΕΦΑΛΑΙΟ ΠΕΝΤΕ Εικόνα 5.31 ένδρο συντακτικής ανάλυσης Το δένδρο αυτό δηµιουργήθηκε από το Πρόγραµµα 5.20 για την προθεµατική παράσταση * + a * * b c + d e f. Αποτελεί φυσικό τρόπο αναπαράστασης της παράστασης: κάθε όρος βρίσκεται σε ένα φύλλο (το οποίο σχεδιάζουµε εδώ ως εξωτερικό κόµβο) και κάθε τελεστής πρόκειται να εφαρµοστεί στις παραστάσεις που αναπαρίστανται από το δεξιό και το αριστερό υποδένδρο του κόµβου που τον περιέχει. χαρακτήρα της παράστασης δηµιουργούµε ένα νέο κόµβο δένδρου οι κόµβοι που αντιστοιχούν σε τελεστές έχουν συνδέσµους προς τους όρους τους, ενώ οι κόµβοι-φύλλα περιέχουν τις µεταβλητές (ή σταθερές) που αποτελούν τα δεδοµένα εισόδου της παράστασης. Τα προγράµµατα µετάφρασης, όπως οι µεταγλωττιστές, χρησιµοποιούν συχνά τέτοιου είδους εσωτερικές αναπαραστάσεις δοµών δένδρου, επειδή τα δένδρα είναι χρήσιµα σε πολλές περιπτώσεις. Για παράδειγµα, µπορούµε να φανταστούµε ότι οι τελεστέοι αντιστοιχούν σε µεταβλητές που παίρνουν τιµές, και να δηµιουργήσουµε κώδικα µηχανής για τον υπολογισµό της παράστασης που αντιπροσωπεύεται από το δένδρο, µε µεταδιατεταγµένη διάσχιση. Εναλλακτικά, θα µπορούσαµε να χρησιµοποιήσουµε το δένδρο για να εµφανίσουµε την παράσταση σε ενθεµατική µορφή µε ενδοδιατεταγµένη διάσχιση ή σε επιθεµατική µορφή µε µεταδιατεταγµένη διάσχιση. Πρόγραµµα 5.20 Κατασκευή δένδρου συντακτικής ανάλυσης Αυτό το πρόγραµµα, στο οποίο χρησιµοποιείται η ίδια στρατηγική που χρησιµοποιήσαµε και για τον υπολογισµό προθεµατικών παραστάσεων (δείτε το Πρόγραµµα 5.4), δηµιουργεί ένα δένδρο συντακτικής ανάλυσης από µια προθεµατική παράσταση. Για λόγους απλούστευσης, υποθέτουµε ότι οι όροι είναι µεµονωµένοι χαρακτήρες. Κάθε κλήση της αναδροµικής συνάρτησης δηµιουργεί ένα νέο κόµβο του οποίου το γλωσσικό σηµείο είναι ο επόµενος χαρακτήρας της εισόδου. Αν το γλωσσικό σηµείο είναι όρος, επιστρέφουµε το νέο κόµβο αν είναι τελεστής, ορίζουµε τον αριστερό και το δεξιό δείκτη έτσι ώστε να δείχνουν στο δένδρο που κατασκευάζεται (αναδροµικώς) για τα δύο ορίσµατα. char *a; int i; struct node { Item item; node *l, *r; node(item x) { item = x; l = 0; r = 0; } }; typedef node* link; link parse() { char t = a[i++]; link x = new node(t); if ((t == '+') (t == '*')) { x->l = parse(); x->r = parse(); } return x; }

19 ΑΝΑ ΡΟΜΗ ΚΑΙ ΕΝ ΡΑ 279 Εξετάσαµε τα λίγα παραδείγµατα αυτής της ενότητας προκειµένου να εισαγάγουµε την έννοια ότι µπορούµε να δηµιουργήσουµε και να επεξεργαστούµε ρητές συνδεδεµένες δοµές δένδρων µε αναδροµικά προγράµµατα. Για να το κάνουµε αυτό αποτελεσµατικά, πρέπει να εξετάσουµε την απόδοση πολλών αλγορίθµων, εναλλακτικών αναπαραστάσεων, εναλλακτικών µη αναδροµικών µεθόδων, και πολλές άλλες λεπτοµέρειες. Παρόλα αυτά, θα αναβάλου- µε την αναλυτικότερη εξέταση των προγραµµάτων επεξεργασίας δένδρων µέχρι το Κεφάλαιο 12, επειδή στα Κεφάλαια 7 έως 11 χρησιµοποιούµε τα δένδρα κυρίως για περιγραφικούς σκοπούς. Θα επανέλθουµε σε ρητές υλοποιήσεις δένδρων στο Κεφάλαιο 12, επειδή αποτελούν τη βάση πολλών αλγορίθµων τους οποίους θα γνωρίσουµε στα Κεφάλαια 12 έως 15. Ασκήσεις 5.85 Τροποποιήστε το Πρόγραµµα 5.18 έτσι ώστε να εξάγει ένα πρόγραµµα PostScript που να σχεδιάζει το δένδρο, µε µορφή παρόµοια µε αυτή που χρησιµοποιήθηκε στην Εικόνα 5.23, αλλά χωρίς τα µικρά πλαίσια που αναπαριστούν τους εξωτερικούς κόµβους. Για να σχεδιάσετε τις γραµ- µές χρησιµοποιήστε τις συναρτήσεις moveto και lineto, και για να σχεδιάσετε τους κόµβους χρησιµοποιήστε τον οριζόµενο από το χρήστη τελεστή /node { newpath moveto currentpoint arc fill} def Μετά από αυτόν τον ορισµό, η κλήση στη node θα σχεδιάζει µια µαύρη κουκκίδα στις συντεταγµένες που περιέχονται στη στοίβα (δείτε την Ενότητα 4.3) 5.86 Γράψτε ένα πρόγραµµα που να µετρά τα φύλλα ενός δυαδικού δένδρου Γράψτε ένα πρόγραµµα που να µετρά το πλήθος των κόµβων ενός δυαδικού δένδρου οι ο- ποίοι έχουν ένα εξωτερικό και ένα εσωτερικό παιδί Γράψτε ένα αναδροµικό πρόγραµµα που να υπολογίζει το µήκος της εσωτερικής διαδροµής ενός δυαδικού δένδρου, χρησιµοποιώντας τον Ορισµό Προσδιορίστε το πλήθος των κλήσεων συνάρτησης που γίνονται από το πρόγραµµά σας όταν υπολογίζει το µήκος της εσωτερικής διαδροµής ενός δυαδικού δένδρου. Αποδείξτε την απάντησή σας µε επαγωγή Γράψτε ένα αναδροµικό πρόγραµµα που να υπολογίζει το µήκος της εσωτερικής διαδροµής ενός δυαδικού δένδρου, σε χρόνο ανάλογο του πλήθους των κόµβων του δένδρου Γράψτε ένα αναδροµικό πρόγραµµα που να αφαιρεί από ένα τουρνουά όλα τα φύλλα µε δεδοµένο κλειδί (δείτε την Άσκηση 5.59). 5.8 ιάσχιση γράφου Ως τελευταίο παράδειγµα αναδροµικού προγράµµατος σε αυτό το κεφάλαιο, θα εξετάσουµε ένα από τα σηµαντικότερα αναδροµικά προγράµµατα: την αναδροµική διάσχιση γράφου ή αναζήτηση µε προτεραιότητα βάθους (depth-first search). Αυτή η µέθοδος, η οποία έχει στόχο τη συστηµατική επίσκεψη σε όλους τους κόµβους ενός γράφου, αποτελεί άµεση γενίκευση των µεθόδων διάσχισης δένδρου που εξετάσαµε στην Ενότητα 5.6 και προσφέρεται ως βάση για πολλούς βασικούς αλγορίθµους επεξεργασίας γράφων (δείτε το Μέρος 7). Είναι ένας α- πλός αναδροµικός αλγόριθµος. Ξεκινώντας από οποιονδήποτε κόµβο v,

20 280 ΚΕΦΑΛΑΙΟ ΠΕΝΤΕ Επισκεπτόµαστε τον v. Επισκεπτόµαστε (αναδροµικώς) κάθε κόµβο (που δεν έχουµε επισκεφθεί) ο οποίος συνδέεται µε τον v. Αν ο γράφος είναι συνδεδεµένος, τελικά επισκεπτόµαστε όλους τους κόµβους. Το Πρόγραµ- µα 5.21 αποτελεί υλοποίηση αυτής της αναδροµικής διαδικασίας. Για παράδειγµα, ας υποθέσουµε ότι χρησιµοποιούµε την αναπαράσταση λίστας γειτνίασης (adjacency list) που είδαµε στο παράδειγµα γράφου της Εικόνας Στην Εικόνα 5.32 φαίνονται οι αναδροµικές κλήσεις που γίνονται κατά την αναζήτηση µε προτεραιότητα βάθους σε αυτόν το γράφο, ενώ η ακολουθία στα αριστερά της Εικόνας 5.33 δείχνει τον τρόπο µε τον οποίο ακολουθούµε τις ακµές του γράφου. Ακολουθούµε κάθε ακµή του γράφου µε µία από δύο πιθανές εκβάσεις: αν η ακµή µάς οδηγήσει σε κάποιον κόµβο τον οποίο έχουµε επισκεφθεί ήδη, την αγνοούµε αν µας οδηγήσει σε κάποιον κόµβο τον οποίο δεν έχουµε επισκεφθεί ακόµη, την ακολουθούµε µέχρι αυτόν τον κόµβο µέσω µιας αναδροµικής κλήσης. Το σύνολο όλων των ακµών που ακολουθούµε µε αυτόν τον τρόπο σχηµατίζει ένα επικαλύπτον δένδρο (spanning tree) του γράφου. Η διαφορά µεταξύ της αναζήτησης µε προτεραιότητα βάθους και της γενικής διάσχισης δένδρου (δείτε το Πρόγραµµα 5.14) είναι ότι πρέπει να προσέχουµε ιδιαίτερα ώστε να µην επισκεπτόµαστε κόµβους τους οποίους έχουµε επισκεφθεί ήδη. Σε ένα δένδρο, δεν συναντάµε ποτέ τέτοιους κόµβους. Στην πραγµατικότητα, αν ο γράφος είναι δένδρο, η αναζήτηση µε προτεραιότητα βάθους µε αρχή τη ρίζα ισοδυναµεί µε την προδιατεταγµένη διάσχιση. Ιδιότητα 5.10 Η αναζήτηση µε προτεραιότητα βάθους απαιτεί χρόνο ανάλογο του V + E σε ένα γράφο µε V κορυφές και Ε ακµές, όταν χρησιµοποιείται αναπαράσταση µε λίστες γειτνίασης. Στην αναπαράσταση µε λίστες γειτνίασης, υπάρχει ένας κόµβος λίστας που αντιστοιχεί σε κάθε ακµή του γράφου και ένας δείκτης κεφαλής της λίστας που αντιστοιχεί σε κάθε κορυφή του γράφου. Η αναζήτηση µε προτεραιότητα βάθους περνά από όλα αυτά τα στοιχεία το πολύ µία φορά. Πρόγραµµα 5.21 Αναζήτηση µε προτεραιότητα βάθους Για να επισκεφθούµε όλους τους κόµβους που συνδέονται µε τον κόµβο k ενός γράφου, σηµειώνου- µε αυτόν τον κόµβο ως κόµβο που έχουµε επισκεφθεί και έπειτα επισκεπτόµαστε (αναδροµικώς) ό- λους τους κόµβους που δεν έχουµε επισκεφθεί και περιλαµβάνονται στη λίστα γειτνίασης του k. void traverse(int k, void visit(int)) { visit(k); visited[k] = 1; for (link t = adj[k]; t!= 0; t = t->next) if (!visited[t->v]) traverse(t->v, visit); }

21 ΑΝΑ ΡΟΜΗ ΚΑΙ ΕΝ ΡΑ 281 επίσκεψη στον 0 επίσκεψη στον 7 (πρώτος στη λίστα του 0) επίσκεψη στον 1 (πρώτος στη λίστα του 7) έλεγχος του 7 στη λίστα του 1 έλεγχος του 0 στη λίστα του 1 επίσκεψη στον 2 (δεύτερος στη λίστα του 7) έλεγχος του 7 στη λίστα του 2 έλεγχος του 0 στη λίστα του 2 έλεγχος του 0 στη λίστα του 7 επίσκεψη στον 4 (τέταρτος στη λίστα του 7) επίσκεψη στον 6 (πρώτος στη λίστα του 4) έλεγχος του 4 στη λίστα του 6 έλεγχος του 0 στη λίστα του 6 επίσκεψη στον 5 (δεύτερος στη λίστα του 4) έλεγχος του 0 στη λίστα του 5 έλεγχος του 4 στη λίστα του 5 επίσκεψη στον 3 (τρίτος στη λίστα του 5) έλεγχος του 5 στη λίστα του 3 έλεγχος του 4 στη λίστα του 3 έλεγχος του 7 στη λίστα του 4 έλεγχος του 3 στη λίστα του 4 έλεγχος του 5 στη λίστα του 0 έλεγχος του 2 στη λίστα του 0 έλεγχος του 1 στη λίστα του 0 έλεγχος του 6 στη λίστα του 0 Εικόνα 5.32 Κλήσεις µεθόδου αναζήτησης µε προτεραιότητα βάθους Αυτή η ακολουθία κλήσεων µεθόδου αποτελεί την αναζήτηση µε προτεραιότητα βάθους για το παράδειγµα του γράφου της Εικόνας Το δένδρο που απεικονίζει την αναδροµική δοµή (επάνω) ονοµάζεται δένδρο αναζήτησης µε προτεραιότητα βάθους. Επειδή απαιτείται επίσης χρόνος ανάλογος του V + Ε για να δηµιουργήσουµε την αναπαράσταση µε λίστες γειτνίασης από κάποια ακολουθία εισόδου ακµών (δείτε το Πρόγραµµα 3.19), η αναζήτηση µε προτεραιότητα βάθους µάς δίνει µια λύση γραµµικού χρόνου για το πρόβληµα συνδετικότητας του Κεφαλαίου 1. Όταν, όµως, έχουµε να κάνουµε µε γράφους τεραστίων διαστάσεων, οι λύσεις ένωσης-εύρεσης ενδέχεται να παραµένουν προτιµότερες, επειδή η αναπαράσταση ολόκληρου του γράφου απαιτεί χώρο ανάλογο του Ε, ενώ οι λύσεις ένωσης-εύρεσης απαιτούν χώρο ανάλογο του V. Όπως και µε τη διάσχιση ενός δένδρου, µπορούµε να ορίσουµε µια µέθοδο διάσχισης γράφου που να χρησιµοποιεί κάποια ρητή δοµή στοίβας, όπως φαίνεται στην Εικόνα Μπορούµε να φανταστούµε µια αφηρηµένη στοίβα που να διατηρεί διπλές καταχωρίσεις: έναν κόµβο και ένα δείκτη προς τη λίστα γειτνίασης αυτού του κόµβου. Αφού ανατεθούν ως αρχικές τιµές στη στοίβα ο κόµβος εκκίνησης και σε ένα δείκτη ο πρώτος κόµβος της λίστας γειτνίασης αυτού του κόµβου, ο αλγόριθµος αναζήτησης µε προτεραιότητα βάθους ισοδυνα- µεί µε την είσοδο σε ένα βρόχο, κατά τη διάρκεια του οποίου επισκεπτόµαστε τον κόµβο που βρίσκεται στην κορυφή της στοίβας (αν δεν τον έχουµε επισκεφθεί ήδη), αποθηκεύουµε τον κόµβο στον οποίο αναφέρεται ο τρέχων δείκτης προς τη λίστα γειτνίασης, ενηµερώνουµε την

22 282 ΚΕΦΑΛΑΙΟ ΠΕΝΤΕ Εικόνα 5.33 Αναζήτηση µε προτεραιότητα βάθους και αναζήτηση µε προτεραιότητα εύρους Κατά την αναζήτηση µε προτεραιότητα βάθους (αριστερά) µετακινούµαστε από κόµβο σε κόµβο, επιστρέφοντας στον προηγούµενο κόµβο για να δοκιµάσουµε την επόµενη δυνατότητα όταν έχουµε δοκιµάσει όλες τις δυνατότητες σε κάποιο δεδοµένο κόµβο. Κατά την αναζήτηση µε προτεραιότητα εύρους (δεξιά) εξαντλούµε όλες τις δυνατότητες σε κάποιο κόµβο πριν µετακινηθούµε στον επόµενο.

23 ΑΝΑ ΡΟΜΗ ΚΑΙ ΕΝ ΡΑ 283 αναφορά της λίστας γειτνίασης προς τον επόµενο κόµβο (απωθώντας από τη στοίβα την καταχώριση αν βρισκόµαστε στο τέλος της λίστας γειτνίασης), και ωθούµε στη στοίβα µια καταχώριση για τον κόµβο που αποθηκεύσαµε, µε µια αναφορά στον πρώτο κόµβο της λίστας γειτνίασης αυτού του κόµβου. Εναλλακτικά, όπως και στη διάσχιση δένδρου, µπορούµε να θεωρήσουµε ότι η στοίβα περιέχει µόνο συνδέσµους προς κόµβους. Η στοίβα δέχεται ως αρχική τιµή τον κόµβο εκκίνησης και κατόπιν µπαίνουµε σε ένα βρόχο, κατά τη διάρκεια του οποίου επισκεπτόµαστε τον κόµβο που βρίσκεται στην κορυφή της στοίβας (αν δεν τον έχουµε επισκεφθεί ήδη) και τοποθετούµε στη στοίβα όλους τους κόµβους που είναι γειτονικοί µε αυτόν τον κόµβο. Στην Εικόνα 5.34 φαίνεται ότι και οι δύο αυτές µέθοδοι είναι ισοδύναµες µε την αναζήτηση µε προτεραιότητα βάθους για το παράδειγµα γράφου που χρησιµοποιήσαµε, και ότι αυτή η ισοδυναµία ισχύει πράγµατι γενικά. Ο αλγόριθµος επίσκεψης στον κόµβο της κορυφής και τοποθέτησης στη στοίβα όλων των γειτονικών του κόµβων είναι µια απλή µορφή της αναζήτησης µε προτεραιότητα βάθους, αλλά από την Εικόνα 5.34 γίνεται σαφές ότι υποφέρει από το µειονέκτηµα ότι είναι πιθανό να αφήνει στη στοίβα πολλά αντίγραφα κάθε κόµβου. Αυτό µπορεί να συµβεί ακόµη και αν ε- λέγξουµε µήπως έχουµε επισκεφθεί ήδη κάθε κόµβο που είµαστε έτοιµοι να τοποθετήσουµε Εικόνα 5.34 υναµική στοίβας αναζήτησης µε προτεραιότητα βάθους Μπορούµε να φανταστούµε τη στοίβα ώθησης προς τα κάτω που υποστηρίζει την αναζήτηση προτεραιότητας βάθους σαν µια δοµή που περιέχει έναν κόµβο και µια αναφορά προς τη λίστα γειτνίασης αυτού του κόµβου (η οποία σηµειώνεται µε έναν κόµβο σε κύκλο) (αριστερά). Συνεπώς, ξεκινάµε µε τον κόµβο 0 της στοίβας, µε αναφορά στον πρώτο κόµβο της λίστας του, τον κόµβο 7. Σε κάθε γραµµή εµφανίζεται το αποτέλεσµα της απώθησης ενός στοιχείου από τη στοίβα, της ώθησης της αναφοράς στον επόµενο κόµβο της λίστας για τους κόµβους που έχουµε επισκεφθεί ήδη, και την ώθηση µιας καταχώρισης στη στοίβα για τους κόµβους που δεν έχουµε επισκεφθεί ακόµη. Εναλλακτικά, µπορούµε να φανταστούµε τη διαδικασία σαν να ωθούµε απλώς στη στοίβα όλους τους κόµβους που είναι γειτονικοί µε κάθε κόµβο που δεν έχουµε επισκεφθεί (δεξιά).

1.1 Αλγόριθµοι Ένα ενδεικτικό πρόβληµα: συνδετικότητα Αλγόριθµοι ένωσης-εύρεσης Προοπτική Σύνοψη θεµάτων 47

1.1 Αλγόριθµοι Ένα ενδεικτικό πρόβληµα: συνδετικότητα Αλγόριθµοι ένωσης-εύρεσης Προοπτική Σύνοψη θεµάτων 47 Περιεχόµενα ΜΕΡΟΣ ΕΝΑ Θεµελιώδεις έννοιες 23 ΚΕΦΑΛΑΙΟ ΕΝΑ. Εισαγωγή 25 1.1 Αλγόριθµοι 26 1.2 Ένα ενδεικτικό πρόβληµα: συνδετικότητα 28 1.3 Αλγόριθµοι ένωσης-εύρεσης 33 1.4 Προοπτική 45 1.5 Σύνοψη θεµάτων

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

1.1 Αλγόριθμοι Ένα ενδεικτικό πρόβλημα: συνδετικότητα Αλγόριθμοι ένωσης-εύρεσης Προοπτική Σύνοψη θεμάτων 46

1.1 Αλγόριθμοι Ένα ενδεικτικό πρόβλημα: συνδετικότητα Αλγόριθμοι ένωσης-εύρεσης Προοπτική Σύνοψη θεμάτων 46 Περιεχόμενα ΜΕΡΟΣ ΕΝΑ Θεμελιώδεις έννοιες 21 ΚΕΦΑΛΑΙΟ ΕΝΑ. Εισαγωγή 23 1.1 Αλγόριθμοι 24 1.2 Ένα ενδεικτικό πρόβλημα: συνδετικότητα 26 1.3 Αλγόριθμοι ένωσης-εύρεσης 31 1.4 Προοπτική 44 1.5 Σύνοψη θεμάτων

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

Περιεχόμενα. ΜΕΡΟΣ ΕΝΑ Θεμελιώδεις έννοιες 23

Περιεχόμενα. ΜΕΡΟΣ ΕΝΑ Θεμελιώδεις έννοιες 23 Περιεχόμενα ΜΕΡΟΣ ΕΝΑ Θεμελιώδεις έννοιες 23 ΚΕΦΑΛΑΙΟ ΕΝΑ. Εισαγωγή 25 1.1 Αλγόριθμοι 26 1.2 Ένα ενδεικτικό πρόβλημα: συνδετικότητα 28 1.3 Αλγόριθμοι ένωσης-εύρεσης 33 1.4 Προοπτική 45 1.5 Σύνοψη θεμάτων

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

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Εξεταστική Ιανουαρίου 2014 Διδάσκων : Ευάγγελος Μαρκάκης 20.01.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες και

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

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης Δοµές Δεδοµένων 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης Περίληψη Quicksort Χαρακτηριστικά επιδόσεων Μη αναδροµική υλοποίηση Δέντρα Μαθηµατικές ιδιότητες Δοµές Δεδοµένων 11-2

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

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Πτυχιακή Εξεταστική Ιούλιος 2014 Διδάσκων : Ευάγγελος Μαρκάκης 09.07.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 (5.1-5.2 και 5.4-5.6) Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Δέντρα Βασικοί ορισµοί Μαθηµατικές ιδιότητες Διάσχιση δέντρων Preorder, postorder,

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

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

Περιεχόμενα. Περιεχόμενα Περιεχόμενα xv Περιεχόμενα 1 Αρχές της Java... 1 1.1 Προκαταρκτικά: Κλάσεις, Τύποι και Αντικείμενα... 2 1.1.1 Βασικοί Τύποι... 5 1.1.2 Αντικείμενα... 7 1.1.3 Τύποι Enum... 14 1.2 Μέθοδοι... 15 1.3 Εκφράσεις...

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

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

Αλγόριθμοι Ταξινόμησης Μέρος 2 Αλγόριθμοι Ταξινόμησης Μέρος 2 Μανόλης Κουμπαράκης 1 Προχωρημένοι Αλγόριθμοι Ταξινόμησης Στη συνέχεια θα παρουσιάσουμε τρείς προχωρημένους αλγόριθμους ταξινόμησης: treesort, quicksort και mergesort. 2

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

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

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης Δοµές Δεδοµένων 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων Ε. Μαρκάκης Περίληψη Χρήση αναδροµικών εξισώσεων στην ανάλυση αλγορίθµων Αφηρηµένοι τύποι δεδοµένων Συλλογές στοιχείων Στοίβα

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

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Άσκηση αυτοαξιολόγησης 3-4 Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητες 3 & 4: ένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης 1. Στόχος του εργαστηρίου Στόχος του δέκατου εργαστηρίου

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών Ακαδηµαϊκό έτος 2010 2011, Χειµερινό εξάµηνο Παρασκευή - 17/12/10 (08:30-11:30)

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

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

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

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

Δοµές Δεδοµένων. ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Φθινοπωρινό Εξάµηνο Ευάγγελος Μαρκάκης

Δοµές Δεδοµένων. ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Φθινοπωρινό Εξάµηνο Ευάγγελος Μαρκάκης Δοµές Δεδοµένων ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Φθινοπωρινό Εξάµηνο 2009-2010 Ευάγγελος Μαρκάκης Τι είναι οι Δοµές Δεδοµένων? Δοµές Δεδοµένων 01-2 Τι είναι οι Δοµές Δεδοµένων? Webopedia:

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

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

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

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

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

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης Δοµές Δεδοµένων 18η Διάλεξη Ισορροπηµένα δέντρα Ε. Μαρκάκης Περίληψη Επανάληψη των Τυχαιοποιηµένων ΔΔΑ, Στρεβλών ΔΔΑ, Δέντρων 2-3-4 Δέντρα κόκκινου-µαύρου Λίστες Παράλειψης Χαρακτηριστικά επιδόσεων - συµπεράσµατα

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

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

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

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

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα). Κ08 Δομές Δεδομένων και Τεχνικές Προγραμματισμού Διδάσκων: Μανόλης Κουμπαράκης Εαρινό Εξάμηνο 2016-2017. Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ταξινόµηση Quicksort Κεφάλαιο 7 Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Quicksort Ο βασικός αλγόριθµος Χαρακτηριστικά επιδόσεων Μικροί υποπίνακες Μη αναδροµική υλοποίηση Δοµές Δεδοµένων

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

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

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

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

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research ΑΛΓΟΡΙΘΜΟΙ ΜΕ C ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής CMOR Lab Computational Methodologies and Operations Research Δέντρα (5) Τ ένα δέντρο i ένας κόμβος στο επίπεδο k j ένας κόμβος στο επίπεδο k+1 } :

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

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος Εισαγωγή στους Αλγόριθµους Αλγόριθµοι Τι είναι αλγόριθµος; Τι µπορεί να υπολογίσει ένας αλγόριθµος; Πως αξιολογείται ένας αλγόριθµος; Παύλος Εφραιµίδης pefraimi@ee.duth.gr Αλγόριθµοι Εισαγωγικές Έννοιες

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

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

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

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

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

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

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

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

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

Αναδρομικοί Αλγόριθμοι

Αναδρομικοί Αλγόριθμοι Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας ένα ή περισσότερα στιγμιότυπα του ίδιου προβλήματος. Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας

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

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

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

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε μία αναδρομική συνάρτηση που θα παίρνει ως παράμετρο ένα δείκτη στη ρίζα ενός δυαδικού δένδρου και θα επιστρέφει το βαθμό του

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

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

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

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

1.1 Αλγόριθμοι Ένα ενδεικτικό πρόβλημα: συνδετικότητα Αλγόριθμοι ένωσης-εύρεσης Προοπτική Σύνοψη θεμάτων 46

1.1 Αλγόριθμοι Ένα ενδεικτικό πρόβλημα: συνδετικότητα Αλγόριθμοι ένωσης-εύρεσης Προοπτική Σύνοψη θεμάτων 46 Περιεχόμενα ΜΕΡΟΣ ΕΝΑ Θεμελιώδεις έννοιες 21 ΚΕΦΑΛΑΙΟ ΕΝΑ. Εισαγωγή 23 1.1 Αλγόριθμοι 24 1.2 Ένα ενδεικτικό πρόβλημα: συνδετικότητα 26 1.3 Αλγόριθμοι ένωσης-εύρεσης 31 1.4 Προοπτική 44 1.5 Σύνοψη θεμάτων

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 3: Ασυμπτωτικός συμβολισμός Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 6. Δυαδικά Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 18/11/2016 Εισαγωγή Τα

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Α. ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΦΥΛΛΑΔΙΟ 6 ο ( Ενότητες 2.3 ) 1.Τι είναι πρόγραμμα; 2. Ποια είναι τα πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις γλώσσες

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

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

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

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

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών : Δένδρα Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών : Ανάλυση αλγορίθμων (π.χ. δένδρα αναδρομής) Δομές δεδομένων (π.χ. δένδρα αναζήτησης) ακμή Κατηγορίες (αύξουσα

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

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

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

Α. Ερωτήσεις Ανάπτυξης

Α. Ερωτήσεις Ανάπτυξης οµηµένος Προγραµµατισµός-Κεφάλαιο 7 Σελίδα 1 α ό 10 ΕΝΟΤΗΤΑ ΙΙΙ (ΠΡΟΓΡΑΜΜΑΤΑ) ΚΕΦΑΛΑΙΟ 7: Είδη, Τεχνικές και Περιβάλλοντα Προγραµµατισµού Α. Ερωτήσεις Ανάπτυξης 1. Τι ονοµάζουµε γλώσσα προγραµµατισµού;

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

Περιεχόμενα. Πρόλογος... 21

Περιεχόμενα. Πρόλογος... 21 Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31

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

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

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

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

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

Αλγόριθμοι Ταξινόμησης Μέρος 1 Αλγόριθμοι Ταξινόμησης Μέρος 1 Μανόλης Κουμπαράκης 1 Το Πρόβλημα της Ταξινόμησης Το πρόβλημα της ταξινόμησης (sorting) μιας ακολουθίας στοιχείων με κλειδιά ενός γνωστού τύπου (π.χ., τους ακέραιους ή τις

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ Τεχνικές κατασκευής δένδρων επιθεµάτων πολύ µεγάλου µεγέθους και χρήσης

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

3 Αναδροµή και Επαγωγή

3 Αναδροµή και Επαγωγή 3 Αναδροµή και Επαγωγή Η ιδέα της µαθηµατικής επαγωγής µπορεί να επεκταθεί και σε άλλες δοµές εκτός από το σύνολο των ϕυσικών N. Η ορθότητα της µαθηµατικής επαγωγής ϐασίζεται όπως ϑα δούµε λίγο αργότερα

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

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

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

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

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

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

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

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου (νέο βιβλίο Πληροφορικής Γυµνασίου Αράπογλου, Μαβόγλου, Οικονοµάκου, Φύτρου) Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις 1. Τι είναι ο Αλγόριθµος;

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ ΕΠΛ 035 - ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΓΙΑ ΗΛΕΚΤΡΟΛΟΓΟΥΣ ΜΗΧΑΝΙΚΟΥΣ ΚΑΙ ΜΗΧΑΝΙΚΟΥΣ ΥΠΟΛΟΓΙΣΤΩΝ Ακαδηµαϊκό έτος 2017-2018 Υπεύθυνος εργαστηρίου: Γεώργιος

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

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

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης Δοµές Δεδοµένων 10η Διάλεξη Ταξινόµηση E. Μαρκάκης Περίληψη Ταξινόµηση µε αριθµοδείκτη κλειδιού Ταξινόµηση µε συγχώνευση Αλγόριθµος Mergesort Διµερής συγχώνευση Αφηρηµένη επιτόπου συγχώνευση Αναλυτική

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

xvi Προσέγγιση δομεσ δεδομενων και αλγοριθμοι

xvi Προσέγγιση δομεσ δεδομενων και αλγοριθμοι Πρόλογος Το εφαλτήριο για τη συγγραφή αυτού του βιβλίου ήταν η πολύχρονη εμπειρία μου στη διδασκαλία του μαθήματος «Αλγόριθμοι και Δομές Δεδομένων» (κωδ. ECE 250) το οποίο εντάσσεται στο πρόγραμμα σπουδών

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

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

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

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

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

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας ΚΕΦΑΛΑΙΟ 8: Αφηρηµένοι τύποι δεδοµένων 8.1 οµές δεδοµένων (data structures) 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας Αδόµητα δεδοµένα οδός Ζέας

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

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

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

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

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

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

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

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

Κεφάλαιο 10 Ψηφιακά Λεξικά Κεφάλαιο 10 Ψηφιακά Λεξικά Περιεχόμενα 10.1 Εισαγωγή... 213 10.2 Ψηφιακά Δένδρα... 214 10.3 Υλοποίηση σε Java... 222 10.4 Συμπιεσμένα και τριαδικά ψηφιακά δένδρα... 223 Ασκήσεις... 225 Βιβλιογραφία...

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

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0 ΤΙ ΕΙΝΑΙ ΤΟ ADVANCED Οι Advanced θεματικές ενότητες είναι κατάλληλες για άτομα που επιθυμούν να συνεχίσουν σπουδές στο χώρο

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

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

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

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

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

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης Δοµές Δεδοµένων 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης Ε. Μαρκάκης Περίληψη Δέντρα Δυαδικής Αναζήτησης Υλοποιήσεις εισαγωγής και αναζήτησης Χαρακτηριστικά επιδόσεων ΔΔΑ Εισαγωγή στη ρίζα ΔΔΑ Υλοποιήσεις

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

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

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης Δοµές Δεδοµένων 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι Ε. Μαρκάκης Περίληψη Bubble Sort Selection Sort Insertion Sort Χαρακτηριστικά επιδόσεων Shellsort Ταξινόµηση συνδεδεµένων λιστών Δοµές Δεδοµένων

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

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

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

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

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Γιάννης Κουτσονίκος Επίκουρος Καθηγητής Οργάνωση Δεδομένων Δομή Δεδομένων: τεχνική οργάνωσης των δεδομένων με σκοπό την

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΣΤΟ ΕΝΙΑΙΟ ΛΥΚΕΙΟ ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΠΛΗΡΟΦΟΡΙΚΗ ΣΤΟ ΕΝΙΑΙΟ ΛΥΚΕΙΟ ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ Μάθηµα Κατεύθυνσης Πληροφορική Επιστήµη Η.Υ. Γ Ενιαίου Λυκείου ΟΚΤΩΒΡΙΟΣ 2005 1 Αναλυτικό Πρόγραµµα Μάθηµα Κατεύθυνσης:

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

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

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Σχετικές έννοιες 8.3 Υλοποίηση δοµών δεδοµένων 8.4 Μια σύντοµη µελέτη περίπτωσης 8.5 Προσαρµοσµένοι τύποι δεδοµένων 1 Βασικές δοµές

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

Δομές Δεδομένων. Λουκάς Γεωργιάδης. http://www.cs.uoi.gr/~loukas/courses/data_structures/ email: loukas@cs.uoi.gr

Δομές Δεδομένων. Λουκάς Γεωργιάδης. http://www.cs.uoi.gr/~loukas/courses/data_structures/ email: loukas@cs.uoi.gr Δομές Δεδομένων http://www.cs.uoi.gr/~loukas/courses/data_structures/ Λουκάς Γεωργιάδης email: loukas@cs.uoi.gr Αλγόριθμος: Μέθοδος για την επίλυση ενός προβλήματος Δεδομένα: Σύνολο από πληροφορίες που

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

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

Υπολογιστικό Πρόβληµα Υπολογιστικό Πρόβληµα Μετασχηµατισµός δεδοµένων εισόδου σε δεδοµένα εξόδου. Δοµή δεδοµένων εισόδου (έγκυρο στιγµιότυπο). Δοµή και ιδιότητες δεδοµένων εξόδου (απάντηση ή λύση). Τυπικά: διµελής σχέση στις

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

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

Προγραµµατισµός Ι (ΗΥ120) Προγραµµατισµός Ι (ΗΥ120) Διάλεξη 1: Εισαγωγή ΑΝΑΚΟΙΝΩΣΗ 2 Το αυριανό µάθηµα θα πραγµατοποιηθεί στο αµφιθέατρο Σαράτση Ποιος είµαι εγώ! 3 Ναύπλιο, 4/1976-9/1993 Πάτρα, 9/1993-6/2004 Williamsburg, VA, USA,

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

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2670

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2670 ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2670 ΕΞΑΜΗΝΟ ΣΠΟΥΔΩΝ Έκτο ΤΙΤΛΟΣ ΜΑΘΗΜΑΤΟΣ Δομές Δεδομένων και Αλγόριθμοι ΑΥΤΟΤΕΛΕΙΣ ΔΙΔΑΚΤΙΚΕΣ

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

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

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

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

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

ΠΛΗ111. Ανοιξη Μάθηµα 2 ο. Αλγόριθµοι και Αφηρηµένοι Τύποι εδοµένων. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 2 ο Αλγόριθµοι και Αφηρηµένοι Τύποι εδοµένων Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Αλγόριθµοι Ορισµός Παράδειγµα Ασυµπτωτική

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

Παιδαγωγική προσέγγιση: Πρόταση για την διδασκαλία της έννοιας αλγόριθµός στο περιβάλλον MicroWorlds Pro

Παιδαγωγική προσέγγιση: Πρόταση για την διδασκαλία της έννοιας αλγόριθµός στο περιβάλλον MicroWorlds Pro Παιδαγωγική προσέγγιση: Πρόταση για την διδασκαλία της έννοιας αλγόριθµός στο περιβάλλον MicroWorlds Pro Το «Φύλλο Εργασίας» για τους µαθητές Το παρακάτω φύλλο εργασίας µπορεί να χρησιµοποιηθεί ως εισαγωγικό

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

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα Φεβρουαρίου 0 / ένδρα Ενα δένδρο είναι

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

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων κλειδί από ολικά διατεταγμένο σύνολο όπου το κάθε στοιχείο έχει ένα Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου με

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

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

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

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

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής ισαγωγή στην πιστήμη των Υπολογιστών 2015-16 λγόριθμοι και ομές εδομένων (IΙ) (γράφοι και δένδρα) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης φηρημένες

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

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

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

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

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης Δοµές Δεδοµένων 16η Διάλεξη Κατακερµατισµός Ε. Μαρκάκης Περίληψη Συναρτήσεις κατακερµατισµού Χωριστή αλυσίδωση Γραµµική διερεύνηση Διπλός κατακερµατισµός Δυναµικός κατακερµατισµός Προοπτική Δοµές Δεδοµένων

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

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Εισαγωγή στις έννοιες Αλγόριθµοι και Πολυπλοκότητα, Οργάνωση Δεδοµένων και Δοµές Δεδοµένων Χρήσιµοι µαθηµατικοί

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

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

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών. Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ Δεν κάνει compile και το λάθος είναι σηµαντικό: Το head1 είναι δείκτης σε struct, εποµένως η προσπέλαση πεδίου γίνεται 321 FAIL µε head1->next και όχι head1.next. Επιπλέον, έχετε λάθος

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

Προβλήµατα. 1st International Olympiad in Informatics Held in Pravetz, Bulgaria May 16-19, 1989.

Προβλήµατα. 1st International Olympiad in Informatics Held in Pravetz, Bulgaria May 16-19, 1989. 1989-1 η ιεθνής Ολυµπιάδα Πληροφορικής Προβλήµατα 1st International Olympiad in Informatics Held in Pravetz, Bulgaria May 16-19, 1989. Έξι Προβλήµατα Παρουσιάστηκαν στη διενέργεια της ΙΟΙ 89 ***PROBLEM

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

Εισαγωγή στην επιστήµη των υπολογιστών. Υπολογιστές και Δεδοµένα Κεφάλαιο 3ο Αναπαράσταση Αριθµών

Εισαγωγή στην επιστήµη των υπολογιστών. Υπολογιστές και Δεδοµένα Κεφάλαιο 3ο Αναπαράσταση Αριθµών Εισαγωγή στην επιστήµη των υπολογιστών Υπολογιστές και Δεδοµένα Κεφάλαιο 3ο Αναπαράσταση Αριθµών 1 Δεκαδικό και Δυαδικό Σύστηµα Δύο κυρίαρχα συστήµατα στο χώρο των υπολογιστών Δεκαδικό: Η βάση του συστήµατος

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

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

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

Επιµέλεια Θοδωρής Πιερράτος εδοµένα οµές δεδοµένων και αλγόριθµοι Τα δεδοµένα είναι ακατέργαστα γεγονότα. Η συλλογή των ακατέργαστων δεδοµένων και ο συσχετισµός τους δίνει ως αποτέλεσµα την πληροφορία. Η µέτρηση, η κωδικοποίηση,

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

Εισαγωγή στην επιστήµη των υπολογιστών. Αναπαράσταση Αριθµών

Εισαγωγή στην επιστήµη των υπολογιστών. Αναπαράσταση Αριθµών Εισαγωγή στην επιστήµη των υπολογιστών Αναπαράσταση Αριθµών 1 Δεκαδικό και Δυαδικό Σύστηµα Δύο κυρίαρχα συστήµατα στο χώρο των υπολογιστών Δεκαδικό: Η βάση του συστήµατος είναι το 10 αναπτύχθηκε τον 8

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

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, Εφαρµογές στοιβών Στην ενότητα αυτή θα µελετηθεί η χρήση στοιβών στις εξής εφαρµογές: Αναδροµικές συναρτήσεις Ισοζυγισµός Παρενθέσεων Αντίστροφος Πολωνικός Συµβολισµός ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

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

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

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

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

Δοµές Δεδοµένων. 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης. Βασίζεται στις διαφάνειες των R. Sedgewick K.

Δοµές Δεδοµένων. 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης. Βασίζεται στις διαφάνειες των R. Sedgewick K. Δοµές Δεδοµένων 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης Βασίζεται στις διαφάνειες των R. Sedgewick K. Wayne Περίληψη Συνδετικότητα δικτύου Αφαιρέσεις Συνδεδεµένα συστατικά Αφηρηµένη

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

Θεσσαλονίκη, Ιούνιος 2003

Θεσσαλονίκη, Ιούνιος 2003 ΠΡΟΛΟΓΟΣ Γ ΕΚ ΟΣΗΣ Μετά την τρίτη έκδοση του βιβλίου µου µε τα προβλήµατα Μηχανικής για το µάθηµα Γενική Φυσική Ι, ήταν επόµενο να ακολουθήσει η τρίτη έκδοση και του παρόντος βιβλίου µε προβλήµατα Θερµότητας

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

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

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Κεφάλαιο 6ο Εισαγωγή στον Προγραµµατισµό Μέρος Πρώτο (6.1, 6.2 και 6.3) Α. Ερωτήσεις Σωστού Λάθους 1. Η γλώσσα µηχανής είναι µία γλώσσα υψηλού επιπέδου.

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

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

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

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

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

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

υναµικές οµές εδοµένων

υναµικές οµές εδοµένων υναµικές οµές εδοµένων Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: υναµικές οµές εδοµένων Γενικά υναµική έσµευση Μνήµης οµή τύπου structure αυτοαναφορικές δοµές Η δήλωση typedef στη C Αναπαράσταση

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

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

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 10 ο Γράφοι Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Γράφοι Ορισµός Αφηρηµένος τύπος δεδοµένων Υλοποίηση Αναζήτηση έντρο

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

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

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

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

Δυναμικές Δομές Δεδομένων Λίστες Δένδρα - Γράφοι

Δυναμικές Δομές Δεδομένων Λίστες Δένδρα - Γράφοι Δυναμικές Δομές Δεδομένων Λίστες Δένδρα - Γράφοι Κ Ο Τ Ι Ν Η Ι Σ Α Β Ε Λ Λ Α Ε Κ Π Α Ι Δ Ε Υ Τ Ι Κ Ο Σ Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Π Ε 8 6 Ν Ε Ι Ρ Ο Σ Α Ν Τ Ω ΝΙ Ο Σ Ε Κ Π Α Ι Δ Ε Υ Τ Ι Κ Ο Σ Π Λ Η Ρ Ο Φ Ο

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

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

Αλγόριθμοι Ταξινόμησης Μέρος 4 Αλγόριθμοι Ταξινόμησης Μέρος 4 Μανόλης Κουμπαράκης Δομές Δεδομένων και Τεχνικές 1 Μέθοδοι Ταξινόμησης Βασισμένοι σε Συγκρίσεις Κλειδιών Οι αλγόριθμοι ταξινόμησης που είδαμε μέχρι τώρα αποφασίζουν πώς να

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

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1 Διασυνδεδεμένες Δομές Δυαδικά Δέντρα Προγραμματισμός II 1 lalis@inf.uth.gr Δέντρα Τα δέντρα είναι κλασικές αναδρομικές δομές Ένα δέντρο αποτελείται από υποδέντρα, καθένα από τα οποία μπορεί να θεωρηθεί

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