#Ενότητα 2 Αλγόριθμοι, Δομές Δεδομένων και Πολυπλοκότητα - Εισαγωγή στον προγραμματισμό με τη γλώσσα Python

Σχετικά έγγραφα
#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα

Εισαγωγή στους Υπολογιστές

Εισαγωγή στους Υπολογιστές

Διορθώσεις σελ

Θέματα Προγραμματισμού Η/Υ

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

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

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

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Δομές Δεδομένων (Data Structures)

Κάθε στοιχείο που γίνεται αντιληπτό με μία από τις πέντε αισθήσεις μας

Πληροφορική ΙΙ Θεματική Ενότητα 10

Βασικές Ασκήσεις από τα Εργαστήρια της Python. Πέμπτη Εργ. 3 17:15 και 19:15

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ακολουθία (sequence)

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

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

Φύλλο Εργασίας 3. Μια γρήγορη επανάληψη από τα προηγούμενα

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Α1. Στον προγραµµατισµό χρησιµοποιούνται δοµές δεδοµένων. 1. Τι είναι δυναµική δοµή δεδοµένων; Μονάδες 3 2. Τι είναι στατική δοµή δεδοµένων;

Standard Template Library (STL) C++ library

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Πληροφορική 2. Αλγόριθμοι

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

ΗΥ-100: Εισαγωγή στην Επιστήμη Υπολογιστών 3η σειρά ασκήσεων

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

Αλγόριθμοι Ταξινόμησης Μέρος 3

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

ΛΥΚΕΙΟ ΣΟΛΕΑΣ Σχολική χρονιά

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

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

Περιεχόμενα. Περιεχόμενα

Βασικές Δομές Δεδομένων

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

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

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

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

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Γλώσσα προγραμματισμού python

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

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

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

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

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

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

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

Πληρουορική Γ Γσμμασίοσ

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

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

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

Πρόβλημα 37 / σελίδα 207

Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 5)

Συλλογές, Στοίβες και Ουρές

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

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

4. Επιλογή και Επανάληψη

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ FILE & PROCESS HANDLING

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

Transcript:

22Υ103 Εισαγωγή Υπολογιστές Ι #Ενότητα 2 Αλγόριθμοι, Δομές Δεδομένων και Πολυπλοκότητα - Εισαγωγή στον προγραμματισμό με τη γλώσσα Python Εβδομάδες 4-5

Αλγόριθμοι / Μέρος Γ Αλγοριθμικές δομές επανάληψης 2

ερώτηση Αν ένας υπολογιστής σήμερα μπορεί να εκτελέσει εκατομμύρια εντολών το δευτερόλεπτο, για να τρέξει ένα πρόγραμμα για ένα δευτερόλεπτο, εγώ πρέπει να γράψω ένα εκατομμύρια εντολές στο πρόγραμμα μου; 3

απάντηση Ηδυνατότητα του υπολογιστή να εκτελέσει πολλές εντολές/ δευτερόλεπτο, στηρίζεται στη δυνατότητα του να εκτελέσει πολλές όμοιες εντολές επαναληπτικά Π.χ. ένας ορθογράφος κειμένου θα ελέγξει μια λέξη και μετά την επόμενη Ένας video player να ζωγραφίσει ένα pixel ενός frame video και μετά το επόμενο 4

Βρόχοι επανάληψης Εντολές επανάληψης μιας ομάδας εντολών πολλές φορές Απαραίτητη ησυνθήκη τερματισμού του βρόχου επανάληψης 1 x = 0 2 while x < 5: 3 print x 4 x = x + 1 5 print "Done." while συνθήκη : εντολή Ποια ηακολουθία εκτέλεσης των εντολών αυτών και ποιο το αποτέλεσμα; 5

Άσκηση: να υπολογίσετε το άθροισμα s=1+2+ +n n = input() i = 0 s = 0 while (i <= n) : s = s + i i = i + 1 print s 6

Άσκηση (Φροντιστήριο Φ7) Να κατασκευάσετε ένα πρόγραμμα (διάγραμμα ροής και python) που υπολογίζει με επαναληπτική διαδικασία σε πόσα χρόνια θα γίνετε εκατομμυριούχος αν έχετε ήδη Χευρώ και τοκίζετε τα χρήματα σας με επιτόκιο Ε% το χρόνο 7

Βρόχος επανάληψης σε διάγραμμα ροής (η συνθήκη στην αρχή ήστο τέλος) Υπολογισμός s=1+2+ +n ΕΝΤΟΛΕΣ read n I 0; s 0 repeat { s s+i i i+1 } until (i>n) print s ΣΥΝΘΗΚΗ 8

