Ασκηση 1 [ ] Παράδοση : Τετάρτη , 13:00

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

Κεφάλαιο 3. Γραφήµατα v1.0 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Αλγόριθµοι Γραφηµάτων

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

Κεφάλαιο 3. Γραφήματα. ver. 21/12/2014. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

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

Κεφάλαιο 3. Γραφήματα. v1.3 ( ) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Αλγόριθμοι Γραφημάτων

Αναζήτηση Κατά Πλάτος

Κεφάλαιο 3. Γραφήµατα v1.1 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Σωροί, Γράφοι

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

Κατανεμημένα Συστήματα Ι

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

Κατευθυνόµενα γραφήµατα. Στοιχεία Θεωρίας Γραφηµάτων (1) Πολυγραφήµατα (Multigraphs)

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

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

Αναζήτηση Κατά Πλάτος

Στοιχεία Θεωρίας Γραφηµάτων (1)

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Δομές Δεδομένων και Αλγόριθμοι

Αλγόριθμοι Eλάχιστα μονοπάτια

Αναζήτηση Κατά Πλάτος

Ενότητα 10 Γράφοι (ή Γραφήµατα)

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

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

Κατανεμημένα Συστήματα Ι

Θεωρία Γραφημάτων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές

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

Επιστηµονικός Υπολογισµός Ι - Πρώτη εργαστηριακή άσκηση

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

Αλγόριθμοι Γραφημάτων

Αναζήτηση στους γράφους. - Αναζήτηση η κατά βάθος Συνεκτικές Συνιστώσες - Αλγόριθμος εύρεσης συνεκτικών συνιστωσών

Επαγωγή και αναδρομή για άκυκλα συνεκτικά γραφήματα

ιαφάνειες παρουσίασης #11

Αναζήτηση Κατά Πλάτος

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

Γράφοι. Αλγόριθμοι και πολυπλοκότητα. Στάθης Ζάχος, Δημήτρης Φωτάκης

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

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

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

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

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

Ενότητα 7 Ουρές Προτεραιότητας

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

Δρομολόγηση Και Πολύχρωματισμός. Γραφημάτων ΚΑΡΑΓΕΩΡΓΟΣ ΤΙΜΟΘΕΟΣ Α.Μ 1026

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

jτο πλήθος των ταξιδιών που κάνει η αεροσυνοδός µέχρι την j ηµέρα. Σχηµατίζω µία ακολουθία που αποτελείται από τα a.

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

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

Ουρά Προτεραιότητας: Heap

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

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

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 Άσκηση 5 6 Προγραμματιστική Άσκηση 1 7 Προγραμματιστική Άσκηση 2 (CoReLab - NTUA) Αλγόριθμοι - 3

Κατανεμημένα Συστήματα Ι

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

Αναζήτηση σε Γράφους. Μανόλης Κουμπαράκης. ΥΣ02 Τεχνητή Νοημοσύνη 1

[ΠΛΗ 417] Τεχνητή Νοημοσύνη. Project Εξαμήνου ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ

Βασικές Έννοιες Θεωρίας Γραφημάτων

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

... a b c d. b d a c

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

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

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

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

Δυναμικός προγραμματισμός για δέντρα

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

Ουρά Προτεραιότητας: Heap

Συνδετικότητα γραφήματος (graph connectivity)

Θεωρία Γραφημάτων 10η Διάλεξη

Θεωρία Γραφημάτων: Ορολογία και Βασικές Έννοιες

Αλγόριθμοι Γραφημάτων

Αλγόριθμοι και πολυπλοκότητα: 4 η σειρά ασκήσεων ΣΗΜΜΥ - Ε.Μ.Π.

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

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

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

ΠΛΗ 20, 4 η ΟΣΣ: Βασικές Έννοιες Θεωρίας Γραφημάτων

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

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Σημειωματάριο Τετάρτης 29 Νοε. 2017

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Βασικές Έννοιες Θεωρίας Γραφημάτων

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

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

Ελάχιστα Γεννητορικά ένδρα

Μάθημα 21: Ουρές (Queues)

Γράφοι. κόµβοι) και ένα σύνολο από γραµµές (που λέγονται ακµές) οι οποίες

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

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

Ουρά Προτεραιότητας: Heap

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

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Γράφοι. Ένας γράφος ή αλλιώς γράφηµα αποτελείται απο. Εφαρµογές: Τηλεπικοινωνιακά και Οδικά ίκτυα, Ηλεκτρονικά Κυκλώµατα, Β.. κ.ά.

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

Transcript:

