SlideShare a Scribd company logo
Ι.Ε.Κ. Κέρκυρας 
Αλγοριθμική και Δομές Δεδομένων 
Σημειώσεις Μαθήματος 
Μέρος Α’ 
Ειδικότητα: Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Κέρκυρα, 2013-2014
Κεφάλαιο 1ο – Ανάλυση – Σύνθεση Προβλήματος ........................................... 3 
1.1 Η έννοια πρόβλημα ............................................................................ 3 
1.2 Κατανόηση & διατύπωση προβλήματος .................................................. 3 
1.3 Δομή, ανάλυση και αναπαράσταση προβλήματος .................................... 3 
1.4 Καθορισμός απαιτήσεων και στάδια αντιμετώπισης ενός προβλήματος ........ 4 
1.5 Κατηγορίες προβλημάτων ................................................................... 4 
1.6 Λόγοι ανάθεσης ενός προβλήματος σε υπολογιστή .................................. 5 
Κεφάλαιο 2ο – Βασικές Έννοιες Αλγορίθμων ................................................... 5 
2.1 Αλγόριθμοι ....................................................................................... 5 
2.2. Σταθερές, Μεταβλητές, Τελεστές, Εκφράσεις ......................................... 6 
2.3. Βασικές δομές αλγορίθμων ................................................................. 7 
2.4. Δομή ακολουθίας .............................................................................. 7 
2.5. Δομή επιλογής ................................................................................. 8 
2.6. Δομή επανάληψης ........................................................................... 11 
Κεφάλαιο 3ο – Δομές Δεδομένων και Αλγόριθμοι ............................................ 14 
3.1 «Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα» ............................... 14 
3.2 Τεχνικές σχεδίασης αλγορίθμων .......................................................... 14 
3.3. Πίνακες .......................................................................................... 15 
3.4. Στοίβα ........................................................................................... 16 
3.5. Ουρά ............................................................................................. 17 
3.6 Λίστα .............................................................................................. 18 
3.7 Αναδρομή ........................................................................................ 20 
Βιβλιογραφία ............................................................................................ 21
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Κεφάλαιο 1ο – Ανάλυση – Σύνθεση Προβλήματος 
1.1 Η έννοια πρόβλημα 
Τι ονομάζουμε «πρόβλημα»; 
Με τον όρο εννοείται μία κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση, η δε λύση 
της δεν είναι γνωστή, ούτε προφανής. 
1.2 Κατανόηση & διατύπωση προβλήματος 
Κατανόηση προβλήματος 
Οποιαδήποτε προσπάθεια αντιμετώπισης ενός προβλήματος είναι καταδικασμένη σε αποτυχία 
αν δεν έχει γίνει απόλυτα κατανοητό. Εξαρτάται από δύο παράγοντες: 
1. Σωστής διατύπωσης εκ μέρους του δημιουργού. 
2. Σωστής ερμηνείας από την μεριά εκείνου που καλείται να το αντιμετωπίσει. 
Διατύπωση προβλήματος 
Μπορεί να έχει οποιαδήποτε μορφή, αρκεί να μπορεί να γίνει αντιληπτή από μία από τις πέντε 
αισθήσεις. Συνηθέστερο μέσο διατύπωσης είναι ο λόγος (προφορικός-γραπτός). Πρέπει να 
χαρακτηρίζεται από σαφήνεια. Άστοχη χρήση ορολογίας, λανθασμένη σύνταξη μπορούν να 
προκαλέσουν παρερμηνείες. Η παρερμηνεία όμως είναι δυνατή ακόμη και όταν όλοι οι 
λεξικολογικοί και συντακτικοί κανόνες κρατούνται με ευλάβεια. Σημαντικός ακόμη παράγοντας 
είναι η αποσαφήνιση του χώρου στον οποίο αναφέρεται. Η πληροφορία αυτή παρέχεται από 
την διατύπωση-δεδομένα του προβλήματος. 
Δεδομένο 
Οποιοδήποτε στοιχείο μπορεί να γίνει αντιληπτό από έναν τουλάχιστον παρατηρητή με μία από 
τις πέντε αισθήσεις του. 
Πληροφορία 
Οποιοδήποτε γνωσιακό στοιχείο προέρχεται από επεξεργασία δεδομένων. 
Επεξεργασία δεδομένων 
Η διαδικασία κατά την οποία ένας μηχανισμός: 
o δέχεται δεδομένα, 
o τα επεξεργάζεται με προκαθορισμένο τρόπο και 
o αποδίδει πληροφορίες. 
Δύο τέτοιοι μηχανισμοί είναι ο εγκέφαλος και ο υπολογιστής. 
1.3 Δομή, ανάλυση και αναπαράσταση προβλήματος 
Δομή προβλήματος 
Με τον όρο δομή ενός προβλήματος αναφερόμαστε: 
o στα συστατικά του μέρη, 
o στα επιμέρους τμήματα που το αποτελούν καθώς και 
o στον τρόπο που τα μέρη αυτά συνδέονται μεταξύ τους. 
Η καταγραφή της δομής ενός προβλήματος σημαίνει ότι έχει ήδη αρχίσει η ανάλυση του 
προβλήματος. 
Ανάλυση προβλήματος 
Το αρχικό πρόβλημα αναλύεται σε άλλα απλούστερα (υπό)προβλήματα. Με την σειρά τους τα 
νέα προβλήματα αναλύονται σε άλλα ακόμη πιο απλά. Η διαδικασία αυτή σταματά όταν: 
o Τα προβλήματα που προέκυψαν είναι αρκετά απλά και 
o η αντιμετώπιση τους χαρακτηριστεί δυνατή 
Όσο περισσότερο προχωράει η ανάλυση τόσο ελαττώνεται η δυσκολία αντιμετώπισής τους. Η 
ανάλυση του προβλήματος σε απλούστερα, αναδύει την δομή του προβλήματος. Η ανάλυση 
μπορεί να γίνει είτε φραστικά είτε γραφικά (διαγραμματική αναπαράσταση). 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 3
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Διαγραμματική αναπαράσταση (δομής / ανάλυσης) 
Είναι μία συχνά χρησιμοποιούμενη γραφική απεικόνιση της δομής: 
o Το αρχικό πρόβλημα αναπαριστάται από ένα ορθογώνιο παραλληλόγραμμο 
o Κάθε ένα από τα υποπροβλήματα, στα οποία αναλύεται το αρχικό, αναπαριστάται 
επίσης από ένα ορθογώνιο παραλληλόγραμμο. 
o Τα παραλληλόγραμμα που αντιστοιχούν στα υποπροβλήματα, σχηματίζονται ένα 
επίπεδο χαμηλότερα. 
1.4 Καθορισμός απαιτήσεων και στάδια αντιμετώπισης ενός προβλήματος 
Καθορισμός απαιτήσεων 
Είναι η διαδικασία κατά την οποία πρέπει να κάνουμε: 
o τον επακριβή προσδιορισμό των δεδομένων που παρέχει το πρόβλημα καθώς και 
o την λεπτομερειακή καταγραφή των ζητουμένων που αναμένονται σαν αποτελέσματα 
της επίλυσης. 
Τα δεδομένα δεν είναι πάντα εύκολο να διακριθούν. (Σε πολλά προβλήματα τα δεδομένα θα 
πρέπει να «ανακαλυφθούν» μέσα στα λεγόμενα). Τα ζητούμενα δεν είναι πάντα εύκολο να 
αποσαφηνισθούν. Δεν υπάρχει μεθοδολογία εντοπισμού και αποσαφήνισης των δεδομένων/ 
ζητουμένων ενός προβλήματος από την διατύπωση. Μία λύση είναι να θέτουμε μία σειρά από 
ερωτήσεις με στόχο την διευκρίνιση αποριών σχετικά με τα ζητούμενα, τον τρόπο παρουσίασης 
τους, το εύρος τους είτε προς τον δημιουργό του προβλήματος είτε προς τον ίδιο τον εαυτό 
μας. 
Στάδια αντιμετώπισης προβλήματος 
o Κατανόηση (απαιτείται η σωστή και πλήρης αποσαφήνιση των δεδομένων και των 
ζητουμένων) 
o Ανάλυση (το αρχικό πρόβλημα διασπάται σε επί μέρους απλούστερα προβλήματα) 
o Επίλυση (μέσω της λύσης των επιμέρους προβλημάτων, υλοποιείται η λύση) 
1.5 Κατηγορίες προβλημάτων 
Η κατηγοριοποίηση των προβλημάτων γίνεται βάσει τριών (3) κριτηρίων: 
Δυνατότητα 
επίλυσης 
Δόμηση λύσεων 
(μόνο επιλύσιμα) 
Είδος επίλυσης 
που επιζητούν 
Επιλύσιμα Δομημένα Απόφασης 
Ανοικτά Ημιδομημένα Υπολογιστικά 
Άλυτα Αδόμητα Βελτιστοποίησης 
Δυνατότητα επίλυσης: 
o Επιλύσιμα: Η λύση τους είναι ήδη γνωστή και έχει διατυπωθεί ή η συνάφεια με άλλα 
ήδη λυμένα μας επιτρέπει να θεωρούμε σαν βέβαιη την δυνατότητα επίλυσής τους. 
Παράδειγμα: Επίλυση δευτεροβάθμιων εξισώσεων. 
o Ανοικτά: Η λύση τους δεν έχει βρεθεί αλλά δεν έχει αποδειχθεί ότι δεν επιδέχονται 
λύση. Παράδειγμα: Η ύπαρξη ζωής σε άλλους πλανήτες. 
o Άλυτα: Έχουμε φθάσει στην παραδοχή ότι δεν έχουν λύση. Παράδειγμα: Ο 
τετραγωνισμός του κύκλου. 
Δόμηση λύσεων (μόνο επιλύσιμα): 
o Δομημένα: Η επίλυσή τους προέρχεται από μία αυτοματοποιημένη διαδικασία. 
Παράδειγμα: Η εύρεση εμβαδού τριγώνου. 
o Ημιδομημένα: Έχουν ένα σαφώς προκαθορισμένο εύρος λύσεων αλλά ο ανθρώπινος 
παράγοντας πρέπει να επιλέξει την κατάλληλη από όλες τις λύσεις. Παράδειγμα: Η 
επιλογή μεταφορικού μέσου για ένα ταξίδι. 
o Αδόμητα: Οι λύσεις τους δεν μπορούν να δομηθούν ή δεν έχει διερευνηθεί σε βάθος η 
δυνατότητα δόμησής τους. Παράδειγμα: Το να κερδίζεις πάντα στο σκάκι. 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 4
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Είδος επίλυσης που επιζητούν: 
o Απόφασης: Η λύση του προβλήματος είναι μία απόφαση που απαντά σε ένα ερώτημα. 
Συνήθως είναι ναι-όχι / αληθής – ψευδής κλπ. Παράδειγμα: «Να πάρω αμάξι ή 
ποδήλατο»; 
o Υπολογιστικά: Το πρόβλημα που τίθεται απαιτεί την διενέργεια υπολογισμών και ζητάμε 
να βρούμε την τιμή της απάντησης που ικανοποιεί τα δεδομένα. Παράδειγμα: «Ποια 
είναι η ρίζα της δευτεροβάθμιας εξίσωσης;» 
o Βελτιστοποίησης: Αναζητούμε την απάντηση που ικανοποιεί κατά τον καλύτερο τρόπο 
τα δεδομένα. Παράδειγμα: «Θα πάρω αυτοκίνητο. Με 10.000 ευρώ ποιο να αγοράσω;» 
1.6 Λόγοι ανάθεσης ενός προβλήματος σε υπολογιστή 
Οι κυριότεροι λόγοι που αναθέτουμε ένα πρόβλημα σε έναν υπολογιστή είναι: 
o Πολυπλοκότητα υπολογισμών. 
o Επαναληπτικότητα των διαδικασιών. 
o Ταχύτητα εκτέλεσης των πράξεων. 
o Μεγάλο πλήθος δεδομένων. 
Κεφάλαιο 2ο – Βασικές Έννοιες Αλγορίθμων 
2.1 Αλγόριθμοι 
Τι ονομάζουμε αλγόριθμο; 
Είναι μία πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε 
πεπερασμένο χρόνο, που στοχεύουν στην επίλυση ενός προβλήματος. 
Ποια είναι τα χαρακτηριστικά ενός αλγορίθμου (κριτήρια που πρέπει να ικανοποιεί); 
o Είσοδος (input): Καμία, μία ή περισσότερες τιμές δεδομένων πρέπει να δίνονται ως 
είσοδος. Η περίπτωση που δεν δίνονται τιμές δεδομένων εμφανίζεται όταν ο 
αλγόριθμος δημιουργεί και επεξεργάζεται κάποιες πρωτογενείς τιμές με την βοήθεια 
συναρτήσεων παραγωγής τυχαίων αριθμών ή με την βοήθεια άλλων απλών εντολών. 
o Έξοδος (output): Ο αλγόριθμος πρέπει να δημιουργεί τουλάχιστον ένα αποτέλεσμα 
προς τον χρήστη ή προς ένα άλλο αλγόριθμο. 
o Καθοριστικότητα (definiteness): Κάθε εντολή πρέπει να καθορίζεται χωρίς αμφιβολία 
για τον τρόπο εκτέλεσής της. Λόγου χάριν, μία εντολή διαίρεσης πρέπει να θεωρεί και 
την περίπτωση όπου ο διαιρέτης λαμβάνει μηδενική τιμή. 
o Περατότητα (finiteness): Ο αλγόριθμος πρέπει να τελειώνει μετά από πεπερασμένα 
βήματα. Αν δεν τελειώνει μετά από ένα συγκεκριμένο αριθμό βημάτων δεν είναι 
αλγόριθμος αλλά υπολογιστική διαδικασία. 
o Αποτελεσματικότητα (effectiveness): Κάθε εντολή ενός αλγορίθμου πρέπει να είναι 
απλή και εκτελέσιμη (δεν αρκεί να έχει οριστεί). 
Παραδείγματα αλγορίθμων από την καθημερινή ζωή 
Πώς να φτιάξουμε καφέ, συνταγή για αβγά μάτια, οδηγίες για να πάμε στο φαρμακείο, κλπ. 
Τρόποι περιγραφής και αναπαράστασης ενός αλγορίθμου 
1. Ελεύθερο κείμενο (free text): Αποτελεί τον πιο ανεπεξέργαστο και αδόμητο τρόπο 
παρουσίασης. Υπάρχει κίνδυνος να οδηγήσει σε μη εκτελέσιμη παρουσίαση, 
παραβιάζοντας το τελευταίο χαρακτηριστικό των αλγορίθμων το κριτήριο της 
αποτελεσματικότητας. 
2. Διαγραμματικές τεχνικές (diagramming techniques): Αποτελούν γραφικό τρόπο 
αναπαράστασης ενός αλγορίθμου. Μια από τις πιο παλιές και γνωστές τεχνικές είναι και 
το διάγραμμα ροής (flow chart). Η χρήση διαγραμματικών τεχνικών δεν είναι η 
καλύτερη λύση, γι’ αυτό εμφανίζονται όλο και σπανιότερα στην βιβλιογραφία και στην 
πράξη. 
3. Φυσική γλώσσα (natural language) κατά βήματα: Μοιάζει με το ελεύθερο κείμενο απλά 
είναι κατά βήματα. Κίνδυνος να παραβιαστεί το κριτήριο της καθοριστικότητας. 
4. Κωδικοποίηση (coding): Δηλαδή με ένα πρόγραμμα γραμμένο είτε με μία ψευδογλώσσα 
είτε σε κάποιο προγραμματιστικό περιβάλλον που όταν εκτελεσθεί θα δώσει τα ίδια 
αποτελέσματα με τον αλγόριθμο. 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 5
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Διαγράμματα Ροής 
Τα σύμβολα που χρησιμοποιούνται σε ένα διάγραμμα ροής 
Πορεία ενεργειών 
Αρχή / Τέλος 
Είσοδος / Έξοδος Δεδομένων 
Εκχώρηση δεδομένων / Εκτέλεση πράξεων 
Έλεγχος συνθήκης 
2.2. Σταθερές, Μεταβλητές, Τελεστές, Εκφράσεις 
Σταθερές (constants) 
Με τον όρο αυτό αναφερόμαστε σε προκαθορισμένες τιμές που παραμένουν αμετάβλητες σε 
όλη τη διάρκεια της εκτέλεσης ενός αλγορίθμου. Οι σταθερές διακρίνονται σε: 
Αριθμητικές 123, +5, - 7, 34,78 
Αλφαριθμητικές «Δώσε έναν αριθμό», «ηλικία» 
Λογικές Αληθής, Ψευδής (υπάρχουν μόνο αυτές οι δύο) 
Μεταβλητές (variables): 
Μία μεταβλητή είναι ένα γλωσσικό αντικείμενο, που χρησιμοποιείται για να παραστήσει ένα 
στοιχείο δεδομένου. Στη μεταβλητή εκχωρείται μία τιμή, η οποία μπορεί να αλλάζει κατά τη 
διάρκεια του αλγορίθμου. Ανάλογα με το είδος της τιμής που μπορούν να λάβουν οι 
μεταβλητές διακρίνονται, όπως και οι σταθερές, σε: αριθμητικές, αλφαριθμητικές και λογικές. 
Τελεστές (operators): 
Πρόκειται για τα γνωστά σύμβολα που χρησιμοποιούνται στις διάφορες πράξεις. Οι τελεστές 
διακρίνονται σε αριθμητικούς, λογικούς και συγκριτικούς. 
Αριθμητικούς +, -, *, / ^ 
Λογικούς ΚΑΙ, Ή, ΌΧΙ 
Συγκριτικούς <, >, =, <=, >=, <> 
Α Β Α ΚΑΙ Β Α Ή Β 
Αληθής Αληθής Αληθής Αληθής 
Αληθής Ψευδής Ψευδής Αληθής 
Ψευδής Αληθής Ψευδής Αληθής 
Ψευδής Ψευδής Ψευδής Ψευδής 
Α Όχι Α 
Αληθής Ψευδής 
Ψευδής Αληθής 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 6
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Ιεραρχία τελεστών: 
1. Αριθμητικοί 
2. Συγκριτικοί 
3. Λογικοί. 
Ιεραρχία αριθμητικών τελεστών: 
1. Παρενθέσεις 
2. Ύψωση σε δύναμη 
3. Πολλαπλασιασμός και διαίρεση 
4. Πρόσθεση και αφαίρεση 
Οι αριθμητικοί τελεστές DIV και MOD 
Ø Η διαίρεση με τον τελεστή «div» δίνει ακέραιο πηλίκο ενώ με τον τελεστή «/» δίνει 
δεκαδικό, πχ. 11/2=5,5 ενώ 11div2 = 5 
Ø Η διαίρεση με τον τελεστή “mod” δίνει το υπόλοιπο της διαίρεση, πχ. 11mod2 = 1 
Τα ψηφία ενός τριψήφιου αριθμού x είναι: 
Γενικό παράδειγμα Έστω ο αριθμός 357 
o 1ο ψηφίο = x DIV 100 
y= x MOD 100 «κρατάμε» μόνο 
δεκάδες και μονάδες δηλ. 
διψήφιο αριθμό 
o 2ο ψηφίο = y DIV 10 
o 3ο ψηφίο= y MOD 10 
o 357 DIV 100 = 3 
o 357 MOD 100 = 57 
o 57 DIV 10 = 5 
o 57 MOD 10 = 7 
Εκφράσεις (expressions): 
Οι εκφράσεις διαμορφώνονται από τους τελεστέους (operands), που είναι σταθερές και 
μεταβλητές και από τους τελεστές. Η διεργασία αποτίμησης μίας έκφρασης συνίσταται στην 
απόδοση τιμών στις μεταβλητές και στην εκτέλεση των πράξεων. Η τελική τιμή της πράξης 
εξαρτάται από την ιεραρχία των πράξεων και τη χρήση των παρενθέσεων. Μία έκφραση μπορεί 
να αποτελείται από μία μόνο μεταβλητή ή σταθερά μέχρι μία πολύπλοκη μαθηματική 
παράσταση 
2.3. Βασικές δομές αλγορίθμων 
Οι βασικές δομές των αλγορίθμων είναι οι: 
1. Δομή ακολουθίας 
2. Δομή επιλογής / πολλαπλής επιλογής 
3. Δομή επανάληψης 
2.4. Δομή ακολουθίας 
Ονομάζεται και σειριακή ή ακολουθιακή δομή. Αποτελείται από ένα σύνολο εντολών που 
τοποθετούνται η μία κάτω από την άλλη. Χρησιμοποιείται (από μόνη της) για την επίλυση πολύ 
απλών προβλημάτων όπου η σειρά εκτέλεσης ενός συνόλου ενεργειών είναι δεδομένη. 
Χρησιμοποιείται ευρύτατα σε συνδυασμό με άλλες δομές (επιλογής, επανάληψης). 
Παράδειγμα αλγορίθμου με δομή ακολουθίας 
Λεκτική περιγραφή: Να διαβαστούν δύο αριθμοί και να 
υπολογιστεί και να εκτυπωθεί το άθροισμά τους. 
Διάγραμμα ροής: 
Υλοποίηση σε ψευδογλώσσα: 
Αλγόριθμος 
Παράδειγμα_1 
Διάβασε 
a, 
b 
c 
← 
a 
+ 
b 
Εκτύπωσε 
c 
Τέλος 
Παράδειγμα_1 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 7
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Υλοποίηση σε γλώσσα προγραμματισμού C: 
#include 
<stdio.h> 
main() 
{ 
int 
a, 
b, 
c; 
clrscr(); 
printf("Dose 
tin 
timi 
tou 
a: 
"); 
scanf("%d",&a); 
printf("nDose 
tin 
timi 
tou 
b: 
"); 
scanf("%d",&b); 
c=a+b; 
printf("To 
apotelesma 
a+b 
einai: 
%d", 
c); 
getch(); 
} 
2.5. Δομή επιλογής 
Αποτελείται από ένα σύνολο εντολών που εκτελούνται κατά περίπτωση. Η διαδικασία της 
επιλογής περιλαμβάνει τον έλεγχο κάποιας συνθήκης με δύο δυνατές τιμές (αληθής, ψευδής) 
και στη συνέχεια την απόφαση εκτέλεσης κάποιας εντολής ανάλογα με τη συνθήκη. 
Παράδειγμα αλγορίθμου με δομή απλής 
επιλογής 
Λεκτική περιγραφή: Να διαβαστεί ένας αριθμός 
και να εκτυπωθεί η απόλυτη τιμή του. 
Διάγραμμα ροής: 
Υλοποίηση σε ψευδογλώσσα: 
Αλγόριθμος 
Παράδειγμα_2 
Διάβασε 
a 
Αν 
a 
< 
0 
τότε 
a 
← a * (-1) 
τέλος_αν 
Εκτύπωσε 
a 
Τέλος 
Παράδειγμα_2 
Υλοποίηση σε γλώσσα προγραμματισμού C: 
#include 
<stdio.h> 
main() 
{ 
int 
a; 
clrscr(); 
printf("Dose 
tin 
timi 
tou 
a: 
"); 
scanf("%d",&a); 
if(a<0) 
a=a*(-­‐1); 
printf("H 
apoliti 
timi 
tou 
a 
einai: 
", 
a); 
getch(); 
} 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 8
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Παράδειγμα αλγορίθμου με δομή σύνθετης επιλογής 
Λεκτική περιγραφή: Να διαβαστούν δύο αριθμοί και σε περίπτωση που ο πρώτος αριθμός είναι 
μικρότερος του δεύτερου να υπολογισθεί και να εκτυπωθεί το άθροισμά τους, διαφορετικά να 
υπολογισθεί και να εκτυπωθεί το γινόμενό τους. 
Υλοποίηση σε ψευδογλώσσα: 
Αλγόριθμος 
Παράδειγμα_3 
Διάβασε 
a, 
b 
Αν 
a 
< 
b 
τότε 
c 
← a + b 
αλλιώς 
c 
← a * b 
τέλος_αν 
Εκτύπωσε 
c 
Τέλος 
Παράδειγμα_3 
Παράδειγμα αλγορίθμου με δομή πολλαπλής επιλογής 
Λεκτική περιγραφή: Να διαβαστεί ένας ακέραιος και να εκτυπωθεί το αντίστοιχο γράμμα του 
λατινικού αλφαβήτου, αν ο ακέραιος έχει την τιμή 1 ή 2 ή 3 διαφορετικά να εκτυπωθεί η λέξη 
«Άγνωστος». 
Λογικό διάγραμμα: 
Υλοποίηση σε ψευδογλώσσα: 
Αλγόριθμος 
Παράδειγμα_4 
Διάβασε 
a 
Αν 
a 
= 
1 
τότε 
Εκτύπωσε 
“A” 
αλλιώς_αν 
a 
= 
2 
τότε 
Εκτύπωσε 
“Β” 
αλλιώς_αν 
a 
= 
3 
τότε 
Εκτύπωσε 
“C” 
αλλιώς 
Εκτύπωσε 
“Άγνωστος” 
τέλος_αν 
Τέλος 
Παράδειγμα_4 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 9
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Υλοποίηση σε γλώσσα προγραμματισμού C: 
#include 
<stdio.h> 
main() 
{ 
int 
a; 
clrscr(); 
printf("Dose 
tin 
timi 
tou 
akeraiou: 
"); 
scanf("%d",&a); 
if(a==1) 
printf("A"); 
else 
if(a==2) 
printf("B"); 
else 
if(a==3) 
printf("C"); 
else 
printf("Agnwstos!"); 
getch(); 
} 
Παράδειγμα αλγορίθμου με δομή πολλαπλής επιλογής χρησιμοποιώντας την εντολή 
Επίλεξε 
Λεκτική περιγραφή: Να εισαχθεί ένας ακέραιος που αντιστοιχεί σε μία ηλικία και να βρεθεί σε 
ποια όρια εντάσσεται η δεδομένη ηλικία εμφανίζοντας σχετικό μήνυμα. 
Υλοποίηση σε ψευδογλώσσα: 
Αλγόριθμος 
Παράδειγμα_5 
Εκτύπωσε 
“Σε 
ποια 
ηλικία 
άρχισε 
να 
μαθαίνεις 
προγραμματισμό;” 
Διάβασε 
age 
Επίλεξε 
age 
Περίπτωση 
< 
0 
Εκτύπωσε 
“Δώσε 
μία 
πραγματική 
ηλικία…” 
Περίπτωση 
< 
5 
Εκτύπωσε 
“Μάλλον 
τα 
παραλές 
…” 
Περίπτωση 
< 
60 
Εκτύπωσε 
“Μπράβο…” 
Περίπτωση 
< 
100 
Εκτύπωσε 
“Ποτέ 
δεν 
είναι 
αργά…” 
Περίπτωση 
αλλιώς 
Εκτύπωσε 
“Κάλλιο 
αργά 
παρά 
ποτέ…” 
τέλος_επιλογών 
Τέλος 
Παράδειγμα_5 
Υλοποίηση σε γλώσσα προγραμματισμού C: 
#include 
<stdio.h> 
main() 
{ 
int 
day; 
printf 
("δωσε 
την 
ημερα 
(ακεραιο 
απο 
1 
μεχρι 
και 
το 
7)n"); 
scanf("%d", 
&day); 
switch 
( 
day 
) 
{ 
case 
( 
1 
): 
printf 
("Δευτέρα!n"); 
break; 
case 
( 
2 
): 
printf 
("Τρίτη!n"); 
break; 
case 
( 
3 
): 
printf 
("Τετάρτη!n"); 
break; 
case 
( 
4 
): 
printf 
("Πέμπτη!n"); 
break; 
case 
( 
5 
): 
printf 
("Παρασκευή!n"); 
break; 
case 
( 
6 
): 
printf 
("Σαββάτο!n"); 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 10
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
break; 
case 
( 
7 
): 
printf 
("Κυριακή!n"); 
break; 
default: 
printf 
("λάθος 
επιλογή!n"); 
break; 
} 
} 
Παράδειγμα με εμφωλευμένες διαδικασίες 
Λεκτική περιγραφή: Να διαβάζονται δύο αριθμοί που αντιστοιχούν στο ύψος και στο βάρος 
ενός άνδρα. Να εκτυπωνέται ότι ο άνδρας είναι «ελαφρύς», αν το βάρος του είναι κάτω από 
80 κιλά ή να εκτυπώνεται «βαρύς» στην αντίθετη περίπτωση. Επίσης να εκτυπώνεται 
«κοντός» αν το ύψος είναι κάτω από 1.70, αλλιώς να εκτυπώνεται «ψηλός». 
Υλοποίηση σε ψευδογλώσσα: 
Αλγόριθμος 
Παράδειγμα_6 
Διάβασε 
ύψος, 
βάρος 
Αν 
βάρος 
< 
80 
τότε 
Αν 
ύψος 
< 
1.70 
τότε 
Εκτύπωσε 
“ελαφρύς 
-­‐ 
κοντός” 
αλλιώς 
Εκτύπωσε 
“ελαφρύς 
-­‐ 
ψηλός” 
τέλος_αν 
αλλιώς 
Αν 
ύψος 
< 
1.70 
τότε 
Εκτύπωσε 
“βαρύς 
-­‐ 
κοντός” 
αλλιώς 
Εκτύπωσε 
“βαρύς 
-­‐ 
ψηλός” 
τέλος_αν 
τέλος_αν 
Τέλος 
Παράδειγμα_6 
2.6. Δομή επανάληψης 
Η δομή επανάληψης εφαρμόζεται στις περιπτώσεις όπου μία ακολουθία εντολών πρέπει να 
γίνει περισσότερες από μία φορές. Εφαρμόζεται σε ένα σύνολο περιπτώσεων που έχουν κάτι 
κοινό. Οι επαναληπτικές διαδικασίες συχνά εμπεριέχουν και συνθήκες επιλογών. 
Παράδειγμα αλγορίθμου με δομή επανάληψης 
Λεκτική περιγραφή: Να γραφεί αλγόριθμος που να εμφανίζει τους αριθμούς από το 1 μέχρι το 
100. 
Υλοποίηση σε ψευδογλώσσα με την εντολή ‘Οσο ... Επανάλαβε: 
Αλγόριθμος 
Παράδειγμα_7 
i 
← 1 
Όσο 
i 
<= 
100 
επανάλαβε 
Εκτύπωσε 
i 
i 
← i +1 
τέλος_επανάληψης 
Τέλος 
Παράδειγμα_7 
Υλοποίηση σε γλώσσα προγραμματισμού C: 
#include 
<stdio.h> 
main() 
{ 
int 
i 
= 
1; 
while 
(i 
<= 
100){ 
printf(“%d”, 
i); 
i++; 
} 
getchar(); 
} 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 11
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Υλοποίηση σε ψευδογλώσσα με την εντολή Αρχή_Επανάληψης ... Μέχρις_ότου: 
Αλγόριθμος 
Παράδειγμα_8 
i 
← 1 
Αρχή_επανάληψης 
Εκτύπωσε 
i 
i 
← i +1 
Μέχρις_ότου 
i 
> 
100 
Τέλος 
Παράδειγμα_8 
Υλοποίηση σε γλώσσα προγραμματισμού C: 
#include 
<stdio.h> 
main() 
{ 
int 
i=1; 
do 
{ 
printf(“%d”, 
i); 
i++; 
} 
while 
(i 
<= 
100); 
getchar(); 
} 
Υλοποίηση σε ψευδογλώσσα με την εντολή Για... από... μέχρι: 
Αλγόριθμος 
Παράδειγμα_9 
Για 
i 
από 
1 
μέχρι 
100 
Εκτύπωσε 
i 
τέλος_επανάληψης 
Τέλος 
Παράδειγμα_9 
Υλοποίηση σε γλώσσα προγραμματισμού C: 
#include 
<stdio.h> 
main() 
{ 
int 
i; 
for 
(i 
=1; 
i 
<= 
100, 
i++){ 
printf(“%d”, 
i); 
} 
getchar(); 
} 
Παράδειγμα αλγορίθμου με δομή επανάληψης και επαναληπτική είσοδο στοιχείων 
Λεκτική περιγραφή: Να γραφεί αλγόριθμος που να διαβάζει ένα άγνωστο πλήθος αριθμών και 
να εμφανίζει τον κάθε αριθμό (όσο αυτοί είναι θετικοί). 
Υλοποίηση σε ψευδογλώσσα με την εντολή ‘Οσο ... Επανάλαβε: 
Αλγόριθμος 
Παράδειγμα_10 
Διάβασε 
x 
Όσο 
x 
> 
0 
επανάλαβε 
Εμφάνισε 
x 
Διάβασε 
x 
τέλος_επανάληψης 
Τέλος 
Παράδειγμα_10 
Υλοποίηση σε ψευδογλώσσα με την εντολή Αρχή_Επανάληψης ... Μέχρις_ότου: 
Αλγόριθμος 
Παράδειγμα_11 
Αρχή_επανάληψης 
Διάβασε 
x 
Εμφάνισε 
x 
Mέχρις_ότου 
x 
< 
0 
Τέλος 
Παράδειγμα_11 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 12
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Παράδειγμα αλγορίθμου υπολογισμού 
αθροίσματος αριθμών με την εντολή Για 
Λεκτική περιγραφή: Να βρεθεί και να 
εκτυπωθεί το άθροισμα των 100 ακεραίων από 
το 1 μέχρι το 100. 
Λογικό διάγραμμα: 
Υλοποίηση σε ψευδογλώσσα με την εντολή Για... από... μέχρι: 
Αλγόριθμος 
Παράδειγμα_12 
sum 
← 
0 
Για 
i 
από 
1 
μέχρι 
100 
sum 
← 
sum 
+ 
i 
τέλος_επανάληψης 
Εκτύπωσε 
sum 
Τέλος 
Παράδειγμα_12 
Υλοποίηση σε γλώσσα προγραμματισμού C: 
#include 
<stdio.h> 
main() 
{ 
int 
i, 
sum; 
clrscr(); 
sum=0; 
for(i=1; 
i<=100; 
i++) 
sum=sum+i; 
printf("To 
athroisma 
twn 
100 
prwtwn 
akeraiwn 
einai: 
%d", 
sum); 
getch(); 
} 
Παράδειγμα αλγορίθμου υπολογισμού αθροίσματος αριθμών με την εντολή Για 
Λεκτική περιγραφή: Να βρεθεί και να εκτυπωθεί το άθροισμα των άρτιων αριθμών από το 1 
μέχρι το 100. 
Υλοποίηση σε ψευδογλώσσα με την εντολή Για... από... μέχρι: 
Αλγόριθμος 
Παράδειγμα_13 
sum 
← 
0 
Για 
i 
από 
2 
μέχρι 
100 
με_βήμα 
2 
sum 
← 
sum 
+ 
i 
τέλος_επανάληψης 
Εκτύπωσε 
sum 
Τέλος 
Παράδειγμα_13 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 13
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Κεφάλαιο 3ο – Δομές Δεδομένων και Αλγόριθμοι 
3.1 «Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα» 
Δομή δεδομένων 
Είναι ένα σύνολο αποθηκευμένων δεδομένων που υφίστανται επεξεργασία από ένα σύνολο 
λειτουργιών. 
Τα δεδομένα ενός προβλήματος αποθηκεύονται στον υπολογιστή, είτε στην κύρια μνήμη του 
είτε στην δευτερεύουσα. Η αποθήκευση δεν γίνεται κατά ένα τυχαίο τρόπο αλλά συστηματικά, 
δηλαδή χρησιμοποιώντας μία δομή. Κάθε μορφή δομής δεδομένων αποτελείται από ένα 
σύνολο κόμβων (nodes). Ως παράδειγμα δομής δεδομένων θα μπορούσαμε να αναφέρουμε 
έναν τηλεφωνικό κατάλογο αποθηκευμένο στη μνήμη του υπολογιστή. 
Βασικές λειτουργίες (πράξεις) επί των δομών δεδομένων 
o Προσπέλαση: πρόσβαση σε ένα κόμβο με σκοπό να εξεταστεί ή να αλλάξει το 
περιεχόμενό του. 
o Εισαγωγή: προσθήκη νέων κόμβων σε μία δομή. 
o Διαγραφή: (αντίθετο της εισαγωγής), δηλαδή αφαίρεση ενός κόμβου από μία δομή. 
o Αναζήτηση: γίνεται προσπέλαση των κόμβων μίας δομής προκειμένου να εντοπιστούν 
ένας ή περισσότεροι που έχουν μία δεδομένη ιδιότητα. 
o Ταξινόμηση: όπου οι κόμβοι διατάσσονται κατά αύξουσα ή φθίνουσα σειρά. 
o Αντιγραφή: όλοι ή μερικοί από τους κόμβους μίας δομής αντιγράφονται σε μία άλλη. 
o Συγχώνευση: δύο ή περισσότερες δομές ενώνονται σε μία δομή. 
o Διαχωρισμός: (αντίστροφα από την συγχώνευση) 
Στην πράξη σπάνια χρησιμοποιούνται και οι οκτώ λειτουργίες για κάποια δομή. Συνηθέστατα 
παρατηρείται το φαινόμενο μία δομή δεδομένων να είναι αποδοτικότερη από μία άλλη δομή με 
κριτήριο κάποια λειτουργία, για παράδειγμα την αναζήτηση, αλλά λιγότερο αποδοτική για 
κάποια άλλη λειτουργία, για παράδειγμα την εισαγωγή. Αυτές οι παρατηρήσεις εξηγούν αφ' 
ενός την ύπαρξη διαφορετικών δομών, και αφ' ετέρου τη σπουδαιότητα της επιλογής της 
κατάλληλης δομής κάθε φορά. 
Κατηγορίες δομών δεδομένων 
Οι δομές δεδομένων διακρίνονται σε δύο μεγάλες κατηγορίες: 
o Στατικές (static) 
o Δυναμικές (dynamic) 
Οι δυναμικές δομές δεν αποθηκεύονται σε συνεχόμενες θέσεις μνήμης αλλά στηρίζονται στην 
τεχνική της λεγάμενης δυναμικής παραχώρησης μνήμης (dynamic memory allocation). Με 
άλλα λόγια, οι δομές αυτές δεν έχουν σταθερό μέγεθος, αλλά ο αριθμός των κόμβων τους 
μεγαλώνει και μικραίνει καθώς στη δομή εισάγονται νέα δεδομένα ή διαγράφονται κάποια 
δεδομένα αντίστοιχα. Όλες οι σύγχρονες γλώσσες προγραμματισμού προσφέρουν τη 
δυνατότητα δυναμικής παραχώρησης μνήμης. 
Σχέση μεταξύ αλγορίθμου και δομής δεδομένων 
Υπάρχει μεγάλη εξάρτηση μεταξύ της δομής δεδομένων και του αλγόριθμου που επεξεργάζεται 
τη δομή. Μάλιστα, το πρόγραμμα πρέπει να θεωρεί τη δομή δεδομένων και τον αλγόριθμο ως 
μία αδιάσπαστη ενότητα. Η παρατήρηση αυτή δικαιολογεί την εξίσωση που διατυπώθηκε το 
1976 από τον Wirth (που σχεδίασε και υλοποίησε τη γλώσσα Pascal): 
Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα 
Πρόγραμμα 
Ένα πρόγραμμα ενός υπολογιστή είναι μια συνεχής αλληλουχία εντολών τις οποίες ο 
υπολογιστής καλείται να εκτελέσει μία προς μία για να παραχθεί το επιθυμητό προς τον χρήστη 
αποτέλεσμα. 
3.2 Τεχνικές σχεδίασης αλγορίθμων 
Οι μέθοδοι λύσης ενός προβλήματος που προκύπτουν από την ανάλυσή του, οδηγούν στη 
σχεδίαση ενός αλγορίθμου που συνιστά την ακολουθία βημάτων, που πρέπει να ακολουθηθούν 
για να επιλυθεί το πρόβλημα. Όπως αναφέρθηκε, υπάρχει περίπτωση να παρουσιαστούν 
περισσότερες από μία τεχνικές για τη λύση ενός προβλήματος. Κάθε τεχνική έχει τα δικά της 
χαρακτηριστικά και τις δικές της ιδιαιτερότητες. 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 14
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Οι πιο συνηθισμένες τεχνικές σχεδίασης αλγορίθμων είναι οι εξής: 
o Μέθοδος διαίρει και βασίλευε 
o Μέθοδος δυναμικού προγραμματισμού 
o Άπληστη μέθοδος 
Μέθοδος «Διαίρει και Βασίλευε» 
Στην κατηγορία "Διαίρει και Βασίλευε" (divide and conquer) εντάσσονται οι τεχνικές που 
υποδιαιρούν ένα πρόβλημα σε μικρότερα υποπροβλήματα, που έχουν την ίδια τυποποίηση με 
το αρχικό πρόβλημα αλλά είναι μικρότερα σε μέγεθος. Με όμοιο τρόπο, τα υπο-προβλήματα 
αυτά μπορούν να διαιρεθούν σε ακόμη μικρότερα υποπροβλήματα κοκ. Έτσι, η επίλυση ενός 
προβλήματος έγκειται στη σταδιακή επίλυση των όσο το δυνατόν μικρότερων 
υποπροβλημάτων, ώστε τελικά να καταλήξουμε στη συνολική λύση του αρχικού ευρύτερου 
προβλήματος. Αυτή η προσέγγιση ονομάζεται από επάνω προς τα κάτω (top-down). 
Πιο τυπικά, η περιγραφή αυτής της μεθόδου σχεδίασης αλγορίθμων μπορεί να αποδοθεί με τα 
επόμενα βήματα: 
1. Δίνεται για επίλυση ένα στιγμιότυπο ενός προβλήματος. 
2. Υποδιαιρείται το στιγμιότυπο του προβλήματος σε υπο-στιγμιότυπα του ίδιου 
προβλήματος. 
3. Δίνεται ανεξάρτητη λύση σε κάθε ένα υπο-στιγμιότυπο. 
4. Συνδυάζονται όλες οι μερικές λύσεις που βρέθηκαν για τα υπο-στιγμιότυπα, έτσι ώστε 
να δοθεί η συνολική λύση του προβλήματος. 
Μέθοδος δυναμικού προγραμματισμού 
Με τον δυναμικό προγραμματισμό ακολουθούμε την αντίστροφη διαδικασία από τη μέθοδο 
«Διαίρει και Βασίλευε». Εδώ έχουμε προσέγγιση του προβλήματος από κάτω προς τα επάνω 
(bottom-up). Η φιλοσοφία των προβλημάτων αυτών είναι από την αρχή να επιλύονται τα 
μικρότερα προβλήματα και σταδιακά να επιλύονται τα μεγαλύτερα ως σύνθεση των 
απλούστερων. 
Επομένως τα βήματα που ακολουθούνται κατά την προσέγγιση αυτή είναι: 
1. Ξεκινά η λύση από το ελάχιστο στιγμιότυπο του προβλήματος, 
2. Υπολογίζονται σταδιακά αποτελέσματα όλο και μεγαλύτερων υπο-στιγμιότυπων, 
3. Καταλήγει στη σύνθεση. 
Άπληστη μέθοδος 
Σε πολλά προβλήματα βελτιστοποίησης χρησιμοποιείται μία μέθοδος, που δεν βρίσκει πράγματι 
τη βέλτιστη λύση, αλλά σκοπός της είναι να την προσεγγίσει. Συνήθως, οι αλγόριθμοι αυτού 
του τύπου προχωρούν με βάση σταδιακές επιλογές που αφορούν στο βέλτιστο κάθε βήματος, 
χωρίς μέριμνα για το τελικό βέλτιστο. Η μέθοδος αυτή που είναι γνωστή και ως "άπληστη 
μέθοδος" (greedy method), μπορεί να τυποποιηθεί σύμφωνα με τις εξής δύο παραδοχές: 
1. Σε κάθε βήμα επιλογή της τρέχουσας βέλτιστης επιλογής. 
2. Επιβεβαίωση ότι αυτή η προσέγγιση εγγυάται τη συνολική βέλτιστη. 
3.3. Πίνακες 
Με τον όρο στατική δομή δεδομένων εννοείται ότι το ακριβές μέγεθος της απαιτούμενης 
κύριας μνήμης καθορίζεται κατά τη στιγμή του προγραμματισμού τους και κατά συνέπεια 
παραπέμενει σταθερό σε όλη τη διάρκεια εκτέλεσης του προγράμματος. Τα στοιχεία των 
στατικών δομών αποθηκευόνται σε συνεχόμενες θέσεις μνήμης. 
Στην πράξη οι στατικές δομές δεδομένων υλοποιούνται με πίνακες. Μπορούμε να ορίσουμε ως 
πίνακα μία δομή που περιέχει στοιχεία του ίδιου τύπου (δηλαδή ακέραιος, πραγματικούς, 
χαρακτήρες, κλπ.). Η αναφορά στα στοιχεία ενός πίνακα γίνεται με τη χρήση του συμβολικού 
ονόματος του πίνακα ακολουθούμενου από την τιμή ενος ή περισσοτέρων δεικτών (indexes) 
σε παρένθεση ή αγκύλη, πχ. Πίνακας[2] . 
Ένας πίνακας μπορεί να είναι μονοδιάστατος, αλλά στη γενικότερη περίπτωση μπορεί να 
δισδιάστατος, τρισδιάστατος, κλπ. Στους δισδιάστατους πίνακες αν το μέγεθος των δύο 
διαστάσεων είναι ίσο τότε ο πίνακας λέγεται τετραγωνικός και συμβολίζεται ως πίνακας n x n. 
Παραδείγματα πινάκων: 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 15
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Παράδειγμα εύρεσης του μικρότερου στοιχείου ενός μονοδιάστατου πίνακα 
Λεκτική περιγραφή: Δίνεται ένας μονοδιάστατος πίνακας table 100 στοιχείων. Να σχεδιαστεί 
αλγόριθμος που να βρίσκει το μικρότερο στοιχείο του. 
Αλγόριθμος 
Παράδειγμα_1 
Δεδομένα 
// 
table 
min 
← 
table[1] 
Για 
i 
από 
2 
μέχρι 
100 
Αν 
table[i] 
< 
min 
τότε 
min 
← 
table[i] 
τέλος_αν 
τέλος_επανάληψης 
Εμφάνισε 
min 
Τέλος 
Παράδειγμα_1 
Παράδειγμα εύρεσης αθροίσματος στοιχείων ενός δισδιάστατου πίνακα 
Λεκτική περιγραφή: Δίνεται ένας δισδιάστατος πίνακας table με m γραμμές και n στήλες. Να 
βρεθεί το άθροισμα κατά γραμμή, κατά στήλη και συνολικά. 
Αλγόριθμος 
Παράδειγμα_2 
Δεδομένα 
// 
m, 
n, 
table 
sum 
← 
0 
Για 
i 
από 
1 
μέχρι 
m 
row[i] 
← 
0 
τέλος_επανάληψης 
Για 
j 
από 
1 
μέχρι 
n 
col[j] 
← 
0 
τέλος_επανάληψης 
Για 
i 
από 
1 
μέχρι 
m 
Για 
j 
από 
1 
μέχρι 
n 
sum 
← 
sum 
+ 
table[i,j] 
row[i] 
← 
row[i] 
+ 
table[i,j] 
col[j] 
← 
col[j] 
+ 
table[i,j] 
τέλος_επανάληψης 
τέλος_επανάληψης 
Αποτελέσματα 
// 
row, 
col, 
sum 
Τέλος 
Παράδειγμα_2 
3.4. Στοίβα 
Μία στοίβα δεδομένων μοιάζει με μία στοίβα από πιάτα. Για παράδειγμα κάθε πιάτο που 
πλένεται τοποθετείται στην κορυφή της στοίβας των πιάτων, ενώ για σκούπισμα λαμβάνεται 
και πάλι το πιάτο της κορυφής. Αυτή η μέθοδος επεξεργασίας ονομάζεται Τελευταίο Μέσα 
Πρώτο Έξω ή απλούστερα με την αγγλική συντομογραφία LIFO (Last-In-First-Out). Δύο είναι 
οι κύριες λειτουργίες σε μία στοίβα: 
o Η ώθηση (push) στοιχείου στην κορυφή της στοίβας και 
o Η απώθηση (pop) στοιχείου από κορυφή της στοίβας 
Η διαδικασία της ώθησης πρέπει οπωσδήποτε να ελέγχει αν η στοίβα είναι γεμάτη, οπότε 
λέγεται ότι συμβαίνει υπερχείλιση (overflow) της στοίβας. Αντίστοιχα η διαδικασία της 
απώθησης ελέγχει αν υπάρχει ένα τουλάχιστον στοιχείο στη στοίβα, δηλαδή ελέγχει αν γίνεται 
υποχείλιση (underflow) της στοίβας. 
Μία στοίβα μπορεί να υλοποιηθεί πολύ εύκολα με τη βοήθεια ενός μονοδιάστατου πίνακα. Μία 
βοηθητική μεταβλητή (με όνομα συνήθως top) χρησιμοποιείται για να δείχνει το στοιχείο που 
τοποθετήθηκε τελευταίο στην κορυφή της στοίβας. Για την εισαγωγή ενός νέου στοιχείου στη 
στοίβα (ώθηση), αρκεί να αυξηθεί η μεταβλητή top κατά ένα και στη θέση αυτή να εισέλθει το 
στοιχείο. Αντίθετα για την εξαγωγή ενός στοιχείου από τη στοίβα (απώθηση) εξέρχεται πρώτα 
το στοιχείο που δείχνειη μεταβλητή top και στη συνέχεια η top μειώνεται κατά ένα για να 
δείχνει τη νέα κορυφή. 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 16
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Αλγόριθμος Ώθησης στοιχείου σε στοίβα 
Στον ακόλουθο αλγόριθμο χρησιμοποιείται μία λογική 
μεταβλητή, done, η οποία δηλώνει την επιτυχή εκτέλεσης της 
διαδικασίας. Η μεταβλητή top δηλώνει την επάνω θέση της 
στοίβας που είναι κατειλημμένη από κάποιο στοιχείο. Τα 
δεδομένα είναι αποθηκευμένα σε ένα μονοδιάστατο πίνακα, που 
ονομάζεται stack και έχει μέγεθος size. Η μεταβλητή item 
χρησιμεύει για την αποθήκευση του στοιχείου που εισάγεται. 
Αλγόριθμος 
Ώθηση 
Δεδομένα 
// 
top, 
item 
Αν 
top 
< 
size 
τότε 
top 
← 
top 
+ 
1 
stack[top] 
← 
item 
done 
← 
Αληθής 
αλλιώς 
done 
← 
Ψευδής 
τέλος_αν 
Αποτελέσματα 
// 
top, 
done 
Τέλος 
Ώθηση 
Αλγόριθμος Απώθησης στοιχείου σε στοίβα 
Στον ακόλουθο αλγόριθμο χρησιμοποιείται οι ίδιες μεταβλητές με τον αλγόριθμο της Ώθησης, 
με τη μόνη διαφορά ότι εδώ η μεταβλητή item χρησιμεύει για την αποθήκευση του στοιχείου 
που εξάγεται από τη στοίβα. 
Αλγόριθμος 
Απώθηση 
Δεδομένα 
// 
top 
Αν 
top 
<= 
1 
τότε 
item 
← 
stack[top] 
top 
← 
top 
-­‐ 
1 
done 
← 
Αληθής 
αλλιώς 
done 
← 
Ψευδής 
τέλος_αν 
Αποτελέσματα 
// 
item, 
top, 
done 
Τέλος 
Απώθηση 
3.5. Ουρά 
Σε μία ουρά αναμονής με ανθρώπους συμβαίνει να εξυπηρετείται εκείνος που στάθηκε στην 
ουρά πρώτος από όλους τους άλλους. Η μέθοδος αυτή επεξεργασίας ονομάζεται Πρώτο Μέσα 
Πρώτο Έξω ή απλούστερα με την αγγλική συντομογραφία FIFI (First-In-First-Out). Δύο είναι 
οι κύριες λειτουργίες που εκτελούνται σε μία ουρά: 
o Η εισαγωγή (enqueue) στοιχείου στο πίσω άκρο της ουράς και 
o Η εξαγωγή (dequeue) στοιχείου από το εμπρός άκρο της ουράς 
Σε αντίθεση με τη δομή της στοίβας, στην περίπτωση της ουράς απαιτούνται δύο δείκτες: ο 
εμπρός (front) και πίσω (rear) δείκτης, που μας δίνουν τη θέση του στοιχείου που σε πρώτη 
ευκαιρία θα εξαχθεί και τη θέση του στοιχείου που μόλις εισήλθε. 
Μία ουρά μπορεί να υλοποιηθεί με τη βοήθεια ενός μονοδιάστατου πίνακα. Για την εισαγωγή 
ενός νέου στοιχείου στην ουρά αυξάνεται ο δείκτης rear κατά ένα και στη θέση αυτή 
αποθηκεύεται το στοιχείο. Αντίστοιχα για τη λειτουργία της εξαγωγής, εξέρχεται το στοιχείο 
που δείχνει ο δείκτης front, ο οποίος στη συνέχεια αυξάνεται κατά ένα, για να δείχνει το 
επόμενο στοιχείο που πρόκειται να εξαχθεί. Σε κάθε περίπτωση όμως πρέπει να ελέγχεται πριν 
από οποιαδήποτε ενέργεια αν υπάρχει ελεύθερος χώρος στον πίνακα για την εισαγωγή και αν 
υπάρχει ένα τουλάχιστον στοιχείο για την εξαγωγή. 
Αλγόριθμος Εισαγωγής στοιχείου σε ουρά 
Στον ακόλουθο αλγόριθμο χρησιμοποιείται μία λογική μεταβλητή, done, η οποία δηλώνει την 
επιτυχή εκτέλεσης της διαδικασίας. Η μεταβλητή rear δηλώνει το δείκτη που δείχνει την 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 17
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
τελευταία θέση της ουράς, που είναι ένας πίνακας queue με μέγεθος size. Η μεταβλητή item 
χρησιμεύει για την αποθήκευση του στοιχείου που εισάγεται. 
Αλγόριθμος 
Εισαγωγή_σε_Ουρά 
Δεδομένα 
// 
rear, 
item 
Αν 
rear 
< 
size 
τότε 
rear 
← 
rear 
+ 
1 
queue[rear] 
← 
item 
done 
← 
Αληθής 
αλλιώς 
done 
← 
Ψευδής 
τέλος_αν 
Αποτελέσματα 
// 
rear, 
done 
Τέλος 
Εισαγωγή_σε_Ουρά 
Αλγόριθμος Εξαγωγής στοιχείου από ουρά 
Στον ακόλουθο αλγόριθμο χρησιμοποιείται μία λογική μεταβλητή, done, η οποία δηλώνει την 
επιτυχή εκτέλεσης της διαδικασίας. Η μεταβλητή front δηλώνει το δείκτη που δείχνει την 
πρώτη θέση της ουράς, που είναι ένας πίνακας queue με μέγεθος size. Η μεταβλητή item 
χρησιμεύει για την αποθήκευση του στοιχείου που εξάγεται. 
Αλγόριθμος 
Εξαγωγή_από_Ουρά 
Δεδομένα 
// 
rear, 
front, 
item 
Αν 
rear 
<= 
front 
τότε 
front 
← 
front 
+ 
1 
item 
← 
queue[rear 
done 
← 
Αληθής 
αλλιώς 
done 
← 
Ψευδής 
τέλος_αν 
Αποτελέσματα 
// 
item, 
rear, 
front, 
done 
Τέλος 
Εξαγωγή_από_Ουρά 
Σημείωση: Η συνθήκη rear <= front που εμφανίζεται στον αλγόριθμο ελέγχει αν η ουρά 
περιέχει στοιχεία. Η ισότητα ισχύει στην περίπτωση που η ουρά περιέχει μόνο ένα στοιχείο. 
3.6 Λίστα 
Οι πίνακες, η στοίβα και η ουρά είναι στατικές δομές δεδομένων, δηλαδή έχουν σταθερό 
μέγεθος κατά τη διάρκεια της εκτέλεσης του προγράμματος και οι διαδοχικοί κόμβοι (στοιχεία) 
αποθηκεύονται σε συνεχόμενες θέσεις μνήμης. Οι λίστες είναι δυναμικές δομές δεδομένων και 
το κύριο χαρακτηριστικό τους είναι ότι οι κόμβοι τους συνήθως βρίσκονται σε απομακρυσμένες 
θέσεις μνήμης και η σύνδεση τους γίνεται με δείκτες. Ο δείκτης (pointer) είναι ένας ιδιαίτερος 
τύπος που προσφέρεται από τις περισσότερες σύγχρονες γλώσσες προγραμματισμού. Ο 
δείκτης δεν λαμβάνει αριθμητικές τιμές όπως ακέραιες, πραγματικές κ.α, αλλά οι τιμές του 
είναι διευθύνσεις στην κύρια μνήμη και χρησιμοποιείται ακριβώς για τη σύνδεση των διαφόρων 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 18
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
στοιχείων μιας δομής που είναι αποθηκευμένα σε μη συνεχόμενες θέσεις μνήμης. Συνήθως ο 
δείκτης είναι ένα πεδίο κάθε κόμβου της δομής: 
Δεδομένα Δείκτης 
Το πεδίο Δεδομένα μπορεί να περιέχει μία ή περισσότερες αλφαριθμητικές ή αριθμητικές 
πληροφορίες. Με τη χρήση των δεικτών διευκολύνονται οι λειτουργίες της εισαγωγής και της 
διαγραφής δεδομένων στις λίστες. Οι απαιτούμενες ενέργειες για τη εισαγωγή του νέου 
κόμβου είναι ο δείκτης του δεύτερου κόμβου να δείχνει το νέο κόμβο και ο δείκτης του νέου 
κόμβου να δείχνει τον τρίτο κόμβο (δηλαδή να έχει πάρει την τιμή που είχε πριν την εισαγωγή 
ο δείκτης του δεύτερου κόμβου). Έτσι οι κόμβοι της λίστας διατηρούν τη λογική τους σειρά, 
αλλά οι φυσικές θέσεις στη μνήμη μπορεί να είναι τελείως διαφορετικές. 
Αντίστοιχα για τη διαγραφή ενός κόμβου αρκεί να αλλάξει τιμή ο δείκτης του προηγούμενου 
κόμβου και να δείχνει πλέον τον επόμενο αυτού που διαγράφηκε. Ο κόμβος που διαγράφηκε 
αποτελεί «άχρηστο δεδομένο» και ο χώρος μνήμης που καταλάμβανε, παραχωρείται για άλλη 
χρήση. 
Αλγόριθμος Εισαγωγής κόμβου σε λίστα 
Στον ακόλουθο αλγόριθμο θεωρούμε τη σύμβαση ότι αν p είναι ο δείκτης προς κάποιον κόμβο, 
τότε p.info είναι το περιεχόμενο του κόμβου (τα δεδομένα δηλαδή ενός στοιχείου), και p.next 
είναι ο δείκτης του ίδιου κόμβου προς τον επόμενο κόμβο. Ο δείκτης q δείχνει τον κόμβο που 
πρόκειται να εισαχθεί στη λίστα μας. 
Αλγόριθμος 
Εισαγωγή_Κόμβου_σε_Λίστα 
Δεδομένα 
// 
p: 
δείκτης 
του 
κόμβου 
μετά 
τον 
οποίο 
θα 
γίνει 
η 
// 
εισαγωγή 
δεδομένων 
του 
νέου 
κόμβου 
// 
q: 
δείκτης 
της 
θέσης 
του 
νέου 
κόμβου 
q.info 
← 
data 
q.next 
← 
p.next 
p.next 
← 
q 
Τέλος 
Εισαγωγή_Κόμβου_σε_Λίστα 
Αλγόριθμος Διαγραφής κόμβου από λίστα 
Στον ακόλουθο αλγόριθμο θεωρούμε ότι μας δίνεται ο δείκτης p που δείχνει προς τον κόμβο, 
του οποίου ο επόμενος δια διαγραφεί, δηλαδή πρόκειται να διαγραφεί ο κόμβος που δείχνει το 
p.next. 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 19
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Αλγόριθμος 
Διαγραφή_Κόμβου_από_Λίστα 
Δεδομένα 
// 
p: 
δείκτης 
του 
κόμβου, 
του 
οποίου 
ο 
επόμενος 
// 
θα 
διαγραφεί 
q 
← 
p.next 
p.next 
← 
q.next 
Τέλος 
Διαγραφή_Κόμβου_από_Λίστα 
3.7 Αναδρομή 
Η τεχνική της αναδρομής στηρίζεται στη δυνατότητα μία διαδικασία ή συνάρτηση να καλεί τον 
εαυτό της. 
Αλγόριθμος Υπολογισμού του Μέγιστου Κοινού Διαιρέτη (ΜΚΔ) 
Ένα ιστορικό πρόβλημα είναι η εύρεση του μέγιστου κοινού διαιρέτη δύο ακεραίων αριθμών. Ο 
αλγόριθμος εύρεσης του ΜΚΔ ανήκει στον Ευκλείδη. Ωστόσο η υλοποίηση του αλγορίθμου 
μπορεί να γίνει με πολλούς τρόπους. Ο πρώτος που θα δείξουμε είναι ο πιο απλός αλλά και 
αργός αλγόριθμος. Ουσιαστικά λαμβάνει το μικρότερο από τους δύο ακεραίους, z, και εξετάζει 
με τη σειρά όλους του ακέραιους ξεκινώντας από τον z και μειώνοντας συνεχώς κατά μία 
μονάδα μέχρι και οι δύο αριθμοί, x και y, να διαιρούνται από τη νέα τιμή του z. 
Αλγόριθμος 
Μέγιστος_Κοινός_Διαιρέτης 
Δεδομένα 
// 
x, 
y 
Αν 
x 
< 
y 
τότε 
z 
← 
x 
αλλιώς 
z 
← 
y 
τέλος_αν 
Όσο 
(x 
mod 
z 
<> 
0) 
Ή 
(y 
mod 
z 
<> 
0) 
επανάλαβε 
z 
← 
z 
-­‐ 
1 
τέλος_επανάληψης 
Αποτελέσματα 
// 
z, 
ότι 
περιέχει 
η 
μεταβλητή 
z 
είναι 
ο 
ΜΚΔ 
Τέλος 
Μέγιστος_Κοινός_Διαιρέτης 
Αλγόριθμος Ευκλείδη για τον υπολογισμό του Μέγιστου Κοινού Διαιρέτη (ΜΚΔ) 
Ο αλγόριθμος που αποδίδεται στον Ευκλείδη βελτιώνει τον προηγούμενο αλγόριθμο, καθώς 
δεν εξετάζει με τη σειρά όλους τους ακέραιους. 
Αλγόριθμος 
Ευκλείδης_ΜΚΔ 
Δεδομένα 
// 
x, 
y 
z 
← 
y 
Όσο 
z 
<> 
0 
επανάλαβε 
z 
← 
x 
mod 
y 
x 
← 
y 
y 
← 
z 
τέλος_επανάληψης 
Αποτελέσματα 
// 
x, 
ότι 
περιέχει 
η 
μεταβλητή 
x 
είναι 
ο 
ΜΚΔ 
Τέλος 
Ευκλείδης_ΜΚΔ 
Αναδρομικός Αλγόριθμος Ευκλείδη για τον υπολογισμό του ΜΚΔ 
Ο αναδρομικός αλγόριθμος καλεί τον εαυτό του για να υπολογίσει τον ΜΚΔ. 
Αλγόριθμος 
Αναδρομικός_Ευκλείδης_ΜΚΔ 
Δεδομένα 
// 
x, 
y 
z 
← 
y 
Αν 
y 
= 
0 
τότε 
z 
← 
x 
αλλιώς 
z 
← 
Αναδρομικός_Ευκλείδης_ΜΚΔ(y, 
x 
mod 
y) 
τέλος_αν 
Αποτελέσματα 
// 
z, 
ότι 
περιέχει 
η 
μεταβλητή 
z 
είναι 
ο 
ΜΚΔ 
Τέλος 
Αναδρομικός_Ευκλείδης_ΜΚΔ 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 20
Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών 
Βιβλιογραφία 
1. Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον (Γ΄ΓΕΛ) 
(http://ebooks.edu.gr/modules/ebook/show.php/DSGL-C101/36/198,1069/ ) 
Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 21

More Related Content

What's hot

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ: κεφαλαιο 2.1 προβλημα
Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ: κεφαλαιο 2.1  προβλημαΕισαγωγή στις Αρχές της Επιστήμης των ΗΥ: κεφαλαιο 2.1  προβλημα
Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ: κεφαλαιο 2.1 προβλημα
evoyiatz
 
Python Κεφ. 1.4 Δομή Επανάληψης
Python Κεφ. 1.4 Δομή ΕπανάληψηςPython Κεφ. 1.4 Δομή Επανάληψης
Python Κεφ. 1.4 Δομή Επανάληψης
Ιωάννου Γιαννάκης
 
ΑΕΠΠ - Λογικές Εκφράσεις
ΑΕΠΠ - Λογικές ΕκφράσειςΑΕΠΠ - Λογικές Εκφράσεις
ΑΕΠΠ - Λογικές Εκφράσεις
Ιωάννης Σαρημπαλίδης
 
Εισαγωγή στις αρχές της επιστήμης των Η/Υ
Εισαγωγή στις αρχές της επιστήμης των Η/ΥΕισαγωγή στις αρχές της επιστήμης των Η/Υ
Εισαγωγή στις αρχές της επιστήμης των Η/Υ
Ministry of Education
 
Aσκήσεις Python (θεωρία)
Aσκήσεις Python (θεωρία)Aσκήσεις Python (θεωρία)
Aσκήσεις Python (θεωρία)
Katerina Drimili
 
πληρης θεωρια αεππ ερωτησεις απαντησεις
πληρης θεωρια αεππ ερωτησεις απαντησειςπληρης θεωρια αεππ ερωτησεις απαντησεις
πληρης θεωρια αεππ ερωτησεις απαντησειςAnastasios Timotheidis
 
Δομή Επανάληψης
Δομή ΕπανάληψηςΔομή Επανάληψης
Δομή Επανάληψης
Makis Karadonas
 
Αλγοριθμική Δομή Επιλογής
Αλγοριθμική Δομή ΕπιλογήςΑλγοριθμική Δομή Επιλογής
Αλγοριθμική Δομή Επιλογής
gregdereken
 
ΑΕΠΠ ΚΕΦ 7
ΑΕΠΠ ΚΕΦ 7ΑΕΠΠ ΚΕΦ 7
ΑΕΠΠ ΚΕΦ 7
educast
 
διδακτικο σεναριο στη δομή επιλογής
διδακτικο σεναριο στη δομή επιλογήςδιδακτικο σεναριο στη δομή επιλογής
διδακτικο σεναριο στη δομή επιλογής
Effie Tsiabou
 
Δομή ακολουθίας στη ΓΛΩΣΣΑ
Δομή ακολουθίας στη ΓΛΩΣΣΑΔομή ακολουθίας στη ΓΛΩΣΣΑ
Δομή ακολουθίας στη ΓΛΩΣΣΑ
Alexandra Karakasidou
 
κεφ 3
κεφ 3κεφ 3
κεφ 3
sotiriasa
 
Kef10 a synartiseis
Kef10 a synartiseisKef10 a synartiseis
Kef10 a synartiseis
mnikol
 
αεππ κεφαλαιο 1 ανάλυση προβλήματος
αεππ κεφαλαιο 1 ανάλυση προβλήματοςαεππ κεφαλαιο 1 ανάλυση προβλήματος
αεππ κεφαλαιο 1 ανάλυση προβλήματος
evoyiatz
 
2.1.4 - ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΛΥΣΗΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ
2.1.4 - ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΛΥΣΗΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ2.1.4 - ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΛΥΣΗΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ
2.1.4 - ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΛΥΣΗΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ
Anastasia Stathopoulou
 
ΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣ
ΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣ
ΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣ
ΚΩΣΤΑΣ ΓΚΑΒΕΡΑΣ
 
2.2.1 - ΟΡΙΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ
2.2.1 - ΟΡΙΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ2.2.1 - ΟΡΙΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ
2.2.1 - ΟΡΙΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ
Anastasia Stathopoulou
 
ΑΕΠΠ - Μάθημα 26
ΑΕΠΠ - Μάθημα 26ΑΕΠΠ - Μάθημα 26
ΑΕΠΠ - Μάθημα 26
Jonny Arvanitakis
 
Β' ΛΥΚΕΙΟΥ - ΕΠΙΣΤΗΜΗ Η/Υ
Β' ΛΥΚΕΙΟΥ - ΕΠΙΣΤΗΜΗ Η/ΥΒ' ΛΥΚΕΙΟΥ - ΕΠΙΣΤΗΜΗ Η/Υ
Β' ΛΥΚΕΙΟΥ - ΕΠΙΣΤΗΜΗ Η/Υ
ΕΥΑΓΓΕΛΙΑ ΚΟΚΚΙΝΟΥ
 

What's hot (20)

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ: κεφαλαιο 2.1 προβλημα
Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ: κεφαλαιο 2.1  προβλημαΕισαγωγή στις Αρχές της Επιστήμης των ΗΥ: κεφαλαιο 2.1  προβλημα
Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ: κεφαλαιο 2.1 προβλημα
 
Python Κεφ. 1.4 Δομή Επανάληψης
Python Κεφ. 1.4 Δομή ΕπανάληψηςPython Κεφ. 1.4 Δομή Επανάληψης
Python Κεφ. 1.4 Δομή Επανάληψης
 
Κεφ. 1 Ανάλυση Προβλήματος
Κεφ. 1 Ανάλυση ΠροβλήματοςΚεφ. 1 Ανάλυση Προβλήματος
Κεφ. 1 Ανάλυση Προβλήματος
 
ΑΕΠΠ - Λογικές Εκφράσεις
ΑΕΠΠ - Λογικές ΕκφράσειςΑΕΠΠ - Λογικές Εκφράσεις
ΑΕΠΠ - Λογικές Εκφράσεις
 
Εισαγωγή στις αρχές της επιστήμης των Η/Υ
Εισαγωγή στις αρχές της επιστήμης των Η/ΥΕισαγωγή στις αρχές της επιστήμης των Η/Υ
Εισαγωγή στις αρχές της επιστήμης των Η/Υ
 
Aσκήσεις Python (θεωρία)
Aσκήσεις Python (θεωρία)Aσκήσεις Python (θεωρία)
Aσκήσεις Python (θεωρία)
 
πληρης θεωρια αεππ ερωτησεις απαντησεις
πληρης θεωρια αεππ ερωτησεις απαντησειςπληρης θεωρια αεππ ερωτησεις απαντησεις
πληρης θεωρια αεππ ερωτησεις απαντησεις
 
Δομή Επανάληψης
Δομή ΕπανάληψηςΔομή Επανάληψης
Δομή Επανάληψης
 
Αλγοριθμική Δομή Επιλογής
Αλγοριθμική Δομή ΕπιλογήςΑλγοριθμική Δομή Επιλογής
Αλγοριθμική Δομή Επιλογής
 
ΑΕΠΠ ΚΕΦ 7
ΑΕΠΠ ΚΕΦ 7ΑΕΠΠ ΚΕΦ 7
ΑΕΠΠ ΚΕΦ 7
 
διδακτικο σεναριο στη δομή επιλογής
διδακτικο σεναριο στη δομή επιλογήςδιδακτικο σεναριο στη δομή επιλογής
διδακτικο σεναριο στη δομή επιλογής
 
Δομή ακολουθίας στη ΓΛΩΣΣΑ
Δομή ακολουθίας στη ΓΛΩΣΣΑΔομή ακολουθίας στη ΓΛΩΣΣΑ
Δομή ακολουθίας στη ΓΛΩΣΣΑ
 
κεφ 3
κεφ 3κεφ 3
κεφ 3
 
Kef10 a synartiseis
Kef10 a synartiseisKef10 a synartiseis
Kef10 a synartiseis
 
αεππ κεφαλαιο 1 ανάλυση προβλήματος
αεππ κεφαλαιο 1 ανάλυση προβλήματοςαεππ κεφαλαιο 1 ανάλυση προβλήματος
αεππ κεφαλαιο 1 ανάλυση προβλήματος
 
2.1.4 - ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΛΥΣΗΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ
2.1.4 - ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΛΥΣΗΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ2.1.4 - ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΛΥΣΗΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ
2.1.4 - ΔΙΑΔΙΚΑΣΙΕΣ ΕΠΙΛΥΣΗΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ
 
ΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣ
ΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣ
ΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣ
 
2.2.1 - ΟΡΙΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ
2.2.1 - ΟΡΙΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ2.2.1 - ΟΡΙΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ
2.2.1 - ΟΡΙΣΜΟΣ ΑΛΓΟΡΙΘΜΟΥ
 
ΑΕΠΠ - Μάθημα 26
ΑΕΠΠ - Μάθημα 26ΑΕΠΠ - Μάθημα 26
ΑΕΠΠ - Μάθημα 26
 
Β' ΛΥΚΕΙΟΥ - ΕΠΙΣΤΗΜΗ Η/Υ
Β' ΛΥΚΕΙΟΥ - ΕΠΙΣΤΗΜΗ Η/ΥΒ' ΛΥΚΕΙΟΥ - ΕΠΙΣΤΗΜΗ Η/Υ
Β' ΛΥΚΕΙΟΥ - ΕΠΙΣΤΗΜΗ Η/Υ
 

Similar to ΑΛΓΟΡΙΘΜΟΙ & ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Kef1o Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
Kef1o Ανάπτυξη Εφαρμογών σε Προγραμματιστικό ΠεριβάλλονKef1o Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
Kef1o Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
Eleni Kokkinou
 
Στάδια αντιμετώπισης προβλήματος
Στάδια αντιμετώπισης προβλήματοςΣτάδια αντιμετώπισης προβλήματος
Στάδια αντιμετώπισης προβλήματος
Katerina Drimili
 
Κεφάλαιο 1 ΑΕΠΠ
Κεφάλαιο 1 ΑΕΠΠΚεφάλαιο 1 ΑΕΠΠ
Κεφάλαιο 1 ΑΕΠΠ
athinabb
 
ενότητα 1
ενότητα 1ενότητα 1
ενότητα 1
ενότητα 1ενότητα 1
ανάλυση προβλήματος
ανάλυση προβλήματοςανάλυση προβλήματος
ανάλυση προβλήματοςDimitrios Dalagiorgos
 
Σημειώσεις Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Θερινή προετοιμ...
Σημειώσεις Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Θερινή προετοιμ...Σημειώσεις Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Θερινή προετοιμ...
Σημειώσεις Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Θερινή προετοιμ...
Θανάσης Δρούγας
 
ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗ
ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗ
ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗ
FTheos
 
Algorithms
AlgorithmsAlgorithms
Algorithms
papettas
 
Kefalaio1 1 α
Kefalaio1 1 αKefalaio1 1 α
Kefalaio1 1 α
Eleni Kokkinou
 
B gen algorithm
B gen algorithmB gen algorithm
B gen algorithm
John Gatzaras
 
Εισαγωγή στην έννοια του Αλγορίθμου και στον προγραμματισμό (Μέρος 1)
Εισαγωγή στην έννοια του Αλγορίθμου και στον προγραμματισμό (Μέρος 1) Εισαγωγή στην έννοια του Αλγορίθμου και στον προγραμματισμό (Μέρος 1)
Εισαγωγή στην έννοια του Αλγορίθμου και στον προγραμματισμό (Μέρος 1)
Konstantinos Kalaras Lafkiotis
 
2.1 - Problem
2.1 - Problem2.1 - Problem
2.1 - Problem
gogotsis9
 
ΑΕΠΠ: Ερωτήσεις Επανάληψης στο 1ο Κεφάλαιο
ΑΕΠΠ: Ερωτήσεις Επανάληψης στο 1ο ΚεφάλαιοΑΕΠΠ: Ερωτήσεις Επανάληψης στο 1ο Κεφάλαιο
ΑΕΠΠ: Ερωτήσεις Επανάληψης στο 1ο ΚεφάλαιοNikos Michailidis
 
κεφάλαιο 01 anaptixi-2
κεφάλαιο 01 anaptixi-2κεφάλαιο 01 anaptixi-2
κεφάλαιο 01 anaptixi-2evaplyta
 
ΑΕΠΠ ΚΕΦ 1
ΑΕΠΠ ΚΕΦ 1ΑΕΠΠ ΚΕΦ 1
ΑΕΠΠ ΚΕΦ 1
educast
 
kef1-dom
kef1-domkef1-dom
kef1-dom
kontaxi
 

Similar to ΑΛΓΟΡΙΘΜΟΙ & ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (20)

Kef1o Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
Kef1o Ανάπτυξη Εφαρμογών σε Προγραμματιστικό ΠεριβάλλονKef1o Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
Kef1o Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
 
Στάδια αντιμετώπισης προβλήματος
Στάδια αντιμετώπισης προβλήματοςΣτάδια αντιμετώπισης προβλήματος
Στάδια αντιμετώπισης προβλήματος
 
Κεφάλαιο 1 ΑΕΠΠ
Κεφάλαιο 1 ΑΕΠΠΚεφάλαιο 1 ΑΕΠΠ
Κεφάλαιο 1 ΑΕΠΠ
 
ενότητα 1
ενότητα 1ενότητα 1
ενότητα 1
 
ενότητα 1
ενότητα 1ενότητα 1
ενότητα 1
 
Theoria1
Theoria1Theoria1
Theoria1
 
ανάλυση προβλήματος
ανάλυση προβλήματοςανάλυση προβλήματος
ανάλυση προβλήματος
 
Σημειώσεις Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Θερινή προετοιμ...
Σημειώσεις Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Θερινή προετοιμ...Σημειώσεις Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Θερινή προετοιμ...
Σημειώσεις Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Θερινή προετοιμ...
 
ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗ
ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗ
ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗ
 
Algorithms
AlgorithmsAlgorithms
Algorithms
 
Kefalaio1 1 α
Kefalaio1 1 αKefalaio1 1 α
Kefalaio1 1 α
 
B gen algorithm
B gen algorithmB gen algorithm
B gen algorithm
 
Εισαγωγή στην έννοια του Αλγορίθμου και στον προγραμματισμό (Μέρος 1)
Εισαγωγή στην έννοια του Αλγορίθμου και στον προγραμματισμό (Μέρος 1) Εισαγωγή στην έννοια του Αλγορίθμου και στον προγραμματισμό (Μέρος 1)
Εισαγωγή στην έννοια του Αλγορίθμου και στον προγραμματισμό (Μέρος 1)
 
3o Φ.Α. 1.5 + 1.6.pdf
3o Φ.Α. 1.5 + 1.6.pdf3o Φ.Α. 1.5 + 1.6.pdf
3o Φ.Α. 1.5 + 1.6.pdf
 
2.1 - Problem
2.1 - Problem2.1 - Problem
2.1 - Problem
 
ΑΕΠΠ: Ερωτήσεις Επανάληψης στο 1ο Κεφάλαιο
ΑΕΠΠ: Ερωτήσεις Επανάληψης στο 1ο ΚεφάλαιοΑΕΠΠ: Ερωτήσεις Επανάληψης στο 1ο Κεφάλαιο
ΑΕΠΠ: Ερωτήσεις Επανάληψης στο 1ο Κεφάλαιο
 
κεφάλαιο 01 anaptixi-2
κεφάλαιο 01 anaptixi-2κεφάλαιο 01 anaptixi-2
κεφάλαιο 01 anaptixi-2
 
IT [C Gymnasiou] ENOHTHTA B1
IT [C Gymnasiou]   ENOHTHTA B1IT [C Gymnasiou]   ENOHTHTA B1
IT [C Gymnasiou] ENOHTHTA B1
 
ΑΕΠΠ ΚΕΦ 1
ΑΕΠΠ ΚΕΦ 1ΑΕΠΠ ΚΕΦ 1
ΑΕΠΠ ΚΕΦ 1
 
kef1-dom
kef1-domkef1-dom
kef1-dom
 

ΑΛΓΟΡΙΘΜΟΙ & ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

  • 1. Ι.Ε.Κ. Κέρκυρας Αλγοριθμική και Δομές Δεδομένων Σημειώσεις Μαθήματος Μέρος Α’ Ειδικότητα: Τεχνικός Δικτύων και Τηλεπικοινωνιών Κέρκυρα, 2013-2014
  • 2. Κεφάλαιο 1ο – Ανάλυση – Σύνθεση Προβλήματος ........................................... 3 1.1 Η έννοια πρόβλημα ............................................................................ 3 1.2 Κατανόηση & διατύπωση προβλήματος .................................................. 3 1.3 Δομή, ανάλυση και αναπαράσταση προβλήματος .................................... 3 1.4 Καθορισμός απαιτήσεων και στάδια αντιμετώπισης ενός προβλήματος ........ 4 1.5 Κατηγορίες προβλημάτων ................................................................... 4 1.6 Λόγοι ανάθεσης ενός προβλήματος σε υπολογιστή .................................. 5 Κεφάλαιο 2ο – Βασικές Έννοιες Αλγορίθμων ................................................... 5 2.1 Αλγόριθμοι ....................................................................................... 5 2.2. Σταθερές, Μεταβλητές, Τελεστές, Εκφράσεις ......................................... 6 2.3. Βασικές δομές αλγορίθμων ................................................................. 7 2.4. Δομή ακολουθίας .............................................................................. 7 2.5. Δομή επιλογής ................................................................................. 8 2.6. Δομή επανάληψης ........................................................................... 11 Κεφάλαιο 3ο – Δομές Δεδομένων και Αλγόριθμοι ............................................ 14 3.1 «Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα» ............................... 14 3.2 Τεχνικές σχεδίασης αλγορίθμων .......................................................... 14 3.3. Πίνακες .......................................................................................... 15 3.4. Στοίβα ........................................................................................... 16 3.5. Ουρά ............................................................................................. 17 3.6 Λίστα .............................................................................................. 18 3.7 Αναδρομή ........................................................................................ 20 Βιβλιογραφία ............................................................................................ 21
  • 3. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Κεφάλαιο 1ο – Ανάλυση – Σύνθεση Προβλήματος 1.1 Η έννοια πρόβλημα Τι ονομάζουμε «πρόβλημα»; Με τον όρο εννοείται μία κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση, η δε λύση της δεν είναι γνωστή, ούτε προφανής. 1.2 Κατανόηση & διατύπωση προβλήματος Κατανόηση προβλήματος Οποιαδήποτε προσπάθεια αντιμετώπισης ενός προβλήματος είναι καταδικασμένη σε αποτυχία αν δεν έχει γίνει απόλυτα κατανοητό. Εξαρτάται από δύο παράγοντες: 1. Σωστής διατύπωσης εκ μέρους του δημιουργού. 2. Σωστής ερμηνείας από την μεριά εκείνου που καλείται να το αντιμετωπίσει. Διατύπωση προβλήματος Μπορεί να έχει οποιαδήποτε μορφή, αρκεί να μπορεί να γίνει αντιληπτή από μία από τις πέντε αισθήσεις. Συνηθέστερο μέσο διατύπωσης είναι ο λόγος (προφορικός-γραπτός). Πρέπει να χαρακτηρίζεται από σαφήνεια. Άστοχη χρήση ορολογίας, λανθασμένη σύνταξη μπορούν να προκαλέσουν παρερμηνείες. Η παρερμηνεία όμως είναι δυνατή ακόμη και όταν όλοι οι λεξικολογικοί και συντακτικοί κανόνες κρατούνται με ευλάβεια. Σημαντικός ακόμη παράγοντας είναι η αποσαφήνιση του χώρου στον οποίο αναφέρεται. Η πληροφορία αυτή παρέχεται από την διατύπωση-δεδομένα του προβλήματος. Δεδομένο Οποιοδήποτε στοιχείο μπορεί να γίνει αντιληπτό από έναν τουλάχιστον παρατηρητή με μία από τις πέντε αισθήσεις του. Πληροφορία Οποιοδήποτε γνωσιακό στοιχείο προέρχεται από επεξεργασία δεδομένων. Επεξεργασία δεδομένων Η διαδικασία κατά την οποία ένας μηχανισμός: o δέχεται δεδομένα, o τα επεξεργάζεται με προκαθορισμένο τρόπο και o αποδίδει πληροφορίες. Δύο τέτοιοι μηχανισμοί είναι ο εγκέφαλος και ο υπολογιστής. 1.3 Δομή, ανάλυση και αναπαράσταση προβλήματος Δομή προβλήματος Με τον όρο δομή ενός προβλήματος αναφερόμαστε: o στα συστατικά του μέρη, o στα επιμέρους τμήματα που το αποτελούν καθώς και o στον τρόπο που τα μέρη αυτά συνδέονται μεταξύ τους. Η καταγραφή της δομής ενός προβλήματος σημαίνει ότι έχει ήδη αρχίσει η ανάλυση του προβλήματος. Ανάλυση προβλήματος Το αρχικό πρόβλημα αναλύεται σε άλλα απλούστερα (υπό)προβλήματα. Με την σειρά τους τα νέα προβλήματα αναλύονται σε άλλα ακόμη πιο απλά. Η διαδικασία αυτή σταματά όταν: o Τα προβλήματα που προέκυψαν είναι αρκετά απλά και o η αντιμετώπιση τους χαρακτηριστεί δυνατή Όσο περισσότερο προχωράει η ανάλυση τόσο ελαττώνεται η δυσκολία αντιμετώπισής τους. Η ανάλυση του προβλήματος σε απλούστερα, αναδύει την δομή του προβλήματος. Η ανάλυση μπορεί να γίνει είτε φραστικά είτε γραφικά (διαγραμματική αναπαράσταση). Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 3
  • 4. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Διαγραμματική αναπαράσταση (δομής / ανάλυσης) Είναι μία συχνά χρησιμοποιούμενη γραφική απεικόνιση της δομής: o Το αρχικό πρόβλημα αναπαριστάται από ένα ορθογώνιο παραλληλόγραμμο o Κάθε ένα από τα υποπροβλήματα, στα οποία αναλύεται το αρχικό, αναπαριστάται επίσης από ένα ορθογώνιο παραλληλόγραμμο. o Τα παραλληλόγραμμα που αντιστοιχούν στα υποπροβλήματα, σχηματίζονται ένα επίπεδο χαμηλότερα. 1.4 Καθορισμός απαιτήσεων και στάδια αντιμετώπισης ενός προβλήματος Καθορισμός απαιτήσεων Είναι η διαδικασία κατά την οποία πρέπει να κάνουμε: o τον επακριβή προσδιορισμό των δεδομένων που παρέχει το πρόβλημα καθώς και o την λεπτομερειακή καταγραφή των ζητουμένων που αναμένονται σαν αποτελέσματα της επίλυσης. Τα δεδομένα δεν είναι πάντα εύκολο να διακριθούν. (Σε πολλά προβλήματα τα δεδομένα θα πρέπει να «ανακαλυφθούν» μέσα στα λεγόμενα). Τα ζητούμενα δεν είναι πάντα εύκολο να αποσαφηνισθούν. Δεν υπάρχει μεθοδολογία εντοπισμού και αποσαφήνισης των δεδομένων/ ζητουμένων ενός προβλήματος από την διατύπωση. Μία λύση είναι να θέτουμε μία σειρά από ερωτήσεις με στόχο την διευκρίνιση αποριών σχετικά με τα ζητούμενα, τον τρόπο παρουσίασης τους, το εύρος τους είτε προς τον δημιουργό του προβλήματος είτε προς τον ίδιο τον εαυτό μας. Στάδια αντιμετώπισης προβλήματος o Κατανόηση (απαιτείται η σωστή και πλήρης αποσαφήνιση των δεδομένων και των ζητουμένων) o Ανάλυση (το αρχικό πρόβλημα διασπάται σε επί μέρους απλούστερα προβλήματα) o Επίλυση (μέσω της λύσης των επιμέρους προβλημάτων, υλοποιείται η λύση) 1.5 Κατηγορίες προβλημάτων Η κατηγοριοποίηση των προβλημάτων γίνεται βάσει τριών (3) κριτηρίων: Δυνατότητα επίλυσης Δόμηση λύσεων (μόνο επιλύσιμα) Είδος επίλυσης που επιζητούν Επιλύσιμα Δομημένα Απόφασης Ανοικτά Ημιδομημένα Υπολογιστικά Άλυτα Αδόμητα Βελτιστοποίησης Δυνατότητα επίλυσης: o Επιλύσιμα: Η λύση τους είναι ήδη γνωστή και έχει διατυπωθεί ή η συνάφεια με άλλα ήδη λυμένα μας επιτρέπει να θεωρούμε σαν βέβαιη την δυνατότητα επίλυσής τους. Παράδειγμα: Επίλυση δευτεροβάθμιων εξισώσεων. o Ανοικτά: Η λύση τους δεν έχει βρεθεί αλλά δεν έχει αποδειχθεί ότι δεν επιδέχονται λύση. Παράδειγμα: Η ύπαρξη ζωής σε άλλους πλανήτες. o Άλυτα: Έχουμε φθάσει στην παραδοχή ότι δεν έχουν λύση. Παράδειγμα: Ο τετραγωνισμός του κύκλου. Δόμηση λύσεων (μόνο επιλύσιμα): o Δομημένα: Η επίλυσή τους προέρχεται από μία αυτοματοποιημένη διαδικασία. Παράδειγμα: Η εύρεση εμβαδού τριγώνου. o Ημιδομημένα: Έχουν ένα σαφώς προκαθορισμένο εύρος λύσεων αλλά ο ανθρώπινος παράγοντας πρέπει να επιλέξει την κατάλληλη από όλες τις λύσεις. Παράδειγμα: Η επιλογή μεταφορικού μέσου για ένα ταξίδι. o Αδόμητα: Οι λύσεις τους δεν μπορούν να δομηθούν ή δεν έχει διερευνηθεί σε βάθος η δυνατότητα δόμησής τους. Παράδειγμα: Το να κερδίζεις πάντα στο σκάκι. Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 4
  • 5. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Είδος επίλυσης που επιζητούν: o Απόφασης: Η λύση του προβλήματος είναι μία απόφαση που απαντά σε ένα ερώτημα. Συνήθως είναι ναι-όχι / αληθής – ψευδής κλπ. Παράδειγμα: «Να πάρω αμάξι ή ποδήλατο»; o Υπολογιστικά: Το πρόβλημα που τίθεται απαιτεί την διενέργεια υπολογισμών και ζητάμε να βρούμε την τιμή της απάντησης που ικανοποιεί τα δεδομένα. Παράδειγμα: «Ποια είναι η ρίζα της δευτεροβάθμιας εξίσωσης;» o Βελτιστοποίησης: Αναζητούμε την απάντηση που ικανοποιεί κατά τον καλύτερο τρόπο τα δεδομένα. Παράδειγμα: «Θα πάρω αυτοκίνητο. Με 10.000 ευρώ ποιο να αγοράσω;» 1.6 Λόγοι ανάθεσης ενός προβλήματος σε υπολογιστή Οι κυριότεροι λόγοι που αναθέτουμε ένα πρόβλημα σε έναν υπολογιστή είναι: o Πολυπλοκότητα υπολογισμών. o Επαναληπτικότητα των διαδικασιών. o Ταχύτητα εκτέλεσης των πράξεων. o Μεγάλο πλήθος δεδομένων. Κεφάλαιο 2ο – Βασικές Έννοιες Αλγορίθμων 2.1 Αλγόριθμοι Τι ονομάζουμε αλγόριθμο; Είναι μία πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο, που στοχεύουν στην επίλυση ενός προβλήματος. Ποια είναι τα χαρακτηριστικά ενός αλγορίθμου (κριτήρια που πρέπει να ικανοποιεί); o Είσοδος (input): Καμία, μία ή περισσότερες τιμές δεδομένων πρέπει να δίνονται ως είσοδος. Η περίπτωση που δεν δίνονται τιμές δεδομένων εμφανίζεται όταν ο αλγόριθμος δημιουργεί και επεξεργάζεται κάποιες πρωτογενείς τιμές με την βοήθεια συναρτήσεων παραγωγής τυχαίων αριθμών ή με την βοήθεια άλλων απλών εντολών. o Έξοδος (output): Ο αλγόριθμος πρέπει να δημιουργεί τουλάχιστον ένα αποτέλεσμα προς τον χρήστη ή προς ένα άλλο αλγόριθμο. o Καθοριστικότητα (definiteness): Κάθε εντολή πρέπει να καθορίζεται χωρίς αμφιβολία για τον τρόπο εκτέλεσής της. Λόγου χάριν, μία εντολή διαίρεσης πρέπει να θεωρεί και την περίπτωση όπου ο διαιρέτης λαμβάνει μηδενική τιμή. o Περατότητα (finiteness): Ο αλγόριθμος πρέπει να τελειώνει μετά από πεπερασμένα βήματα. Αν δεν τελειώνει μετά από ένα συγκεκριμένο αριθμό βημάτων δεν είναι αλγόριθμος αλλά υπολογιστική διαδικασία. o Αποτελεσματικότητα (effectiveness): Κάθε εντολή ενός αλγορίθμου πρέπει να είναι απλή και εκτελέσιμη (δεν αρκεί να έχει οριστεί). Παραδείγματα αλγορίθμων από την καθημερινή ζωή Πώς να φτιάξουμε καφέ, συνταγή για αβγά μάτια, οδηγίες για να πάμε στο φαρμακείο, κλπ. Τρόποι περιγραφής και αναπαράστασης ενός αλγορίθμου 1. Ελεύθερο κείμενο (free text): Αποτελεί τον πιο ανεπεξέργαστο και αδόμητο τρόπο παρουσίασης. Υπάρχει κίνδυνος να οδηγήσει σε μη εκτελέσιμη παρουσίαση, παραβιάζοντας το τελευταίο χαρακτηριστικό των αλγορίθμων το κριτήριο της αποτελεσματικότητας. 2. Διαγραμματικές τεχνικές (diagramming techniques): Αποτελούν γραφικό τρόπο αναπαράστασης ενός αλγορίθμου. Μια από τις πιο παλιές και γνωστές τεχνικές είναι και το διάγραμμα ροής (flow chart). Η χρήση διαγραμματικών τεχνικών δεν είναι η καλύτερη λύση, γι’ αυτό εμφανίζονται όλο και σπανιότερα στην βιβλιογραφία και στην πράξη. 3. Φυσική γλώσσα (natural language) κατά βήματα: Μοιάζει με το ελεύθερο κείμενο απλά είναι κατά βήματα. Κίνδυνος να παραβιαστεί το κριτήριο της καθοριστικότητας. 4. Κωδικοποίηση (coding): Δηλαδή με ένα πρόγραμμα γραμμένο είτε με μία ψευδογλώσσα είτε σε κάποιο προγραμματιστικό περιβάλλον που όταν εκτελεσθεί θα δώσει τα ίδια αποτελέσματα με τον αλγόριθμο. Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 5
  • 6. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Διαγράμματα Ροής Τα σύμβολα που χρησιμοποιούνται σε ένα διάγραμμα ροής Πορεία ενεργειών Αρχή / Τέλος Είσοδος / Έξοδος Δεδομένων Εκχώρηση δεδομένων / Εκτέλεση πράξεων Έλεγχος συνθήκης 2.2. Σταθερές, Μεταβλητές, Τελεστές, Εκφράσεις Σταθερές (constants) Με τον όρο αυτό αναφερόμαστε σε προκαθορισμένες τιμές που παραμένουν αμετάβλητες σε όλη τη διάρκεια της εκτέλεσης ενός αλγορίθμου. Οι σταθερές διακρίνονται σε: Αριθμητικές 123, +5, - 7, 34,78 Αλφαριθμητικές «Δώσε έναν αριθμό», «ηλικία» Λογικές Αληθής, Ψευδής (υπάρχουν μόνο αυτές οι δύο) Μεταβλητές (variables): Μία μεταβλητή είναι ένα γλωσσικό αντικείμενο, που χρησιμοποιείται για να παραστήσει ένα στοιχείο δεδομένου. Στη μεταβλητή εκχωρείται μία τιμή, η οποία μπορεί να αλλάζει κατά τη διάρκεια του αλγορίθμου. Ανάλογα με το είδος της τιμής που μπορούν να λάβουν οι μεταβλητές διακρίνονται, όπως και οι σταθερές, σε: αριθμητικές, αλφαριθμητικές και λογικές. Τελεστές (operators): Πρόκειται για τα γνωστά σύμβολα που χρησιμοποιούνται στις διάφορες πράξεις. Οι τελεστές διακρίνονται σε αριθμητικούς, λογικούς και συγκριτικούς. Αριθμητικούς +, -, *, / ^ Λογικούς ΚΑΙ, Ή, ΌΧΙ Συγκριτικούς <, >, =, <=, >=, <> Α Β Α ΚΑΙ Β Α Ή Β Αληθής Αληθής Αληθής Αληθής Αληθής Ψευδής Ψευδής Αληθής Ψευδής Αληθής Ψευδής Αληθής Ψευδής Ψευδής Ψευδής Ψευδής Α Όχι Α Αληθής Ψευδής Ψευδής Αληθής Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 6
  • 7. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Ιεραρχία τελεστών: 1. Αριθμητικοί 2. Συγκριτικοί 3. Λογικοί. Ιεραρχία αριθμητικών τελεστών: 1. Παρενθέσεις 2. Ύψωση σε δύναμη 3. Πολλαπλασιασμός και διαίρεση 4. Πρόσθεση και αφαίρεση Οι αριθμητικοί τελεστές DIV και MOD Ø Η διαίρεση με τον τελεστή «div» δίνει ακέραιο πηλίκο ενώ με τον τελεστή «/» δίνει δεκαδικό, πχ. 11/2=5,5 ενώ 11div2 = 5 Ø Η διαίρεση με τον τελεστή “mod” δίνει το υπόλοιπο της διαίρεση, πχ. 11mod2 = 1 Τα ψηφία ενός τριψήφιου αριθμού x είναι: Γενικό παράδειγμα Έστω ο αριθμός 357 o 1ο ψηφίο = x DIV 100 y= x MOD 100 «κρατάμε» μόνο δεκάδες και μονάδες δηλ. διψήφιο αριθμό o 2ο ψηφίο = y DIV 10 o 3ο ψηφίο= y MOD 10 o 357 DIV 100 = 3 o 357 MOD 100 = 57 o 57 DIV 10 = 5 o 57 MOD 10 = 7 Εκφράσεις (expressions): Οι εκφράσεις διαμορφώνονται από τους τελεστέους (operands), που είναι σταθερές και μεταβλητές και από τους τελεστές. Η διεργασία αποτίμησης μίας έκφρασης συνίσταται στην απόδοση τιμών στις μεταβλητές και στην εκτέλεση των πράξεων. Η τελική τιμή της πράξης εξαρτάται από την ιεραρχία των πράξεων και τη χρήση των παρενθέσεων. Μία έκφραση μπορεί να αποτελείται από μία μόνο μεταβλητή ή σταθερά μέχρι μία πολύπλοκη μαθηματική παράσταση 2.3. Βασικές δομές αλγορίθμων Οι βασικές δομές των αλγορίθμων είναι οι: 1. Δομή ακολουθίας 2. Δομή επιλογής / πολλαπλής επιλογής 3. Δομή επανάληψης 2.4. Δομή ακολουθίας Ονομάζεται και σειριακή ή ακολουθιακή δομή. Αποτελείται από ένα σύνολο εντολών που τοποθετούνται η μία κάτω από την άλλη. Χρησιμοποιείται (από μόνη της) για την επίλυση πολύ απλών προβλημάτων όπου η σειρά εκτέλεσης ενός συνόλου ενεργειών είναι δεδομένη. Χρησιμοποιείται ευρύτατα σε συνδυασμό με άλλες δομές (επιλογής, επανάληψης). Παράδειγμα αλγορίθμου με δομή ακολουθίας Λεκτική περιγραφή: Να διαβαστούν δύο αριθμοί και να υπολογιστεί και να εκτυπωθεί το άθροισμά τους. Διάγραμμα ροής: Υλοποίηση σε ψευδογλώσσα: Αλγόριθμος Παράδειγμα_1 Διάβασε a, b c ← a + b Εκτύπωσε c Τέλος Παράδειγμα_1 Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 7
  • 8. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Υλοποίηση σε γλώσσα προγραμματισμού C: #include <stdio.h> main() { int a, b, c; clrscr(); printf("Dose tin timi tou a: "); scanf("%d",&a); printf("nDose tin timi tou b: "); scanf("%d",&b); c=a+b; printf("To apotelesma a+b einai: %d", c); getch(); } 2.5. Δομή επιλογής Αποτελείται από ένα σύνολο εντολών που εκτελούνται κατά περίπτωση. Η διαδικασία της επιλογής περιλαμβάνει τον έλεγχο κάποιας συνθήκης με δύο δυνατές τιμές (αληθής, ψευδής) και στη συνέχεια την απόφαση εκτέλεσης κάποιας εντολής ανάλογα με τη συνθήκη. Παράδειγμα αλγορίθμου με δομή απλής επιλογής Λεκτική περιγραφή: Να διαβαστεί ένας αριθμός και να εκτυπωθεί η απόλυτη τιμή του. Διάγραμμα ροής: Υλοποίηση σε ψευδογλώσσα: Αλγόριθμος Παράδειγμα_2 Διάβασε a Αν a < 0 τότε a ← a * (-1) τέλος_αν Εκτύπωσε a Τέλος Παράδειγμα_2 Υλοποίηση σε γλώσσα προγραμματισμού C: #include <stdio.h> main() { int a; clrscr(); printf("Dose tin timi tou a: "); scanf("%d",&a); if(a<0) a=a*(-­‐1); printf("H apoliti timi tou a einai: ", a); getch(); } Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 8
  • 9. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Παράδειγμα αλγορίθμου με δομή σύνθετης επιλογής Λεκτική περιγραφή: Να διαβαστούν δύο αριθμοί και σε περίπτωση που ο πρώτος αριθμός είναι μικρότερος του δεύτερου να υπολογισθεί και να εκτυπωθεί το άθροισμά τους, διαφορετικά να υπολογισθεί και να εκτυπωθεί το γινόμενό τους. Υλοποίηση σε ψευδογλώσσα: Αλγόριθμος Παράδειγμα_3 Διάβασε a, b Αν a < b τότε c ← a + b αλλιώς c ← a * b τέλος_αν Εκτύπωσε c Τέλος Παράδειγμα_3 Παράδειγμα αλγορίθμου με δομή πολλαπλής επιλογής Λεκτική περιγραφή: Να διαβαστεί ένας ακέραιος και να εκτυπωθεί το αντίστοιχο γράμμα του λατινικού αλφαβήτου, αν ο ακέραιος έχει την τιμή 1 ή 2 ή 3 διαφορετικά να εκτυπωθεί η λέξη «Άγνωστος». Λογικό διάγραμμα: Υλοποίηση σε ψευδογλώσσα: Αλγόριθμος Παράδειγμα_4 Διάβασε a Αν a = 1 τότε Εκτύπωσε “A” αλλιώς_αν a = 2 τότε Εκτύπωσε “Β” αλλιώς_αν a = 3 τότε Εκτύπωσε “C” αλλιώς Εκτύπωσε “Άγνωστος” τέλος_αν Τέλος Παράδειγμα_4 Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 9
  • 10. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Υλοποίηση σε γλώσσα προγραμματισμού C: #include <stdio.h> main() { int a; clrscr(); printf("Dose tin timi tou akeraiou: "); scanf("%d",&a); if(a==1) printf("A"); else if(a==2) printf("B"); else if(a==3) printf("C"); else printf("Agnwstos!"); getch(); } Παράδειγμα αλγορίθμου με δομή πολλαπλής επιλογής χρησιμοποιώντας την εντολή Επίλεξε Λεκτική περιγραφή: Να εισαχθεί ένας ακέραιος που αντιστοιχεί σε μία ηλικία και να βρεθεί σε ποια όρια εντάσσεται η δεδομένη ηλικία εμφανίζοντας σχετικό μήνυμα. Υλοποίηση σε ψευδογλώσσα: Αλγόριθμος Παράδειγμα_5 Εκτύπωσε “Σε ποια ηλικία άρχισε να μαθαίνεις προγραμματισμό;” Διάβασε age Επίλεξε age Περίπτωση < 0 Εκτύπωσε “Δώσε μία πραγματική ηλικία…” Περίπτωση < 5 Εκτύπωσε “Μάλλον τα παραλές …” Περίπτωση < 60 Εκτύπωσε “Μπράβο…” Περίπτωση < 100 Εκτύπωσε “Ποτέ δεν είναι αργά…” Περίπτωση αλλιώς Εκτύπωσε “Κάλλιο αργά παρά ποτέ…” τέλος_επιλογών Τέλος Παράδειγμα_5 Υλοποίηση σε γλώσσα προγραμματισμού C: #include <stdio.h> main() { int day; printf ("δωσε την ημερα (ακεραιο απο 1 μεχρι και το 7)n"); scanf("%d", &day); switch ( day ) { case ( 1 ): printf ("Δευτέρα!n"); break; case ( 2 ): printf ("Τρίτη!n"); break; case ( 3 ): printf ("Τετάρτη!n"); break; case ( 4 ): printf ("Πέμπτη!n"); break; case ( 5 ): printf ("Παρασκευή!n"); break; case ( 6 ): printf ("Σαββάτο!n"); Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 10
  • 11. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών break; case ( 7 ): printf ("Κυριακή!n"); break; default: printf ("λάθος επιλογή!n"); break; } } Παράδειγμα με εμφωλευμένες διαδικασίες Λεκτική περιγραφή: Να διαβάζονται δύο αριθμοί που αντιστοιχούν στο ύψος και στο βάρος ενός άνδρα. Να εκτυπωνέται ότι ο άνδρας είναι «ελαφρύς», αν το βάρος του είναι κάτω από 80 κιλά ή να εκτυπώνεται «βαρύς» στην αντίθετη περίπτωση. Επίσης να εκτυπώνεται «κοντός» αν το ύψος είναι κάτω από 1.70, αλλιώς να εκτυπώνεται «ψηλός». Υλοποίηση σε ψευδογλώσσα: Αλγόριθμος Παράδειγμα_6 Διάβασε ύψος, βάρος Αν βάρος < 80 τότε Αν ύψος < 1.70 τότε Εκτύπωσε “ελαφρύς -­‐ κοντός” αλλιώς Εκτύπωσε “ελαφρύς -­‐ ψηλός” τέλος_αν αλλιώς Αν ύψος < 1.70 τότε Εκτύπωσε “βαρύς -­‐ κοντός” αλλιώς Εκτύπωσε “βαρύς -­‐ ψηλός” τέλος_αν τέλος_αν Τέλος Παράδειγμα_6 2.6. Δομή επανάληψης Η δομή επανάληψης εφαρμόζεται στις περιπτώσεις όπου μία ακολουθία εντολών πρέπει να γίνει περισσότερες από μία φορές. Εφαρμόζεται σε ένα σύνολο περιπτώσεων που έχουν κάτι κοινό. Οι επαναληπτικές διαδικασίες συχνά εμπεριέχουν και συνθήκες επιλογών. Παράδειγμα αλγορίθμου με δομή επανάληψης Λεκτική περιγραφή: Να γραφεί αλγόριθμος που να εμφανίζει τους αριθμούς από το 1 μέχρι το 100. Υλοποίηση σε ψευδογλώσσα με την εντολή ‘Οσο ... Επανάλαβε: Αλγόριθμος Παράδειγμα_7 i ← 1 Όσο i <= 100 επανάλαβε Εκτύπωσε i i ← i +1 τέλος_επανάληψης Τέλος Παράδειγμα_7 Υλοποίηση σε γλώσσα προγραμματισμού C: #include <stdio.h> main() { int i = 1; while (i <= 100){ printf(“%d”, i); i++; } getchar(); } Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 11
  • 12. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Υλοποίηση σε ψευδογλώσσα με την εντολή Αρχή_Επανάληψης ... Μέχρις_ότου: Αλγόριθμος Παράδειγμα_8 i ← 1 Αρχή_επανάληψης Εκτύπωσε i i ← i +1 Μέχρις_ότου i > 100 Τέλος Παράδειγμα_8 Υλοποίηση σε γλώσσα προγραμματισμού C: #include <stdio.h> main() { int i=1; do { printf(“%d”, i); i++; } while (i <= 100); getchar(); } Υλοποίηση σε ψευδογλώσσα με την εντολή Για... από... μέχρι: Αλγόριθμος Παράδειγμα_9 Για i από 1 μέχρι 100 Εκτύπωσε i τέλος_επανάληψης Τέλος Παράδειγμα_9 Υλοποίηση σε γλώσσα προγραμματισμού C: #include <stdio.h> main() { int i; for (i =1; i <= 100, i++){ printf(“%d”, i); } getchar(); } Παράδειγμα αλγορίθμου με δομή επανάληψης και επαναληπτική είσοδο στοιχείων Λεκτική περιγραφή: Να γραφεί αλγόριθμος που να διαβάζει ένα άγνωστο πλήθος αριθμών και να εμφανίζει τον κάθε αριθμό (όσο αυτοί είναι θετικοί). Υλοποίηση σε ψευδογλώσσα με την εντολή ‘Οσο ... Επανάλαβε: Αλγόριθμος Παράδειγμα_10 Διάβασε x Όσο x > 0 επανάλαβε Εμφάνισε x Διάβασε x τέλος_επανάληψης Τέλος Παράδειγμα_10 Υλοποίηση σε ψευδογλώσσα με την εντολή Αρχή_Επανάληψης ... Μέχρις_ότου: Αλγόριθμος Παράδειγμα_11 Αρχή_επανάληψης Διάβασε x Εμφάνισε x Mέχρις_ότου x < 0 Τέλος Παράδειγμα_11 Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 12
  • 13. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Παράδειγμα αλγορίθμου υπολογισμού αθροίσματος αριθμών με την εντολή Για Λεκτική περιγραφή: Να βρεθεί και να εκτυπωθεί το άθροισμα των 100 ακεραίων από το 1 μέχρι το 100. Λογικό διάγραμμα: Υλοποίηση σε ψευδογλώσσα με την εντολή Για... από... μέχρι: Αλγόριθμος Παράδειγμα_12 sum ← 0 Για i από 1 μέχρι 100 sum ← sum + i τέλος_επανάληψης Εκτύπωσε sum Τέλος Παράδειγμα_12 Υλοποίηση σε γλώσσα προγραμματισμού C: #include <stdio.h> main() { int i, sum; clrscr(); sum=0; for(i=1; i<=100; i++) sum=sum+i; printf("To athroisma twn 100 prwtwn akeraiwn einai: %d", sum); getch(); } Παράδειγμα αλγορίθμου υπολογισμού αθροίσματος αριθμών με την εντολή Για Λεκτική περιγραφή: Να βρεθεί και να εκτυπωθεί το άθροισμα των άρτιων αριθμών από το 1 μέχρι το 100. Υλοποίηση σε ψευδογλώσσα με την εντολή Για... από... μέχρι: Αλγόριθμος Παράδειγμα_13 sum ← 0 Για i από 2 μέχρι 100 με_βήμα 2 sum ← sum + i τέλος_επανάληψης Εκτύπωσε sum Τέλος Παράδειγμα_13 Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 13
  • 14. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Κεφάλαιο 3ο – Δομές Δεδομένων και Αλγόριθμοι 3.1 «Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα» Δομή δεδομένων Είναι ένα σύνολο αποθηκευμένων δεδομένων που υφίστανται επεξεργασία από ένα σύνολο λειτουργιών. Τα δεδομένα ενός προβλήματος αποθηκεύονται στον υπολογιστή, είτε στην κύρια μνήμη του είτε στην δευτερεύουσα. Η αποθήκευση δεν γίνεται κατά ένα τυχαίο τρόπο αλλά συστηματικά, δηλαδή χρησιμοποιώντας μία δομή. Κάθε μορφή δομής δεδομένων αποτελείται από ένα σύνολο κόμβων (nodes). Ως παράδειγμα δομής δεδομένων θα μπορούσαμε να αναφέρουμε έναν τηλεφωνικό κατάλογο αποθηκευμένο στη μνήμη του υπολογιστή. Βασικές λειτουργίες (πράξεις) επί των δομών δεδομένων o Προσπέλαση: πρόσβαση σε ένα κόμβο με σκοπό να εξεταστεί ή να αλλάξει το περιεχόμενό του. o Εισαγωγή: προσθήκη νέων κόμβων σε μία δομή. o Διαγραφή: (αντίθετο της εισαγωγής), δηλαδή αφαίρεση ενός κόμβου από μία δομή. o Αναζήτηση: γίνεται προσπέλαση των κόμβων μίας δομής προκειμένου να εντοπιστούν ένας ή περισσότεροι που έχουν μία δεδομένη ιδιότητα. o Ταξινόμηση: όπου οι κόμβοι διατάσσονται κατά αύξουσα ή φθίνουσα σειρά. o Αντιγραφή: όλοι ή μερικοί από τους κόμβους μίας δομής αντιγράφονται σε μία άλλη. o Συγχώνευση: δύο ή περισσότερες δομές ενώνονται σε μία δομή. o Διαχωρισμός: (αντίστροφα από την συγχώνευση) Στην πράξη σπάνια χρησιμοποιούνται και οι οκτώ λειτουργίες για κάποια δομή. Συνηθέστατα παρατηρείται το φαινόμενο μία δομή δεδομένων να είναι αποδοτικότερη από μία άλλη δομή με κριτήριο κάποια λειτουργία, για παράδειγμα την αναζήτηση, αλλά λιγότερο αποδοτική για κάποια άλλη λειτουργία, για παράδειγμα την εισαγωγή. Αυτές οι παρατηρήσεις εξηγούν αφ' ενός την ύπαρξη διαφορετικών δομών, και αφ' ετέρου τη σπουδαιότητα της επιλογής της κατάλληλης δομής κάθε φορά. Κατηγορίες δομών δεδομένων Οι δομές δεδομένων διακρίνονται σε δύο μεγάλες κατηγορίες: o Στατικές (static) o Δυναμικές (dynamic) Οι δυναμικές δομές δεν αποθηκεύονται σε συνεχόμενες θέσεις μνήμης αλλά στηρίζονται στην τεχνική της λεγάμενης δυναμικής παραχώρησης μνήμης (dynamic memory allocation). Με άλλα λόγια, οι δομές αυτές δεν έχουν σταθερό μέγεθος, αλλά ο αριθμός των κόμβων τους μεγαλώνει και μικραίνει καθώς στη δομή εισάγονται νέα δεδομένα ή διαγράφονται κάποια δεδομένα αντίστοιχα. Όλες οι σύγχρονες γλώσσες προγραμματισμού προσφέρουν τη δυνατότητα δυναμικής παραχώρησης μνήμης. Σχέση μεταξύ αλγορίθμου και δομής δεδομένων Υπάρχει μεγάλη εξάρτηση μεταξύ της δομής δεδομένων και του αλγόριθμου που επεξεργάζεται τη δομή. Μάλιστα, το πρόγραμμα πρέπει να θεωρεί τη δομή δεδομένων και τον αλγόριθμο ως μία αδιάσπαστη ενότητα. Η παρατήρηση αυτή δικαιολογεί την εξίσωση που διατυπώθηκε το 1976 από τον Wirth (που σχεδίασε και υλοποίησε τη γλώσσα Pascal): Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα Πρόγραμμα Ένα πρόγραμμα ενός υπολογιστή είναι μια συνεχής αλληλουχία εντολών τις οποίες ο υπολογιστής καλείται να εκτελέσει μία προς μία για να παραχθεί το επιθυμητό προς τον χρήστη αποτέλεσμα. 3.2 Τεχνικές σχεδίασης αλγορίθμων Οι μέθοδοι λύσης ενός προβλήματος που προκύπτουν από την ανάλυσή του, οδηγούν στη σχεδίαση ενός αλγορίθμου που συνιστά την ακολουθία βημάτων, που πρέπει να ακολουθηθούν για να επιλυθεί το πρόβλημα. Όπως αναφέρθηκε, υπάρχει περίπτωση να παρουσιαστούν περισσότερες από μία τεχνικές για τη λύση ενός προβλήματος. Κάθε τεχνική έχει τα δικά της χαρακτηριστικά και τις δικές της ιδιαιτερότητες. Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 14
  • 15. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Οι πιο συνηθισμένες τεχνικές σχεδίασης αλγορίθμων είναι οι εξής: o Μέθοδος διαίρει και βασίλευε o Μέθοδος δυναμικού προγραμματισμού o Άπληστη μέθοδος Μέθοδος «Διαίρει και Βασίλευε» Στην κατηγορία "Διαίρει και Βασίλευε" (divide and conquer) εντάσσονται οι τεχνικές που υποδιαιρούν ένα πρόβλημα σε μικρότερα υποπροβλήματα, που έχουν την ίδια τυποποίηση με το αρχικό πρόβλημα αλλά είναι μικρότερα σε μέγεθος. Με όμοιο τρόπο, τα υπο-προβλήματα αυτά μπορούν να διαιρεθούν σε ακόμη μικρότερα υποπροβλήματα κοκ. Έτσι, η επίλυση ενός προβλήματος έγκειται στη σταδιακή επίλυση των όσο το δυνατόν μικρότερων υποπροβλημάτων, ώστε τελικά να καταλήξουμε στη συνολική λύση του αρχικού ευρύτερου προβλήματος. Αυτή η προσέγγιση ονομάζεται από επάνω προς τα κάτω (top-down). Πιο τυπικά, η περιγραφή αυτής της μεθόδου σχεδίασης αλγορίθμων μπορεί να αποδοθεί με τα επόμενα βήματα: 1. Δίνεται για επίλυση ένα στιγμιότυπο ενός προβλήματος. 2. Υποδιαιρείται το στιγμιότυπο του προβλήματος σε υπο-στιγμιότυπα του ίδιου προβλήματος. 3. Δίνεται ανεξάρτητη λύση σε κάθε ένα υπο-στιγμιότυπο. 4. Συνδυάζονται όλες οι μερικές λύσεις που βρέθηκαν για τα υπο-στιγμιότυπα, έτσι ώστε να δοθεί η συνολική λύση του προβλήματος. Μέθοδος δυναμικού προγραμματισμού Με τον δυναμικό προγραμματισμό ακολουθούμε την αντίστροφη διαδικασία από τη μέθοδο «Διαίρει και Βασίλευε». Εδώ έχουμε προσέγγιση του προβλήματος από κάτω προς τα επάνω (bottom-up). Η φιλοσοφία των προβλημάτων αυτών είναι από την αρχή να επιλύονται τα μικρότερα προβλήματα και σταδιακά να επιλύονται τα μεγαλύτερα ως σύνθεση των απλούστερων. Επομένως τα βήματα που ακολουθούνται κατά την προσέγγιση αυτή είναι: 1. Ξεκινά η λύση από το ελάχιστο στιγμιότυπο του προβλήματος, 2. Υπολογίζονται σταδιακά αποτελέσματα όλο και μεγαλύτερων υπο-στιγμιότυπων, 3. Καταλήγει στη σύνθεση. Άπληστη μέθοδος Σε πολλά προβλήματα βελτιστοποίησης χρησιμοποιείται μία μέθοδος, που δεν βρίσκει πράγματι τη βέλτιστη λύση, αλλά σκοπός της είναι να την προσεγγίσει. Συνήθως, οι αλγόριθμοι αυτού του τύπου προχωρούν με βάση σταδιακές επιλογές που αφορούν στο βέλτιστο κάθε βήματος, χωρίς μέριμνα για το τελικό βέλτιστο. Η μέθοδος αυτή που είναι γνωστή και ως "άπληστη μέθοδος" (greedy method), μπορεί να τυποποιηθεί σύμφωνα με τις εξής δύο παραδοχές: 1. Σε κάθε βήμα επιλογή της τρέχουσας βέλτιστης επιλογής. 2. Επιβεβαίωση ότι αυτή η προσέγγιση εγγυάται τη συνολική βέλτιστη. 3.3. Πίνακες Με τον όρο στατική δομή δεδομένων εννοείται ότι το ακριβές μέγεθος της απαιτούμενης κύριας μνήμης καθορίζεται κατά τη στιγμή του προγραμματισμού τους και κατά συνέπεια παραπέμενει σταθερό σε όλη τη διάρκεια εκτέλεσης του προγράμματος. Τα στοιχεία των στατικών δομών αποθηκευόνται σε συνεχόμενες θέσεις μνήμης. Στην πράξη οι στατικές δομές δεδομένων υλοποιούνται με πίνακες. Μπορούμε να ορίσουμε ως πίνακα μία δομή που περιέχει στοιχεία του ίδιου τύπου (δηλαδή ακέραιος, πραγματικούς, χαρακτήρες, κλπ.). Η αναφορά στα στοιχεία ενός πίνακα γίνεται με τη χρήση του συμβολικού ονόματος του πίνακα ακολουθούμενου από την τιμή ενος ή περισσοτέρων δεικτών (indexes) σε παρένθεση ή αγκύλη, πχ. Πίνακας[2] . Ένας πίνακας μπορεί να είναι μονοδιάστατος, αλλά στη γενικότερη περίπτωση μπορεί να δισδιάστατος, τρισδιάστατος, κλπ. Στους δισδιάστατους πίνακες αν το μέγεθος των δύο διαστάσεων είναι ίσο τότε ο πίνακας λέγεται τετραγωνικός και συμβολίζεται ως πίνακας n x n. Παραδείγματα πινάκων: Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 15
  • 16. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Παράδειγμα εύρεσης του μικρότερου στοιχείου ενός μονοδιάστατου πίνακα Λεκτική περιγραφή: Δίνεται ένας μονοδιάστατος πίνακας table 100 στοιχείων. Να σχεδιαστεί αλγόριθμος που να βρίσκει το μικρότερο στοιχείο του. Αλγόριθμος Παράδειγμα_1 Δεδομένα // table min ← table[1] Για i από 2 μέχρι 100 Αν table[i] < min τότε min ← table[i] τέλος_αν τέλος_επανάληψης Εμφάνισε min Τέλος Παράδειγμα_1 Παράδειγμα εύρεσης αθροίσματος στοιχείων ενός δισδιάστατου πίνακα Λεκτική περιγραφή: Δίνεται ένας δισδιάστατος πίνακας table με m γραμμές και n στήλες. Να βρεθεί το άθροισμα κατά γραμμή, κατά στήλη και συνολικά. Αλγόριθμος Παράδειγμα_2 Δεδομένα // m, n, table sum ← 0 Για i από 1 μέχρι m row[i] ← 0 τέλος_επανάληψης Για j από 1 μέχρι n col[j] ← 0 τέλος_επανάληψης Για i από 1 μέχρι m Για j από 1 μέχρι n sum ← sum + table[i,j] row[i] ← row[i] + table[i,j] col[j] ← col[j] + table[i,j] τέλος_επανάληψης τέλος_επανάληψης Αποτελέσματα // row, col, sum Τέλος Παράδειγμα_2 3.4. Στοίβα Μία στοίβα δεδομένων μοιάζει με μία στοίβα από πιάτα. Για παράδειγμα κάθε πιάτο που πλένεται τοποθετείται στην κορυφή της στοίβας των πιάτων, ενώ για σκούπισμα λαμβάνεται και πάλι το πιάτο της κορυφής. Αυτή η μέθοδος επεξεργασίας ονομάζεται Τελευταίο Μέσα Πρώτο Έξω ή απλούστερα με την αγγλική συντομογραφία LIFO (Last-In-First-Out). Δύο είναι οι κύριες λειτουργίες σε μία στοίβα: o Η ώθηση (push) στοιχείου στην κορυφή της στοίβας και o Η απώθηση (pop) στοιχείου από κορυφή της στοίβας Η διαδικασία της ώθησης πρέπει οπωσδήποτε να ελέγχει αν η στοίβα είναι γεμάτη, οπότε λέγεται ότι συμβαίνει υπερχείλιση (overflow) της στοίβας. Αντίστοιχα η διαδικασία της απώθησης ελέγχει αν υπάρχει ένα τουλάχιστον στοιχείο στη στοίβα, δηλαδή ελέγχει αν γίνεται υποχείλιση (underflow) της στοίβας. Μία στοίβα μπορεί να υλοποιηθεί πολύ εύκολα με τη βοήθεια ενός μονοδιάστατου πίνακα. Μία βοηθητική μεταβλητή (με όνομα συνήθως top) χρησιμοποιείται για να δείχνει το στοιχείο που τοποθετήθηκε τελευταίο στην κορυφή της στοίβας. Για την εισαγωγή ενός νέου στοιχείου στη στοίβα (ώθηση), αρκεί να αυξηθεί η μεταβλητή top κατά ένα και στη θέση αυτή να εισέλθει το στοιχείο. Αντίθετα για την εξαγωγή ενός στοιχείου από τη στοίβα (απώθηση) εξέρχεται πρώτα το στοιχείο που δείχνειη μεταβλητή top και στη συνέχεια η top μειώνεται κατά ένα για να δείχνει τη νέα κορυφή. Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 16
  • 17. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Αλγόριθμος Ώθησης στοιχείου σε στοίβα Στον ακόλουθο αλγόριθμο χρησιμοποιείται μία λογική μεταβλητή, done, η οποία δηλώνει την επιτυχή εκτέλεσης της διαδικασίας. Η μεταβλητή top δηλώνει την επάνω θέση της στοίβας που είναι κατειλημμένη από κάποιο στοιχείο. Τα δεδομένα είναι αποθηκευμένα σε ένα μονοδιάστατο πίνακα, που ονομάζεται stack και έχει μέγεθος size. Η μεταβλητή item χρησιμεύει για την αποθήκευση του στοιχείου που εισάγεται. Αλγόριθμος Ώθηση Δεδομένα // top, item Αν top < size τότε top ← top + 1 stack[top] ← item done ← Αληθής αλλιώς done ← Ψευδής τέλος_αν Αποτελέσματα // top, done Τέλος Ώθηση Αλγόριθμος Απώθησης στοιχείου σε στοίβα Στον ακόλουθο αλγόριθμο χρησιμοποιείται οι ίδιες μεταβλητές με τον αλγόριθμο της Ώθησης, με τη μόνη διαφορά ότι εδώ η μεταβλητή item χρησιμεύει για την αποθήκευση του στοιχείου που εξάγεται από τη στοίβα. Αλγόριθμος Απώθηση Δεδομένα // top Αν top <= 1 τότε item ← stack[top] top ← top -­‐ 1 done ← Αληθής αλλιώς done ← Ψευδής τέλος_αν Αποτελέσματα // item, top, done Τέλος Απώθηση 3.5. Ουρά Σε μία ουρά αναμονής με ανθρώπους συμβαίνει να εξυπηρετείται εκείνος που στάθηκε στην ουρά πρώτος από όλους τους άλλους. Η μέθοδος αυτή επεξεργασίας ονομάζεται Πρώτο Μέσα Πρώτο Έξω ή απλούστερα με την αγγλική συντομογραφία FIFI (First-In-First-Out). Δύο είναι οι κύριες λειτουργίες που εκτελούνται σε μία ουρά: o Η εισαγωγή (enqueue) στοιχείου στο πίσω άκρο της ουράς και o Η εξαγωγή (dequeue) στοιχείου από το εμπρός άκρο της ουράς Σε αντίθεση με τη δομή της στοίβας, στην περίπτωση της ουράς απαιτούνται δύο δείκτες: ο εμπρός (front) και πίσω (rear) δείκτης, που μας δίνουν τη θέση του στοιχείου που σε πρώτη ευκαιρία θα εξαχθεί και τη θέση του στοιχείου που μόλις εισήλθε. Μία ουρά μπορεί να υλοποιηθεί με τη βοήθεια ενός μονοδιάστατου πίνακα. Για την εισαγωγή ενός νέου στοιχείου στην ουρά αυξάνεται ο δείκτης rear κατά ένα και στη θέση αυτή αποθηκεύεται το στοιχείο. Αντίστοιχα για τη λειτουργία της εξαγωγής, εξέρχεται το στοιχείο που δείχνει ο δείκτης front, ο οποίος στη συνέχεια αυξάνεται κατά ένα, για να δείχνει το επόμενο στοιχείο που πρόκειται να εξαχθεί. Σε κάθε περίπτωση όμως πρέπει να ελέγχεται πριν από οποιαδήποτε ενέργεια αν υπάρχει ελεύθερος χώρος στον πίνακα για την εισαγωγή και αν υπάρχει ένα τουλάχιστον στοιχείο για την εξαγωγή. Αλγόριθμος Εισαγωγής στοιχείου σε ουρά Στον ακόλουθο αλγόριθμο χρησιμοποιείται μία λογική μεταβλητή, done, η οποία δηλώνει την επιτυχή εκτέλεσης της διαδικασίας. Η μεταβλητή rear δηλώνει το δείκτη που δείχνει την Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 17
  • 18. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών τελευταία θέση της ουράς, που είναι ένας πίνακας queue με μέγεθος size. Η μεταβλητή item χρησιμεύει για την αποθήκευση του στοιχείου που εισάγεται. Αλγόριθμος Εισαγωγή_σε_Ουρά Δεδομένα // rear, item Αν rear < size τότε rear ← rear + 1 queue[rear] ← item done ← Αληθής αλλιώς done ← Ψευδής τέλος_αν Αποτελέσματα // rear, done Τέλος Εισαγωγή_σε_Ουρά Αλγόριθμος Εξαγωγής στοιχείου από ουρά Στον ακόλουθο αλγόριθμο χρησιμοποιείται μία λογική μεταβλητή, done, η οποία δηλώνει την επιτυχή εκτέλεσης της διαδικασίας. Η μεταβλητή front δηλώνει το δείκτη που δείχνει την πρώτη θέση της ουράς, που είναι ένας πίνακας queue με μέγεθος size. Η μεταβλητή item χρησιμεύει για την αποθήκευση του στοιχείου που εξάγεται. Αλγόριθμος Εξαγωγή_από_Ουρά Δεδομένα // rear, front, item Αν rear <= front τότε front ← front + 1 item ← queue[rear done ← Αληθής αλλιώς done ← Ψευδής τέλος_αν Αποτελέσματα // item, rear, front, done Τέλος Εξαγωγή_από_Ουρά Σημείωση: Η συνθήκη rear <= front που εμφανίζεται στον αλγόριθμο ελέγχει αν η ουρά περιέχει στοιχεία. Η ισότητα ισχύει στην περίπτωση που η ουρά περιέχει μόνο ένα στοιχείο. 3.6 Λίστα Οι πίνακες, η στοίβα και η ουρά είναι στατικές δομές δεδομένων, δηλαδή έχουν σταθερό μέγεθος κατά τη διάρκεια της εκτέλεσης του προγράμματος και οι διαδοχικοί κόμβοι (στοιχεία) αποθηκεύονται σε συνεχόμενες θέσεις μνήμης. Οι λίστες είναι δυναμικές δομές δεδομένων και το κύριο χαρακτηριστικό τους είναι ότι οι κόμβοι τους συνήθως βρίσκονται σε απομακρυσμένες θέσεις μνήμης και η σύνδεση τους γίνεται με δείκτες. Ο δείκτης (pointer) είναι ένας ιδιαίτερος τύπος που προσφέρεται από τις περισσότερες σύγχρονες γλώσσες προγραμματισμού. Ο δείκτης δεν λαμβάνει αριθμητικές τιμές όπως ακέραιες, πραγματικές κ.α, αλλά οι τιμές του είναι διευθύνσεις στην κύρια μνήμη και χρησιμοποιείται ακριβώς για τη σύνδεση των διαφόρων Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 18
  • 19. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών στοιχείων μιας δομής που είναι αποθηκευμένα σε μη συνεχόμενες θέσεις μνήμης. Συνήθως ο δείκτης είναι ένα πεδίο κάθε κόμβου της δομής: Δεδομένα Δείκτης Το πεδίο Δεδομένα μπορεί να περιέχει μία ή περισσότερες αλφαριθμητικές ή αριθμητικές πληροφορίες. Με τη χρήση των δεικτών διευκολύνονται οι λειτουργίες της εισαγωγής και της διαγραφής δεδομένων στις λίστες. Οι απαιτούμενες ενέργειες για τη εισαγωγή του νέου κόμβου είναι ο δείκτης του δεύτερου κόμβου να δείχνει το νέο κόμβο και ο δείκτης του νέου κόμβου να δείχνει τον τρίτο κόμβο (δηλαδή να έχει πάρει την τιμή που είχε πριν την εισαγωγή ο δείκτης του δεύτερου κόμβου). Έτσι οι κόμβοι της λίστας διατηρούν τη λογική τους σειρά, αλλά οι φυσικές θέσεις στη μνήμη μπορεί να είναι τελείως διαφορετικές. Αντίστοιχα για τη διαγραφή ενός κόμβου αρκεί να αλλάξει τιμή ο δείκτης του προηγούμενου κόμβου και να δείχνει πλέον τον επόμενο αυτού που διαγράφηκε. Ο κόμβος που διαγράφηκε αποτελεί «άχρηστο δεδομένο» και ο χώρος μνήμης που καταλάμβανε, παραχωρείται για άλλη χρήση. Αλγόριθμος Εισαγωγής κόμβου σε λίστα Στον ακόλουθο αλγόριθμο θεωρούμε τη σύμβαση ότι αν p είναι ο δείκτης προς κάποιον κόμβο, τότε p.info είναι το περιεχόμενο του κόμβου (τα δεδομένα δηλαδή ενός στοιχείου), και p.next είναι ο δείκτης του ίδιου κόμβου προς τον επόμενο κόμβο. Ο δείκτης q δείχνει τον κόμβο που πρόκειται να εισαχθεί στη λίστα μας. Αλγόριθμος Εισαγωγή_Κόμβου_σε_Λίστα Δεδομένα // p: δείκτης του κόμβου μετά τον οποίο θα γίνει η // εισαγωγή δεδομένων του νέου κόμβου // q: δείκτης της θέσης του νέου κόμβου q.info ← data q.next ← p.next p.next ← q Τέλος Εισαγωγή_Κόμβου_σε_Λίστα Αλγόριθμος Διαγραφής κόμβου από λίστα Στον ακόλουθο αλγόριθμο θεωρούμε ότι μας δίνεται ο δείκτης p που δείχνει προς τον κόμβο, του οποίου ο επόμενος δια διαγραφεί, δηλαδή πρόκειται να διαγραφεί ο κόμβος που δείχνει το p.next. Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 19
  • 20. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Αλγόριθμος Διαγραφή_Κόμβου_από_Λίστα Δεδομένα // p: δείκτης του κόμβου, του οποίου ο επόμενος // θα διαγραφεί q ← p.next p.next ← q.next Τέλος Διαγραφή_Κόμβου_από_Λίστα 3.7 Αναδρομή Η τεχνική της αναδρομής στηρίζεται στη δυνατότητα μία διαδικασία ή συνάρτηση να καλεί τον εαυτό της. Αλγόριθμος Υπολογισμού του Μέγιστου Κοινού Διαιρέτη (ΜΚΔ) Ένα ιστορικό πρόβλημα είναι η εύρεση του μέγιστου κοινού διαιρέτη δύο ακεραίων αριθμών. Ο αλγόριθμος εύρεσης του ΜΚΔ ανήκει στον Ευκλείδη. Ωστόσο η υλοποίηση του αλγορίθμου μπορεί να γίνει με πολλούς τρόπους. Ο πρώτος που θα δείξουμε είναι ο πιο απλός αλλά και αργός αλγόριθμος. Ουσιαστικά λαμβάνει το μικρότερο από τους δύο ακεραίους, z, και εξετάζει με τη σειρά όλους του ακέραιους ξεκινώντας από τον z και μειώνοντας συνεχώς κατά μία μονάδα μέχρι και οι δύο αριθμοί, x και y, να διαιρούνται από τη νέα τιμή του z. Αλγόριθμος Μέγιστος_Κοινός_Διαιρέτης Δεδομένα // x, y Αν x < y τότε z ← x αλλιώς z ← y τέλος_αν Όσο (x mod z <> 0) Ή (y mod z <> 0) επανάλαβε z ← z -­‐ 1 τέλος_επανάληψης Αποτελέσματα // z, ότι περιέχει η μεταβλητή z είναι ο ΜΚΔ Τέλος Μέγιστος_Κοινός_Διαιρέτης Αλγόριθμος Ευκλείδη για τον υπολογισμό του Μέγιστου Κοινού Διαιρέτη (ΜΚΔ) Ο αλγόριθμος που αποδίδεται στον Ευκλείδη βελτιώνει τον προηγούμενο αλγόριθμο, καθώς δεν εξετάζει με τη σειρά όλους τους ακέραιους. Αλγόριθμος Ευκλείδης_ΜΚΔ Δεδομένα // x, y z ← y Όσο z <> 0 επανάλαβε z ← x mod y x ← y y ← z τέλος_επανάληψης Αποτελέσματα // x, ότι περιέχει η μεταβλητή x είναι ο ΜΚΔ Τέλος Ευκλείδης_ΜΚΔ Αναδρομικός Αλγόριθμος Ευκλείδη για τον υπολογισμό του ΜΚΔ Ο αναδρομικός αλγόριθμος καλεί τον εαυτό του για να υπολογίσει τον ΜΚΔ. Αλγόριθμος Αναδρομικός_Ευκλείδης_ΜΚΔ Δεδομένα // x, y z ← y Αν y = 0 τότε z ← x αλλιώς z ← Αναδρομικός_Ευκλείδης_ΜΚΔ(y, x mod y) τέλος_αν Αποτελέσματα // z, ότι περιέχει η μεταβλητή z είναι ο ΜΚΔ Τέλος Αναδρομικός_Ευκλείδης_ΜΚΔ Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 20
  • 21. Αλγοριθμική και Δομές Δεδομένων Τεχνικός Δικτύων και Τηλεπικοινωνιών Βιβλιογραφία 1. Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον (Γ΄ΓΕΛ) (http://ebooks.edu.gr/modules/ebook/show.php/DSGL-C101/36/198,1069/ ) Ελένη Χριστοπούλου – ΙΕΚ Κέρκυρας Σελίδα 21