ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΠΛΗΡΟΦΟΡΙΚΗ & ΑΛΓΟΡΙΘΜΟΙ Ενότητα # (6): Αιγνξηζκηθή Γνκέο Γεδνκέλωλ Κύδξνο Γεκήηξεο Τμήμα Λνγηζηηθήο θαη Υξεκαηννηθνλνκηθήο
Άδειεσ Χρήςησ Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χρήςησ Creative Commons. Για εκπαιδευτικό υλικό, όπωσ εικόνεσ, που υπόκειται ςε άλλου τφπου άδειασ χρήςησ, η άδεια χρήςησ αναφζρεται ρητώσ. 2
Χρηματοδότηςη Το παρόν εκπαιδευτικό υλικό ζχει αναπτυχθεί ςτα πλαίςια του εκπαιδευτικοφ ζργου του διδάςκοντα. Το ζργο «Ανοικτά Ακαδημαϊκά Μαθήματα ςτο ΤΕΙ Κεντρικήσ Μακεδονίασ» ζχει χρηματοδοτήςει μόνο τη αναδιαμόρφωςη του εκπαιδευτικοφ υλικοφ. Το ζργο υλοποιείται ςτο πλαίςιο του Επιχειρηςιακοφ Προγράμματοσ «Εκπαίδευςη και Δια Βίου Μάθηςη» και ςυγχρηματοδοτείται από την Ευρωπαϊκή Ζνωςη (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικοφσ πόρουσ. 3
Αιγνξηζκηθή Θεκειηώδεηο Γνκέο δεδνκέλωλ 4
Περιεχόμενα ενότητασ 1. Γηαηί Γνκέο Γεδνκέλωλ? 2. Βαζηθέο δνκέο δεδνκέλωλ 3. ηαηηθέο δνκέο δεδνκέλωλ 4. Δθαξκνγέο 5
Σκοποί ενότητασ Να γλωξίζεηε ηηο βαζηθέο ζηαηηθέο δνκέο δεδνκέλωλ Να ρξεζηκνπνηήζεηε ηηο δνκέο δεδνκέλωλ ζε ζπγθεθξηκέλα πξνβιήκαηα 6
Γιατί δομζσ δεδομζνων? ΑΛΓΟΡΙΘΜΟ Γνθηκή ΜΔΣΑΒΛΗΣΔ x, i, plithos, S: ΑΚΔΡΑΙΔ MO:ΠΡΑΓΜΑΣΙΚΔ ΑΡΧΗ ΔΠΑΝΑΛΑΒΔ ΓΙΑΒΑΔ plithos ΜΔΧΡΙ plithos>0 S 0 ΓΙΑ i 1 ΜΔΧΡΙ plithos ΑΡΧΗ ΓΙΑΒΑΔ x S S+x MO S/plithos //ζε ασηό ηο ζεκείο ο κέζος όρος έτεη σποιογηζηεί «Να γίλεη αιγόρηζκος ποσ ζα δηαβάδεη έλα γλφζηό πιήζος από αθέραηοσς αρηζκούς θαη ζα βρίζθεη ηο κέζο όρο ηοσς. Σηε ζσλέτεηα λα βρεζεί ε απόζηαζε (ζε αθέραηες ηηκές) ηοσ θάζε αρηζκού από ηολ σποιογηζκέλο κέζο όρο» γηα ηε ιύζε απηνύ ηνπ, απινύ θαηλνκεληθά, πξνβιήκαηνο απαηηείηαη έλαο ηξόπνο απνζήθεπζεο πνιιώλ νκνεηδώλ ηηκώλ ζε κία εληαία θαηαζθεπή. Απηέο νη θαηαζθεπέο νλνκάδνληαη δνκέο δεδνκέλωλ. 7
ΟΡΙΜΟΙ - ΠΡΑΞΔΙ Μία δνκή δεδνκέλωλ είλαη κηα νξγαλωκέλε ζπιινγή από νκνεηδή απνζεθεπκέλα δεδνκέλα. ηα δεδνκέλα απηά κπνξνύλ λα εθαξκνζηνύλ δηάθνξεο ιεηηνπξγίεο νη νπνίεο ζα ηα επεμεξγάδνληαη. Πξνζπέιαζε, Δηζαγωγή, Γηαγξαθή, Αλαδήηεζε, Σαμηλόκεζε, Αληηγξαθή, πγρώλεπζε, Γηαρωξηζκόο, Σεκαρηζκόο θιπ 8
ηαηηθέο - Γπλακηθέο ηαηηθέο: 1. πγθεθξηκέλν πιήζνο 2. πλερόκελεο Θέζεηο Μλήκεο Γπλακηθέο: 1. Όρη πγθεθξηκέλν πιήζνο 2. Με πλερόκελεο Θέζεηο Μλήκεο 9
ΠΙΝΑΚΔ (ζηαηηθή δνκή) 1 2 3 4 5 6 α ζ Ν ο ζ Κ Πίνακας με όνομα Α 1 2 3 4 1 2 4 1-1 2 8 3 4 2 3 1 1 0 2 Πίνακας με όνομα Β Μνλνδηάζηαηνο, δηζδηάζηαηνο, ηξηζδηάζηαηνο θιπ 10
Πξνζπέιαζε ΑΛΓΟΡΙΘΜΟ Δηζ_Δμ ΜΔΣΑΒΛΗΣΔ i, Α[10]: ΑΚΔΡΑΙΔ ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑΒΑΔ A[i] //.. ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΥΗ ΓΡΑΨΔ A[i] #include <stdio.h> int main(void){ int i, A[11]; //νη πίλαθεο μεθηλνύλ από ην 0 ζηε C for(i=1;i<=10;i++){ scanf( %d, &A[i]); fflush(stdin); //.. for(i=1;i<=10;i++){ printf( %d, A[i]); 11
Καη ε επίιπζε ηνπ αξρηθνύ πξνβιήκαηνο ΑΛΓΟΡΙΘΜΟ Γνθηκή_1 ΜΔΣΑΒΛΗΣΔ X[10], i, S: ΑΚΔΡΑΙΔ MO:ΠΡΑΓΜΑΣΙΚΔ ΑΡΧΗ S 0 ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑΒΑΔ x[i] S S+x[i] MO S/10 ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΡΑΨΔ ΜΟ - x[i] 12
1 2 3 4 Γηζδηάζηαηνη πίλαθεο 1 2 4 1-1 2 8 3 9 2 3 1 1 0 2 ΑΛΓΟΡΙΘΜΟ Δηζ_Δμ_θαηά_Γξακκή ΜΔΣΑΒΛΗΣΔ i, j, Α[10,5]: ΑΚΔΡΑΙΔ ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑ j 1 ΜΔΧΡΙ 5 ΑΡΧΗ ΓΙΑΒΑΔ A[i, j] //.. ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑ j 1 ΜΔΧΡΙ 5 ΑΡΧΗ ΓΡΑΨΔ A[i, j] ΑΛΓΟΡΙΘΜΟ Δηζ_Δμ_θαηά_ηήιε ΜΔΣΑΒΛΗΣΔ i, j, Α[10,5]: ΑΚΔΡΑΙΔ ΑΡΧΗ ΓΙΑ j 1 ΜΔΧΡΙ 5 ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑΒΑΔ A[i, j] //.. ΓΙΑ j 1 ΜΔΧΡΙ 5 ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΡΑΨΔ A[i, j] #include <stdio.h> int main(void){ int i, j, A[11][6]; //νη πίλαθεο μεθηλνύλ από ην 0 ζηε C for(i=1;i<=10;i++){ for(j=1;j<=5;j++){ scanf( %d, &A[i][j]); fflush(stdin); //.. for(i=1;i<=10;i++){ for(j=1;j<=5;j++){ printf( %d, A[i][j]); getchar(); #include <stdio.h> int main(void){ int i, j, A[11][6]; //νη πίλαθεο μεθηλνύλ από ην 0 ζηε C for(j=1;j<=5;j++){ for(i=1;i<=10;i++){ scanf( %d, &A[i][j]); fflush(stdin); //.. for(j=1;j<=5;j++){ for(i=1;i<=5;i++){ printf( %d, A[i][j]); getchar(); 13
Δηδηθέο πεξηπηώζεηο 1. ηεηξαγωληθόο. Γηα παξάδεηγκα, έλαο πίλαθαο Α θχθ είλαη ηεηξαγωληθόο θαζώο έρεη θ γξακκέο θαη θ ζηήιεο (θ γλωζηό). ε έλαλ ηεηξαγωληθό πίλαθα, ηα ζηνηρεία πνπ έρνπλ ηνλ ίδην δείθηε γξακκήο θαη ζηήιεο, είλαη δειαδή ηεο κνξθήο Α[i,i], i=1, 2, θ, αλήθνπλ ζηελ θύξηα δηαγώλην. Έηζη, ζηνλ πίλαθα Α θχθ ηα ζηνηρεία Α[1,1], Α[2,2], Α[3,3], θιπ αλήθνπλ ζηελ θύξηα δηαγώλην ηνπ πίλαθα. ε έλαλ ηεηξαγωληθό πίλαθα Α θχθ, ηα ζηνηρεία Α[i,k-i+1], αλήθνπλ ζηε δεπηεξεύνπζα δηαγώλην ηνπ πίλαθα. ε έλαλ ηεηξαγωληθό πίλαθα Α θχθ, όηαλ Α[i, j]=a[j, i], γηα θάζε i,j=1,2, θ, ηόηε ν πίλαθαο είλαη ζπκκεηξηθόο ωο πξνο ηελ θύξηα δηαγώληό ηνπ. 2. Έλαο ηεηξαγωληθόο πίλαθαο πνπ πεξηέρεη κεδεληθά (0) ζε όια ηα ζηνηρεία Α[i,j], γηα i>j, ιέγεηαη άλω ηξηγωληθόο. 3. Αληίζηνηρα, έλαο θάηω ηξηγωληθόο πίλαθαο πεξηέρεη κεδεληθά (0) ζε όια ηα ζηνηρεία Α[i,j], i<j. 4. Έλαο ηεηξαγωληθόο πίλαθαο Α θχθ ιέγεηαη θεληξνζπκκεηξηθόο, όηαλ όια ηα ζηνηρεία ηνπ είλαη ζπκκεηξηθά ίζα ωο πξνο ην θέληξν ηνπ πίλαθα. ηνπο θεληξνζπκκεηξηθνύο πίλαθεο ηζρύεη: Α[i, j] =A[θ-i+1,θ-j+1]. 14
ρεκαηηθά.. 3 2 4 5 1 3 9 1 1 2 0 2 7 4 3 2 Τεηραγωνικός πίνακας 3 2 4 5 1 3 9 1 1 2 0 2 7 4 3 2 Σηοιτεία ηης κσρίας διαγωνίοσ 3 2 4 5 1 3 9 1 1 2 0 2 7 4 3 2 Σηοιτεία ηης δεσηερεύοσζας διαγωνίοσ 3 2 4 5 2 3 9 1 4 9 0 3 5 1 3 2 Σσμμεηρικός πίνακας 3 2 4 5 0 3 9 1 0 0 1 3 0 0 0 2 Άνω ηριγωνικός πίνακας 3 0 0 0 2 3 0 0 4 9 1 0 5 1 3 2 Κάηω ηριγωνικός πίνακας 15
2 3 4 6 5 7 0 9 9 0 7 5 6 4 8 2 Κενηροζσμμεηρικός πίνακας με άρηιο πλήθος γραμμών και ζηηλών (ηο κένηρο είναι ζηην ηομή ηων διπλών γραμμών) 2 8 4 6 5 7 0 9 10 1 3 5 12 5 3 1 10 9 0 7 5 6 4 8 2 Κενηροζσμμεηρικός πίνακας με περιηηό πλήθος γραμμών και ζηηλών (ηο κένηρο είναι ηο ζηοιτείο [3,3]) 16
Άζξνηζκα ΑΛΓΟΡΙΘΜΟ ΤΠΟΛΟΓΙΜΟΙ ΜΔΣΑΒΛΗΣΔ Υ[10], _Θ, _Α, ΠΛΗΘΟ_Α, i: ΑΚΔΡΑΙΔ Μ_Ο_Α: ΠΡΑΓΜΑΣΙΚΔ ΑΡΧΗ _Θ 0 //αρτηθοποίεζε αζροίζκαηος ζεηηθώλ _Α 0 //αρτηθοποίεζε αζροίζκαηος αρλεηηθώλ ΠΛΗΘΟ_Α 0 //αρτηθοποίεζε πιήζοσς αρλεηηθώλ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑΒΑΔ Υ[i] ΑΝ Υ[i]>0 ΣΟΣΔ _Θ _Θ +Υ ΑΛΛΙΩ ΑΝ Υ[i]<0 ΣΟΣΔ ΑΡΧΗ _Α _Α+Υ[i] ΠΛΗΘΟ_Α ΠΛΗΘΟ_Α+1 //επαλάιευες θαη εζφηερηθώλ σποιογηζκώλ ΓΡΑΨΔ _Θ ΑΝ ΠΛΗΘΟ_Α<>0 ΣΟΣΔ ΑΡΧΗ M_O_A _Α/ΠΛΗΘΟ_Α ΓΡΑΨΔ Μ_Ο_Α 17
Μέγηζηα - ειάρηζηα ΑΛΓΟΡΙΘΜΟ ΜΔΓ_ΔΛΑΥ ΜΔΣΑΒΛΗΣΔ Υ[10], max, min, i: ΑΚΔΡΑΙΔ ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑΒΑΔ Υ[i] max X[1] min X[1] //αρτηθοποίεζε ζηο πρώηο ζηοητείο ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΑΝ Υ[i]>max ΣΟΣΔ max X[i] AN X[i[<min TOTE min X[i] //ζε ασηό ηο ζεκείο, ε κέγηζηε θαη ε // ειάτηζηε ηηκή έτοσλ σποιογηζηεί ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ //δηαπερλούκε από ηελ αρτή ηολ πίλαθα ΑΝ Υ[i]=max ΣΟΣΔ ΓΡΑΨΔ βξέζεθε κέγηζηνο ζηε ζέζε, i AN X[i[=min TOTE ΓΡΑΨΔ βξέζεθε ειάρηζηνο ζηε ζέζε, i #include <stdio.h> int main(void){ int x[11], i, max, min; for(i=1;i<=10;i++){ scanf("%d", &x[i]);fflush(stdin); max=x[1];min=x[1]; for(i=1;i<=10;i++){ if(x[i]>max) max=x[i]; if (x[i]<min) min=x[i]; for(i=1;i<=10;i++){ if(x[i]==max) printf("max in position %d\n", i); if (x[i]==min) printf("min in position %d\n", i);; getchar(); 18
«Δίλεηαη κνλνδηάζηαηνο πίλαθαο 10 αθεξαίωλ. Να βξεζεί εάλ ηα ζηνηρεία ηνπ είλαη όια ζεηηθά ή όρη». ΑΛΓΟΡΙΘΜΟ ΘΔΣΙΚΟΙ_ΑΡΙΘΜΟΙ ΜΔΣΑΒΛΗΣΔ Υ[10], i: ΑΚΔΡΑΙΔ ζεηηθνη: ΛΟΓΙΚΔ ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑΒΑΔ Υ[i] ζεηηθνί true //έζηφ όηη όιοη αρηζκοί είλαη ζεηηθοί i 1 ΟΟ ((i<=10) and (ζεηηθνί = true)) ΑΡΥΗ ΑΝ Υ[i]<0 ΣΟΣΔ ζεηηθνί false //βρέζεθε έλας αρλεηηθός αρηζκός i i+1 //κεηά ηο ηέιος ηες επαλάιευες ε κεηαβιεηή //ζεηηθνί, περηέτεη ηο αποηέιεζκα ΑΝ ζεηηθνί = true ΣΟΣΔ ΓΡΑΨΔ όινη νη αξηζκνί είλαη ζεηηθνί ΑΛΛΙΩ ΓΡΑΨΔ ΓΔΝ είλαη όινη νη αξηζκνί ζεηηθνί #include <stdio.h> int main(void){ int x[11], i, positive; for(i=1;i<=10;i++){ scanf("%d", &x[i]);fflush(stdin); positive=1; i=1; while((i<=10)&&(positive)){ if(x[i]<0) positive=0; i++; if(positive) printf("all are positives"); else printf("at least one negative"); getchar(); 19
«Έζηω έλα πίλαθαο 10 ραξαθηήξωλ. Μέζα ζηνλ πίλαθα απνζεθεύεηαη έλα αιθαξηζκεηηθό ίδηνπ κεγέζνπο. Να βξεζεί εάλ ην αιθαξηζκεηηθό είλαη θαξθηληθό (παιίλδξνκν), δηαβάδεηαη δειαδή ην ίδην κε θνξά πξνο ηα δεμηά θαη κε θνξά πξνο ηα αξηζηεξά.» ΑΛΓΟΡΙΘΜΟ ΘΔΣΙΚΟΙ_ΑΡΙΘΜΟΙ ΜΔΣΑΒΛΗΣΔ Υ[10]: ΧΑΡΑΚΣΗΡΔ παιίλδξνκν: ΛΟΓΙΚΔ i:ακδραιδ ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑΒΑΔ Υ[i] παιίλδξνκν true //έζηφ όηη είλαη θαρθηληθό i 1 ΟΟ ((i<=10 div 2) and (παιίλδξνκν = true)) ΑΡΧΗ ΑΝ Υ[i]<> Υ[10-i+1]ΣΟΣΔ παιίλδξνκν false i i+1 ΑΝ παιίλδξνκν = true ΣΟΣΔ ΓΡΑΨΔ ην αιθαξηκεηηθό είλαη παιίλδξνκν ΑΛΛΙΩ ΓΡΑΨΔ ην αιθαξηζκεηηθό δελ είλαη παιίλδξνκν 20
«Δίλεηαη κνλνδηάζηαηνο πίλαθαο 15 αθεξαίωλ. Να αληηζηξαθεί ν πίλαθαο (ην 1 ν ζηνηρείν λα γίλεη ηειεπηαίν, ην 2 ν πξνηειεπηαίν θ.ν.θ)» ΑΛΓΟΡΙΘΜΟ ΑΝΣΙΣΡΟΦΗ ΜΔΣΑΒΛΗΣΔ Υ[15], I, Temp: ΑΚΔΡΑΙΔ ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 15 ΑΡΧΗ ΓΙΑΒΑΔ Υ[i] ΓΙΑ i 1 ΜΔΧΡΙ 15 div 2 ΑΡΧΗ Temp X[i] X[i] X[15-i+1] X[15-i+1] Temp ΓΙΑ i 1 ΜΔΧΡΙ 15 ΑΡΧΗ ΓΡΑΨΔ Υ[i] 21
«Δίλνληαη δύν κνλνδηάζηαηνη πίλαθεο 10 αθεξαίωλ. Να βξεζεί ην γηλόκελό ηνπο.». K S=A[1]*Β[1]+Α[2]*Β[2]+ +Α[Κ]*Β[Κ] = i 1 A[ i]* B[ i] ΑΛΓΟΡΙΘΜΟ ΓΙΝΟΜΔΝΟ ΜΔΣΑΒΛΗΣΔ Α[10], Β[10], I, S: ΑΚΔΡΑΙΔ ΑΡΧΗ ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ ΓΙΑΒΑΔ A[i], B[i] S 0 ΓΙΑ i 1 ΜΔΧΡΙ 10 ΑΡΧΗ S S+A[i]*B[i] ΓΡΑΨΔ S 22
23