Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 8 : Πίνακες IΙ. Αλέξανδρος Τζάλλας

Σχετικά έγγραφα
Προγραμματισμός Ι Ενότητα 6 :

Αντικειμενοστραφής Προγραμματισμός

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 7 : Πίνακες I. Αλέξανδρος Τζάλλας

Αντικειμενοστραφής Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 4 : Υποπρογράμματα I. Αλέξανδρος Τζάλλας

Αντικειμενοστραφής Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 5 : Υποπρογράμματα II. Αλέξανδρος Τζάλλας

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 12 : Ασκήσεις Επανάληψης Β. Αλέξανδρος Τζάλλας

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 10 : Κατασκευή ΝΠΑ. Αλέξανδρος Τζάλλας

Προγραμματισμός Διαδικτύου

Δομές Δεδομένων Ενότητα 1

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 13 : Ασκήσεις Επανάληψης Γ. Αλέξανδρος Τζάλλας

Πληροφορική II. Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι. τύποι δεδομένων. Δρ. Γκόγκος Χρήστος

Λειτουργικά Συστήματα

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 9 : Εγγραφές, Σύνολα. Αλέξανδρος Τζάλλας

Εισαγωγή στον δομημένο προγραμματισμό

Εφαρμογή Υπολογιστικών Τεχνικών στην Γεωργία

Προγραμματισμός Διαδικτύου

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 8 : Αυτόματα NFA - DFA. Αλέξανδρος Τζάλλας

Εισαγωγή στους Αλγορίθμους

Αντικειμενοστραφής Προγραμματισμός

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

Εισαγωγή στους Αλγορίθμους

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 1 : Σύνολα & Σχέσεις (1/2) Αλέξανδρος Τζάλλας

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 11 : Γραμματικές χωρίς συμφραζόμενα. Αλέξανδρος Τζάλλας

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 9 : Κανονικές Εκφράσεις. Αλέξανδρος Τζάλλας

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Φωνολογική Ανάπτυξη και Διαταραχές

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 3 : Εντολές Επανάληψης. Αλέξανδρος Τζάλλας

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Προγραμματισμός Διαδικτύου

Προγραμματισμός Η/Υ. Αναζήτηση & Ταξινόμηση. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Προγραμματισμός H/Y Ενότητα 2: Εντολές ελέγχου ροής. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Προγραμματισμός Διαδικτύου

Ηλεκτρονικοί Υπολογιστές

Διαδικασιακός Προγραμματισμός

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

Εισαγωγή στους Αλγόριθμους

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 3 : Γραφήματα & Αποδείξεις. Αλέξανδρος Τζάλλας

Αρχιτεκτονική υπολογιστών

Ανατομία - Φυσιολογία Ακοής Ομιλίας Λόγου

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική Ι. Ενότητα 4 : Πράξεις με bits. Δρ. Γκόγκος Χρήστος

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εφαρμογή Υπολογιστικών Τεχνικών στην Γεωργία

Λειτουργικά Συστήματα

Διοικητική των επιχειρήσεων

Αλγόριθμοι και Δομές Δεδομένων(Θ) Ευάγγελος Γ. Ούτσιος

Ιστορία της μετάφρασης

Στατιστική. 6 ο Μάθημα: Διαστήματα Εμπιστοσύνης και Έλεγχοι Υποθέσεων. Γεώργιος Μενεξές Τμήμα Γεωπονίας ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Αρχιτεκτονική υπολογιστών

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 2 : Σύνολα & Σχέσεις (2/2) Αλέξανδρος Τζάλλας

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Προγραμματισμός και Εφαρμογές Υπολογιστών

Αντικειμενοστραφής Προγραμματισμός

Αρχιτεκτονική υπολογιστών

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Διαδικτύου

Αρχιτεκτονική υπολογιστών

Εκκλησιαστικό Δίκαιο

Αρχιτεκτονική υπολογιστών

Προχωρημένα Θέματα Προγραμματισμού Δικτύων Ενότητα 8: ΈλεγχοςΡοήςΑνοικτούΒρόχου Φώτης Βαρζιώτης

Θεωρία Υπολογισμού. Ενότητα 5 : Λογικά Επιχειρήματα, Αλφάβητα & Γλώσσες (2/2) Αλέξανδρος Τζάλλας

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

Εισαγωγή στους Αλγορίθμους

Νοσηλευτική Σεμινάρια

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Προγραμματισμός Διαδικτύου

Λειτουργικά Συστήματα

Νοσηλευτική Σεμινάρια

