#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα ηµήτρης Ν. Σερπάνος Εργαστήριο Συστηµάτων Υπολογιστών Τµήµα Ηλεκτρολόγων Μηχ. & Τεχνολογίας Υπολογιστών
Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα Αλγόριθµοι: µέθοδοι επίλυσης κάποιου προβλήµατος Περιγραφή σε ψευδο-κώδικα οµές εδοµένων: οργάνωση δεδοµένων, ώστε να αντιµετωπίζονται ως οντότητες Πολυπλοκότητα: προσδιορισµός προβληµάτων που µπορούν να λυθούν 31/10/02 Εισαγωγή στους Υπολογιστές 2
Αλγόριθµοι-Ψευδοκώδικας Βασική αρχή λειτουργίας: σειριακή εκτέλεση απλών λειτουργιών/πράξεων (προσθέσεων, απλών αποφάσεων, ) Παράδειγµα: πρόσθεση 3 αριθµών χρησιµοποιώντας λειτουργία πρόσθεσης 2 αριθµών s=x+y+z s1=x+y, s=s1+z 31/10/02 Εισαγωγή στους Υπολογιστές 3
Αλγόριθµοι-Επιλογή Απόδοση τιµής (x=5) υνατότητα επιλογής τιµής if (ΣΥΝΘΗΚΗ) then ΕΠΙΛΟΓΗ-1 else ΕΠΙΛΟΓΗ-2 Παράδειγµα: f(n)= n όταν n>0, διαφορετικά f(n)= 0 if (n 0) then x=0 else x=n 31/10/02 Εισαγωγή στους Υπολογιστές 4
Αλγόριθµοι-Επανάληψη (1) Σύνθετη εντολή repeat (ΕΝΤΟΛΕΣ) until (ΣΥΝΘΗΚΗ) Υπολογισµός s=1+2+ +n i= 0 s= 0 repeat { s=s+i i=i+1 } until (i>n) 31/10/02 Εισαγωγή στους Υπολογιστές 5
Αλγόριθµοι-Επανάληψη (2) Σύνθετη εντολή while (ΣΥΝΘΗΚΗ) do (ΕΝΤΟΛΕΣ) Υπολογισµός s=1+2+ +n i= 0 s= 0 while (i n) do { s=s+i i=i+1 } 31/10/02 Εισαγωγή στους Υπολογιστές 6
Βασικές οµές εδοµένων Οργανωµένες οµάδες δεδοµένων Πρωτογενείς δοµές δεδοµένων integer, real, complex, characters, boolean Ο τύπος ορίζει το πεδίο ορισµού Παραδείγµατα: integer i i=5 (λάθος: i=5.3) real r r=3.14 char ch1 ch1= a 31/10/02 Εισαγωγή στους Υπολογιστές 7
Βασικές οµές εδοµένων (2) Απλές-µη πρωτογενείς δοµές δεδοµένων Πίνακες (arrays) & συµβολοσειρές (strings) Παραδείγµατα: integer i[100] i[2]=5 Πρώτο στοιχείο i[0] ή i[1] real r[10] r[5]=3.14 char ch1[20] ch1[4]= a 31/10/02 Εισαγωγή στους Υπολογιστές 8
Αρχικοποίηση Πίνακα- Παράδειγµα integer VATHMOI[200] integer i i=0 repeat { VATHMOI[i]=0 i=i+1 } until (i 200) 31/10/02 Εισαγωγή στους Υπολογιστές 9
Παράδειγµα-Συνέχεια integer VATHMOI[200] integer i repeat i=1,200 { VATHMOI[i]=0 } 31/10/02 Εισαγωγή στους Υπολογιστές 10
Άσκηση 1. Να γράψετε σε µορφή ψευδοκώδικα τον αλγόριθµο που υπολογίζει την παρακάτω συνάρτηση µε χρήση REPEAT και WHILE: F(n)= { 0, n 0 Σ i (i+1), n > 0 n i=1 31/10/02 Εισαγωγή στους Υπολογιστές 11
Άσκηση 2. Να περιγραφεί η λειτουργία του αλγορίθµου: ARRAY INTEGER Α(10) INTEGER I, J, X repeat ( I = 2 έως 10 ) J = 10 While ( J >= I ) do { if A(J-1) > A(J) then { X = A(J-1) A(J-1) = A(J) A(J) = X } J= J-1 } 31/10/02 Εισαγωγή στους Υπολογιστές 12
Άσκηση 2β Αν ο πίνακας Α περιέχει τα στοιχεία (5, 3, 2, 1, 4, 6, 7, 8, 0, -1), ποιο θα είναι το περιεχόµενό του µετά την εκτέλεση του αλγορίθµου της άσκησης 2 ; 31/10/02 Εισαγωγή στους Υπολογιστές 13
Συµβολοσειρές (Strings) CHARACTER*30 ONOMA CHAR ONOMA[30] ONOMA= ΙΩΑΝΝΗΣ ΓΕΩΡΓΙΟΥ 31/10/02 Εισαγωγή στους Υπολογιστές 14
Σύνθετες οµές-εγγραφές Εγγραφή (record, structure) Σύνολο ανόµοιων δεδοµένων: structure spoudastis { char onoma[20] char eponimo[20] integer arithmos-mitroou integer vathmos-theoria integer vathmos-ergastirio } 31/10/02 Εισαγωγή στους Υπολογιστές 15
Σύνθετες οµές-εγγραφές (2) structure spoudastis { char onoma[20] char eponimo[20] integer arithmos-mitroou integer vathmos-theoria integer vathmos-ergastirio } ήλωση: spoudastis Τιµές: 31/10/02 Εισαγωγή στους Υπολογιστές 16 s1 s1.onoma= ΗΜΗΤΡΗΣ s1.eponimo= ΣΕΡΠΑΝΟΣ s1.vathmos-ergastirio= 10
Σύνθετες οµές-εγγραφές (3) structure spoudastis { char onoma[20] char eponimo[20] integer arithmos-mitroou integer vathmos-theoria integer vathmos-ergastirio } ήλωση: spoudastis protoeteis[300] Τιµές: protoeteis[0].onoma= ΗΜΗΤΡΗΣ protoeteis[0].eponimo= ΣΕΡΠΑΝΟΣ protoeteis[0].vathmos-ergastirio= 10 protoeteis[1].onoma= ΝΙΚΟΣ protoeteis[1].eponimo= ΑΒΟΥΡΗΣ protoeteis[1].vathmos-ergastirio= 10 31/10/02 Εισαγωγή στους Υπολογιστές 17
υναµικές οµές εδοµένων οµές που καταλαµβάνουν δυναµικά µνήµη, ανάλογα µε τον αριθµό στοιχείων που έχουν κάθε στιγµή λίστες (lists) ουρές (queues) σωροί (stacks) δένδρα (trees) 31/10/02 Εισαγωγή στους Υπολογιστές 18
είκτες (pointers) Μεταβλητές που περιέχουν τη διεύθυνση κάποιας άλλης µεταβλητής Βασικό συστατικό εργαλείο για τη δηµιουργία δυναµικών δοµών δεδοµένων 1001 D1 D2 1 I1 1002 4 I2 31/10/02 Εισαγωγή στους Υπολογιστές 19
Λίστες (lists) οµές που απαρτίζονται από σειρά διατεταγµένων στοιχείων, καθένα από τα οποία εκτός από τα κυρίως δεδοµένα περιέχει έναν δείκτη προς το επόµενο στοιχείο της λίστας δεδοµένα δεδοµένα 31/10/02 Εισαγωγή στους Υπολογιστές 20
Απλά συνδεδεµένες λίστες 1001 1005 1012 1014 1016 1020 1032 σε γνωρίζω από την κόψη του σπαθιού 31/10/02 Εισαγωγή στους Υπολογιστές 21
Λιστες (συνέχεια) ιπλά συνδεδεµένες λίστες Κυκλικές λίστες 31/10/02 Εισαγωγή στους Υπολογιστές 22
Εισαγωγή στοιχείων σε λίστα q p p 31/10/02 Εισαγωγή στους Υπολογιστές 23
ιαγραφή στοιχείων από λίστα p p 31/10/02 Εισαγωγή στους Υπολογιστές 24
Ουρές (queues) First In First Out (FIFO) ΣΤΑΣΗ 31/10/02 Εισαγωγή στους Υπολογιστές 25
Ουρές (queues) υναµικές δοµές στις οποίες το πρώτο στοιχείο που εισάγεται είναι και το πρώτο που θα εξαχθεί (First In First Out) Υλοποίηση µε πίνακες ή λίστες 5 3 6 4 head tail 31/10/02 Εισαγωγή στους Υπολογιστές 26
Ανάκληση στοιχείου από ουρά X= 5 3 6 head head if head=tail then µήνυµα " άδεια ουρά " else { Χ = key(head) if (next(head) = NIL then head= tail else head = next(head) } 31/10/02 Εισαγωγή στους Υπολογιστές 27 4 tail
Σωροί (stacks) υναµικές δοµές στις οποίες το τελευταίο στοιχείο που εισάγεται είναι και το πρώτο που θα εξαχθεί Last in First Out (LIFO) 31/10/02 Εισαγωγή στους Υπολογιστές 28
Σωροί (stacks) Last In First Out Υλοποίηση µε πίνακες ή λίστες 12 20 34 6 5 prev Key top next 31/10/02 Εισαγωγή στους Υπολογιστές 29
Ανάκληση στοιχείου από σωρό 12 20 34 6 5 if top είναι εκτός κάτω ορίου µνήµης top then µήνυµα " underflow " else { Χ = key(top) (επιστροφή του άνω στοιχείου) next = top (ελευθέρωσε το άνω στοιχείο) if prev(top) NIL then top = prev(top) else στείλε µήνυµα "άδειος σωρός" } top next 31/10/02 Εισαγωγή στους Υπολογιστές 30
εντρα (trees) Iεραρχικές δοµές δεδοµένων που θυµίζουν τα οικογενειακά δένδρα Τα στοιχεία του δένδρου λέγονται κόµβοι Ένας κόµβος χωρίς απογόνους λέγεται τερµατικός κόµβος ή φύλλο 31/10/02 Εισαγωγή στους Υπολογιστές 31
εντρα (συνέχεια) Α ρίζα Β Γ Ε Ζ φύλλα Η Θ Ι Κ υαδικά δέντρα, κάθε κόµβος έχει το πολύ δύο «παιδιά» right datum left 31/10/02 Εισαγωγή στους Υπολογιστές 32
Αναζήτηση σε δυαδικό δένδρο TREE-SEARCH (x, k) if x = NIL ή k = datum (x) then (να επιστραφεί η τιµή k = datum (x) ) else if k < datum (x) then TREE-SEARCH ( left (x), k) else TREE-SEARCH (right (x), k) 31/10/02 Εισαγωγή στους Υπολογιστές 33
Αρχεία Χώροι µόνιµης φύλαξης δεδοµένων Τρόποι προσπέλασης Σειριακή προσπέλαση : Απαιτεί µεγάλο χρόνο αναζήτησης Τυχαία προσπέλαση : Απαιτεί την ύπαρξη κλειδίου, αρχείου ευρετηρίου (index file) 31/10/02 Εισαγωγή στους Υπολογιστές 34
Αρχεία (συνέχεια) Συναρτήσεις κατακερµατισµού (hashing functions) Τρόπος άµεσης προσπέλασης Μεγάλη ταχύτητα αναζήτησης Αυξηµένη πολυπλοκότητα υλοποίησης 31/10/02 Εισαγωγή στους Υπολογιστές 35
Άσκηση (Φρ. 2) 1. Έστω ότι έχουµε ένα πίνακα που περιέχει στοιχεία µιας οµάδας σπουδαστών µε τις βαθµολογίες τους στο µάθηµα "Εισαγωγή στην Πληροφορική": Αρ. Μητρώου Επίθετο Όνοµα Βαθµός Να ορίσετε την απαραίτητη εγγραφή TAXH που απαιτείται για την αποθήκευση αυτής της πληροφορίας, να ορίσετε στη συνέχεια έναν πίνακα εγγραφών Pinax(50), στον οποίο να εισάγετε τα παραπάνω στοιχεία. Στη συνέχεια να δώσετε τρόπους αναφοράς σε συγκεκριµένα στοιχεία του πίνακα αυτού, όπως ο βαθµός του 3ου σπουδαστή και το όνοµα του2ου σπουδαστή. 2. Να δώσετε σε µορφή ψευδοκώδικά τους αλγορίθµους εισαγωγής στοιχείων σε ουρά και σωρό που υλοποιούνται µε λίστες 31/10/02 Εισαγωγή στους Υπολογιστές 36