Χρήστος. Ζαρολιάγκης Τεχνολογίες Υλοποίησης Αλγορίθµων : Άσκηση 1 1 Ασκηση 1 [16.03.2016] Παράδοση : Τετάρτη 13.04.2016, 13:00 Η παρούσα άσκηση αφορά στον έλεγχο διµερότητας ενός γραφήµατος. Σκοπός της άσκησης είναι η εξοικείωση µε τη C++, µε τους αλγόριθµους πιστοποίησης, µε τη LEDA και την πειραµατική αξιολόγηση. Ενα µη κατευθυνόµενο γράφηµα G = (V, E) λέγεται διµερές (bipartite) όταν V = V 1 V 2 και V 1 V 2 = (δηλαδή όταν οι κορυφές του µπορούν να χωριστούν σε δύο ξένα σύνολα V 1, V 2 ), έτσι ώστε κάθε ακµή e E να συνδέει µία κορυφή του V 1 µε µία κορυφή του V 2. Στο Σχήµα 1 ϕαίνεται ένα παράδειγµα διµερούς γραφήµατος. V 1 V 2 E Σχήµα 1: Ενα ιµερές Γράφηµα Στα πλαίσια της παρούσας άσκησης, καλείστε : α) Να υλοποιήσετε έναν αλγόριθµο πιστοποίησης (certifying algorithm) για τον έλεγχο διµερότητας ενός δεδοµένου µη κατευθυνόµενου συνεκτικού γραφήµατος G = (V, E). ϐ) Να αξιολογήσετε πειραµατικά τον αλγόριθµο πιστοποίησης σε διάφορες κατηγορίες γραφηµάτων και να τον συγκρίνετε µε τον αντίστοιχο της LEDA. Πιο συγκεκριµένα, Ϲητούνται τα εξής. Για το ερώτηµα α) καλείστε να υλοποιήσετε σε δύο ϕάσεις έναν αλγόριθµο πιστοποίησης ελέγχου διµερότητας. Στην πρώτη ϕάση, επιλέγεται τυχαία µία κορυφή s V του συνεκτικού γραφήµατος G = (V, E) και ξεκινάει µία Αναζήτηση Πρώτα κατά Πλάτος (ΑΠΠ). Η ΑΠΠ µε ϱίζα τον s κατατάσσει τις κορυφές σε επίπεδα µε την s στο επίπεδο 0 (L 0 ), τις γειτονικές κορυφές της στο επίπεδο 1 (L 1 ), κλπ. Μετά την ΑΠΠ χρωµατίζονται οι κορυφές ως εξής : η κορυφή s πράσινη, όλες οι κορυφές του επιπέδου L 1 µπλε, όλες οι κορυφές του επιπέδου L 2 πράσινες, κ.ο.κ., χρωµατίζοντας µπλε τις κορυφές των επιπέδων µε περιττή αρίθµηση και πράσινες εκείνες των επιπέδων µε άρτια αρίθµηση, µέχρι να χρωµατιστούν όλες. Αυτή η διαδικασία µπορεί να υλοποιηθεί τροποποιώντας την υλοποίηση ενός αλγορίθµου ΑΠΠ, και εµπλουτίζοντάς την µε έναν πίνακα Color. Κάθε ϕορά που εκτελείται ένα ϐήµα στον αλγόριθµο ΑΠΠ, στο οποίο αφαιρείται µία κορυφή v από την ουρά Q, πραγµατοποιείτε την απόδοση τιµής Color[v] = πράσινο ή Color[v] = µπλε. Προς διευκόλυνση, δίνεται ο παρακάτω ψευδοκώδικας ενός αλγορίθµου ΑΠΠ.