Εκκλησιαστικό Δίκαιο

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Μάρκετινγκ Αγροτικών Προϊόντων

Προγραμματισμός Διαδικτύου

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Μικροοικονομική. Ενότητα 7 : Ισορροπία αγοράς Καραμάνης Κωνσταντίνος

Θεωρία Υπολογισμού Αλφάβητα, Γλώσσες, Κανονικές Εκφράσεις

Προχωρημένα Θέματα Προγραμματισμού Δικτύων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Λογισμός 3. Ενότητα 18: Θεώρημα Πεπλεγμένων (Ειδική περίπτωση) Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εφαρμογή Υπολογιστικών Τεχνικών στην Γεωργία

Πληροφορική ΙΙ Ενότητα 1

Transcript:

1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Προγραμματισμός Ι Ενότητα 8 : Πίνακες IΙ Αλέξανδρος Τζάλλας

2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου Τμήμα Μηχανικών Πληροφορικής Τ.Ε Προγραμματισμός Ι Αλέξανδρος Τζάλλας Λέκτορας Άρτα, 2015 Ενότητα 8 : Πίνακες IΙ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 3 3

4 Χρηματοδότηση Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Ηπείρου» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα.

Σκοποί ενότητας Να γίνουν κατανοητές οι έννοιες Ταξινόμηση & Αναζήτηση Να γίνει κατανοητή η χρησιμότητα χρήσης αλγορίθμων Ταξινόμησης & Αναζήτησης Να περιγραφεί ο αλγόριθμος ταξινόμησης bubblesort Να περιγραφεί ο αλγόριθμος ταξινόμησης selectionsort Να περιγραφεί ο αλγόριθμος Γραμμικής αναζήτηση (linear search) Να περιγραφεί ο αλγόριθμος Δυαδικής αναζήτηση (binary search) 5 5

Περιεχόμενα ενότητας Ταξινόμηση & Αναζήτηση Ταξινόμηση bubblesort Ταξινόμηση selectionsort Γραμμική αναζήτηση (linear search) Δυαδική αναζήτηση (binary search) 6 6

Ταξινόμηση & Αναζήτηση Δύο βασικές διαδικασίες επεξεργασίας πινάκων είναι η ταξινόμηση των στοιχείων ενός πίνακα και η αναζήτηση ενός συγκεκριμένου στοιχείου σε έναν πίνακα Στην καθημερινή ζωή συναντούμε πολλά προβλήματα ταξινόμησης η οποία γίνεται σύμφωνα με κάποιο κριτήριο (κατά αύξουσα τάξη, αλφαβητικά κ.α.) Τέτοια είναι η αλφαβητική ταξινόμηση των λέξεων ενός λεξικού, η ταξινόμηση των στοιχείων ενός πίνακα κατά αύξουσα σειρά, η ταξινόμηση των βιβλίων μιας βιβλιοθήκης και άλλα Για να ταξινομήσουμε τα στοιχεία ενός πίνακα υπάρχουν πολλοί αλγόριθμοι όπως η bubblesort, η mergesort. η quicksort, selectionsort και η insertinnsort 7 7

Ταξινόμηση bubblesort Για να κατανοήσουμε τη μέθοδο της φυσαλίδας ( bubblesort ) μπορούμε να φανταστούμε τα στοιχεία τον υπό ταξινόμηση πίνακα σαν φυσαλίδες η μία πάνω στην άλλη με τις τιμές του να αντιστοιχούν στα βάρη των αντίστοιχων φυσαλίδων Έτσι, οι ελαφρύτερες φυσαλίδες θα έχουν την τάση να ανέρχονται στην επιφάνεια ενώ οι βαρύτερες Θα έχουν την τάση να κατέρχονται προς το βυθό Η διαδικασία που ακολουθούμε είναι να τοποθετήσουμε το μικρότερο αριθμό στην πρώτη θέση, τον αμέσως μεγαλύτερο στη δεύτερη κ.ο.κ. Αυτό γίνεται μέσω διαδοχικών συγκρίσεων των στοιχείων τον πίνακα ανά δύο και ξεκινώντας από το τελευταίο με αποτέλεσμα τα μικρότερα στοιχεία να ανεβαίνουν προς τα πάνω σαν φυσαλίδες. 8 8

Παράδειγμα 1 Να ταξινομηθούν τα στοιχεία τον παρακάτω πίνακα χρησιμοποιώντας τη μέθοδο της φυσαλίδας: 3 6 21 16 57 Να παρουσιαστούν οι ενδιάμεσες τιμές και το αποτέλεσμα) 9 9

