Τεχνολογίες Υλοποίησης Αλγορίθµων

Σχετικά έγγραφα
Τεχνολογίες Υλοποίησης Αλγορίθµων

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αντικειμενοστραφής Προγραμματισμός

Τεχνολογίες Υλοποίησης Αλγορίθµων

Δομές Δεδομένων Boost C++ Libraries. 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

Boost - Boost Graph Library C++ library

Οντοκεντρικός Προγραμματισμός

Τεχνολογίες Υλοποίησης Αλγορίθµων

ΗΥ-150. Προγραμματισμός

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

ΗΥ-150. Προγραμματισμός

Προγραμματισμό για ΗΜΥ

Οντοκεντρικός Προγραμματισμός

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

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

Αντικειµενοστρεφής Προγραµµατισµός

Συναρτήσεις και Πίνακες

Κλάσεις και αντικείμενα #include <iostream.h<

Εισαγωγή στην πληροφορική

Επανάληψη για τις Τελικές εξετάσεις

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Δομές Δεδομένων

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

n true false if t then t else t u t t b t emptylist cons t t t t λx.t u ::= head tail isempty

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

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

Τεχνολογίες Υλοποίησης Αλγορίθµων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

Ανάπτυξη και Σχεδίαση Λογισμικού

Περιεχόμενα. Προλεγόμενα... ix Κεφάλαιο 1 Εισαγωγή Κεφάλαιο 2 Δεδομένα και εκφράσεις Κεφάλαιο 3 Λογικές συνθήκες και δομές ελέγχου...

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Σχήµα 4.1: Εισαγωγή βρόγχου while-loop.

Δομημένος Προγραμματισμός (ΤΛ1006)

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

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Τεχνολογίες Υλοποίησης Αλγορίθµων

Βασικά της γλώσσας JAVA

Πληροφορική 2. Γλώσσες Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στη γλώσσα προγραμματισμού C++

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραµµατισµός. Αναδροµή (1/2)

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Αναδρομή

Προγραμματισμός Η/Υ (ΤΛ2007 )

Κλάσεις και Αντικείµενα

Ευφυής Προγραμματισμός

Standard Template Library (STL) C++ library

Δομημένος Προγραμματισμός

Οντοκεντρικός Προγραμματισμός

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Ηλεκτρονικοί Υπολογιστές

Προγραμματισμός Αναδρομή

Γλώσσες Προγραμματισμού

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

B. Ενσωμάτωση Ιθαγενών Μεθόδων

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

Αντικειμενοστραφής Προγραμματισμός

Εισαγωγή στην επιστήμη των υπολογιστών

Εισαγωγή στον Προγραμματισμό

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Δυναμική μνήμη με πίνακες και λίστες

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

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

Εισαγωγή στην πληροφορική

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΕΠΛ 034: Εισαγωγήστον ΠρογραµµατισµόγιαΗΜΥ

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Transcript:

Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών Βιβλιοθήκη Boost, Μεταπρογραµµατισµός Αρχετύπων, Γραφικές παραστάσεις 1 / 19

Boost Lambda Library Το πρόβληµα Η STL παρέχει πολλούς έτοιµους αλγόριθµους (π.χ. sort, find) των οποίων η συµπεριφορά µπορεί να µεταβληθεί µε χρήση κατάλληλων functors. Η δηµιουργία ενός ξεχωριστού functor για χρήση µόνο σε ένα σηµείο του προγράµµατος είναι σχετικά επίπονη. Το αποτέλεσµα είναι συνήθως η χρήση πιο παραδοσιακών κατασκευών (π.χ. for loop αντί για for_each()). 2 / 19

Boost Lambda Library Μία λύση Το Ϲητούµενο είναι η δυνατότητα ορισµού µικρών συναρτήσεων, κατευθείαν στο σηµείο που απαιτείται το functor. Η δυνατότητα αυτή υπάρχει στις λεγόµενες συναρτησιακές γλώσσες (functional languages), αλλά και στη C++ (πρότυπα C++11 και C++14). 3 / 19

