1 / 46

Δυναμικός Προγραμματισμός Ι

Δυναμικός Προγραμματισμός Ι. Στους αλγορίθμους διαίρει και βασίλευε έχουμε: διάσπαση της προς επίλυση περίπτωσης σε μικρότερες υποπεριπτώσεις του ίδιου προβλήματος, διαδοχική και ανεξάρτητη επίλυση αυτών,

sirvat
Download Presentation

Δυναμικός Προγραμματισμός Ι

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Δυναμικός Προγραμματισμός Ι Στους αλγορίθμους διαίρει και βασίλευε έχουμε: • διάσπαση της προς επίλυση περίπτωσης σε μικρότερες υποπεριπτώσεις του ίδιου προβλήματος, • διαδοχική και ανεξάρτητη επίλυση αυτών, • συνδυασμό των επί μέρους λύσεων με τέτοιο τρόπο, ώστε να σχηματισθεί η λύση της αρχικής περίπτωσης. Τι γίνεται αν η διάσπαση της περίπτωσης οδηγεί αλληλοεπικαλυπτό-μενες υποπεριπτώσεις; Αν εφαρμοσθεί διαίρει και βασίλευε, τότε οδηγούμαστε στην επίλυση της ίδιας υποπερίπτωσης περισσότερες από μία φορές. Τμ. Πληροφορικής, Α.Π.Θ.

  2. Δυναμικός Προγραμματισμός ΙΙ Αντί γι΄ αυτό, αν επιδιώξουμε κάθε υποπερίπτωση να επιλύεται μόνο μία φορά και να κρατείται η λύση της για να επαναχρησιμοποιηθεί, τότε ουσιαστικά έχουμε μια πιο αποδοτική λύση του προβλήματος. Αυτό επιτυγχάνεται διατηρώντας τα αποτελέσματα σε έναν πίνακα, ο οποίος σε κάθε βήμα του αλγορίθμου συμπληρώνεται με τις λύσεις νέων υποπεριπτώσεων. Ο δυναμικός προγραμματισμός είναι μία ανοδική τεχνική σχεδίασης: ξεκινάει με την επίλυση των μικρότερων και απλούστερων υποπεριπτώσεων, τις οποίες στη συνέχεια συνδυάζει στην επίλυση πιο σύνθετων υποπεριπτώσεων, μέχρι τελικά να φθάσει στη λύση του προβλήματος. Η τεχνική διαίρει και βασίλευε είναι μία καθοδική τεχνική σχεδίασης αλγορίθμου (χρησιμοποιείται αναδρομή). Τμ. Πληροφορικής, Α.Π.Θ.

  3. Δυναμικός Προγραμματισμός ΙΙΙ Παράδειγμα Ας θεωρήσουμε το πρόβλημα του υπολογισμού της Στο συγκεκριμένο πρόβλημα υπάρχει μια αντικειμενική δυσκολία στην αναπαράσταση του n!, επειδή 13!=6227020800>232, αν και Εναλλακτικά, μπορεί ο υπολογισμός να γίνει χρησιμοποιώντας την αναδρομική σχέση: Τμ. Πληροφορικής, Α.Π.Θ.

  4. Δυναμικός Προγραμματισμός ΙV Παράδειγμα (συνέχεια) Ποια είναι όμως η αποδοτικότητα του συγκεκριμένου αλγορίθμου; Τμ. Πληροφορικής, Α.Π.Θ.

  5. Δυναμικός Προγραμματισμός V Παράδειγμα (συνέχεια) Δηλαδή η αποδοτικότητα του αναδρομικού αλγορίθμου είναι τελικά που δεν είναι και πολύ καλή, επειδή συχνά η ίδια παράσταση υπολογίζεται περισσότερες από μία φορές. Η κατάσταση βελτιώνεται αν χρησιμοποιήσουμε το τρίγωνο του Pascal, όπου οι λύσεις των προηγούμενων βημάτων διατηρούνται σε έναν πίνακα και επαναχρησιμοποιούνται στην επίλυση των επόμενων βημάτων. Τμ. Πληροφορικής, Α.Π.Θ.

  6. Δυναμικός Προγραμματισμός VΙ Παράδειγμα (συνέχεια) Χρειάζεται μόνο ένας πίνακας διαστάσεως k και η αποδοτικότητα του αλγορίθμου είναι O(nk), θεωρώντας ως βασικές πράξεις τις προσθέσεις. Τμ. Πληροφορικής, Α.Π.Θ.

  7. Δυναμικός Προγραμματισμός VΙΙ Ο δυναμικός προγραμματισμός χρησιμοποιείται συχνά στη επίλυση προβλημάτων βελτιστοποίησης: η βέλτιστη λύση μιας σειράς επιλογών αποτελείται από βέλτιστες επί μέρους επιλογές (ΑΡΧΗ ΤΗΣ ΒΕΛΤΙΣΤΟΤΗΤΑΣ). Η αρχή αυτή δηλώνει ότι ανεξαρτήτως της πρώτης απόφασης, οι υπόλοιπες αποφάσεις πρέπει να είναι βέλτιστες σε σχέση με την κατάσταση που προκύπτει από αυτή την πρώτη απόφαση. Εκεί όπου η αρχή αυτή δε διατηρείται δεν μπορεί να εφαρμοσθεί ο δυναμικός προγραμματισμός. Όταν όμως η αρχή αυτή ισχύει τότε μία σχεδίαση δυναμικού προγραμματισμού μας δίνει πάντα τη βέλτιστη και σε καμία περίπτωση υποβέλτιστη λύση. Η δυσκολία στη σχεδίαση αλγορίθμων δυναμικού προγραμματισμού έγκειται στο ότι συνήθως δεν είναι προφανές ποιες επί μέρους λύσεις (υποπεριπτώσεις) χρησιμοποιούνται για τη λύση του προβλήματος, έτσι ώστε να σχηματισθεί μία αναδρομική εξίσωση για την τιμή της βέλτιστης λύσης. Τμ. Πληροφορικής, Α.Π.Θ.

  8. Δυναμικός Προγραμματισμός VΙΙΙ Παράδειγμα (Δυαδικό πρόβλημα του σάκου) Στο δυαδικό πρόβλημα του σάκου θέλουμε να γεμίσουμε ένα σάκο που έχει χωρητικότητα c. Από μία λίστα με n αντικείμενα πρέπει να επιλέξουμε τα αντικείμενα που πρόκειται να τοποθετηθούν στο σάκο. Κάθε αντικείμενο έχει ένα βάρος wi και ένα κέρδος pi. Σε μια εφικτή πλήρωση του σάκου το άθροισμα των βαρών των αντικειμένων που έχουν εισαχθεί δεν ξεπερνά τη χωρητικότητα του σάκου. Μία βέλτιστη πλήρωση επιτυγχάνει το βέλτιστο κέρδος. και Τμ. Πληροφορικής, Α.Π.Θ.

  9. Δυναμικός Προγραμματισμός ΙΧ Παράδειγμα - συνέχεια (Δυαδικό πρόβλημα του σάκου) Έστω ότι αποφασίζουμε για τις τιμές των xiμε τη σειρά 1, 2, ..., n. Αν θέσουμε x1=0, τότε η διαθέσιμη χωρητικότητα του σάκου για τα υπόλοιπα αντικείμενα είναι c. Αν θέσουμε x1=1 τότε η διαθέσιμη χωρητικότητα του σάκου είναι c-w1. Έστω ότι Μετά την πρώτη απόφαση έχουμε φθάσει στο πρόβλημα της πλήρωσης του σάκου με χωρητικότητα r. Υποθέστε ότι n=3, w=[100,14,10], p=[20,18,15] και c=116. Αν θέσουμε x1=1, τότε μετά από αυτή την απόφαση, η απομένουσα χωρητικότητα του σάκου είναι 16. Το [x2,x3]=[0,1] είναι μία λύση στο πρόβλημα των δύο αντικειμένων που απομένουν και επιστρέφει κέρδος 15. Ωστόσο δεν είναι η βέλτιστη λύση στο υπόλοιπο πρόβλημα των δύο αντικειμένων, επειδή των [x2,x3]=[1,0] είναι μία εφικτή λύση που επιστρέφει μεγαλύτερο κέρδος, 18. Έτσι, το x=[1,0,1] μπορεί να βελτιωθεί στο [1,1,0]. Τμ. Πληροφορικής, Α.Π.Θ.

  10. Δυναμικός Προγραμματισμός Χ Παράδειγμα - συνέχεια (Δυαδικό πρόβλημα του σάκου) Όταν οι βέλτιστες ακολουθίες αποφάσεων περιέχουν βέλτιστες υποακολουθίες αποφάσεων, μπορούμε να χρησιμοποιήσουμε αναδρομικές εξισώσεις, που ονομάζονται αναδρομικές εξισώσεις δυναμικού προγραμματισμού. Αν το f(i,y) δηλώνει την τιμή μιας βέλτιστης λύσης στο στιγμιότυπο του σάκου με απομένουσα χωρητικότητα y και απομένοντα αντικείμενα i, i+1, . . ., n, τότε και Τμ. Πληροφορικής, Α.Π.Θ.

  11. Δυναμικός Προγραμματισμός ΧΙ Παράδειγμα - συνέχεια (Δυαδικό πρόβλημα του σάκου) Η λύση του προβλήματος δίνεται τελικά από το f(1,c), που μπορεί να υπολογισθεί είτε με αναδρομή είτε με επανάληψη. Στην επαναληπτική λύση ξεκινάμε με το f(n,*), όπως δίνεται από την αρχική συνθήκη και μετά παίρνουμε το f(i,*) με τη σειρά i=n-1, n-2, …, 2 χρησιμοποιώντας την αναδρομική εξίσωση. ΑΝ ΟΜΩΣ ΕΠΙΛΕΧΘΕΙ Η ΧΡΗΣΗ ΑΝΑΔΡΟΜΗΣ ΤΟΤΕ ΠΡΕΠΕΙ ΝΑ ΠΡΟΣΕΞΟΥΜΕ ΩΣΤΕ ΝΑ ΑΠΟΦΕΥΓΕΤΑΙ Ο ΕΠΑΝΑΥΠΟΛΟΓΙΣΜΟΣ ΗΔΗ ΥΠΟΛΟΓΙΣΜΕΝΩΝ ΤΙΜΩΝ ΓΙΑΤΙ ΤΟΤΕ ΤΟ ΠΡΟΓΡΑΜΜΑ ΘΑ ΕΧΕΙ ΑΠΑΓΟΡΕΥΤΙΚΗ ΠΟΛΥΠΛΟΚΟΤΗΤΑ. Τμ. Πληροφορικής, Α.Π.Θ.

  12. Δυναμικός Προγραμματισμός ΧΙΙ Έστω ένας διαγωνισμός στον οποίο δύο ομάδες A και B παίζουν όχι περισσότερα από 2n-1 παιχνίδια και ο νικητής είναι αυτός που πρώτος θα κερδίσει n νίκες. Δεν υπάρχουν ισοπαλίες και η πιθανότητα να κερδίσει η A είναι p, ενώ η πιθανότητα να κερδίσει η Βείναι q. Έστω P(i,j) η πιθανότητα ο τελικός νικητής να είναι η Ααν αυτή χρειάζεται i νίκες ακόμη, ενώ η B χρειάζεται j νίκες. Τότε η πιθανότητα να κερδιθεί το πρώτο παιχνίδι είναι P(n,n). Η πιθανότητα να είναι νικητής η A είναι P(0,i)=1, 1in και ισχύει επίσης P(i,0)=0, 1in. Τμ. Πληροφορικής, Α.Π.Θ.

  13. Δυναμικός Προγραμματισμός XΙΙΙ Τελικά ισχύει double P(i,j) { if (i=0) return 1 elseif (j=0) return 0 else return pP(i-1,j)+qP(i,j-1)} Ο συγκεκριμένος αλγόριθμος δίνει την P(n,n) σε και επειδή έχει αποδειχθεί ότι συνεπάγεται ότι η αποδοτικότητα είναι O(4n) και Ω(4n /n) Τμ. Πληροφορικής, Α.Π.Θ.

  14. Δυναμικός Προγραμματισμός XΙV Εναλλακτικά, ο αλγόριθμος double series(n,p) { double P[n+1][n+1]; q=1-p; for (s=1;i<=n;s++) { P[0,s]=1; P[s,0]=0 Τμ. Πληροφορικής, Α.Π.Θ.

  15. Δυναμικός Προγραμματισμός XV for (k=1;k<=s-1;k++) P[k,s-k]pP[k-1,s-k]+qP[k,s-k-1]; } for (s=1;s<=n;s++) { for (k=0;k<=n-s;k++) P[s+k,n-k]pP[s+k-1,n-k]+qP[s+k,n-k-1] } return P[n,n] Ουσιαστικά τα στοιχεία μπαίνουν σε έναν πίνακα και υπολογίζονται συμπληρώνοντας τον διαγώνια. Πολυπλοκότητα θ(n2). Τμ. Πληροφορικής, Α.Π.Θ.

  16. Πολλαπλασιασμός αλυσίδας πινάκων Ι Έστω ότι θέλουμε να υπολογίσουμε το γινόμενο πινάκων Μ=Μ1Μ2…Μn Επειδή ο πολλαπλασιασμός πινάκων είναι προσεταιριστικός αυτό μπορεί να γίνει με διάφορους τρόπους: και σε κάθε περίπτωση μπορούμε να έχουμε διαφορετικό αριθμό πολλαπλασιασμών. Τμ. Πληροφορικής, Α.Π.Θ.

  17. Πολλαπλασιασμός αλυσίδας πινάκων ΙΙ ΠΑΡΑΔΕΙΓΜΑ Έστω πίνακες A 13X5, B 5X89, C 89X3 και D 3X34. Τότε (ΑΒ) 5785 πολλαπλασιασμοί (ΑΒ)C 3471 πολλαπλασιασμοί ((ΑΒ)C)D 1326 πολλαπλασιασμοί σύνολο: 10582 πολλαπλασιασμοί Άρα ((ΑΒ)C)D 10582 πολλαπλασιασμοί (AB)(CD) 54201 πολλαπλασιασμοί (Α(BC))D 2856 πολλαπλασιασμοί Α((BC)D) 4055 πολλαπλασιασμοί Α(Β(CD)) 26418 πολλαπλασιασμοί Τμ. Πληροφορικής, Α.Π.Θ.

  18. Πολλαπλασιασμός αλυσίδας πινάκων ΙΙΙ Μία λύση για να βρούμε την καλύτερη προσέγγιση θα ήταν να ερευνήσουμε όλες τις πιθανές περιπτώσεις. Αν n είναι όλες οι πιθανές περιπτώσεις τοποθέτησης παρενθέσεων, έστω ότι αρχικά αποφασίζουμε να τοποθετήσουμε παρενθέσεις μεταξύ του πίνακα i και i+1. Τότε, Μ=(Μ1Μ2...Μi)(Μi+1Mi+2…Mn) και ο συνολικός αριθμός περιπτώσεων είναι Μπορεί να αποδειχθεί ότι Τμ. Πληροφορικής, Α.Π.Θ.

  19. Πολλαπλασιασμός αλυσίδας πινάκων ΙV Τελικά η πολυπλοκότητα είναι Ω(4n/n2). Θα πρέπει να εφαρμοστεί η αρχή της βέλτιστης υποπερίπτω-σης. Έτσι, ο βέλτιστος τρόπος υπολογισμού του γινομένου απαιτεί να διαχωρίσουμε τους i πρώτους πίνακες από τους επόμενους, δηλαδή τα υπογινόμενα M1M2…Miκαι Mi+1…Mj . Tότε και τα συγκεκριμένα υπογινόμενα πρέπει να υπολογισθούν με βέλτιστο τρόπο. Αυτό σημαίνει εφαρμογή δυναμικού προγραμματισμού. Φτιάχνουμε έναν πίνακα με στοιχεία mij, 1ijn, όπου κάθε στοιχείο mij δίνει τη βέλτιστη λύση, δηλαδή τον μικρότερο δυνατό αριθμό πολλαπλασιασμών για τον υπολογισμό του υπογινομένου MiMi+1…Mj. Η συνολική λύση του προβλήματος είναι το στοιχείο m1n. Τμ. Πληροφορικής, Α.Π.Θ.

  20. Πολλαπλασιασμός αλυσίδας πινάκων V Έστω ότι οι διαστάσεις των πινάκων Miδίνονται από τους αριθμούς di, 0in, έτσι ώστε η διάσταση του πίνακα Mi είναι di-1επί di. Φτιάχνουμε τον πίνακα mijξεκινώντας από τη βασική διαγώνιο και συμπληρώνοντας βήμα προς βήμα μια νέα μικρότερη διαγώνιο, έτσι ώστε j-i=s. Τμ. Πληροφορικής, Α.Π.Θ.

  21. Πολλαπλασιασμός αλυσίδας πινάκων VI ΕΦΑΡΜΟΓΗ ΑΛΓΟΡΙΘΜΟΥ ΣΤΟ ΠΑΡΑΔΕΙΓΜΑ για s=2 το βέλτιστο είναι το m13 άρα το (ABC)D για s=1 το βέλτιστο είναι το m23 άρα το (A(BC))D Τμ. Πληροφορικής, Α.Π.Θ.

  22. Συντομότερα μονοπάτια Ι Έστω G=<N,A> ένας κατευθυνόμενος γράφος. Σε κάθε τόξο αντιστοιχεί ένα μη αρνητικό μήκος (ή βάρος). Θέλουμε να υπολογίσουμε το μήκος του συντομότερου μονοπατιού για κάθε ζεύγος κορυφών. Έστω ότι οι κορυφές του G αριθμούνται από το 1 μέχρι το n, Ν={1,2,…,n}και ο πίνακας L δίνει το μήκος του κάθε τόξου, με L[i,i]=0 και L[i,j]0 αν ij και L[i,j]= αν το αντίστοιχο τόξο δεν υπάρχει. Εδώ βρίσκει εφαρμογή η αρχή της βελτιστότητας: αν υπάρχει η κορυφή k στο συντομότερο μονοπάτι από το i στοj, τότε το μέρος του μονοπατιού από το i στο k και αυτό από το k στο j, είναι επίσης βέλτιστα. Τμ. Πληροφορικής, Α.Π.Θ.

  23. Συντομότερα μονοπάτια ΙΙ Χρησιμοποιούμε έναν πίνακα D που κάθε στοιχείο του δίνει το μήκος για το συντομότερο μονοπάτι μεταξύ των δύο κορυφών. Αρχικά ο D ταυτίζεται με τον L. Ακολουθούν n επαναλήψεις (όσες και οι κορυφές). Μετά από την επανάληψη k, ο D δίνει το μήκος του συντομότερου μονοπατιού που μπορεί να περνάει από τις κορυφές {1,2,…,k}. Άρα στο επαναληπτικό βήμα k ο αλγόριθμος ελέγχει για κάθε ζεύγος κορυφών (i,j)αν υπάρχει μονοπάτι που χρησιμοποιεί την κορυφή k και είναι καλύτερο από το ήδη υπολογισμένο βέλτιστο μονοπάτι που κάνει χρήση των κορυφών {1,2,…,k-1}. Αν συμβολίσουμε με Dkτον πίνακα D μετά από το k επαναληπτικό βήμα, τότε Τμ. Πληροφορικής, Α.Π.Θ.

  24. Συντομότερα μονοπάτια ΙΙΙ Δεχόμαστε ότι το βέλτιστο μονοπάτι που περνά από την κορυφή k δεν επισκέπτεται την κορυφή αυτή δύο φορές. Ο αλγόριθμος έχει ως εξής: int array[n][n]Floyd(L[n][n]) { int array D[n,n]; DL; for (k=0;k<n;k++) { for (i=0;i<n;i++) for (j=0;j<n;j++) } return D Τμ. Πληροφορικής, Α.Π.Θ.

  25. Συντομότερα μονοπάτια ΙV Ο συγκεκριμένος αλγόριθμος έχει πολυπλοκότητα Θ(n3). Εναλλακτικά, θα μπορούσε να εφαρμοσθεί ο αλγόριθμος του Dijkstra n φορές επιλέγοντας κάθεφορά ως αφετηρία και μια διαφορετική κορυφή. Αυτή η προσέγγιση θα είχε πολυπλοκότητα n x Θ(n2)=Θ(n3). Από την άλλη αν χρησιμοποιήσουμε την παραλλαγή του αλγορίθμου του Dijkstra που κάνει χρήση σωρού και λίστες με αποστάσεις για τους γειτονικούς κόμβους, τότε η αποδοτικότητα είναι n x O((α+n)logn)=O((αn+n2)logn), όπου α ο αριθμός των τόξων. Αν ο γράφος είναι αραιός (α<< n2) ίσως είναι προτιμότερο να χρησιμοποιηθεί ο αλγόριθμος του Dijkstra n φορές, διαφορετικά είναι προτιμητέος ο αλγόριθμος του Floyd. Τμ. Πληροφορικής, Α.Π.Θ.

  26. Συντομότερα μονοπάτια V Αν αυτό που μας ενδιαφέρει δεν είναι απλά το μήκος των συντομότερων μονοπατιών αλλά και από ποιες κορυφές αποτελούνται, τότε χρησιμοποιούμε ένα δεύτερο πίνακα P με αρχικές τιμές 0. Τότε ο εσωτερικός βρόχος γίνεται: if D[i,k]+D[k,j]<D[i,j] then D[i,j]D[i,k]+D[k,j] P[i,j]j Όταν ο αλγόριθμος σταματά το P[i,j] περιέχει τον αριθμό της τελευταίας επανάληψης όπου άλλαξε το D[i,j]. Έτσι, για να βρούμε πιο είναι το συντομότερο μονοπάτι μεταξύ των i και j βλέπουμε στο στοιχείο P[i,j]. Αν P[i,j]=0, τότε το συντομότερο μονοπάτι είναι το τόξο που τα συνδέει, διαφορετικά αν P[i,j]=k τότε το συντομότερο μονοπάτι περνά από την κορυφή k. Μετά βλέπουμε τα P[i,k] και P[k,j], κ.ο.κ. Τμ. Πληροφορικής, Α.Π.Θ.

  27. Συντομότερα μονοπάτια VΙ ΠΑΡΑΔΕΙΓΜΑ Τμ. Πληροφορικής, Α.Π.Θ.

  28. Συντομότερα μονοπάτια VΙΙ Τμ. Πληροφορικής, Α.Π.Θ.

  29. Βέλτιστα δένδρα αναζήτησης Ι • Ένα δυαδικό δένδρο είναι δένδρο αναζήτησης αν η τιμή κάθε εσωτερικού κόμβου είναι μεγαλύτερη ή ίση από τις τιμές των αριστερών απογόνων και μικρότερη ή ίση από τις τιμές των δεξιών απογόνων. Τμ. Πληροφορικής, Α.Π.Θ.

  30. Βέλτιστα δένδρα αναζήτησης ΙΙ Στο πρώτο δένδρο, για να βρεθεί το γράμμα Ε χρειάζονται δύο συγκρίσεις, ενώ στο δεύτερο δένδρο αρκεί μία σύγκριση. Αν για όλα τα στοιχεία του δένδρου υπάρχει η ίδια πιθανότητα αναζήτησης, τότε κατά μέσο όρο χρειάζονται συνολικά (2+3+1+3+2+4+3+4)/8=22/8 συγκρίσεις για το πρώτο δένδρο και (4+3+2+3+1+3+2+3)/8=21/8 συγκρίσεις για το δεύτερο δένδρο. Τμ. Πληροφορικής, Α.Π.Θ.

  31. Βέλτιστα δένδρα αναζήτησης ΙΙΙ • Έστω ότι έχουμε ένα διατεταγμένο σύνολο διακριτώνκλειδιών c1<c2<…<cn. Ακόμη έστω η πιθανότητα το αντικείμενο της αναζήτησης να είναι το κλειδί ci ότι είναι pi, με • Έστω ότι το βάθος της ρίζας ενός δένδρου είναι 0, το βάθος των απογόνων της είναι 1 κ.ο.κ. Αν ένα κλειδί ci βρίσκεται σε κόμβο με βάθος di, τότεγια να βρεθεί χρειάζονται di+1 συγκρίσεις. • Έτσι, για ένα δένδρο, ο μέσος αριθμός συγκρίσεων, που χρειάζονται είναι και μας ενδιαφέρει να επιλέξουμε τη ρίζα του δένδρου, έτσι ώστε ο αριθμός αυτός να ελαχιστοποιηθεί. Τμ. Πληροφορικής, Α.Π.Θ.

  32. Βέλτιστα δένδρα αναζήτησης ΙV • Αν θεωρήσουμε τα διαδοχικά κλειδιά ci, ci+1, …, cj, ji, ας υποθέσουμε ότι στο βέλτιστο δένδρο που περιέχει τα n κλειδιά η σειρά αυτή των j-i+1 κλειδιών απαρτίζεται από τους κόμβους ενός υποδένδρου. • Αν το κλειδί ck, ikj υπάρχει στον κόμβο με βάθος dk* στο υποδένδρο, τότε ο μέσος αριθμός συγκρίσεων, που εκτελούνται στο υποδένδρο όταν γίνεται αναζήτηση ενός κλειδιού του δένδρου είναι • Παρατηρούμε ότι η έκφραση που δίνει τον μέσο αριθμό συγκρίσεων έχει την ίδια μορφή με την C και η όποια αλλαγή στο υποδένδρο δεν επηρεάζει τη συνεισφορά στο C άλλων διακριτών υποδένδρων από αυτό που θεωρήσαμε. Τμ. Πληροφορικής, Α.Π.Θ.

  33. Βέλτιστα δένδρα αναζήτησης V • Άρα: σε ένα βέλτιστο δένδρο, όλα τα υποδένδρο πρέπει επίσης να είναι βέλτιστα σε σχέση με τα κλειδιά που περιέχουν. • Ας θεωρήσουμε και έστω Cijο μέσος αριθμός συγκρίσεων που εκτελούνται σε ένα βέλτιστο υποδένδρο, που περιέχει τα κλειδιά ci, ci+1,…, cj, όταν αναζητείται ένα κλειδί του μεγάλου δένδρου (θεωρούμε Cij=0 για j=i-1). • Ένα από τα κλειδιά έστω k πρέπει να βρίσκεται στη ρίζα του υποδένδρου. Στο σχήμα που ακολουθεί L είναι ένα βέλτιστο υποδένδρο που περιέχει τα κλειδιά ci, ci+1,…, ck-1και R είναι ένα βέλτιστο υποδένδρο που περιέχει τα κλειδιά ck+1,…,cj. Τμ. Πληροφορικής, Α.Π.Θ.

  34. Βέλτιστα δένδρα αναζήτησης VI • Όταν λοιπόν ψάχνουμε για ένα κλειδί του δένδρου, η πιθανότητα αυτό να βρίσκεται στα ci, ci+1,…,cjείναι mjj.Τότε γίνεται μία το πολύ σύγκριση με το ck και ένας αριθμός συγκρίσεων για το υποδένδρο L και για το υποδένδρο R. Άρα, • Εφόσον το k επιλέγεται έτσι ώστε να ελαχιστοποιείται το Cij, τότε Cij=mij+min1kj (Ci,k-1+ Ck+1,j) με Cii=pi Τμ. Πληροφορικής, Α.Π.Θ.

  35. Βέλτιστα δένδρα αναζήτησης VII ΠΑΡΑΔΕΙΓΜΑ i 1 2 3 4 5 pi 0.30 0.05 0.08 0.45 0.12 Πρώτα υπολογίζουμε τον πίνακα m και στη συνέχεια και με παρόμοιο τρόπο C23=0.18, C34=0.61 και C45=0.69 Τμ. Πληροφορικής, Α.Π.Θ.

  36. Βέλτιστα δένδρα αναζήτησης VIII ΣΥΝΕΧΕΙΑ ΠΑΡΑΔΕΙΓΜΑΤΟΣ Τμ. Πληροφορικής, Α.Π.Θ.

  37. Βέλτιστα δένδρα αναζήτησης IX ΣΥΝΕΧΕΙΑ ΠΑΡΑΔΕΙΓΜΑΤΟΣ Η πολυπλοκότητα του αλγορίθμου είναι Θ(n3) Τμ. Πληροφορικής, Α.Π.Θ.

  38. Το πρόβλημα του πλανόδιου πωλητή I • Σκοπός είναι η εύρεση του συντομότερου κλειστού κυκλώματος, έτσι ώστε το σχηματιζόμενο μονοπάτι να περνά ακριβώς μία φορά από όλες τις κορυφές του γράφου. • Έστω G=<N, A> ένας κατευθυνόμενος γράφος. Θεωρούμε ότι N={1, 2, . . ., n} και τα μήκη των τόξων συμβολίζονται με Lij, όπου L[i, i]=0, L[i, j]0 αν ij και L[i,j]= αν η ακμή (i, j)δεν υπάρχει. • Έστω χωρίς βλάβη της γενικότητας ότι το κύκλωμα αρχίζει και τελειώνει στην κορυφή 1. Άρα υπάρχει τόξο (1, j), j1, που ακολουθείται από μονοπάτι από το j στο 1, που περνά μόνο μία φορά από κάθε κορυφή του συνόλου N\(1, j). Αν το κύκλωμα είναι βέλτιστο, τότε βέλτιστο είναι επίσης το μονοπάτι από το j στο 1. Τμ. Πληροφορικής, Α.Π.Θ.

  39. Το πρόβλημα του πλανόδιου πωλητή IΙ • Ας θεωρήσουμε το σύνολο των κόμβων SN\{1} και έναν κόμβο iN\S, με i=1 να επιτρέπεται μόνο όταν S=N\{1}. Ορίζουμε g(i,S) το μήκος του συντομότερου μονοπατιού από τον κόμβο i στον κόμβο 1, που περνά ακριβώς μία φορά από κάθε κόμβο του S. Τότε, σύμφωνα με τον ορισμό αυτό g(1,N\{1}) είναι το μήκος του βέλτιστου μονοπατιού. • Για να είναι όμως βέλτιστο ισχύει • Πιο γενικά, αν i1, S , S N\{1} και iS, Τμ. Πληροφορικής, Α.Π.Θ.

  40. Το πρόβλημα του πλανόδιου πωλητή IΙΙ • Επιπλέον, • Έτσι οι τιμές g(i,S), όταν το σύνολο S είναι κενό είναι γνωστές. Αρχικά εφαρμόζουμε τη σχέση για όλα τα σύνολα S που περιέχουν ακριβώς έναν κόμβο (διαφορετικό από τον 1). Μετά εφαρμόζουμε την ίδια σχέση για τον υπολογισμό των g για όλα τα σύνολα S που περιέχουν δύο κόμβους διαφορετικούς του 1, κ.ο.κ. Όταν γίνει γνωστή η τιμή g(j,N\{1,j}) για όλους τους κόμβους j εκτός από τον κόμβο 1, τότε μπορούμε να χρησιμοποιήσουμε την και να επιλύσουμε το πρόβλημα. Τμ. Πληροφορικής, Α.Π.Θ.

  41. Το πρόβλημα του πλανόδιου πωλητή IV ΠΑΡΑΔΕΙΓΜΑ Έστω G ένας πλήρης γράφος με κορυφές όπως στο σχήμα Τμ. Πληροφορικής, Α.Π.Θ.

  42. Το πρόβλημα του πλανόδιου πωλητή V ΠΑΡΑΔΕΙΓΜΑ (συνέχεια) αρχικές συνθήκες g(2,)=5, g(3,)=6, g(4,)=8 και έχουμε g(2,{3})=L23+g(3,)=15 g(2,{4})=L24+g(4,)=18 και όμοια g(3,{2})=18 g(3,{4})=20 g(4,{2})=13 g(4,{3})=15 Τμ. Πληροφορικής, Α.Π.Θ.

  43. Το πρόβλημα του πλανόδιου πωλητή VI ΠΑΡΑΔΕΙΓΜΑ (συνέχεια) g(2,{3,4}) =min (L23+g(3,{4}), L24+g(4,{3})) =min(29,25)=25 g(3,{2,4}) =min(L32+g(2,{4}), L34+g(4,{2})) =min(31,25)=25 g(4,{2,3}) =min(L42+g(2,{3}), L43+g(3,{2}) =min(23,27)=23 και τέλος g(1,{2,3,4})=min(L12+g(2,{3,4}), L13+g(3,{2,4}), L14+g(4,{2,3})) =min(35,40,43)=35 Τμ. Πληροφορικής, Α.Π.Θ.

  44. Το πρόβλημα του πλανόδιου πωλητή VII • Για τον υπολογισμό των κορυφών από όπου περνά το βέλτιστο κύκλωμα χρειάζεται ακόμη μία συνάρτηση J(i,S) η οποία παίρνει κάθε φορά την τιμή j της κορυφής που ελαχιστοποιεί το εκάστοτε g ΣΥΝΕΧΕΙΑ ΠΑΡΑΔΕΙΓΜΑΤΟΣ 1 J(1,{2,3,4})=2  J(2,{3,4})=4  J(4,{3})=3  1 • Η πολυπλοκότητα είναι Θ(n22n) και είναι καλύτερη από ότι αν είχαμε δοκιμάσει όλα τα πιθανά μονοπάτια: n! Τμ. Πληροφορικής, Α.Π.Θ.

  45. Το πρόβλημα του πλανόδιου πωλητή VIII int g(i,S) { if (S=) return L[i,1]; ans=; for (each jS) { distviaj=L[i,j]+g(j,S\{j}); if (distviaj<ans) ans =distviaj; } return ans; } Top-down, μη αποδοτικός υπολογισμός Ω((n-1)!) Τμ. Πληροφορικής, Α.Π.Θ.

  46. Το πρόβλημα του πλανόδιου πωλητή IX πιο αποδοτικός τρόπος υπολογισμού: έστω ότι αρχικά όλες οι τιμές του πίνακα gtab είναι -1 int g(i,S) { if (S=) return L[i,1]; if (gtab[i,S]0) return gtab[i,S]; ans=; for (each jS) { distviaj =L[i,j]+g(j,S\{j}); if (distviaj<ans) ans = distviaj; } gtab[i,S]=ans; return ans; } Τμ. Πληροφορικής, Α.Π.Θ.

More Related