Λύση 1/6 Εφαρμόζοντας τη μέθοδο της φυσαλίδας ανασυντάσσουμε τα στοιχεία του δοσμένου πίνακα με 5 (= 6-1) περάσματα Ας δούμε τα περάσματα αυτά ένα-ένα: 1. Ξεκινάμε με το τελευταίο στοιχείο του πίνακα και διαδοχικά ελέγχουμε γειτονικά στοιχεία ανά δύο μέχρι να φτάσουμε στα πρώτα δύο στοιχεία 2. Μόλις εντοπίσουμε ένα ζεύγος στοιχείων στο οποίο η κάτω τιμή είναι μικρότερη από την πάνω αντιμεταθέτουμε τις τιμές τον πίνακα ώστε η μικρότερη τιμή να ανέβει προς τα πάνω 3. Για κάθε πέρασμα γίνονται 5 (=6-1) έλεγχοι για πιθανές αντιμεταθέσεις 4. Στο πρώτο πέρασμα η μικρότερη τιμή θα είναι στην πρώτη θέση, στο δεύτερο πέρασμα η δεύτερη πιο μικρή τιμή θα είναι στη δεύτερη θέση κ.ο.κ. 5. Τα πέντε περάσματα είναι τα εξής: 10 1

Λύση 2/6 Πρώτο Πέρασμα 4 4 4 4 4 2 7 7 7 7 2 4 12 12 12 2 7 7 2 2 2 12 12 12 5 3 3 3 3 3 3 5 5 5 5 5 11 1

Λύση 3/6 Δεύτερο Πέρασμα 2 2 2 2 2 4 4 4 4 3 7 7 7 3 4 12 12 3 7 7 3 3 12 12 12 5 5 5 5 5 12 1

Λύση 4/6 Τρίτο Πέρασμα 2 2 2 2 3 3 3 3 4 4 4 4 7 7 5 5 12 5 7 7 5 12 12 12 13 1

Λύση 5/6 Τέταρτο Πέρασμα 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7 12 12 12 14 1

Λύση 6/6 Πέμπτο Πέρασμα 2 2 3 3 4 4 5 5 7 7 12 12 Άρα ο ταξινομημένος πίνακας είναι: 2 3 4 5 7 12 15 1

Παράδειγμα 2 Να γραφεί πρόγραμμα, για την ταξινόμηση σε αύξουσα σειρά των στοιχείων ενός πίνακα Ν στοιχείων. Να γίνει εφαρμογή για έναν πίνακα ακέραιων αριθμών. 16 1

Λύση program anazitisi2(input,output); var a: array [ 1..50] of real; x: real; i: integer; k: boolean; begin writeln ('dwse to stoixeio pou thes na exetaseis ' ); readln(x); writeln ('dwse 50 stoixeia: '); for i:= 1 to 50 do begin write('a[',i,']='); readln(a[i]); end; k:=false; for i:=1 to 50 do if a[i]=x then begin k:=true; writeln(' To stoixeio brethike sth thesi: ', i); end; if k=false then writeln(' To stoixeio de brethike ') end. 17 1

Ταξινόμηση selectionsort 1/5 Ας υποθέσουμε ότι έχουμε τον εξής πίνακα τον οποίο θέλουμε να ταξινομήσουμε με τη μέθοδο της selectionsort: 50 9 28 42 15 62 30 5 i=1: Στην πρώτη επανάληψη εκτέλεσης αυτό που πρέπει να κάνουμε είναι να θεωρήσουμε ότι η ροή τον ελέγχου βρίσκεται στο πρώτο στοιχείο ενώ το όριο (η περιοχή ) στο οποίο θα αναζητήσουμε το ελάχιστο είναι ολόκληρος ο πίνακας Εδώ το ελάχιστο στοιχείο του πίνακα είναι το 5 το οποίο το εναλλάσσουμε με το πρώτο στοιχείο τον πίνακα στο οποίο βρίσκεται ο έλεγχος Έτσι προκύπτει ένας νέος πίνακας ο οποίος στη θέση του 50 έχει το 5 και αντίστροφα, ενώ όλα τα υπόλοιπα στοιχεία είναι τα ίδια. Ο νέος πίνακας είναι ο εξής: 5 9 28 42 15 62 30 50 18 1