Χρήστος. Ζαρολιάγκης Τεχνολογίες Υλοποίησης Αλγορίθµων : Άσκηση 1 2 1 procedure BFS(G,v): 2 create an empty queue Q 3 insert v onto Q 4 mark v 5 while Q is not empty: 6 t <- Q.pop() 7 for all edges e = (t, u) E do 8 if u is not marked: 9 mark u 10 insert u onto Q 11 return none Στον ψευδοκώδικα πρέπει να προστεθεί η χρήση του πίνακα color όπως περιγράφηκε πα- ϱαπάνω. Ο ψευδοκώδικας πρέπει να «κωδικοποιηθεί» σε C++ µε χρήση LEDA, υλοποιώντας την συνάρτηση list<node> my_bfs(const graph& G, node s, node_array<int>& dist, node_array<edge>& pred) Τα ορίσµατα της my_bfs είναι το δεδοµένο G, µία αρχική κορυφή s, ένα node array dist το οποίο αποθηκεύει το επίπεδο στο οποίο ϐρίσκεται η κορυφή v, και ένα edge array pred που για κάθε κορυφή v αποθηκεύει την ακµή που δείχνει στον προκάτοχο της v στο δέντρο που δηµιουργείται από την ΑΠΠ. Τέλος, η συνάρτηση επιστρέφει µία λίστα από όλες τις κορυφές που επισκέφθηκε η ΑΠΠ. Σην δεύτερη ϕάση, ϑα υλοποιήσετε µία συνάρτηση bool my_bipar_checker(const graph& G, list<node>& V1, list<node>& V2) η οποία έχει ορίσµατα το δεδοµένο γράφηµα G και δύο node arrays V 1,V 2. Η συνάρτηση ϑα καλεί την my_bfs, και εν συνεχεία ϑα ελέγχει είτε αν προκύπτει ένας έγκυρος χρωµατισµός του G µε χρώµατα πράσινο/µπλε στον οποίο κάθε ακµή έχει αντίθετα χρώµατα, είτε αν υπάρχει κάποια ακµή µε άκρα του ιδίου χρώµατος που καθιστά το G µη διµερές. Η my_bipar_checker ϑα επιστρέφει false, αν το G δεν είναι διµερές εµφανίζοντας έναν κύκλο περιττού µεγέθους στο G, και true αν το G είναι διµερές, επιστρέφοντας τις κορυφές που ανήκουν στο σύνολο V 1 και εκείνες που ανήκουν στο σύνολο V 2, χρησιµοποιώντας τον χρω- µατισµό κορυφών της my_bfs. Η υλοποίησή σας πρέπει να συγκριθεί µε τον αλγόριθµο πιστοποίησης της LEDA bool Is_Bipartite(const graph& G, list<node>& A, list<node>& B) που παίρνει τα ίδια ορισµατα και επιστρέφει true, αν το G είναι διµερές και false αν δεν είναι. Αν το G δεν είναι διµερές τότε επιστρέφεται ένας κύκλος περιττού µεγέθους στο G. Αν το G είναι διµερές τότε επιστρέφονται και τα δύο σύνολα Α και Β. Προσοχή : η συνάρτηση Is_Bipartite της LEDA παίρνει ως όρισµα κατευθυνόµενα γραφήµατα. Άρα όταν ϑα την χρησιµοποιήσετε ϑα πρέπει να µετατρέψετε τα γραφήµατά σας. Η µετατροπή γίνεται ως

Χρήστος. Ζαρολιάγκης Τεχνολογίες Υλοποίησης Αλγορίθµων : Άσκηση 1 3 εξής : για κάθε ακµή e = (i, j) που δηµιουργείτε για το (κατευθυνόµενο) γράφηµά σας, ϑα δηµιουργείτε και την αντίθετή της e = (j, i). Ετσι το προκύπτον κατευθυνόµενο γράφηµα ϑα είναι ουσιαστικά µη κατευθυνόµενο. Για το ερώτηµα ϐ) ϑα γίνει συγκριτική πειραµατική αξιολόγηση των συναρτήσεων Is_Bipartite (της LEDA) και της my_bipar_checker (που υλοποιήσατε) στις παρακάτω κατηγορίες γραφη- µάτων. Συνθετικά γραφήµατα εµφωλιασµένων τετραγώνων n κορυφών και m πλευρών, για τα οποία ισχύει (n, m) {(10000, 19996), (40000, 79996), (90000, 179996)}, και τα οποία κατασκευάζονται όπως ϕαίνεται στο Σχήµα 2. v n v n 1 v 5 v 6 v 1 v2 v4 v 3 v 8 v 7 vn 3 v n 2 Σχήµα 2: Συνθετικό Γράφηµα Εµφωλιασµένων Τετραγώνων Γραφήµατα ακτυλίου n κορυφών και m = n πλευρών, όπου n είναι περιττός και (n, m) {(10001, 10001), (400001, 40001), (90001, 90001)}, και τα οποία κατασκευάζονται όπως ϕαίνεται στο Σχήµα 3. v 1 v n v 2 v n 1 v 3 v 6 v 4 v 5 Σχήµα 3: Γράφηµα ακτυλίου