Boost Lambda Library - Θεωρία Ορισµός Ο συµβολισµός lambda είναι ένας τρόπος αναπαράστασης συναρτήσεων. Χρησιµοποιείται γενικά για τη ϑεωρητική ανάλυση του προγραµµατισµού (π.χ. lambda calculus). Η ϐασική σύνταξη είναι: lambda x 1... x n : e Ορίζεται έτσι µια ανώνυµη συνάρτηση µε παραµέτρους x 1... x n και σώµα e. Παράδειγµα lambda x y : x+y Εφαρµογή: > f=(lambda x y : x+y) > f(2,3) > 5 4 / 19

Boost Lambda Library - Εφαρµογές Οι υψηλού επιπέδου γλώσσες προγραµµατισµού και κυρίως οι λεγόµενες συναρτησιακές γλώσσες (π.χ. Haskell, OCaml) χρησιµοποιούν παρόµοια σύνταξη (π.χ. στη Haskell \x y -> x+y). Η boost δεν χρησιµοποιεί την κλασική σύνταξη, αλλά απεικονίζει τα ορίσµατα µε placeholders: _1 έως _9. 5 / 19

Boost Lambda Library - Παράδειγµα Οπως ϕαίνεται από το παράδειγµα της sort() η σύνταξη γίνεται περίπλοκη για ενδιαφέρουσες εκφράσεις lambda. Γενικά η ϐιβλιοθήκη Boost lambda έχει διάφορους τελεστές για ειδικές περιπτώσεις, όπως µεταβίβαση σε άλλες συναρτήσεις κτλ. for_each(v.begin(), v.end(), _1 + 1); sort(v.begin, v.end(), *_1 < *_2)); sort(v.begin, v.end(), bind(my_cmp, _1, _2)); 6 / 19

Lambda expressions και C++11 Η δυνατότητα δήλωσης εκφράσεων lambda είναι τόσο σηµαντική ώστε αποτελεί µέρος των νέων πρότυπων της γλώσσας. Μία πιθανή σύνταξη είναι: [](int x, int y) -> int {int z = x + y; return z + x;} Επιτρέπεται η χρήση µεταβλητών από την εµβέλεια της δήλωσης (closure): int total = 0; for_each(v.begin(), v.end(), [&total](int x) { total += x; }); cout << total; 7 / 19

Template Metaprogramming in C++ Metaprogramming Η συγγραφή προγραµµάτων που µπορούν να τροποποιήσουν τον εαυτό τους ή άλλα προγράµµατα του ίδιου είδους. Υπάρχουν διάφοροι τύποι metaprogramming ανάλογα µε τον τρόπο που γίνεται η τροποποίηση. (Παράδειγµα: µεταγλώττιση) Χρησιµότητα Η προσαρµογή ενός προγράµµατος σε διαφορετικά περιβάλλοντα και απαιτήσεις (π.χ. embedded συστήµατα). Η συρραφή µιας εφαρµογής από µικρά έτοιµα τµήµατα. 8 / 19

Template Metaprogramming in C++ Για την έκφραση του metaprogram απαιτείται µία ειδική ξεχωριστή γλώσσα ή µία γλώσσα δύο επιπέδων που να επιτρέπει το χειρισµό προγραµµάτων της ίδιας γλώσσας. Η C++ παρέχει µέσω των templates (και µε χρήση partial specialization) το δεύτερο επίπεδο που χρειάζεται για το metaprogramming. Επειδή οι εκφράσεις µε templates υπολογίζονται την ώρα της µεταγλώττισης, αυτός ο τρόπος µετα-προγραµµατισµού ονοµάζεται static metaprogramming. 9 / 19

Template Metaprogramming in C++ Παράδειγµα - factorial // General case - RET stands for return value template <int N> struct Factorial { enum { RET = N * Factorial<N-1>::RET }; }; // Termination template <> struct Factorial<1> { enum { value = 1 }; }; // Example use cout << Factorial<5>::RET << endl; 10 / 19

Template Metaprogramming in C++ Παράδειγµα - συνδυασµοί template <int k, int n> class Combinations { private: enum { num = Factorial<n>::RET, denum = Factorial<k>::RET * Factorial<n-k>::RET }; public: enum { RET = num / denum }; }; cout << Combinations<5,2>::RET << endl; 11 / 19

Template Metaprogramming in C++ template <bool condition, class Then, class Else> struct IF { typedef Then RET; }; template <class Then, class Else> struct IF<false, Then, Else> { typedef Else RET; }; // if sizeof(int) < sizeof(long) then use long // else use int IF< sizeof(int)<sizeof(long), long, int>::ret i; 12 / 19