Ταξινόμηση selectionsort 2/5 i=2: Στη δεύτερη επανάληψη θεωρούμε ότι η ροή του ελέγχου βρίσκεται στο δεύτερο στοιχείο ενώ το όριο στο οποίο θα αναζητήσουμε το ελάχιστο είναι ολόκληρος ο πίνακας εκτός από το πρώτο στοιχείο που είναι πλέον ήδη ταξινομημένο. Το ελάχιστο στοιχείο του υπόλοιπου πίνακα είναι το 9 το οποίο δεν εναλλάσσουμε με κάποιο άλλο στοιχείο αφού είναι ήδη το ελάχιστο τον αντίστοιχου υποπίνακα ( δηλαδή όλον τον πίνακα εκτός από το 5 ). Έτσι ο πίνακας παραμένει ο ίδιος: 5 9 28 42 15 62 30 50 19 1

Ταξινόμηση selectionsort 3/5 i=3: Στην τρίτη επανάληψη θεωρούμε ότι η ροή ελέγχου βρίσκεται στο τρίτο στοιχείο ενώ το όριο στο οποίο Θα αναζητήσουμε το ελάχιστο είναι ολόκληρος ο πίνακας εκτός από τα δύο πρώτα στοιχεία που είναι ήδη ταξινομημένα Το ελάχιστο στοιχείο του υπόλοιπου πίνακα είναι το 15 το οποίο εναλλάσσουμε με το 28. Eτσι ο νέος πίνακας είναι ο εξής: 5 9 15 28 42 62 30 50 20 2

Ταξινόμηση selectionsort 4/5 i=4: Ομοίως με πριν αντιμεταθέτουμε το 42 με το 28 και έχουμε: 5 9 15 28 42 62 30 50 i=5: Ομοίως με πριν αντιμεταθέτουμε το 42 με το 30 και έχουμε: 5 9 15 28 30 62 42 50 i=6: Ομοίως με πριν αντιμεταθέτουμε το 62 με το 42 και έχουμε: 5 9 15 28 30 42 62 50 21 2

2 Ταξινόμηση selectionsort 5/5 i=7: Ομοίως με πριν αντιμεταθέτουμε το 62 με το 50 και έχουμε: 5 9 15 28 30 42 50 62 Επειδή σε αυτό το σημείο ο πίνακας θα είναι πάντοτε ταξινομημένος, δε χρειάζεται να ελέγξουμε και το τελευταίο στοιχείο (π.χ. σε αυτό το σημείο το 62 βρίσκεται ήδη στη σωστή του θέση). Επομένως ο τελικός πίνακας είναι ο εξής: 5 9 15 28 30 42 50 62

Αναζήτηση στοιχείου σε πίνακα 'Ενα πολύ συνηθισμένο πρόβλημα κατά τη χρήση πινάκων είναι να διαπιστώσουμε αν υπάρχει μία συγκεκριμένη τιμή σε κάποιον πίνακα, και εφόσον υπάρχει, τη θέση της στον πίνακα Για την αντιμετώπιση του προβλήματος αυτού μπορούμε να χρησιμοποιήσουμε κάποιον από τους αλγορίθμους αναζήτησης Οι κυριότεροι από αυτούς είναι η γραμμική (σειριακή) αναζήτηση και η δυαδική αναζήτηση 23 2

Γραμμική αναζήτηση (linear search) 1/3 Υπάρχουν τρεις βασικές περιπτώσεις για τη γραμμική αναζήτηση: Γραμμική αναζήτηση σε πίνακα μη ταξινομημένο στον οποίο κάθε στοιχείο να είναι διαφορετικό από όλα τα υπόλοιπα Σε αυτή την περίπτωση εξετάζουμε ένα-ένα όλα τα στοιχεία τον πίνακα ξεκινώντας από την αρχή μέχρι να βρεθεί το ζητούμενο στοιχείο Για να σταματάει ο έλεγχος όταν βρεθεί η ζητούμενη τιμή θεωρούμε μία λογική μεταβλητή η οποία τότε γίνεται true Στην αρχή αυτή η μεταβλητή υποθέτουμε ότι έχει τιμή false και αν η τιμή της παραμείνει false μέχρι το τέλος του ελέγχου τότε αυτό σημαίνει ότι δεν υπάρχει αυτή η τιμή στον πίνακα, αλλιώς αν είναι true τότε η τιμή έχει βρεθεί 24 2

Παράδειγμα 3 Αν υποθέσουμε ότι έχουμε ένα πίνακα 50 πραγματικών στοιχείων, τότε το πρόγραμμα με το οποίο αναζητούμε ένα στοιχείο στον πίνακα το οποίο το δίνει ο χρήστης είναι το εξής: 25 2