Χρήστος. Ζαρολιάγκης Τεχνολογίες Υλοποίησης Αλγορίθµων : Άσκηση 1 4 Συνθετικά γραφήµατα που αποτελούνται από 4 επίπεδα k κορυφών και 2k πλευρών µεταξύ δύο διαδοχικών επιπέδων, για τα οποία ισχύει k {(500), (1000), (1500)}, και τα οποία κατασκευάζονται ως εξής (δείτε Σχήµα 4). L 1 L 2 L 3 L 4 k nodes k nodes k nodes k nodes 2k edges 2k edges 2k edges Σχήµα 4: Συνθετικό Γράφηµα 4 επιπέδων Εστω v1, i v2, i, vk i οι κορυφές του επιπέδου L i, 1 i 4. Οι 2k ακµές µεταξύ δύο διαδοχικών επιπέδων L i, L i+1, 1 i 3, δηµιουργούνται ως εξής. Επιλέγονται πρώτα οι k ακµές (vj, i vj i+1 ), 1 j k. Στη συνέχεια, επιλέγεται µια τυχαία κορυφή u του επιπέδου L i και δηµιουργούνται οι υπόλοιπες k ακµές (u, vj i+1 ), 1 j k. Τέλος, µετά την κατασκευή των ακµών µεταξύ δύο διαδοχικών επιπέδων, δηµιουργούνται τυχαία δύο επιπλέον ακµές : η πρώτη µεταξύ των επιπέδων L 1 και L 3, και η δεύτερη µεταξύ των επιπέδων L 2 και L 4. Η πρώτη (δεύτερη) ακµή δηµιουργείται επιλέγοντας τυχαία µια κορυφή u L 1 (u L 2 ) και µια κορυφή v L 3 (v L 4 ), δηµιουργώντας την ακµή (u, v). Για τον αλγόριθµο πιστοποίησης που υλοποιήσατε, δώστε την ϑεωρητική του πολυπλοκότητα, και µετρήστε τον πραγµατικό χρόνο εκτέλεσης του, χρησιµοποιώντας τις κατάλληλες συναρτήσεις µέτρησης χρόνου. Για κάθε στιγµιότυπο γραφηµάτων (από κάθε οικογένεια) ϑα τρέχετε τους αλγόριθµους πιστοποίησης my_bipar_checker και Is_Bipartite, και ϑα αναφέρετε τους χρόνους που χρειάστηκε ο κάθε αλγόριθµος για να επιστρέψει την απάντηση. Συγκρίνετε τους χρόνους, σχολιάστε και εξηγήστε τα αποτελέσµατα και τυχόν διαφορές που παρατηρείτε στα πειράµατα µε τα παραπάνω γραφήµατα. Προσοχή : οι απαντήσεις διµερότητας των συναρτήσεων my_bipar_checker και Is_Bipartite πρέπει να ταυτίζονται! Bonus: Θα δοθεί ϐαθµολογία bonus σε όποιον δηµιουργήσει µια επιπλέον οικογένεια µη τετριµµένων συνθετικών γραφηµάτων στην οποία η ιδιότητα της διµερότητας δεν είναι προφανές ότι ισχύει (όπως π.χ. εκείνης του Σχήµατος 4) εκτελώντας πειράµατα και για την οικογένεια αυτή. Υποβολή Προγραµµατιστικής Ασκησης : Οι απαντήσεις υποβάλονται σε ένα συµπιεσµένο αρχείο, το οποίο πρέπει να περιέχει τον πηγαίο κώδικα, την αναφορά µε τα αποτελέσµατα

Χρήστος. Ζαρολιάγκης Τεχνολογίες Υλοποίησης Αλγορίθµων : Άσκηση 1 5 της συγκριτικής πειραµατικής αξιολόγησης και την ϑεωρητική πολυπλοκότητα του αλγο- ϱίθµου πιστοποίησης που υλοποιήσατε, και το αρχείο Makefile. Ο πηγαίος κώδικας που δίνετε για τις υλοποιήσεις και πειραµατικές αξιολογήσεις πρέπει να είναι σωστά δοµηµένος, στοιχισµένος και σχολιασµένος. Ο κώδικάς σας πρέπει να εκτελείται στο σύστηµα diogenis. Το συµπιεσµένο αρχείο στέλνεται µε email, που έχει ϑέµα «Προγραµµατιστική Άσκηση 1», στον Γιώργο Μιχαλόπουλο (michalog@ceid.upatras.gr) το αργότερο µέχρι την Τετάρτη 13.04.2016, ώρα 13:00. Παρατήρηση 1: Μπορείτε να χρησιµοποιήσετε όποιους τύπους της LEDA κρίνετε απαραίτητο. Παρατήρηση 2: Για περαιτέρω διευκρινήσεις σχετικά µε την άσκηση, µπορείτε να επικοινωνήσετε µε τον Γιώργο Μιχαλόπουλο (michalog@ceid.upatras.gr) ή µε τον Νίκο Γιαννόπουλο (ngiannopou@ceid.upatras.gr).