Template Metaprogramming in C++ - Turing Completeness Είναι δυνατή η συγγραφή κι άλλων δοµών ελέγχου (while, for). Με χρήση συγκεκριµένων συµβάσεων (π.χ. οι κλάσεις µεταπρογραµµατισµού να επιστρέφουν την τιµή τους πάντα µέσω του πεδίου RET) είναι δυνατή η ανάπτυξη ενός πλαισίου δήλωσης και κλήσης συναρτήσεων. Μπορεί να δειχθεί ότι ο µηχανισµός των templates αποτελεί µία ξεχωριστή γλώσσα που είναι Turing Complete. Τα δεδοµένα στα οποία ενεργεί αυτή η γλώσσα είναι τύποι. Η Boost περιέχει την ϐιβλιοθήκη mpl µε πολύ καλή τεκµηρίωση. 13 / 19

Γραφικές παραστάσεις Οι γραφικές παραστάσεις ϑα πρέπει: Να δείχνουν τα δεδοµένα Να προτρέπουν το αναγνώστη να δει την ουσία (κι όχι το design) Να µην διαστρεβλώνουν τα δεδοµένα Να δίνουν συνοχή σε µεγάλα σύνολα δεδοµένων Να επιτρέπουν συγκρίσεις και γενικότερα εξαγωγή συµπερασµάτων 14 / 19

Γραφικές παραστάσεις - ϑεωρία Ορισµός Lie factor = (size of effect shown in graphic) / (size of effect in data) Παράδειγµα: συνήθη γραφήµατα του γενικού δείκτη του χρηµατιστηρίου ή αποτελεσµάτων δηµοσκοπήσεων. 15 / 19

Γραφικές παραστάσεις - ϑεωρία Ορισµός Data-ink ratio = (data ink) / (total ink used to print the graphic) = proportion of a graphic s ink devoted to the non-redundant display of data information = 1.0 - proportion of a graphic that can be erased without loss of data information. Εποµένως... Ο στόχος είναι η µεγιστοποίηση του data-ink και η αποφυγή του non-data-ink µέσα σε λογικά πλαίσια. Γενικώς να αποφεύγονται µη χρήσιµα στοιχεία όπως grids, frames, fill patterns κτλ. 16 / 19

Γραφικές παραστάσεις - µερικές δυνατότητες Quartile plot. Για απεικόνιση ελάχιστης/µέγιστης τιµής και µέσου όρου. Bar chart. Στις περισσότερες περιπτώσεις δεν χρειάζεται άξονας y. Το grid, αν υπάρχει, µπορεί να είναι λευκό. Rangeframe (αντί για scatterplot). Οι άξονες δείχνουν το εύρος των δεδοµένων (αν χρειάζεται µε quartile plot). Small multiples (αντί για πολυδιάστατες παραστάσεις). Πολλαπλές µικρές γραφικές παραστάσεις, στις οποίες µία απο τις διαστάσεις έχει σταθερή τιµή. 17 / 19

Γραφικές παραστάσεις - ϑεωρία Ορισµός Data density = (number of entries in data matrix) / area of data graphic Βασική προϋπόθεση: πρέπει να υπάρχουν αρκετά δεδοµένα. 18 / 19

Γραφικές παραστάσεις - γενικές αρχές Λιτότητα στη σχεδίαση Ενσωµάτωση στη ϱοή του υπόλοιπου κειµένου (και ως προς τη ϑέση και ως προς τη σχεδίαση π.χ. γραµµατοσειρές) Προσπάθεια ανάδειξης του νοήµατος των δεδοµένων. Προσβασιµότητα: δεν χρειάζονται πολύπλοκες κωδικοποιήσεις, στοιχεία για την γραφική παράσταση να αναγράφονται κατευθείαν στην αναπαράσταση των δεδοµένων µε ολόκληρες λέξεις. Προσεκτική χρήση χρώµατος (προβληµατική κωδικοποίηση, αχρωµατοψία, ϕαινόµενα moiré) Μία καλή επιλογή για το σχήµα είναι το χρυσό παραλληλόγραµµο διαστάσεων 1 1.618 19 / 19