Κώδικας σχεδίασης Λογισµικής ιαγραµµατικής Οντολογίας Αρχιµήδης ΙΙΙ Υποέργο 18 2013
Ενα µάγµα µπορεί να εξελιχθεί κάτω από την επίδραση τριών ειδών επιρροών. Την εξέλιξη αυτή συµβολίζουµε µε ένα απλό τόξο το οποίο ενώνει το ίδιο µάγµα πριν και µετά από την εξέλιξη. Στο επόµενο σχεδιάγραµµα µία λίστα Α εξελίσσεται. Θα µπορούσαµε να υιοθετήσουµε τους συµβολισµούς Α (για πριν) και Α' (για µετά), αλλά η ύπαρξη ενός βέλους (άρα µιας χρονικής, αιτιατής, προτεραιότητας) δε µας το επιβάλλει. Μην ξεχνάµε ότι το Α αντιπροσωπεύει ένα συγκεκριµένο υποσύνολο της µνήµης που εξελίσσεται. Ας υποθέσουµε τώρα ότι αυτή η εξέλιξη οφείλεται σε δύο επιρροές: δραστηριοποίηση και αντιγραφή. Μπορούµε σ' αυτή την περίπτωση να συγχωνεύσουµε διαγραµµατικά τις δύο επιρροές στο ίδιο το τόξο εξέλιξης. Επίσης µπορούµε σε αυτό το σηµείο να διακοσµήσουµε αυτό το τόξο για να πούµε π.χ. ότι αυτές οι επιρροές αφορούν όλα τα στοιχεία του µάγµατος προσθέτοντας µια µικρή κάθετο (βλ. σχετική παράγραφο πιο κάτω). Εδώ έχουµε ένα µάγµα του οποίου εξέλιξη οφείλεται στο γεγονός ότι αντιγράψαµε όλα τα στοιχεία του Α συµβουλευόµενοι όλα τα στοιχεία του. Αυτό είναι το κλασικό µοντέλο συλλογιστικής οντολογίας µιας ρουτίνας ταξινόµησης (sort). Στο επόµενο παράδειγµα έχουµε µία εξέλιξη του Β καθότι αντιγράφουµε στα στοιχεία του όλα τα στοιχεία του Α. Πρόκειται δηλαδή για µία συγχώνευση. Παρατηρούµε επίσης ότι διακοσµήσαµε το βέλος εξέλιξης µε το σύµβολο < που σηµαίνει (ακολουθώντας τη φορά του βέλους) ότι το µάγµα Β ήταν µικρότερο πριν από την εξέλιξη. < 2
ίνουµε ένα ανάλογο παράδειγµα αν εισάγαµε το Α σε µία υποδοµή του Β. < Ας δούµε τώρα τι είδους διακοσµήσεις µπορούµε να βάλουµε στις διάφορες επιρροές. +/- Αυτή η διακόσµηση αφορά την επιρροή δραστηριοποίησης και την επιρροή υπολογισµού. Στην πρώτη σηµαίνει ότι η αύξηση της τιµής του αυξάνει την πιθανότητα δραστηριοποίησης. Π.χ. στη συνθήκη (a > b) οι επιρροές του a και του b είναι επιρροές δραστηριοποίησης, η πρώτη όµως θα διακοσµηθεί µε "+" ενώ η δεύτερη µε "-". Όσον αφορά την επιρροή υπολογισµού, η διακόσµηση "+" ή " " σηµαίνει ότι υπάρχει µία ποιοτική σχέση µονοτονίας µεταξύ της εισόδου και του αποτελέσµατος. Στο επόµενο ποιοτικό διάγραµµα, υπολογίζουµε το µέγιστο και το ελάχιστο ενός πίνακα Α. + max, min Έχουµε κι εδώ δύο επιρροές (δραστηριοποίηση και αντιγραφή) καθότι συγκρίνουµε τα στοιχεία του Α προκειµένου να δραστηριοποιήσουµε την αντιγραφή των δύο στοιχείων. Σηµειωτέον ότι για αυτή την περίπτωση θα µπορούσαµε να είχαµε προσθέσει και τη διακόσµηση της µικρής καθέτου (µόνο για την δραστηριοποίηση και χωρίς να κάνουµε συγχώνευση) για να δείξουµε ότι είµαστε αναγκασµένοι να συµβουλευτούµε όλα τα στοιχεία του µάγµατος Α. Η χρήση της διακόσµησης "+" σηµαίνει ότι όταν το µάγµα αυξάνει στην τιµή (ή ακόµα και στο µέγεθος στην προκειµένη περίπτωση) αυτό έχει µία αυξητική επιρροή στο µέγιστο και στο ελάχιστο. Η κάθετος (ως προς το βέλος) που διακοσµεί µια επιρροή σηµαίνει ότι η επιρροή αφορά το σύνολο των στοιχείων του επηρεάζοντα. Στο επόµενο παράδειγµα ένα σύνολο λέξεων W εµπλουτίζεται µε τους χαρακτήρες κενό ή αλλαγή γραµµής ανάλογα µε το µήκος της κάθε λέξης. Βλέπουµε εδώ ότι όλες οι λέξεις αντιγράφονται, αλλά και όλες οι λέξεις εξετάζονται προκειµένου να παρεµβάλουµε µεταξύ τους κενά ή την αλλαγή γραµµής. Εδώ έχουµε ένα κλασικό µοντέλο επεξεργασίας κειµένου (justification). Παρατηρούµε επίσης ότι το µέγεθος του αρχικού µάγµατος αυξήθηκε. 3
W space, return < W @ Το σύµβολο at χρησιµοποιείται για να δείξουµε ότι οι επιρροές δεν αφορούν το περιεχόµενο της µνήµης αλλά τη διεύθυνσή της. Ανάλογα µε τη θέση του (αρχή ή τέλος του βέλους) δηλώνουµε από (σε) ποιό µάγµα προέρχονται (προορίζονται) οι διευθύνσεις. Στο επόµενο παράδειγµα επιθυµούµε να ανταλλάξουµε τις τιµές του µέγιστου µε το ελάχιστο. Γι αυτό το σκοπό εξετάζουµε τα στοιχεία του Α και αποθηκεύουµε στις µνήµες max, min τις διευθύνσεις του µέγιστου και ελάχιστου (και όχι τις τιµές τους). Χρησιµοποιούµε στη συνέχεια αυτές τις δύο διευθύνσεις για να τις αντιγράψουµε ανταλλάσσοντας έτσι τα περιεχόµενά τους. @ max, min 1, 2, 3... n >1, <= 4, κ.λ.π Μπορούµε, προσθέτοντας έναν αριθµό ή µια ανισότητα σε µια επιρροή ή µια εξέλιξη, να προσδιορίσουµε πόσα (ή το πολύ ή το ελάχιστο) στοιχεία αλλάζουν ή συµµετέχουν στην επιρροή. Στο επόµενο παράδειγµα αντιγράφουµε όλα τα στοιχεία ενός µάγµατος Α σε δύο υποµάγµατα (χωρίς όνοµα) του Β. ύο στοιχεία από το κάθε υποµάγµα µετατρέπονται σύµφωνα µε µία εσωτερική διαδικασία. 4
= 2 = 2 <, <=, >, >= Χρησιµοποιούµε αυτά τα σύµβολα για να εκφράσουµε τη µεταβολή µεγέθους ενός µάγµατος πριν και µετά από µια εξέλιξη. Για παράδειγµα, ας πάρουµε τα ποιοτικά µοντέλα των ρουτινών pop και push σε µια στοίβα Α. Παρατηρούµε ότι στην pop (αριστερά στο επόµενο σχεδιάγραµµα) το µέγεθος του Α είναι µεγαλύτερο από µετά. Το αντίθετο ισχύει για την push (δεξιά στο σχεδιάγραµµα). > a a < L, G, C Τα τρία αυτά σύµβολα αφορούν µόνο τα βέλη εξέλιξης και εκφράζουν την τοπολογία των στοιχείων που υπέστησαν την αλλαγή. L(ocal) : η µετατροπή ήταν τοπική. Αφορά µόνο µερικά στοιχεία του µάγµατος. G(lobal) : η µετατροπή είναι καθολική. C(onnected) : τα στοιχεία που υπέστησαν την µετατροπή αποτελούν ένα συνεκτικό υποσύνολο του µάγµατος. Για παράδειγµα, αλλάζουν τρία διαδοχικά στοιχεία σε έναν πίνακα ή µία ολόκληρη στήλη σε ένα δισδιάστατο πίνακα. Στη συνέχεια δίνουµε µερικά παραδείγµατα εφαρµογής της ποιοτικής οντολογίας. Όλα τα παραδείγµατα δεν έχουν αναγκαστικά όλες τις διακοσµήσεις. 1) Υπολογισµός του µέγιστου και του ελάχιστου ενός πίνακα. 5
2) Υπολογισµός του µέσου όρου mean των στοιχείων ενός πίνακα Α, που είναι µεγαλύτερα ενός ορίου threshold. max, min threshold mean 3) Αρχικοποίηση ενός πίνακα µε την αρχική τιµή initvalue. initvalue 4) Στο επόµενο σχεδιάγραµµα εξετάζουµε αν το στοιχείο elem ανήκει στον πίνακα Α. Παρατηρούµε ότι η απάντηση στηρίζεται σε µία αντιγραφή από µία δοµή που περιέχει µόνο δύο άτοµα yes, no. yes, no elem answer 6
5) Το κλασικό πρόβληµα knapsack. ιαθέτουµε ένα σύνολο αντικειµένων µε διαφορετικές αξίες και βάρη. ιαθέτουµε ένα σάκο Sack µε περιορισµένη αντοχή (capacity) στο βάρος. Ποιά είναι τα αντικείµενα που πρέπει να επιλέξουµε έτσι ώστε να αντέξει το συνολικό βάρος (weight) ο σάκος µας αλλά και να µεγιστοποιούν τη συνολική αξία (price); K capacity Sack weight, price 6) Μετάφραση ενός αρχείου χαρακτήρων στον αντίστοιχο SCII κώδικά τους. Chars 0..255 Codified 7) Υπολογισµός του µέσου όρου ηλικίας από ένα σύνολο φοιτητών που είναι µεγαλύτεροι από ένα όριο. Ας υπογραµµιστεί ότι ακολουθούµε τη φιλοσοφία του µάγµατος και δεν προσδιορίζουµε, εφόσον δεν υπάρχει αµφισηµία, σε ποιά υποδοµή τοποθετείται η µεταβλητή age. Students age threshold mean_age 8) Μεταφορά ορισµένων στοιχείων του µάγµατος Α στο µάγµα Β. 7
> < 9) Στο επόµενο παράδειγµα τα µάγµατα Α και Β δεν είναι οµοιόµορφα, περιέχουν διευθύνσεις καθώς και τιµές. Χρησιµοποιούµε το περιεχόµενο µερικών διευθύνσεων του Α για να εντοπίσουµε ορισµένες διευθύνσεις στο Β και να αντιγράψουµε το περιεχόµενό τους στο Α. Οι διευθύνσεις του Β σβήνονται ενώ το µέγεθος του Α παραµένει αµετάβλητο. @ @ > 10) Στο επόµενο σχήµα έχουµε δύο µάγµατα Β και C. Η διεύθυνση του Β µας επιτρέπουν να κάνουµε υπολογισµούς που αφορούν το Α. Επίσης από το C θα αντιγράψουµε ορισµένα αντικείµενα συγκρίνοντάς µε το a. Το νέο µάγµα Α θα εξελιχθεί εκ νέου υπολογιστικά και µε αντιγραφή ορισµένων στοιχείων του. 8
C @ a 11) Τέλος δίνουµε ένα παράδειγµα ανώµαλου σχήµατος. Πράγµατι η εξέλιξη του, δηλαδή η αύξηση του µεγέθους του οφείλεται µόνο στη χρήση (χωρίς υπολογισµό ή αντιγραφή) των στοιχείων του. Αυτό είναι αδύνατο. < Στη συνέχεια θα δούµε ποιές είναι οι επιπτώσεις µιας τέτοιας προσέγγισης στην ανάλυση και τον έλεγχο ενός αλγόριθµου. Και για να γίνει αυτό θα πρέπει να πάµε πιο µακριά και να δούµε πώς οι 9
κλασικές φυσικές έννοιες της ποιοτικής συλλογιστικής (συνέχεια, συνεκτικότητα, παράγωγος, οριακές συµπεριφορές, τάξεις σύγκρισης για να ξέρουµε αν κάτι αυξάνεται ή µειώνεται) µεταφράζονται στον κόσµο των αλγόριθµων. Για να γίνει αυτό πρέπει να εµπλουτίσουµε την λογισµική οντολογία µας µε αλγεβρικές δοµές που επιτρέπουν την αντιµετώπιση µιας αλγοριθµικής µετατροπής σαν να ήταν µια κλασική µαθηµατική σχέση. 10