Γνωριµία ιδάσκων: οµές εδοµένων Εισαγωγή Ορέστης Τελέλης e-mail: telelis@unipi.gr Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Ωρες γραφείου (502, Γρ.Λαµπράκη 126): Τρίτη 11:00 13:00 Πέµπτη 11:00-13:00 Και κατόπιν συνεννόησης Ηµέρα/ Ωρα µαθήµατος: Πέµπτη 8:15 11:00 Αίθουσα: 108 (Επώνυµα από Α Λ) (Επώνυµα από Μ Ω: Αιθ. 104, Πέµπτη 14:15-17:00, µε τον κ. Χρήστο ουλκερίδη) Ο. Τελέλης οµές εδοµένων 1 / 57 Ο. Τελέλης οµές εδοµένων 2 / 57 Επικοινωνία Βιβλία Μαθήµατος Ιστοσελίδα µαθήµατος: http://evdoxos.ds.unipi.gr/courses/ds100/ Θέµατα και υλικό σχετικά µε το µάθηµα ΙΑΛΕΞΕΙΣ Lafore R. (2005): οµές εδοµένων και Αλγόριθµοι στη JAVA (µεταφρασµένο), Εκδόσεις Μ. Γκιούρδας. ΑΝΑΚΟΙΝΩΣΕΙΣ ΕΚΦΩΝΗΣΕΙΣ ΕΡΓΑΣΙΩΝ ΠΑΡΑ ΟΣΗ ΕΡΓΑΣΙΩΝ ΒΟΗΘΗΤΙΚΟ ΥΛΙΚΟ... Αρα εγγραφείτε στο µάθηµα! M. Goodrich, R. Tamassia (2013): οµές εδοµένων και Αλγόριθµοι σε Java, (µεταφρ. Μ. Χατζόπουλος), Εκδόσεις ίαυλος. ιαβάστε το βιβλίο, οι διαφάνειες δεν αρκούν! Ο. Τελέλης οµές εδοµένων 3 / 57 Ο. Τελέλης οµές εδοµένων 4 / 57
Επιπλέον Πηγές Βαθµολογία ύο (2) Προγραµµατιστικές Εργασίες ( Π1, Π2 ). ( 20% έκαστη ) Γραπτή Εξέταση ( Ε ). ( 70% ) Sedgewick R. (2005): Αλγόριθµοι σε Java,Τόµοι 1-4, 3η αµερικάνικη έκδοση (µεταφρασµένο), Εκδόσεις Κλειδάριθµος. T. H. Cormen, C. E. Leiserson, R. Rivest, C. Stein. Εισαγωγή στους Αλγορίθµους. Τόµος Ι (Μεταφρασµένος). Πανεπιστηµιακές Εκδόσεις Κρήτης, 2006. Βαθµολογία ( Β ): Τελικός Βαθµός: Β = B 0 = 0.7 Ε + 0.2 (Π1 + Π2) { min{ 10, B0, αν Ε 4 min{ 4, B 0, αν Ε < 4 ηλαδή: η (ϐαθµολογική) επιτυχία στο µάθηµα απαιτεί Ε 4. ΠΡΟΣΟΧΗ!!! Οι εργασίες του µαθήµατος παραδίδονται ΜΟΝΟ στην περίοδο της διδασκαλίας του. ΟΧΙ το Σεπτέµβριο (ΟΧΙ τον Ιούνιο, αν υπάρξει εξέταση). Ο. Τελέλης οµές εδοµένων 5 / 57 Ο. Τελέλης οµές εδοµένων 6 / 57 Εργαστήρια Σκοπός Μαθήµατος ιδάσκουσα: ρ. Βασιλική Κούφη. 3-4 διαφορετικά (ανάλογα µε τη διαθεσιµότητα ϕυσικών χώρων). Προαιρετικά. Για την ενίσχυση της κατανόησης των δοµών και των σχετικών αλγορίθµων. Παρουσίαση ϐασικών δοµών δεδοµένων. Η χρήση τους στην ανάπτυξη προγραµµάτων. Για την εµπειρία υλοποίησης αλγοριθµικών κατασκευών. Σας µένει ο κώδικας που ϑα γράψουµε στα εργαστήρια. Υλοποίηση δοµών µε χρήση της γλώσσας προγραµµατισµού Java. 4 Τµήµατα ( 2 για καθένα από τα τµήµατα Α-Λ, Μ-Ω ) ϑα ανακοινωθούν. Βασικές γνώσεις της Java θεωρούνται προαπαιτούµενο. Ωρες και Τόπος: ϑα ανακοινωθούν. Απευθύνονται κατά προτεραιότητα στους φοιτητές του 2ου Ετους Ο. Τελέλης οµές εδοµένων 7 / 57 Ο. Τελέλης οµές εδοµένων 8 / 57
Περιεχόµενα Μαθήµατος Ανάλυση Αλγορίθµων. 1 Πίνακες. 2 Ουρές και Στοίβες. 3 Συνδεδεµένες Λίστες. Αναδροµή. Ταξινόµηση. Απλά Συνδεδεµένες. ιπλά Συνδεδεµένες. Κυκλικά Συνδεδεµένες. οµές ένδρων 1 υαδικά ένδρα Αναζήτησης. 2 ένδρα AVL. 3 Κοκκινό-µαυρα ένδρα. 4 ένδρα 2 3 4. 5 ένδρα B. Σωροί και Ουρές Προτεραιότητας. Πίνακες Κατακερµατισµού. Γραφήµατα. Εισαγωγικές Εννοιες Ο. Τελέλης οµές εδοµένων 9 / 57 Ο. Τελέλης οµές εδοµένων 10 / 57 οµές εδοµένων & Αλγόριθµοι οµές εδοµένων ιευθέτηση ή οργάνωση δεδοµένων στη µνήµη (ή στο δίσκο). Πίνακες, Συνδεδεµένες Λίστες, Ουρές, Στοίβες. υαδικά ένδρα, Σωροί. Πίνακες Κατακερµατισµού, Γράφοι. Αλγόριθµοι ιαδικασία εκτέλεσης µιας συγκεκριµένης εργασίας Χειρίζονται τα δεδοµένα που ϐρίσκονται αποθηκευµένα στις δοµές δεδοµένων µε διάφορους τρόπους Αναζήτηση, εισαγωγή, διαγραφή, ταξινόµηση Χρησιµότητα οµών εδοµένων Αποθήκευση πραγµατικών δεδοµένων Παραδείγµατα: Σύστηµα κράτησης εισιτηρίων Βάση δεδοµένων αδειών οδήγησης... Προγραµµατιστικά Εργαλεία: Χρησιµοποιούνται εργαλεία για τη διεκπεραίωση µιας µεγαλύτερης λειτουργίας Μοντελοποίηση πραγµατικού κόσµου Παράδειγµα: Γραφήµατα για αναπαράσταση δροµολογίων αεροπλάνων µεταξύ πόλεων Γραφήµατα για αναπαράσταση σχέσεων σε ένα κοινωνικό δίκτυο Σωστή επιλογή δοµής δεδοµένων δηµιουργεί προϋποθέσεις σηµαντικών ϐελτιώσεων στην αποτελεσµατικότητα ενός προγράµµατος Ο. Τελέλης οµές εδοµένων 11 / 57 Ο. Τελέλης οµές εδοµένων 12 / 57
Αλγόριθµοι Παραδείγµατα Πολλοί αλγόριθµοι «εργάζονται» απευθείας σε συγκεκριµένες δοµές. Για τις δοµές δεδοµένων, πρέπει να γνωρίζουµε πώς υλοποιούνται τρεις ϐασικές λειτουργίες. οµή δεδοµένων Πίνακας 45 23 28 95 71 19 οµή δεδοµένων Συνδεδεµένη λίστα a b c Εισαγωγή νέων δεδοµένων Αναζήτηση συγκεκριµένου στοιχείου ιαγραφή συγκεκριµένου στοιχείου Αλγόριθµος Αναζήτηση Εισαγωγή ιαγραφή Αλγόριθµος Αναζήτηση Εισαγωγή ιαγραφή Ο. Τελέλης οµές εδοµένων 13 / 57 Ο. Τελέλης οµές εδοµένων 14 / 57 Υπόλοιπο Σηµερινού Μαθήµατος... Αντικειµενοστρεφής Προγραµµατισµός Αντικειµενοστρεφής Προγραµµατισµός (Object-Oriented Programming) Ανάλυση & Πολυπλοκότητα Αλγορίθµων Ο. Τελέλης οµές εδοµένων 15 / 57 Ο. Τελέλης οµές εδοµένων 16 / 57
Αντικειµενοστρεφής Προγραµµατισµός Κλάσεις (Classes) Αντικείµενα (αντιδιαστολή µε διαδικαστικές γλώσσες προγραµµατισµού). Πιο κοντά στα πραγµατικά αντικείµενα. Ανάγκη ύπαρξης πολλών αντικειµένων του ίδιου τύπου Κλάση: προδιαγραφή για ένα ή περισσότερα αντικείµενα Αντιµετώπιση προβληµάτων που δηµιουργούνται από καθολικά δεδοµένα Αντικείµενο thermostat: Μεταβλητές currenttemp, desiredtemp µπορούν να προσπελαστούν µόνο από τις µεθόδους f_on(), f_off() Το αντικείµενο περιέχει: class Thermostat { private float currenttemp; private float desiredtemp; // Variable // Variable Μεθόδους public void f_on(){... // Method Μεταβλητές public void f_off(){... // Method Ο. Τελέλης οµές εδοµένων 17 / 57 Ο. Τελέλης οµές εδοµένων 18 / 57 ηµιουργία Αντικειµένων Για δηµιουργία αντικειµένων χρησιµοποιείται η εντολή new: Thermostat therm1, therm2; // Declaration of References therm1 = new Thermostat(); // Object creation therm2 = new Thermostat(); // Object creation Προσπέλαση µεθόδων αντικειµένων: class List { // Variables // store the items in an array private Object [] items; // the current # of items in the list private int numitems; // Methods public List() { // constructor function items = new Object[10]; numitems = 0; therm1.f_on(); Μέθοδοι κατασκευής (constructor): Καλείται αυτόµατα κάθε ϕορά που δηµιουργείται ένα νέο αντικείµενο. // AddToEnd: add a given item to the end of the list public void AddToEnd(Object ob) {... Ο. Τελέλης οµές εδοµένων 19 / 57 Ο. Τελέλης οµές εδοµένων 20 / 57
Κληρονοµικότητα (Inheritance) Πολυµορφισµός Η αντιµετώπιση αντικειµένων που ανήκουν σε διαφορετικές κλάσεις µε τον ίδιο τρόπο Προϋπόθεση: οι κλάσεις αυτές να παράγονται από την ίδια base class class Employee {......... class Secretary extends Employee {......... class Manager extends Employee {......... private Collection<Employee> emps; emps = new ArrayList<Employee>(); class MountainBike extends Bicycle { // new fields and methods defining a mountain bike would go here emps.add(new Secretary("X")); emps.add(new Manager("Y")); for (Employee e : emps) { System.out.println(e.display()); Ο. Τελέλης οµές εδοµένων 21 / 57 Ο. Τελέλης οµές εδοµένων 22 / 57 Περίγραµµα Ανάλυση Αλγορίθµων Τι είναι η ανάλυση αλγόριθµου; Κριτήρια ανάλυσης αλγορίθµων. Πως εκτιµούµε το χρόνο εκτέλεσης ενός αλγόριθµου; Ο. Τελέλης οµές εδοµένων 23 / 57 Ο. Τελέλης οµές εδοµένων 24 / 57
Ανάλυση Αλγορίθµων: Ορισµοί Ανάλυση Αλγορίθµων: Κριτήρια Αλγόριθµος: Αλγόριθµος είναι µια πεπερασµένη ακολουθία σαφών οδηγιών (ϐηµάτων) για την εκτέλεση ενός υπολογισµού ή την επίλυση ενός προβλήµατος. Πρόγραµµα (Υλοποίηση): Τυπική περιγραφή αλγόριθµου σε µία γλώσσα προγραµµατισµού. Ροή Εργασίας: Πρόβληµα = Αλγόριθµος = Ελεγχος ορθότητας = Καθορισµός Πόρων Ορθότητα. Απαιτεί σαφή διατύπωση της αναµενόµενης λειτουργίας. Περιγραφή συνθηκών που πρέπει να πληρούν τα δεδοµένα εισόδου. Αναµενόµενα αποτελέσµατα. Οταν τα δεδοµένα εισόδου ικανοποιούν τις αναγκαίες συνθήκες: ο αλγόριθµος τερµατίζει παράγοντας τα αναµενόµενα αποτελέσµατα. Απαιτήσεις σε µνήµη. δεδοµένα εισόδου, Μνήµη που απαιτείται για να αποθηκευτούν: επιπλέον ενδιάµεσα δεδοµένα που δηµιουργεί/χρησιµοποιεί ο αλγόριθµος Χρόνος εκτέλεσης. Ταχύτητα εκτέλεσης των λειτουργιών για την ολοκλήρωση υπολογισµών. Ο. Τελέλης οµές εδοµένων 25 / 57 Ο. Τελέλης οµές εδοµένων 26 / 57 Ανάλυση Αλγορίθµων: Εισαγωγή Προσεγγίσεις Ανάλυσης Αλγόριθµου Η ανάγκη επεξεργασίας µεγάλου όγκου δεδοµένων απαιτεί τη χρήση υπολογιστή. Οταν ένα πρόγραµµα «τρέχει» σε µεγάλο όγκο δεδοµένων πρέπει να ϐεβαιωθούµε ότι ϑα τερµατίσει µέσα σε αποδεκτά χρονικά πλαίσια. Ο χρόνος εκτέλεσης, για δεδοµένο υλικό εξαρτάται από: Πειραµατική Θεωρητική 1 Γλώσσα προγραµµατισµού / Μεταγλωττιστή / ιερµηνευτή. 2 Μεθοδολογία (διαδικαστική vs. αντικειµενοστρεφή). 3 Επιλογή αλγορίθµου και δοµών δεδοµένων. Ο. Τελέλης οµές εδοµένων 27 / 57 Ο. Τελέλης οµές εδοµένων 28 / 57
Πειραµατική Μελέτη Περιορισµοί Πειραµατικής Μελέτης Γράψε ένα πρόγραµµα που να υλοποιεί τον αλγόριθµο. «Τρέξε» τον αλγόριθµο χρησιµοποιώντας δεδοµένα εισόδου διαφορετικού µεγέθους και σύνθεσης. Μέτρησε το χρόνο εκτέλεσης (runtime). Σχεδίασε τη γραφική παράσταση των αποτελεσµάτων. Απαραίτητη η (τυπική) υλοποίηση του αλγόριθµου: µπορεί να έχει τεχνικές δυσκολίες (σε σχέση µε την άτυπη περιγραφή), µπορεί να είναι χρονοβόρα (π.χ., πολλαπλές µικρότερες διαδικασίες) Καλή κλιµάκωση των δεδοµένων εισόδου; Σύγκριση δύο αλγορίθµων απαιτεί: Ιδιο µηχανικό εξοπλισµό (hardware) Ιδιο λογισµικό (software). Τα αποτελέσµατα πρέπει να είναι αναπαράξιµα! Ο. Τελέλης οµές εδοµένων 29 / 57 Ο. Τελέλης οµές εδοµένων 30 / 57 Θεωρητική Ανάλυση Τι είναι η Ανάλυση Αλγόριθµου Χρήση υψηλού επιπέδου περιγραφής του αλγορίθµου: και όχι της τυπικής υλοποίησης σε κάποια γλώσσα προγραµµατισµού. Χρόνος εκτέλεσης ως συνάρτηση του µεγέθους της εισόδου ( n ). Ανάλυση αλγόριθµου: Ο χρόνος που απαιτείται για την εκτέλεση ενός αλγόριθµου εξαρτάται από το µέγεθος της εισόδου που πρέπει να επεξεργαστεί. Περισσότερα δεδοµένα εισόδου = Μεγαλύτερος χρόνος εκτέλεσης. Ενδιαφέρει η συµπεριφορά της συνάρτησης καθώς το n αυξάνει αυθαίρετα. Χρόνος εκτέλεσης προγράµµατος = F(Input Size) Ανω ϕράγµα χρόνου «χειρότερης περίπτωσης» (για οποιαδήποτε είσοδο). Η ακριβής τιµή της συνάρτησης F εξαρτάται από πολλούς παράγοντες: Αξιολόγηση αλγορίθµου ανεξάρτητα από εξοπλισµό, υλοποίηση, κ.λ.π. Μετρά στοιχειώδεις λειτουργίες (ϐήµατα) και όχι πραγµατικό χρόνο. ταχύτητα της µηχανής, ποιότητα µεταγλωττιστή, ποιότητα προγράµµατος. Ο. Τελέλης οµές εδοµένων 31 / 57 Ο. Τελέλης οµές εδοµένων 32 / 57
100 90 Linear O(NlogN) Quadratic Cubic 100 90 Linear O(NlogN) Quadratic Cubic 80 80 70 70 Running Time 60 50 40 Running Time 60 50 40 30 30 20 20 10 10 2 4 6 8 10 12 14 16 18 20 Input Size N 5 10 15 20 25 30 35 40 Input Size N Ο. Τελέλης οµές εδοµένων 33 / 57 Ο. Τελέλης οµές εδοµένων 33 / 57 Μέση vs. Χειρότερη Περίπτωση Χρόνου Εκτέλεσης Ασυµπτωτικές προσεγγίσεις: συµβολισµός O( ) Από τις πιο συνηθισµένες συναρτήσεις που συναντώνται στην ανάλυση αλγορίθµων, η γραµµική αντιστοιχεί στον πιο αποδοτικό αλγόριθµο (γιατί;) Ενας αλγόριθµος µπορεί να εκτελείται γρηγορότερα µε συγκεκριµένα σύνολα δεδοµένων από ότι µε κάποια άλλα. Η εύρεση της µέσης περίπτωσης µπορεί να είναι πολύ δύσκολη, έτσι οι αλγόριθµοι τυπικά µετρώνται µε ϐάση τη χειρότερη περίπτωση πολυπλοκότητας. Σε συγκεκριµένα πεδία εφαρµογής (π.χ. air traffic control, surgery) η γνώση της χειρότερης περίπτωσης πολυπλοκότητας είναι πολύ σηµαντική.. Η σύγκριση συναρτήσεων για µικρά σύνολα εισόδου είναι δύσκολη. Οι σταθερές ϕαίνεται να επηρεάζουν σηµαντικά τη συνάρτηση. Οι διαφορές ανάµεσα στις καµπύλες που αντιπροσωπεύουν την αύξηση της συνάρτησης χρόνου εκτέλεσης αλγορίθµων είναι ευδιάκριτες για µεγάλα σύνολα δεδοµένων. Γενικά: Οι δευτεροβάθµιας πολυπλοκότητας ( O(N 2 ) ) αλγόριθµοι δεν είναι πρακτικοί για δεδοµένα εισόδου που ξεπερνούν τις µερικές χιλιάδες. Οι κυβικής πολυπλοκότητας ( O(N 3 ) ) αλγόριθµοι γίνονται µη πρακτικοί για µεγέθη δεδοµένων εισόδου τόσο µικρά, όσο µερικές εκατοντάδες. Ο. Τελέλης οµές εδοµένων 34 / 57 Ο. Τελέλης οµές εδοµένων 35 / 57
Ασυµπτωτικές προσεγγίσεις: συµβολισµός O( ) Ασυµπτωτικός Συµβολισµός Ορισµός: Για συναρτήσεις: f : N R + και g : N R + ορίζουµε: Χρειαζόµαστε ένα τυπικό συµβολισµό για να προσδιορίσουµε τον επικρατέστερο όρο σε µία συνάρτηση και να αναπαραστήσουµε το ϱυθµό αύξησης. O( ) συµβολισµός επιτρέπει να ορίσουµε µια σχετική σειρά ανάµεσα στις συναρτήσεις συγκρίνοντας τους επικρατέστερους όρους. f(n) O( g(n) ) αν υπάρχουν σταθερές C R +, n 0 N + τέτοιες ώστε: f(n) C g(n), για κάθε n n 0 ( ) O( g(n) ) είναι το το σύνολο όλων των συναρτήσεων f, για τις οποίες ισχύει η σχέση ( ) (µε κατάλληλα C και n 0 για κάθε διαφορετική f). Εχει επικρατήσει να γράφουµε απλώς f(n) = O( g(n) ). Οµως εννοούµε, και όχι ισότητα!!! Το «=» αυτό δεν είναι συµµετρικό δε γράφουµε O( g(n) ) = f(n). Ο. Τελέλης οµές εδοµένων 36 / 57 Ο. Τελέλης οµές εδοµένων 37 / 57 Φυσική Ερµηνεία Παράδειγµα (1α) cg(n) Παράδειγµα: η f(n) = n 2 + 2n + 1 είναι O(n 2 ). f(n) Παρατηρούµε ότι για n 1 έχουµε n n 2, 1 n 2, εποµένως: f(n) = n 2 + 2n + 1 < n 2 + 2n 2 + n 2 = 4n 2 n 0 f = O(g) Η f(n) µεγαλώνει το πολύ τόσο γρήγορα όσο ένα σταθερό πολλαπλάσιο της g(n), καθώς το n πηγαίνει στο άπειρο. Εποµένως, µπορούµε να ϑέσουµε n 0 = 1 και C = 4. Εναλλακτικά, ϑα µπορούσαµε να ϑέσουµε επίσης n 0 = 2 και C = 3. Ο. Τελέλης οµές εδοµένων 38 / 57 Ο. Τελέλης οµές εδοµένων 39 / 57
Παράδειγµα (1β) Παραδείγµατα (2) 8 6 n 2 + 2n + 1 4n 2 n 2 Παράδειγµα: 7n 3 O(n) Τεκµηρίωση: 4 2 0 0 1 2 3 4 5 Ο. Τελέλης οµές εδοµένων 40 / 57 Ο. Τελέλης οµές εδοµένων 41 / 57 Παραδείγµατα (2) Παράδειγµα (3) Παράδειγµα: 20n 3 + 10n log n + 5 O(n 3 ) Παράδειγµα: 7n 3 O(n) Τεκµηρίωση: Τεκµηρίωση: Υπάρχουν c, n 0 τέτοια ώστε 7n 3 c n, για κάθε n n 0. Θέτουµε c = 7, n 0 = 1. Τότε: 7n 3 7n, για κάθε n 1. Ο. Τελέλης οµές εδοµένων 41 / 57 Ο. Τελέλης οµές εδοµένων 42 / 57
Παράδειγµα (3) Υπολογισµός O( ) Παράδειγµα: 20n 3 + 10n log n + 5 O(n 3 ) Τεκµηρίωση: Υπάρχουν c, n 0 τέτοια ώστε: 20n 3 + 10n log n + 5 c n 3, για κάθε n n 0 Ισχύουν: 20n 3 20 n 3 για κάθε n 1 10n log n 10 n 3 για κάθε n 1 5 5 n 3 για κάθε n 1 Εποµένως: 20n 3 + 10n log n + 5 (20 + 10 + 5) n 3 = 35 n 3 Αρα, c = 35 και n 0 = 1. Παρότι αληθεύει ότι 7n 3 είναι O(n 5 ), ο O( ) χαρακτηρισµός πρέπει να είναι όσο το δυνατό πιο µικρής τάξης. Απλοί κανόνες Παράδειγµα: αγνόησε τις σταθερές. επίλεξε τη συνάρτηση του n που αυξάνεται ταχύτερα. Εστω ότι ένας αλγόριθµος έχει την ακόλουθη συνάρτηση αύξησης: f(n) = 16n 2 + 3n + 7 = n 2 + n - σβήσε τις σταθερές = n 2 - σβήσε τις µικρότερες τιµές του n Εστω f(n) = 8n 2 log n + 5n 2 + n = O(n 2 log n) Ο. Τελέλης οµές εδοµένων 42 / 57 Ο. Τελέλης οµές εδοµένων 43 / 57 O( )-Ιεραρχία Απλών Συναρτήσεων O( )-Ιεραρχία Απλών Συναρτήσεων Ενδεικτικοί Χρόνοι Εκτέλεσης Αλγορίθµων σταθερού χρόνου (constant time) λογαριθµικός (logarithmic) O(1) O(logn) Στον άξονα y απεικονίζεται η τιµή log[f(n)], για κάθε συνάρτηση f(n) 10 5 n! n 10 2 10 4 γραµµικός (linear) O(n) nlogn O(nlogn) τετραγωνικός (quadratic) O(n 2 ) πολυωνυµικός (polynomial) O(n k ), k > 1 10 3 10 2 10 1 10 0 2 n n 2 n log n n log n 1 10 1 10 0 n log n log log n 1 εκθετικός (exponential) O(a n ), n > 1 2 4 6 8 10 50 100 150 200 O(1) O(log n) O(n) O(n log n) O(n 2 ) O(n 3 ) O(2 n ) O(1) O(log log n) O(log n) O((log n) 2 ) O( n) O(n) O(n 2 ) O(2 n ) O(n!) Ο. Τελέλης οµές εδοµένων 44 / 57 Ο. Τελέλης οµές εδοµένων 45 / 57
Βασικές Ιδιότητες του O( ) Παραδείγµατα Πολυώνυµα f(n) = a p n p + + a 1 n + a 0, για p N, = f(n) = O(n p ). f 1 (n) = O( g 1 (n) ) f 2 (n) = O( g 2 (n) ) ( { ) = (f 1 + f 2 )(n) = O max g 1 (n), g 2 (n) Να δοθεί εκτίµηση O(g(n)) για καθεµία από τις παρακάτω συναρτήσεις, µε χρήση µιας απλής συνάρτησης g(n) της µικρότερης δυνατής τάξης. f(n) = (n 3 + n 2 log n)(log n + 1) + (17 log n + 19)(n 3 + 2) f 1 (n) = O( g(n) ) f 2 (n) = O( g(n) ) = (f 1 + f 2 )(n) = O( g(n) ) f(n) = (2 n + n 2 )(n 3 + 3 n ) f(n) = (n n + n2 n + 5 n )(n! + 5 n ) f 1 (n) = O( g 1 (n) ) f 2 (n) = O( g 2 (n) ) = (f 1 f 2 )(n) = O( g 1 (n)g 2 (n) ) f(n) = (n log n + 1) 2 + (log n + 1)(n 2 + 1) Ο. Τελέλης οµές εδοµένων 46 / 57 Ο. Τελέλης οµές εδοµένων 47 / 57 Γιατί Χρησιµοποιούµε το Συµβολισµό O( ); Για να ϕράξουµε το σφάλµα που κάνουµε όταν αγνοούµε µικρούς όρους στους µαθηµατικούς τύπους. Για να ϕράξουµε το σφάλµα που κάνουµε όταν αγνοούµε µέρη ενός προγράµµατος τα οποία συµβάλλουν κατά ένα µικρό ποσοστό στο συνολικό πρόγραµµα που αναλύουµε. Παραδείγµατα Ανάλυσης Πολυπλοκότητας Για να µπορούµε να ταξινοµήσουµε τους αλγορίθµους µε ϐάση τα άνω ϕράγµατα των συνολικών χρονων εκτέλεσής τους. Ο. Τελέλης οµές εδοµένων 48 / 57 Ο. Τελέλης οµές εδοµένων 49 / 57
Παράδειγµα 1 Παράδειγµα 1 int k = 0; for (int i = 0; i < n; i++) k += i; int k = 0; for (int i = 0; i < n; i++) k += i; Ανάλυση Ανάλυση Η στοιχειώδης πράξη k+=i; αποτελεί ένα (1) ϐήµα (χρόνου O(1) ). Ο αλγόριθµος εκτελεί τη ϐασική πράξη n ϕορές. 1 = n 0 i<n Ο αλγόριθµος έχει πολυπλοκότητα O(n). Ο. Τελέλης οµές εδοµένων 50 / 57 Ο. Τελέλης οµές εδοµένων 50 / 57 Παράδειγµα 2 Παράδειγµα 2 int sum=0; for (i = 0; i < n; i++) for (j = 0; j < n; j++) sum++; // External Loop // Internal Loop int sum=0; for (i = 0; i < n; i++) for (j = 0; j < n; j++) sum++; // External Loop // Internal Loop Ανάλυση Ανάλυση Εξωτερικός Βρόχος: ( ) χρόνος εσωτερικού ϐρόχου 0 j<n Εσωτερικός Βρόχος: 0 i<n 1 = n ( ) = n χρόνος εσωτερικού ϐρόχου Ολικός χρόνος εκτέλεσης: n 1 n 1 1 = n n = O(n 2 ) j=0 i=0 Ο. Τελέλης οµές εδοµένων 51 / 57 Ο. Τελέλης οµές εδοµένων 51 / 57
Παράδειγµα 3 Παράδειγµα 3 for (i = 1; i <= n; i++) for (j = 1; j <= i*i; j++) sum++; for (i = 1; i <= n; i++) for (j = 1; j <= i*i; j++) sum++; Ανάλυση Ανάλυση Εξωτερικός Βρόχος: n ( ) χρόνος εσωτερικού ϐρόχου(i) i=1 i i Εσωτερικός ϐρόχος: 1 = i 2. j=1 Συνολικά: n i i 1 = i=1 j=1 n i 2 = i=1 n(n + 1)(2n + 1) 6 = O(n 3 ) Ο. Τελέλης οµές εδοµένων 52 / 57 Ο. Τελέλης οµές εδοµένων 52 / 57 Παράδειγµα 4 Παράδειγµα 4 int sum=0; for (i=0; i<n; i++) if ((n mod 2) == 0) // n even for (j=0; j<n; j++) sum++; else // n odd sum--; Ανάλυση int sum=0; for (i=0; i<n; i++) if ((n mod 2) == 0) // n even for (j=0; j<n; j++) sum++; else // n odd sum--; Ανάλυση 1 Εξωτερικός ϐρόχος: n επαναλήψεις 2 Εσωτερικός ϐρόχος: n επαναλήψεις εκτελείται µόνο αν n άρτιος!..., αλλιώς (αν n περιττός), O(1) χρόνος. 3 Εποµένως, ολικός χρόνος: αν n άρτιος O(n 2 ), αν n περιττός, O(n). 4 Χρόνος Χειρότερης Περίπτωσης: O(n 2 ). Ο. Τελέλης οµές εδοµένων 53 / 57 Ο. Τελέλης οµές εδοµένων 53 / 57
Παράδειγµα 5 Αλγόριθµος υπολογισµού προθεµατικών µέσων Είσοδος: πίνακας n αριθµητικών στοιχείων. Εξοδος: πίνακας n αριθµών όπου ο A[i] είναι ο µέσος όρος των X[0],..., X[i]. for (int i = 0; i < n; i++) { int a = 0; for (int j = 0; j < i; j++) { a = a + X[j]; A[i] = a/(i+1); return A; Στοιχειώδεις πράξεις: πρόσθεση, διαίρεση, ανάθεση τιµής, ανάγνωση τιµής. Ο. Τελέλης οµές εδοµένων 54 / 57 Παράδειγµα 5 (Ανάλυση) Εντός του Εξωτερικού και Εκτός του Εσωτερικού) Βρόχου: c = O(1), d = O(1) Στοιχειώδεις Πράξεις. n 1 ( ) Εξωτερικός Βρόχος: c + χρόνος εσωτερικού ϐρόχου(i) i=0 i Εσωτερικός ϐρόχος: d = d (i + 1), d = O(1). j=0 ( ) n 1 i n 1 Συνολικά: c + d c n + d (i + 1) = c n + d i=0 j=0 i=0 n i = c n + d 2 n(n + 1) = O(n2 ) i=1 Ο. Τελέλης οµές εδοµένων 55 / 57 Πιο Απλή Ανάλυση Παράδειγµα 6 Ο εξωτερικός ϐρόχος εκτελείται n ϕορές (για i = 0,..., n 1). Εντός του (και εκτός του εσωτερικού): O(1) στοιχειώδες πράξεις. Ο εσωτερικός ϐρόχος εκτελείται i + 1 ϕορές, για i = 0,..., n 1. Αρα, (ο εσωτερικός) εκτελείται το πολύ n ϕορές, για i = 0,..., n 1. Εντός του εωτερικού ϐρόχου συµβαίνουν O(1) στοιχειώδεις πράξεις. Συνολικά: n (O(1) + n O(1)) = O(n 2 ). Βελτιωµένος Αλγόριθµος υπολογισµού προθεµατικών µέσων Είσοδος: πίνακας n αριθµητικών στοιχείων. Εξοδος: πίνακας n αριθµών όπου ο A[i] είναι ο µέσος όρος των X[0],..., X[i]. int s = 0; for(int i = 0; i < n; i++) { s = s + X[i]; A[i] = s/(i+1); return A; Πολυπλοκότητα; Ο. Τελέλης οµές εδοµένων 56 / 57 Ο. Τελέλης οµές εδοµένων 57 / 57