Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ
ΔΕΔΟΜΕΝΑ ΑΛΓΟΡΙΘΜΟΙ -ΠΛΗΡΟΦΟΡΙΑ: Δεδομένα: Αναπαράσταση της Πραγματικότητας Μπορούν να γίνουν αντιληπτά με μια από τις αισθήσεις μας Πληροφορία: Προκύπτει από την επεξεργασία και συσχέτιση των Δεδομένων. Αλγόριθμος: Το μέσο για την παραγωγή πληροφορίας από τα δεδομένα
Δεδομένα Αλγόριθμος Πληροφορία Θερμοκρασία Υγρασία Αλγόριθμος Ταχύτητα Ανέμου Διεύθυνση Ανέμου Δορυφορικές Φωτογραφίες Δελτίο Καιρού
Δεδομένα Επεξεργασία - Αλγόριθμος Πληροφορία Προφορικοί Βαθμοί Αλγόριθμος Αποτελέσματα Βαθμοί Γραπτών Εξετάσεων
Δεδομένα και Πληροφορία Βαθμοί Εξετάσεων Επεξεργασία Αποτελέσματα Αποθήκευση Σχολή στην οποία επέτυχε ο μαθητής Επεξεργασία Αποτελέσματα Προτιμήσεις Σχολών
Πληροφορική: Η Επιστήμη που μελετά τα δεδομένα από τις ακόλουθες σκοπιές: - Υλικού: Επιτρέπει στα δεδομένα να αποθηκεύονται π.χ. στην κύρια μνήμη ή την περιφερειακή μνήμη με διάφορες αναπαραστάσεις (π.χ. Κώδικας ASCII) - Γλώσσες Προγραμματισμού: Επιτρέπουν τη χρήση διαφόρων τύπων μεταβλητών για να περιγράψουν τα δεδομένα (π.χ. Λογικές, Ακέραιες) - Δομές Δεδομένων: Ένα σύνολο δεδομένων μαζί με τις λειτουργίες που επιτρέπονται σε αυτά. Π.χ. Αρχείο που επιτρέπει τη σειριακή προσπέλαση των εγγραφών του. - Ανάλυση Δεδομένων: Μελετώνται τρόποι καταγραφής και αλληλοσυσχέτισης δεδομένων ώστε να αναπαρασταθεί η γνώση για πραγματικά γεγονότα.
Ορισμός: Δομή Δεδομένων ένα σύνολο αποθηκευμένων δεδομένων που υφίστανται επεξεργασία από ένα σύνολο λειτουργιών. Στη γενική μορφή της κάθε δομή δεδομένων αποτελείται από κόμβους (nodes) πάνω στους οποίους μπορούμε να εκτελούμε κάποιες πράξεις λειτουργίες: - Πρόσβαση (σε κόμβο για ανάγνωση ή τροποποίηση) - Εισαγωγή (νέου κόμβου) - Διαγραφή (υπάρχοντος κόμβου) - Αναζήτηση (αναζήτηση ενός ή περισσότερων κόμβων που έχουν μια επιθυμητή ιδιότητα) - Ταξινόμηση (Διάταξη κατά αύξουσα ή φθίνουσα σειρά των κόμβων) - Αντιγραφή ενός ή περισσότερων κόμβων από μια δομή σε άλλη - Συγχώνευση (merging) δύο ή περισσότερες δομές ενώνονται σε μια - Διαχωρισμός (separation) μια δομή «σπάει» σε δύο ή περισσότερες.
Στην πράξη σπάνια χρησιμοποιούνται ΟΛΕΣ οι ενέργειες σε μία δομή. Στην πράξη κάθε δομή είναι αποδοτικότερη σε κάποιες από τις λειτουργίες (π.χ. Εισαγωγή νέου κόμβου) και λιγότερο αποδοτική σε άλλες (π.χ. Ταξινόμηση). Αυτός είναι και ο λόγος που στην πράξη χρησιμοποιούμε διάφορες δομές δεδομένων ανάλογα με τις απαιτήσεις μας. ΠΡΟΓΡΑΜΜΑΤΑ = ΑΛΓΟΡΙΘΜΟΙ + ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Wirth Δημιουργός της Γλώσσας Pascal)
Δυναμικές Δομές Δεδομένων Στατικές Δομές Δεδομένων Δεν έχουν προκαθορισμένο Μέγεθος. Το μέγεθός τους μεταβάλλεται καθώς προσθαφαιρούνται κόμβοι. Δεν αποθηκεύονται σε διαδοχικές θέσεις μνήμης. Η Μνήμη για την αποθήκευσή τους παραχωρείται δυναμικά ανάλογα με τις απαιτήσεις (αύξηση ή μείωση κόμβων) Το μέγεθός τους είναι προκαθορισμένο Αποθηκεύονται σε διαδοχικές θέσεις μνήμης Η Μνήμη που παραχωρείται για την αποθήκευσή τους καθορίζεται εξαρχής, κατά τον προγραμματισμό και όχι κατά την εκτέλεση του προγράμματος.
Πίνακες: Μια ΣΤΑΤΙΚΗ Δομή Δεδομένων γνωστή μας και από άλλα μαθήματα (μαθηματικά). Είναι μια δομή με προκαθορισμένο μέγεθος και περιέχει στοιχεία ίδιου τύπου (π.χ. Ακέραιους αριθμούς). Διαστάσεις: 1, 2, 3... a[1] a[2] a[3] a[4] a[5] a[1,1] a[1,2] a[1,3] a[1,4] a[2,1] a[2,2] a[2,3] a[2,4] a[3,1] a[3,2] a[3,3] a[3,4]
Στοίβα Εισαγωγή D Push Εξαγωγή D Pull C B A D C B A C B A
Στοίβα Υλοποίηση με μονοδιάστατο πίνακα 3 2 1 C B A Top 3 2 1 B A Top 2 4 3 2 1 D C B A Top 4
Ουρά 5 12 7 4 Εμπρός Front Πίσω Rear Προσθήκη 5 12 7 4 8 Εμπρός Front Πίσω Rear 12 7 4 8 Αφαίρεση Εμπρός Front Πίσω Rear
Ουρά Υλοποίηση με Μονοδιάστατο Πίνακα 5 12 7 4 Front = 2 Rear = 5 Προσθήκη 5 12 7 4 8 Front = 2 Rear = 6 12 7 4 8 Αφαίρεση Front = 3 Rear = 6
Αναζήτηση σε πίνακα. Το πρόβλημα της αναζήτησης μιας τιμής σε πίνακα παρουσιάζει ιδιαίτερο ενδιαφέρον και έχει πολλές πρακτικές εφαρμογές. Υπάρχουν αρκετές μέθοδοι αναζήτησης που εξαρτώνται από διάφορους παράγοντες όπως αν τα στοιχεία του πίνακα είναι ταξινομημένα, αν είναι όλα διαφορετικά μεταξύ τους ή υπάρχουν και ίδια κλπ Η πιο απλή μέθοδος είναι η σειριακή (sequential) ή γραμμική (linear) μέθοδος με την οποία ψάχνουμε με τη σειρά τα στοιχεία του πίνακα μέχρι να βρούμε το επιθυμητό ή να εξαντληθούν οι θέσεις του πίνακα.
Αλγόριθμος Σειριακής Αναζήτησης. Αλγόριθμος Sequential Search Δεδομένα // n, table, key // done ψευδής position 0 i 1 Όσο (done = ψευδής) και (i <= n) επανέλαβε Αν table[i] = key τότε done αληθής position i αλλιώς i i+1 Τέλος_αν Τέλος_επανάληψης Αποτελέσματα // done, position // Τέλος Sequential Search
Αναζήτηση σε πίνακα. O προηγούμενος αλγόριθμος πρέπει να τροποποιηθεί όταν το στοιχείο εμφανίζεται παραπάνω από μια φορά στον πίνακα ώστε να εμφανίζει την τελευταία θέση στην οποία υπάρχει το στοιχείο Επίσης αλλάζει αν τα στοιχεία είναι ταξινομημένα αφού τότε σταματάμε την αναζήτηση αν βρούμε στοιχείο μεγαλύτερο του αναζητούμενου. Η σειριακή αναζήτηση είναι αποδοτική μόνο αν: Ο Πίνακας είναι ταξινομημένος Ο Πίνακας έχει μικρό μέγεθος Δε χρειάζονται να γίνονται συχνά αναζητήσεις στον πίνακα
Ταξινόμηση Ορισμός: Δοθέντων των στοιχείων a 1,a 2,,a n η ταξινόμηση συνίσταται στην αντιμετάθεση της θέσης των στοιχείων ώστε να τοποθετηθούν με μια νέα σειρά a k1, a k2,.., a kn ώστε με δεδομένη μια συνάρτηση διάταξης f να ισχύει f(a k1 ) f(a k2 ).. f(a kn )
Ταξινόμηση Φυσαλίδας (bubble-sort) i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 52 5 5 5 5 5 5 5 12 52 10 10 10 10 10 10 71 12 52 12 12 12 12 12 56 71 12 52 19 19 19 19 5 56 71 19 52 45 45 45 10 10 56 71 45 52 52 52 19 19 19 56 71 56 56 56 90 45 45 45 56 71 71 71 45 90 90 90 90 90 90 90