Λύση program anazitisi1(input,output); var a: array [ 1..50] of real; x: real; i,j: integer; k: boolean; begin writeln ('dwse to stoixeio pou thes na anazhthseis ' ); readln(x); writeln ('dwse 50 stoixeia: '); for i:= 1 to 50 do readln(a[i]); k:=false;j:=0;i:=1; while (i <= 50) and (k = false) do begin if a[i] =x then begin j:= i; k:= true; end; i:= i+1; end; if k = true then writeln ('to stoixeio brethike ston pinaka sth thesi: ', j) else writeln ('to stoixeio de brethike ston pinaka') end. 26 2

Γραμμική αναζήτηση (linear search) 2/3 Γραμμική αναζήτηση σε πίνακα μη ταξινομημένο για τον οποίο δε γνωρίζουμε αν κάθε στοιχείο τον υπάρχει και άλλες φορές στον πίνακα Με αυτή τη μέθοδο εξετάζονται όλα τα στοιχεία τον πίνακα από το πρώτο μέχρι το τελευταίο σε αντίθεση με την προηγούμενη περίπτωση που ο έλεγχος τελείωνε μόλις βρίσκαμε το ζητούμενο στοιχείο Ομοίως με πριν και εδώ κατά την αναζήτηση του ζητούμενου στοιχείου μόλις βρεθεί κάποιο στοιχείο που έχει τη ζητούμενη τιμή το πρόγραμμα εμφανίζει τη Θέση τον στην οθόνη Ο έλεγχος όμως συνεχίζεται για την περίπτωση που υπάρχει η ίδια τιμή και σε άλλες θέσεις τον πίνακα οπότε αυτές εμφανίζονται. Το πρόγραμμα για την εύρεση ενός αριθμού που εισάγει ο χρήστης από έναν πίνακα πενήντα πραγματικών αριθμών είναι το εξής 27 2

Παράδειγμα 4 Το πρόγραμμα για την εύρεση ενός αριθμού που εισάγει ο χρήστης από έναν πίνακα πενήντα πραγματικών αριθμών είναι το εξής: 28 2

Λύση program anazitisi1(input,output); var a: array [ 1..50] of real; x: real; i,j: integer; k: boolean; begin writeln ('dwse to stoixeio pou thes na anazhthseis ' ); readln(x); writeln ('dwse 50 stoixeia: '); for i:= 1 to 50 do readln(a[i]); k:=false;j:=0;i:=1; while (i <= 50) and (k = false) do begin if a[i] =x then begin j:= i; k:= true; end; i:= i+1; end; if k = true then writeln ('to stoixeio brethike ston pinaka sth thesi: ', j) else writeln ('to stoixeio de brethike ston pinaka') end. 29 2

Γραμμική αναζήτηση (linear search) 3/3 Γραμμική αναζήτηση σε πίνακα με τα στοιχεία τον ταξινομημένα σε αύξουσα σειρά Σε αυτήν την περίπτωση ξεκινώντας από το στοιχείο στην πρώτη θέση ελέγχουμε αν κάποιο από τα στοιχεία τον πίνακα συμπίπτει με το στοιχείο που αναζητάμε Όμως εδώ ο έλεγχος σταματά μόλις βρεθεί στοιχείο με τιμή μεγαλύτερη από την τιμή αναζήτησης. Αν η τιμή ενός στοιχείου κατά τη διάρκεια της αναζήτησης είναι ίση με την τιμή αναζήτησης τότε στην οθόνη εμφανίζεται η θέση τον και εξετάζεται το επόμενο στοιχείο τον πίνακα Αν αυτό είναι μεγαλύτερο τότε η αναζήτηση τελειώνει. Αν η ζητούμενη τιμή δεν υπάρχει στον πίνακα, τότε πάλι η αναζήτηση θα τελειώσει μόλις βρεθεί το αμέσως μεγαλύτερο στοιχείο τον πίνακα από το ζητούμενο και στην οθόνη θα εμφανιστεί αντίστοιχο μήνυμα. 30 3

Παράδειγμα 5 Το πρόγραμμα για την αναζήτηση ενός πραγματικού αριθμού από έναν πίνακα πενήντα στοιχείων είναι το εξής: 31 3