Επαναληπτικές δομές Τυπική επαναληπτική δομή ΑΡΧΗ Δομή βρόχου while ΑΡΧΗ ΝΑΙ Κάνε κάτι Θέλεις να συνεχίσεις; ΟΧΙ ΤΕΛΟΣ Θέλεις να το εκτελέσεις; ΝΑΙ Κάνε κάτι ΤΕΛΟΣ ΟΧΙ 9

Τροποποίηση αθροιστή αριθμών ΑΡΧΗ Ζήτησε τα X, Y ΝΑΙ πρόσθεσε X και Y Εμφάνισε το αποτέλεσμα Να συνεχίσω; ΟΧΙ ΤΕΛΟΣ 10

Λύση στην άσκηση answer = "y" while answer == "y": x = float(raw_input(«δώσε 1 ο αριθμό:")) y = float(raw_input(«δώσε 2 ο αριθμό:")) sum = x + y print "Sum:" + str(sum) answer = raw_input(«να συνεχίσω (y/n)? ") print "*** τέλος προγράμματος ***" 11

Άσκηση (μέρος Β, Φροντ. 6) Γράψτε δύο συναρτήσεις hasletters(s) και hasdigits(s) οι οποίες δέχονται σαν παράμετρο μια συμβολοσειρά s και η πρώτη γίνεται true αν υπάρχει κάποιος αλφαβητικός χαρακτήρας στην s και η δεύτερη αν υπάρχει αριθμός στην s. Σημείωση : δες τις συναρτήσεις isalpha() και isdigit(). 12

while true - break Διακοπή βρόχου όταν συμβεί γεγονός while true: userinput = raw_input("enter an integer:") if userinput.isdigit() or \ userinput[0] == "-" and userinput[1:].isdigit(): break else: print "Incorrect input." 13

Βρόχοι επανάληψης με απαρίθμηση (for) for i in range(start,end,step): εντολές Όπου i είναι μεταβλητή απαρίθμησης ηοποία παίρνει τιμές από start, σε end με βήμα step 14

Ισοδυναμία δομών for και while for i in range(start,end,step): εντολές i = start while i < end: # προσοχή < όχι <= εντολές... i = i + step 15

παραδείγματα for i in range (0, 6, 1): print i, #prints 0 1 2 3 4 5 #print the integers from 1 to 15 for i in range(1, 16, 1): print i, 16

for i in range(6): print i, #prints 0 1 2 3 4 5 Θεωρεί range (0, 6, 1) 17

παραδείγματα 18

Αλγόριθμοι: αναπαράσταση διαγράμματος ροής 19

Άσκηση Να γράψετε σε python και διάγραμμα ροής τον αλγόριθμο που υπολογίζει την παρακάτω συνάρτηση με χρήση των εντολών while και for : 0, n 0 F(n)= { n Σ i *(i+1), n > 0 i=1 20

Άσκηση Να περιγράψετε τον αλγόριθμο που υπολογίζει το Α mod (B) υπόλοιπο διαίρεσης του Ααπό το Β. Να περιγράψετε τον αλγόριθμο που υπολογίζει τον μέγιστο κοινό διαιρέτη δύο αριθμών Ακαι Β. Να εκφράσετε τους αλγορίθμους αυτούς με python και διάγραμμα ροής 21

Παράδειγμα Υπόλοιπο Α mod (B) Read A Read B A A-B ΟΧΙ B >= A ΝΑΙ Τύπωσε Α 22

ΑλγόριθμοςΜέγιστου ΚοινούΔιαρέτηδύο αριθμώνα,β. START READ A,B Αλγόριθμος NO YES Μέγιστου A < B Κοινού Z <-- Β Z <-- Α Διαιρέτη (1η έκδοση) A MOD Z <> 0 OR B MOD Z <>0 YES Z <-- Z - 1 NO PRINT "OΜέγιστος ΚοινόςΔιαιρέτης είναι " Z STOP 23

Αλγόριθμος ΜΚΔ (2η έκδοση) temp num1 num1 num2 num2 temp 24

Ακολουθίες δεδομένων Lists Tuples Dictionaries 25

Lists στην Python [ a, b, c ] ages = [12, Γιώργος, 157] print ages[0] #prints 12 ages[1] = -5 #αντικαθιστά το περιεχόμενο της θέσης 1 με την τιμή 5; #ages περιέχει [12, -5, 157] ages[2] = ages[2] 1 #μειώνει την τιμή στη θέση 2 κατά 1; #ages περιέχει [12, -5, 156] 26

lists hives = [16, 2, 105] numhives = len(hives) #περιέχει το μήκος της λίστας hives #numhives == 3 hives[numhives] = 40 #ERROR! 16 0 2 1 105 2 27

lists numbers = [ ] #creates an empty list numbers.append(47) #numbers == [47] numbers.append(10) #numbers == [47,10] numbers.append(-3) #numbers == [47,10,-3] 28

Πώς εισάγουμε 200 ονόματα φοιτητών σε μια λίστα; classlist = [] print ( δώσε ονόματα: ) for i in range(200): name = raw_input( όνομα # + str(i+1) ) classlist.append(name) 29

Πώς διαγράφουμε ένα στοιχείο από τη λίστα; classlist.pop(3) Διαγράφει το στοιχείο #3 της λίστας classlist.remove( nikos ) Διαγράφει το πρώτο στοιχείο της λίστας που έχει αυτή την τιμή 30

Επεξεργασία μιας λίστας με βρόχο for names = [ nikos, george, kostas ] for i in range(len(names)): print "Name " + str(i+1) + ": " + names[i] #prints: Name 1: nikos Name 2: george Name 3: kostas 31

Αναζήτηση αντικειμένου στη λίστα def searchlist(list, item): for i in range(len(list)): if list[i] == item: #found it! return i #at index i! #έξοδος από δω return 1 #δεν βρέθηκε ----------------------------- numbers = [3,7,2,8] index1 = searchlist(numbers, 8) #index1 == 3 index2 = searchlist(numbers, 14) #index2 == -1 32

Ημαθηματική έννοια του πίνακα μπορεί να υλοποιηθεί με list Πώς ορίζεται ένας δισδιάστατος πίνακας; list = [ [2,6,4,7], [1,0,3,2] ] print list[0][2] #prints row 0, column 2 == 4 print list[0] #prints row 0 == [2,6,4,7] 0 1 2 3 0 2 6 4 7 1 1 0 3 2 33

Δισδιάστατη λίστα list = [ [2,6,4], [1,0,3] ] for i in range(2): for j in range(3): print list[i][j], print #αρχίζει την επόμενη γραμμή #τυπώνει: 2 6 4 1 0 3 34

Άλλες μέθοδοι σε list append(x) Add an item to the end of the list; equivalent to a[len(a):] = [x]. extend(l) Extend the list by appending all the items in the given list; equivalent to a[len(a):] = L. insert(i, x) Insert an item at a given position. The first argument is the index of the element before which to insert, so a.insert(0, x) inserts at the front of the list, and a.insert(len(a), x) is equivalent to a.append(x). remove(x) Remove the first item from the list whose value is x. It is an error if there is no such item. pop([i]) Remove the item at the given position in the list, and return it. If no index is specified, a.pop() removes and returns the last item in the list. (The square brackets around the i in the method signature denote that the parameter is optional, not that you should type square brackets at that position. index(x) Return the index in the list of the first item whose value is x. It is an error if there is no such item. count(x) Return the number of times x appears in the list. sort() Sort the items of the list, in place. reverse() Reverse the elements of the list, in place. 35

tuples Τα tuples μοιάζουν με τις λίστες. Ορίζονται σαν ακολουθίες αριθμών χωρισμένων με κόμματα. Ηπρόσβαση σε αυτά είναι γρηγορότερη, αλλά δεν μπορούμε να προσθέσουμε ήνα διαγράψουμε στοιχεία. >>> my_tuple= 1,2,3,4 >>> my_tuple[1:2] (2, 3) 36

dictionaries - Τα λεξικά είναι μη ταξινομημένες λίστες. Κάθε στοιχείο του λεξικού έχει ένα κλειδί για την αναφορά σε αυτό: phonebook = {"Alice": 6943456789, "Boris": 6934456789, "Clarice": 6948896754, "Doris": 6987345678} person = { first name : "Robin", last name : "Hood", occupation : "Scoundrel"} print person["occupation"] # Prints "Scoundrel" person[ last name ] = "of Locksley - Όπως και οι λίστες τα λεξικά μπορεί να περιέχουν άλλα λεξικά ήκαι λίστες. Φυσικά και οι λίστες μπορούν να περιέχουν λεξικά. Τα στοιχεία των λεξικών μπορούν να αλλάξουν και δεν είναι απαραίτητο να είναι του ίδιου τύπου. 37

Άσκηση. Να μεταφερθεί ο αλγόριθμος σε python for ( I = 2 έως 10 ) J 10 While ( J >= I ) {if A[J-1] > A[J] then { X A[J-1] A[J-1] A[J] A [ J] X } J J-1 } Αν οπίνακας Απεριέχει τα στοιχεία (5, 3, 2, 1, 4, 6, 7, 8, 0, -1), ποιο θα είναι το περιεχόμενό του μετά την εκτέλεση του αλγορίθμου της άσκησης; 38

Modules - Οι πιο χρήσιμες συναρτήσεις και κλάσεις τοποθετούνται σε μονάδες (modules), που στην πραγματικότητα είναι αρχεία κειμένου που περιέχουν κώδικα. - Για να χρησιμοποιηθεί ένα module πρέπει να γίνει import. import string x = string.split(y) (Κάνουμε import το module και καλούμε τη συνάρτηση που θέλουμε όνομα_module.όνομα_συνάρτησης) 39

Εξαιρέσεις - Μερικές λειτουργίες (όπως η διαίρεση με το μηδέν ήηανάγνωση από ένα αρχείο που δεν υπάρχει) παράγουν μια συνθήκη σφάλματος ή εξαίρεση. Τότε το πρόγραμμα τελειώνει και εκτυπώνει ένα μήνυμα σφάλματος. Μπορούμε να το αποφύγουμε αυτό με την δομή try/except πρόταση. 40

Πρόταση try/except >>> def divide(x, y):... try:... result = x / y... except ZeroDivisionError:... print "division by zero!"... else:... print "result is", result... finally:... print "executing finally clause" 1. Πρώτα εκτελείται η εντολή try. 2. Αν δεν υπάρχει κανένα σφάλμα ηεντολή except παραλείπεται και εκτελείται ηelse. 3. Τέλος είτε υπάρχει εξαίρεση είτε όχι πριν τελειώσει ηtry εκτελείται ηfinally. 41

Try/except για έλεγχο εισόδου # -*- coding: cp1253 -*- while True: try: x = int(raw_input("δώστε ένα ακέραιο: ")) break except ValueError: print "Παρακαλώ! ακέραιο αριθμό..." 42

αρχεία f1=open(filename,"r") ή f1=file(filename, r ) text = f1.readline() διαβάζει μια γραμμή ενός αρχείου κειμένου text = f1.readlines() διαβάζει όλες τις γραμμές ενός αρχείου κειμένου f1.close() 43

Μέρος Δ. Δυναμικές Δομές Δεδομένων Δομές που καταλαμβάνουν δυναμικά μνήμη, ανάλογα με τον αριθμό στοιχείων που έχουν κάθε στιγμή Συνδεδεμένες λίστες ουρές (queues) σωροί (stacks) δένδρα (trees) 44

Δείκτες (pointers) Μεταβλητές που περιέχουν τη διεύθυνση κάποιας άλλης μεταβλητής Βασικό συστατικό εργαλείο για τη δημιουργία δυναμικών δομών δεδομένων 1001 D1 D2 1 I1 1002 4 I2 45

Συνδεδεμένες λίστες Δομές που απαρτίζονται από σειρά διατεταγμένων στοιχείων, καθένα από τα οποία εκτός από τα κυρίως δεδομένα περιέχει έναν δείκτη προς το επόμενο στοιχείο της λίστας δεδομένα δεδομένα 46

Απλά συνδεδεμένες λίστες 1001 1005 1012 1014 1016 1020 1032 σε γνωρίζω από την κόψη του σπαθιού 47

Συνδεδεμένες Λίστες (συνέχεια) Διπλά συνδεδεμένες λίστες Κυκλικές λίστες 48

Εισαγωγή στοιχείων σε συνδεδεμένη λίστα q p p 49

Διαγραφή στοιχείων από συνδεδεμένη λίστα p p Πώς υλοποιείται ηεισαγωγή και διαγραφή στοιχείων από λίστα στην Python; 50

Ουρές (queues) First In First Out (FIFO) ΣΤΑΣΗ 51

Ουρές (queues) Δυναμικές δομές στις οποίες το πρώτο στοιχείο που εισάγεται είναι και το πρώτο που θα εξαχθεί (First In First Out) Υλοποίηση με πίνακες ήλίστες 5 3 6 4 head tail 52

Ανάκληση στοιχείου από ουρά X= 5 3 6 head head if head=tail then μήνυμα " άδεια ουρά " else { Χ key(head) if (next(head) = NIL then head tail else head next(head) } 4 tail 53

Υλοποίηση ουρών με list της Python >>> queue = ["Eric", "John", "Michael"] >>> queue.append("terry") # Terry arrives >>> queue.append("graham") # Graham arrives >>> queue.pop(0) 'Eric' >>> queue.pop(0) 'John' >>> queue ['Michael', 'Terry', 'Graham'] 54

Σωροί (stacks) Δυναμικές δομές στις οποίες το τελευταίο στοιχείο που εισάγεται είναι και το πρώτο που θα εξαχθεί Last in First Out (LIFO) 55

Σωροί (stacks) Last In First Out Υλοποίηση με πίνακες ήλίστες 12 20 34 6 5 prev Key top next 56

Ανάκληση στοιχείου από σωρό 12 20 34 6 5 if top είναι εκτός κάτω ορίου μνήμης top top then μήνυμα " underflow " else { Χ key (top) (επιστροφή του άνω στοιχείου) next top (ελευθέρωσε το άνω στοιχείο) if prev(top) NIL then top prev(top) else στείλε μήνυμα "άδειος σωρός" } next 57

Υλοποίηση σωρών στην Python >>> stack = [3, 4, 5] >>> stack.append(6) >>> stack.append(7) >>> stack [3, 4, 5, 6, 7] >>> stack.pop() 7 >>> stack [3, 4, 5, 6] >>> stack.pop() 6 >>> stack.pop() 5 >>> stack [3, 4] 58

Δέντρα (trees) Iεραρχικές δομές δεδομένων που θυμίζουν τα οικογενειακά δένδρα Τα στοιχεία του δένδρου λέγονται κόμβοι Ένας κόμβος χωρίς απογόνους λέγεται τερματικός κόμβος ήφύλλο 59

Δεντρα (συνέχεια) Α ρίζα Β Γ Δ Ε Ζ Η Θ Ι Κ φύλλα Δυαδικά δέντρα, κάθε κόμβος έχει το πολύ δύο «παιδιά» right datum left 60

Αναζήτηση σε δυαδικό δένδρο 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) 61

Φροντιστηριακή Άσκηση Φ5 5.1 Έστω ένας σωρός στον οποίο εκτελούνται διαδοχικά οι εντολές push(5), push(3), pop(), push(7), pop(), push(8), push(9), pop(). Να περιγράψετε βήμα προς βήμα το περιεχόμενο του σωρού. 5.2 Σε ένα φυλλομετρητή να αναφέρετε ένα παράδειγμα χρήσης λειτουργίας του σωρού 5.3 Να περιγράψετε τον αλγόριθμο εισαγωγής στοιχείων σε διπλά συνδεδεμένη λίστα 62

Αρχεία Χώροι μόνιμης φύλαξης δεδομένων Τρόποι προσπέλασης Σειριακή προσπέλαση : Απαιτεί μεγάλο χρόνο αναζήτησης Τυχαία προσπέλαση : Απαιτεί την ύπαρξη κλειδιού, αρχείου ευρετηρίου (index file) 63

Αρχεία (συνέχεια) Αρχεία κατακερματισμού (hashing functions) Τρόπος άμεσης προσπέλασης Μεγάλη ταχύτητα αναζήτησης Αυξημένη πολυπλοκότητα υλοποίησης 64

Άσκηση (Φ5.1) 1. Έστω ότι έχουμε ένα πίνακα που περιέχει στοιχεία μιας ομάδας σπουδαστών με τις βαθμολογίες τους στο μάθημα : Αρ. Μητρώου Επίθετο Όνομα Βαθμός Να ορίσετε την απαραίτητη εγγραφή TAXH που απαιτείται για την αποθήκευση αυτής της πληροφορίας, να ορίσετε στη συνέχεια έναν πίνακα εγγραφών Pinax(50), στον οποίο να εισάγετε τα παραπάνω στοιχεία. Στη συνέχεια να δώσετε τον αλγόριθμο εισαγωγής στοιχείων στον πίνακα. 2. Να δώσετε σε μορφή ψευδοκώδικά τους αλγορίθμους εισαγωγής στοιχείων σε ουρά και σωρό που υλοποιούνται με λίστες 65

Πολυπλοκότητα Ηεκτίμηση του χρόνου εκτέλεσης του αλγορίθμου O(x) order x ως συνάρτηση του μεγέθους του προς επίλυση προβλήματος. Παράδειγμα ποια ηπολυπλοκότητα του αλγορίθμου αναζήτησης ενός ονόματος σε μια ταξινομημένη λίστα με δυαδική αναζήτηση και σειριακή αναζήτηση. 66

Μοντέλα υπολογιστών : ημηχανή Τuring 67

Άσκηση Φ5.2 Να εκφράσετε το θεώρημα μη πληρότητας του Goedel και το θεώρημα της υπολογησιμότητας του Turing. Μελετήστε τις συνέπειες των θεωρημάτων αυτών σε θεωρία αλγορίθμων 68