ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 3ο: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΜΕΡΟΣ 4o: ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ Ένα από τα πιο σημαντικά ζητήματα στον προγραμματισμό Χρησιμότητα σε πληθώρα εφαρμογών Οι μέθοδοι αναζήτησης, εξαρτώνται κυρίως από το εάν ο πίνακας είναι ταξινομημένος ή όχι Επιπλέον, σημαντική παράμετρος για τον καθορισμό του τρόπου αναζήτησης, είναι το εάν τα περιεχόμενα του πίνακα είναι όλα διάφορα μεταξύ τους ή όχι. Τα στοιχεία του πίνακα μπορεί να είναι αριθμητικά ή αλφαριθμητικά 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΣΕΙΡΙΑΚΗ Ή ΓΡΑΜΜΙΚΗ ΜΕΘΟΔΟΣ ΑΝΑΖΗΤΗΣΗΣ Η πιο απλή μέθοδος αναζήτησης Μη ταξινομημένος πίνακας Ξεκινώντας από το πρώτο στοιχείο του πίνακα, ελέγχουμε διαδοχικά τα στοιχεία του, μέχρι να βρούμε κάποιο που να έχει τιμή ίδια με αυτήν που αναζητούμε Η μέθοδος επιστρέφει 0 εάν δεν βρέθηκε στοιχείο, ή τη θέση του πίνακα στην οποία βρέθηκε το στοιχείο που αναζητούσαμε 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΣΕΙΡΙΑΚΗ Ή ΓΡΑΜΜΙΚΗ ΑΝΑΖΗΤΗΣΗ Αλγόριθμος 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 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΠΑΡΑΤΗΡΗΣΕΙΣ ΣΤΗ ΓΡΑΜΜΙΚΗ ΑΝΑΖΗΤΗΣΗ Αν κάποιο στοιχείο υπάρχει στον πίνακα παραπάνω από μια φορά, πρέπει να τροποποιήσουμε τον αλγόριθμο, να αφαιρέσουμε τη μεταβλητή done, έτσι ώστε να συνεχίζεται η αναζήτηση μέχρι το τέλος του πίνακα 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΠΟΛΛΑΠΛΗ ΕΜΦΑΝΙΣΗ ΣΤΟΙΧΕΙΟΥ Αλγόριθμος Sequential_Search Δεδομένα // n, table, key // done ψευδής i 1 Όσο (i≤n) επανάλαβε Αν table[i]=key τότε done αληθής Εμφάνισε ”Το στοιχείο βρέθηκε στη θέση”, i Τέλος_αν i i+1 Τέλος_επανάληψης Αν done = ψευδής τότε Εμφάνισε ”Το στοιχείο δεν βρέθηκε ” Τέλος Sequential_Search Μπορεί να γραφεί και με την εντολή Για αντί της χρήσης της εντολής Όσο 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΣΕΙΡΙΑΚΗ ΑΝΑΖΗΤΗΣΗ ΣΕ ΤΑΞΙΝΟΜΗΜΕΝΟ ΠΙΝΑΚΑ Εάν τα στοιχεία του πίνακα είναι ταξινομημένα, τότε ο αλγόριθμος πρέπει να σταματήσει, όταν συναντήσει ένα στοιχείο με τιμή μεγαλύτερη από την αναζητούμενη τιμή. Πχ. Πίνακας table ταξινομημένος κατά αύξουσα σειρά και όλα τα στοιχεία του είναι διαφορετικά μεταξύ τους. 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΣΕΙΡΙΑΚΗ ΑΝΑΖΗΤΗΣΗ ΣΕ ΤΑΞΙΝΟΜΗΜΕΝΟ ΠΙΝΑΚΑ ΚΑΤΆ ΑΥΞΟΥΣΑ ΣΕΙΡΑ Αλγόριθμος Sequential_Search Δεδομένα // n, table, key // done ψευδής i 1 Όσο (done=ψευδής) και (table[i]≤key) και (i<=n) επανάλαβε Αν table[i]=key τότε done αληθής Εμφάνισε ”Το στοιχείο βρέθηκε στη θέση”, i Τέλος_αν i i+1 Τέλος_επανάληψης Αν done = ψευδής τότε Εμφάνισε ”Το στοιχείο δεν βρέθηκε ” Τέλος Sequential_Search 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
Καθηγητής: Δρίμτζιας Βασίλης ΠΑΡΑΔΕΙΓΜΑΤΑ Πίνακας 9 αταξινόμητων αριθμών Αναζητούμε το στοιχείο 56 Απαιτούνται 4 προσπελάσεις Αναζητούμε το στοιχείο 11 Απαιτούνται 9 προσπελάσεις, δηλαδή η σάρωση ολόκληρου του πίνακα 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΑΝΑΖΗΤΗΣΗ ΣΕ ΤΑΞΙΝΟΜΗΜΕΝΟ ΠΙΝΑΚΑ Ο ίδιος πίνακας ταξινομημένος Αναζητούμε το στοιχείο 56 Απαιτούνται 7 προσπελάσεις Αναζητούμε το στοιχείο 11 Απαιτούνται 3 προσπελάσεις, δεδομένου ότι το 12 είναι μεγαλύτερο από το 11, και επομένως δεν έχει νόημα να συνεχιστεί η αναζήτηση 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
Καθηγητής: Δρίμτζιας Βασίλης ΣΕΙΡΙΑΚΗ ΑΝΑΖΗΤΗΣΗ Η πιο απλή, αλλά και η λιγότερο αποτελεσματική μέθοδος αναζήτησης Δικαιολογείται η χρήση της μόνο: Μη ταξινομημένος πίνακας Πίνακας μικρού μεγέθους Σπάνια εκτέλεση αναζήτησης σε συγκεκριμένο πίνακα 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
Καθηγητής: Δρίμτζιας Βασίλης ΤΑΞΙΝΟΜΗΣΗ Από τις πιο σημαντικές λειτουργίες σε μια δομή, είναι η τοποθέτηση των κόμβων της δομής σε μια σειρά Η διαδικασία αυτή ονομάζεται ταξινόμηση (sorting) ή διάταξη (ordering) Η πιο συνήθης διάταξη, είναι η αύξουσα τάξη (ascending sequence) δηλαδή η ταξινόμηση από τη μικρότερη τιμή προς τη μεγαλύτερη. Ο απώτερος σκοπός της ταξινόμησης, είναι να διευκολυνθεί η μετέπειτα αναζήτηση των στοιχείων μέσα στη δομή αυτή. Η χρησιμότητα της ταξινόμησης, πρακτικά αποδεικνύεται σε οποιαδήποτε μορφή αναζήτησης δεδομένων που ανακαλούμε από τον πραγματικό κόσμο (αναζήτηση τηλεφώνων από κατάλογο, λεξικά, βιβλιοθηκονομικά συστήματα, κτλ) 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΤΥΠΙΚΟΣ ΟΡΙΣΜΟΣ ΤΑΞΙΝΟΜΗΣΗΣ Δοθέντων των στοιχείων a1,a2,...,an η ταξινόμηση συνίσταται στη μετάθεση (permutation) της θέσης των στοιχείων, ώστε να τοποθετηθούν σε μία σειρά ak1,ak2,...,akn έτσι ώστε, δοθείσης μίας συνάρτησης διάταξης (ordering function), f, να ισχύει: f(ak1) <= f(ak2) <= ... <= f(akn) 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΤΑΞΙΝΟΜΗΣΗ ΕΥΘΕΙΑΣ ΑΝΤΑΛΛΑΓΗΣ Η ταξινόμηση με τη μέθοδο της ευθείας ανταλλαγής (straight exchange sort), βασίζεται στην αρχή της σύγκρισης και της ανταλλαγής θέσεως δύο διαδοχικών στοιχείων του πίνακα, μέχρις ότου διαταχθούν όλα τα στοιχεία. Γίνονται διαδοχικές προσπελάσεις κάθε φορά, και μετακινείται η μικρότερη τιμή του πίνακα προς τις πρώτες θέσεις. 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΤΑΞΙΝΟΜΗΣΗ ΦΥΣΣΑΛΙΔΑΣ Αν θεωρήσουμε τον πίνακα κατακόρυφο αντί για οριζόντιο, και κάθε τιμή ενός στοιχείου πίνακα, μια φυσσαλίδα με βάρος ανάλογο με την τιμή του στοιχείου, τότε ο αλγόριθμος ευθείας ανταλλαγής, τοποθετεί σταδιακά τις φυσσαλίδες, στο κατάλληλο επίπεδο βάρους, οπότε στο τέλος η ελαφρύτερη φυσσαλίδα βρίσκεται στην κορυφή, και η βαρύτερη στο κατώτερο μέρος του πίνακα 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΤΑΞΙΝΟΜΗΣΗ ΦΥΣΣΑΛΙΔΑΣ 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης
ΑΛΓΟΡΙΘΜΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ΦΥΣΣΑΛΙΔΑΣ Αλγόριθμος Φυσσαλίδα Δεδομένα // table, n // Για i από 2 μέχρι n Για j από n μέχρι i με_βήμα –1 Αν table[j-1] > table[j] τότε temp table [j-1] table[j-1] table[j] table[j]temp Τέλος_αν Τέλος_επανάληψης Αποτελέσματα // table // Τέλος Φυσσαλίδα αντιμετάθεσε table[j], table [j-1] 05/04/2017 Καθηγητής: Δρίμτζιας Βασίλης