Λύση program anazitisi3(input,output); var a: array [ 1..50] of real; x: real; i,j: integer; k: boolean; begin writeln ('dwse to stoixeio pou thes na exetaseis ' ); readln(x); writeln ('dwse 50 stoixeia: '); for i:= 1 to 50 do begin write('a[',i,']='); readln(a[i]); end; k:=false;j:=0;i:=1; while (i<=100) and (x<=a[i]) do begin if a[i]=x then begin j:=i; k:=true; writeln(' H thesi toy stoixeioy ston pinaka einai: ', j); end; i:=i+1; end; if k=false then writeln(' To stoixeio de brethike ') end. 32 3

Δυαδική αναζήτηση (binary search) 1/2 Η δυαδική αναζήτηση είναι μία μέθοδος αναζήτησης ενός στοιχείου σε ένα πίνακα, η οποία εφαρμόζεται μόνο στην περίπτωση που τα στοιχεία ενός πίνακα είναι ταξινομημένα σε αύξουσα σειρά Σύμφωνα με τη μέθοδο δυαδικής αναζήτησης αποκλείουμε διαδοχικά ολόκληρα τμήματα του πίνακα στα οποία δε γίνεται κάθε φορά να βρίσκεται το ζητούμενο στοιχείο Σε αντίθεση με τη γραμμική αναζήτηση εδώ αρχικά εξετάζουμε το μεσαίο στοιχείο του πίνακα. 33 3

Δυαδική αναζήτηση (binary search) 2/2 Επειδή ο πίνακας είναι ταξινομημένος κατ' αύξουσα σειρά, αν το ζητούμενο στοιχείο είναι μεγαλύτερο από το μεσαίο, μπορούμε μπορούμε με βεβαιότητα να αποκλείσουμε την περίπτωση να βρίσκεται στο πρώτο μισό τμήμα του πίνακα, ενώ αν είναι μικρότερο από το μεσαίο μπορούμε ομοίως να αποκλείσουμε την περίπτωση να βρίσκεται στο δεύτερο μισό του πίνακα Συγκεκριμένα, εδώ εξετάζουμε το μεσαίο στοιχείο αυτού του τμήματος και ελέγχουμε ομοίως με πριν αν το ζητούμενο στοιχείο είναι μικρότερο ή μεγαλύτερο από το μεσαίο περιορίζοντας πάλι το τμήμα του πίνακα που ελέγχουμε στο μισό Αυτή η διαδικασία συνεχίζεται μέχρι να εντοπίσουμε το ζητούμενο στοιχείο ή μέχρι να αποκλείσουμε ολόκληρο τον πίνακα 34 3

3 Βιβλιογραφία Βλαχάβας Ι. (1994). Η γλώσσα προγραμματισμού Pascal. Εκδόσεις Γαρταγάνης Διονύσιος. Κάβουρας Ι.Κ. (1999). Δομημένος Προγραμματισμός με Pascal. Εκδόσεις Κλειδάριθμος. Αλεβίζου Θ., & Καμπουρέλης Α. (1995). Μαθήματα Προγραμματισμού: Εισαγωγη με τη Γλώσσα Pascal. Εκδόσεις Παπασωτηρίου. Cooper D. (1993). Oh! Pascal!, An Introduction to Computing, του. Εκδόσεις Norton. Larry R.N. (1998). Advanced Programming in Pascal with Data Structures. Εκδόσεις Macmillan USA. Τσελίκης Γ.Σ., Τσελίκας Ν.Δ. (2012). C: από τη Θεωρία στην Εφαρμογή (B' Έκδοση). Εκδόσεις Παπασωτηρίου. Aho A.V., Hopcroft J.E., & Ullman J.D. (1974). The design and analysis of computer algorithms. Εκδόσεις Addison Wesley. Abelson Η., Sussman G.J., Sussman J. (1985). Structure and Interpretation of Computer Programs, MIT Press, McGraw Hill Book Company.

3 36 Σημείωμα Αναφοράς Copyright Τεχνολογικό Ίδρυμα Ηπείρου. Αλέξανδρος Τζάλλας. Προγραμματισμός Ι. Έκδοση: 1.0 Άρτα, 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: http://eclass.teiep.gr/openclass/courses/comp111/

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού-Μη Εμπορική Χρήση-Όχι Παράγωγα Έργα 4.0 Διεθνές [1] ή μεταγενέστερη. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, Διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. [1] http://creativecommons.org/licenses/by-nc-nd/4.0/deed.el 3

3 Τέλος Ενότητας Επεξεργασία: Ευάγγελος Καρβούνης Άρτα, 2015

3 Τέλος Ενότητας Πίνακες ΙΙ