SlideShare a Scribd company logo
3
Most read
4
Most read
6
Most read
Αλγόριθµοι σε C
Μάθηµα 2:
Αναζήτηση Στοιχείου σε Πίνακα
∆ηµήτρης Ψούνης
Περιεχόµενα Μαθήµατος
Α. Θεωρία
1. Αναζήτηση Στοιχείου σε Πίνακα
1. Ορισµός του Προβλήµατος
2. Σειριακή Αναζήτηση
3. ∆υαδική Αναζήτηση
1. Με Επανάληψη
2. Με Αναδροµή
Β. Ασκήσεις
2∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
Σηµείωση: Το µάθηµα αυτό απαιτεί να έχουν µελετηθεί τα αντίστοιχα µαθήµατα 1..10 της
γλώσσας προγραµµατισµού C.
A. Θεωρία
1. Αναζήτηση Στοιχείου σε Πίνακα
1. Ορισµός του Προβλήµατος
3∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
Η «Αναζήτηση σε Πίνακα» είναι το υπολογιστικό πρόβληµα στο οποίο:
• Είσοδος: Ένας Πίνακας Στοιχείων PIN και ένα στοιχείο x
• Έξοδος: ΝΑΙ/ΌΧΙ ανάλογα µε το αν το x υπάρχει στον πίνακα
Μελετούµε δύο αλγόριθµους:
Την σειριακή αναζήτηση που δουλεύει είτε αν ο πίνακας είναι ταξινοµηµένος είτε όχι
Ιδέα: Ψάξε τον πίνακα από αριστερά προς τα δεξιά για το στοιχείο
Την δυαδική αναζήτηση που δουλεύει µόνο σε ταξινοµηµένους πίνακες
Ιδέα: Κοιτά το µεσαίο στοιχείο του πίνακα. Αν είναι µεγαλύτερο από το στοιχείο που
ψάχνεις, επανέλαβε στο αριστερό κοµµάτι του πίνακα. Αν είναι µικρότερο από το
στοιχείο που ψάχνεις, επανέλαβε στο δεξί κοµµάτι του πίνακα.
A. Θεωρία
2. Σειριακή Αναζήτηση
∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
4
Ο κώδικας κάνει µία διαπέραση του πίνακα συγκρίνοντας το τρέχον στοιχείο µε το προς
αναζήτηση στοιχείο. Εφόσον το βρει ενηµερώνει την κατάλληλη µεταβλητή και τερµατίζει.
found=0;
for (i=0; i<N; i++)
{
if (x==PIN[i])
{
found=1;
break;
}
}
Άσκηση 1: «Τρέξτε» ένα παράδειγµα εκτέλεσης µε το χέρι, αν
PIN=[6,4,2,7,3] , x=7.
Άσκηση 2: Αφού µελετήσετε το πρόγραµµα linear_search.c κατασκευάσετε συνάρτηση που
παίρνει ως όρισµα έναν πίνακα ακεραίων και ένα στοιχείο x και επιστρέφει 0/1 ανάλογα µε το αν το
στοιχείο υπάρχει στον πίνακα.
Α. Θεωρία
3. ∆υαδική Αναζήτηση
1. Με Επανάληψη
5∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
Η ∆υαδική Αναζήτηση (Binary Search) είναι ένας από τους κλασικότερους αλγόριθµους στην
Πληροφορική.
Έχει µία σηµαντική προϋπόθεση: Ότι ο πίνακας είναι ήδη ταξινοµηµένος!
Το σκεπτικό της ∆υαδικής Αναζήτησης του στοιχείου x σε έναν ταξινοµηµένο σε αύξουσα σειρά
πίνακα:
Αν το µεσαίο στοιχείο είναι το x, το στοιχείο βρέθηκε!
Αν το x είναι µικρότερο από το µεσαίο στοιχείο τότε ψάχνουµε στο κοµµάτι του πίνακα από
την αρχή µέχρι το µεσαίο στοιχείο
Αν το x είναι µεγαλύτερο από το µεσαίο στοιχείο τότε ψάχνουµε στο κοµµάτι του πίνακα
από το µεσαίο στοιχείο µέχρι το τέλος
Το σώµα του αλγορίθµου φαίνεται στον ακόλουθο κώδικα (o πίνακας έχει δηλωθεί ως int
pinakas[N] και οι µεταβλητές start,finish, middle είναι ακέραιες µεταβλητές):
Α. Θεωρία
3. ∆υαδική Αναζήτηση
1. Με Επανάληψη
6∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
start=0;
finish=N-1;
found=FALSE;
while(start<=finish)
{
middle=(start+finish)/2;
if (x==pinakas[middle])
{
found=TRUE;
break;
}
else if (x<pinakas[middle])
finish=middle-1;
else // x>pinakas[middle]
start=middle+1;
}
Α. Θεωρία
3. ∆υαδική Αναζήτηση
1. Με Επανάληψη
7∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
Εκτελούµε τον αλγόριθµο ψάχνοντας το στοιχείο 11 στον πίνακα:
1η επανάληψη: start=0,finish=14: middle=(0+14) div 2=7. x<A[middle]
2η επανάληψη: start=0,finish=6: middle=(0+6) div 2=3. x>A[middle]
3η επανάληψη: start=4,finish=6: middle=(4+6) div 2=5. x<A[middle]
4η επανάληψη: start=4,finish=4: middle=(4+6) div 2=5. x==A[middle]
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 3 5 7 11 13 17 21 23 27 31 33 37 41 43
start
start
start
start=finish
finish
finish
finish
Α. Θεωρία
3. ∆υαδική Αναζήτηση
1. Με Επανάληψη
8∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
Άσκηση: Αφού µελετήσετε το πρόγραµµα binary_search.c κατασκευάσετε συνάρτηση που παίρνει
ως όρισµα έναν πίνακα ακεραίων και ένα στοιχείο x και επιστρέφει 0/1 ανάλογα µε το αν το στοιχείο
υπάρχει στον πίνακα.
Η ουσία του αλγορίθµου (κάνε την ίδια διαδικασία σε έναν µικρότερο πίνακα) καθοδηγεί και στο
σκεπτικό της αναδροµής
Θα δούµε εδώ για λόγους πληρότητας και την αναδροµική εκδοχή του αλγορίθµου. Το σκεπτικό
είναι το ίδιο, αλλά αντί για επανάληψη κάνουµε αναδροµή.
Α. Θεωρία
3. ∆υαδική Αναζήτηση
2. Με Αναδροµή
9∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
Σηµείωση:
• Κάθε αναδροµικός αλγόριθµος µπορεί να υλοποιηθεί και µε επανάληψη. Σε γενικές γραµµές
µάλιστα η επανάληψη είναι πιο γρήγορη από την αναδροµή.
• Ωστόσο αν κάποιος κατανοεί το σκεπτικό του σχεδιασµού αναδροµικών αλγορίθµων, τότε έχει
ως εργαλείο το σκεπτικό αυτό για την κατασκευή αλγορίθµων.
• Σε γενικές γραµµές στα µαθήµατα αυτά θα βλέπουµε (και θα προτιµούµε) επαναληπτικές
εκδοχές των αλγορίθµων
Το σώµα του αλγορίθµου φαίνεται στον ακόλουθο κώδικα (o πίνακας έχει δηλωθεί ως int
pinakas[N] και οι µεταβλητές start,finish, middle είναι ακέραιες µεταβλητές):
Α. Θεωρία
3. ∆υαδική Αναζήτηση
2. Με Αναδροµή
10∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
int binary_search_rec(int *pinakas, int start, int finish, int x)
{
int middle;
if (start>finish)
return FALSE;
else
{
middle=(start+finish)/2;
if (x==pinakas[middle])
return TRUE;
else if (x<pinakas[middle])
return binary_search_rec(pinakas,start,middle-1,x);
else
return binary_search_rec(pinakas,middle+1,finish,x);
}
}
Β. Ασκήσεις
Εφαρµογή 1: Επιστροφή της θέσης στη LinearSearch
∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
11
Γράψτε µία συνάρτηση στην γλώσσα C η οποία τροποποιεί την γραµµική αναζήτηση ως εξής:
Αντί να επιστρέφεται 0/1 ανάλογα µε το αν το στοιχείο υπάρχει στον πίνακα, να επιστρέφει
-1 αν το στοιχείο δεν υπάρχει στον πίνακα
Την θέση του στοιχείου, αν το στοιχείο υπάρχει στον πίνακα
Γράψτε µία συνάρτηση main η οποία να αναδεικνύει την συνάρτηση αυτή (να εκτυπώνει
κατάλληλο µήνυµα µε την θέση του στοιχείου στον πίνακα)
Β. Ασκήσεις
Εφαρµογή 2: Επιστροφή της θέσης στη BinarySearch
∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
12
Γράψτε µία συνάρτηση στην γλώσσα C η οποία τροποποιεί την δυαδική αναζήτηση ως εξής:
Επιστρέφει 0/1 ανάλογα µε το αν το στοιχείο υπάρχει στον πίνακα
Μέσω αναφοράς σε µία νέα µεταβλητή επιστρέφει:
-1 αν το στοιχείο δεν υπάρχει στον πίνακα
Την θέση του στοιχείου, αν το στοιχείο υπάρχει στον πίνακα
Γράψτε µία συνάρτηση main η οποία να αναδεικνύει την συνάρτηση αυτή (να εκτυπώνει αν
βρέθηκε και την θέση του στοιχείου στον πίνακα)
Β. Ασκήσεις
Εφαρµογή 3: ∆υαδική Αναζήτηση µε Φθίνουσα Σειρά
∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
13
Γράψτε µία συνάρτηση - παραλλαγη της δυαδικής αναζήτησης (χρησιµοποιήστε την
επαναληπτική εκδοχή) η οποία να δουλεύει για πίνακα ο οποίο είναι ταξινοµηµένος σε
φθίνουσα σειρά
Β. Ασκήσεις
Εφαρµογή 4: Πλήθος Επαναλήψεων των Αλγορίθµων Αναζήτησης
∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα
14
Γενικά αξιολογούµε έναν αλγόριθµο µετρώντας πόσο γρήγορος είναι. Αν και υπάρχουν
κατάλληλα θεωρητικά µοντέλα (υπολογιστική πολυπλοκότητα αλγορίθµου κ.α.) θα
προσεγγίσουµε µία σύγκριση των δύο αλγορίθµων αναζήτησης ως εξής:
Κατασκευάστε µια παραλλαγή της σειριακής αναζήτησης που θα µετρά το πλήθος των
επαναλήψεων (πόσες φορές τρέχει το for).
Κατασκευάστε µια παραλλαγή της δυαδικής αναζήτησης που θα µετρά το πλήθος των
επαναλήψεων (πόσες φορές τρέχει το while).
Συγκρίνετε το πλήθος των επαναλήψεων και αναδείξτε τον νικητή (ο αλγόριθµος που
έκανε τις λιγότερες επαναλήψεις)

More Related Content

PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3
PDF
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
PDF
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
PDF
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6

What's hot (20)

PDF
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3
PDF
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18
PDF
ΠΛΗ10 ΜΑΘΗΜΑ 2.8
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4
PDF
Η Γλώσσα C - Μάθημα 3
PDF
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
PDF
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
PDF
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
PDF
ΠΛΗ30 ΜΑΘΗΜΑ 2.3
PDF
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
PDF
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑ
PDF
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
PDF
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
PDF
Η Γλώσσα C - Μάθημα 1
PDF
Η Γλώσσα C - Μάθημα 2
PDF
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
PDF
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
PDF
ΠΛΗ30 ΜΑΘΗΜΑ 1.2
PDF
ΠΛΗ10 ΜΑΘΗΜΑ 2.5
PDF
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18
ΠΛΗ10 ΜΑΘΗΜΑ 2.8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4
Η Γλώσσα C - Μάθημα 3
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
ΠΛΗ30 ΜΑΘΗΜΑ 2.3
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
Η Γλώσσα C - Μάθημα 1
Η Γλώσσα C - Μάθημα 2
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
ΠΛΗ30 ΜΑΘΗΜΑ 1.2
ΠΛΗ10 ΜΑΘΗΜΑ 2.5
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
Ad

Similar to ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ (20)

PDF
Παιγνίδια με Πίνακες και Δείκτες
PPT
Εισαγωγή στις αρχές της επιστήμης των ΗΥ Κεφ 2 2 8
PDF
επαλ python presentation - programming princinples
PPT
Κεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
PPT
Κεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
PDF
ΠΛΗ10 ΤΕΣΤ 23
PDF
ΠΛΗ31 ΜΑΘΗΜΑ 1.2
DOC
Διαγώνισμα Δομές Δεδομένων 1
PDF
ΠΛΗ10 ΤΕΣΤ 31
PDF
ΑΕΠΠ: 19ο Φύλλο Ασκήσεων
PDF
Kef10 b diadikasies
PDF
askiseis_xristougennon_gia_Pliroforiki_2025
PDF
ΑΕΠΠ: 18ο Φύλλο Ασκήσεων
PPT
Python Κεφ. 1.4 Δομή Επανάληψης
DOC
διαγωνισμα δομεσ δεδομενων πινακεσ
PDF
ΠΛΗ10 ΤΕΣΤ 22
PDF
ΠΛΗ10 ΤΕΣΤ 36
PDF
ΠΛΗ10 ΜΑΘΗΜΑ 2.7
PDF
ΠΛΗ10 ΤΕΣΤ 25
Παιγνίδια με Πίνακες και Δείκτες
Εισαγωγή στις αρχές της επιστήμης των ΗΥ Κεφ 2 2 8
επαλ python presentation - programming princinples
Κεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
Κεφ. 3 Δομές Δεδομένων και Αλγόριθμοι
ΠΛΗ10 ΤΕΣΤ 23
ΠΛΗ31 ΜΑΘΗΜΑ 1.2
Διαγώνισμα Δομές Δεδομένων 1
ΠΛΗ10 ΤΕΣΤ 31
ΑΕΠΠ: 19ο Φύλλο Ασκήσεων
Kef10 b diadikasies
askiseis_xristougennon_gia_Pliroforiki_2025
ΑΕΠΠ: 18ο Φύλλο Ασκήσεων
Python Κεφ. 1.4 Δομή Επανάληψης
διαγωνισμα δομεσ δεδομενων πινακεσ
ΠΛΗ10 ΤΕΣΤ 22
ΠΛΗ10 ΤΕΣΤ 36
ΠΛΗ10 ΜΑΘΗΜΑ 2.7
ΠΛΗ10 ΤΕΣΤ 25
Ad

More from Dimitris Psounis (20)

PDF
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ
PDF
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
PDF
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
PDF
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ
PDF
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ
PDF
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
PDF
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
PDF
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
PDF
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
PDF
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
PDF
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
PDF
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
PDF
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
PDF
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
PDF
ΠΛΗ31 - ΤΕΣΤ 33
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
PDF
ΠΛΗ31 ΤΕΣΤ 32
PDF
ΠΛΗ31 ΤΕΣΤ 31
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ31 - ΤΕΣΤ 33
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ31 ΤΕΣΤ 32
ΠΛΗ31 ΤΕΣΤ 31

Recently uploaded (8)

PPTX
A digital marketing strategy presentation for Evangelos Venizelos
PPTX
Γρηγοριάδου Ανθή Μαρία, Τα Ψηλά Βουνά του Ζαχαρία Παπαντωνίου.pptx
PPTX
Γερμανίδου Φωτεινή, Το πτώμα στη βιβλιοθήκη.pptx
PPTX
Δούλια Θάλεια, Καρδιά Πάνω σε Ρόδες -Άντρη Αντωνίου- τελική Βιβλιοπαρουσίαση....
PPTX
Χειραφέτιση και Αναμόρφωση 4. Η Εθνοσυνέλευση του 1862-1864
PPTX
A digital marketing strategy presentation for Evangelos Venizelos
PPTX
Δριστά Κυριακή, Το καπλάνι της βιτρίνας της Άλκης Ζέη.pptx
PPTX
Γερμανίδου Δήμ., Αγκαθα Κρίστι.ΕΓΚΛΗΜΑ ΣΤΟΝ ΝΕΙΛΟ_pptx4.pptx
A digital marketing strategy presentation for Evangelos Venizelos
Γρηγοριάδου Ανθή Μαρία, Τα Ψηλά Βουνά του Ζαχαρία Παπαντωνίου.pptx
Γερμανίδου Φωτεινή, Το πτώμα στη βιβλιοθήκη.pptx
Δούλια Θάλεια, Καρδιά Πάνω σε Ρόδες -Άντρη Αντωνίου- τελική Βιβλιοπαρουσίαση....
Χειραφέτιση και Αναμόρφωση 4. Η Εθνοσυνέλευση του 1862-1864
A digital marketing strategy presentation for Evangelos Venizelos
Δριστά Κυριακή, Το καπλάνι της βιτρίνας της Άλκης Ζέη.pptx
Γερμανίδου Δήμ., Αγκαθα Κρίστι.ΕΓΚΛΗΜΑ ΣΤΟΝ ΝΕΙΛΟ_pptx4.pptx

ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ

  • 1. Αλγόριθµοι σε C Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα ∆ηµήτρης Ψούνης
  • 2. Περιεχόµενα Μαθήµατος Α. Θεωρία 1. Αναζήτηση Στοιχείου σε Πίνακα 1. Ορισµός του Προβλήµατος 2. Σειριακή Αναζήτηση 3. ∆υαδική Αναζήτηση 1. Με Επανάληψη 2. Με Αναδροµή Β. Ασκήσεις 2∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα Σηµείωση: Το µάθηµα αυτό απαιτεί να έχουν µελετηθεί τα αντίστοιχα µαθήµατα 1..10 της γλώσσας προγραµµατισµού C.
  • 3. A. Θεωρία 1. Αναζήτηση Στοιχείου σε Πίνακα 1. Ορισµός του Προβλήµατος 3∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα Η «Αναζήτηση σε Πίνακα» είναι το υπολογιστικό πρόβληµα στο οποίο: • Είσοδος: Ένας Πίνακας Στοιχείων PIN και ένα στοιχείο x • Έξοδος: ΝΑΙ/ΌΧΙ ανάλογα µε το αν το x υπάρχει στον πίνακα Μελετούµε δύο αλγόριθµους: Την σειριακή αναζήτηση που δουλεύει είτε αν ο πίνακας είναι ταξινοµηµένος είτε όχι Ιδέα: Ψάξε τον πίνακα από αριστερά προς τα δεξιά για το στοιχείο Την δυαδική αναζήτηση που δουλεύει µόνο σε ταξινοµηµένους πίνακες Ιδέα: Κοιτά το µεσαίο στοιχείο του πίνακα. Αν είναι µεγαλύτερο από το στοιχείο που ψάχνεις, επανέλαβε στο αριστερό κοµµάτι του πίνακα. Αν είναι µικρότερο από το στοιχείο που ψάχνεις, επανέλαβε στο δεξί κοµµάτι του πίνακα.
  • 4. A. Θεωρία 2. Σειριακή Αναζήτηση ∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα 4 Ο κώδικας κάνει µία διαπέραση του πίνακα συγκρίνοντας το τρέχον στοιχείο µε το προς αναζήτηση στοιχείο. Εφόσον το βρει ενηµερώνει την κατάλληλη µεταβλητή και τερµατίζει. found=0; for (i=0; i<N; i++) { if (x==PIN[i]) { found=1; break; } } Άσκηση 1: «Τρέξτε» ένα παράδειγµα εκτέλεσης µε το χέρι, αν PIN=[6,4,2,7,3] , x=7. Άσκηση 2: Αφού µελετήσετε το πρόγραµµα linear_search.c κατασκευάσετε συνάρτηση που παίρνει ως όρισµα έναν πίνακα ακεραίων και ένα στοιχείο x και επιστρέφει 0/1 ανάλογα µε το αν το στοιχείο υπάρχει στον πίνακα.
  • 5. Α. Θεωρία 3. ∆υαδική Αναζήτηση 1. Με Επανάληψη 5∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα Η ∆υαδική Αναζήτηση (Binary Search) είναι ένας από τους κλασικότερους αλγόριθµους στην Πληροφορική. Έχει µία σηµαντική προϋπόθεση: Ότι ο πίνακας είναι ήδη ταξινοµηµένος! Το σκεπτικό της ∆υαδικής Αναζήτησης του στοιχείου x σε έναν ταξινοµηµένο σε αύξουσα σειρά πίνακα: Αν το µεσαίο στοιχείο είναι το x, το στοιχείο βρέθηκε! Αν το x είναι µικρότερο από το µεσαίο στοιχείο τότε ψάχνουµε στο κοµµάτι του πίνακα από την αρχή µέχρι το µεσαίο στοιχείο Αν το x είναι µεγαλύτερο από το µεσαίο στοιχείο τότε ψάχνουµε στο κοµµάτι του πίνακα από το µεσαίο στοιχείο µέχρι το τέλος
  • 6. Το σώµα του αλγορίθµου φαίνεται στον ακόλουθο κώδικα (o πίνακας έχει δηλωθεί ως int pinakas[N] και οι µεταβλητές start,finish, middle είναι ακέραιες µεταβλητές): Α. Θεωρία 3. ∆υαδική Αναζήτηση 1. Με Επανάληψη 6∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα start=0; finish=N-1; found=FALSE; while(start<=finish) { middle=(start+finish)/2; if (x==pinakas[middle]) { found=TRUE; break; } else if (x<pinakas[middle]) finish=middle-1; else // x>pinakas[middle] start=middle+1; }
  • 7. Α. Θεωρία 3. ∆υαδική Αναζήτηση 1. Με Επανάληψη 7∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα Εκτελούµε τον αλγόριθµο ψάχνοντας το στοιχείο 11 στον πίνακα: 1η επανάληψη: start=0,finish=14: middle=(0+14) div 2=7. x<A[middle] 2η επανάληψη: start=0,finish=6: middle=(0+6) div 2=3. x>A[middle] 3η επανάληψη: start=4,finish=6: middle=(4+6) div 2=5. x<A[middle] 4η επανάληψη: start=4,finish=4: middle=(4+6) div 2=5. x==A[middle] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 3 5 7 11 13 17 21 23 27 31 33 37 41 43 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 3 5 7 11 13 17 21 23 27 31 33 37 41 43 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 3 5 7 11 13 17 21 23 27 31 33 37 41 43 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 3 5 7 11 13 17 21 23 27 31 33 37 41 43 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 3 5 7 11 13 17 21 23 27 31 33 37 41 43 start start start start=finish finish finish finish
  • 8. Α. Θεωρία 3. ∆υαδική Αναζήτηση 1. Με Επανάληψη 8∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα Άσκηση: Αφού µελετήσετε το πρόγραµµα binary_search.c κατασκευάσετε συνάρτηση που παίρνει ως όρισµα έναν πίνακα ακεραίων και ένα στοιχείο x και επιστρέφει 0/1 ανάλογα µε το αν το στοιχείο υπάρχει στον πίνακα.
  • 9. Η ουσία του αλγορίθµου (κάνε την ίδια διαδικασία σε έναν µικρότερο πίνακα) καθοδηγεί και στο σκεπτικό της αναδροµής Θα δούµε εδώ για λόγους πληρότητας και την αναδροµική εκδοχή του αλγορίθµου. Το σκεπτικό είναι το ίδιο, αλλά αντί για επανάληψη κάνουµε αναδροµή. Α. Θεωρία 3. ∆υαδική Αναζήτηση 2. Με Αναδροµή 9∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα Σηµείωση: • Κάθε αναδροµικός αλγόριθµος µπορεί να υλοποιηθεί και µε επανάληψη. Σε γενικές γραµµές µάλιστα η επανάληψη είναι πιο γρήγορη από την αναδροµή. • Ωστόσο αν κάποιος κατανοεί το σκεπτικό του σχεδιασµού αναδροµικών αλγορίθµων, τότε έχει ως εργαλείο το σκεπτικό αυτό για την κατασκευή αλγορίθµων. • Σε γενικές γραµµές στα µαθήµατα αυτά θα βλέπουµε (και θα προτιµούµε) επαναληπτικές εκδοχές των αλγορίθµων
  • 10. Το σώµα του αλγορίθµου φαίνεται στον ακόλουθο κώδικα (o πίνακας έχει δηλωθεί ως int pinakas[N] και οι µεταβλητές start,finish, middle είναι ακέραιες µεταβλητές): Α. Θεωρία 3. ∆υαδική Αναζήτηση 2. Με Αναδροµή 10∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα int binary_search_rec(int *pinakas, int start, int finish, int x) { int middle; if (start>finish) return FALSE; else { middle=(start+finish)/2; if (x==pinakas[middle]) return TRUE; else if (x<pinakas[middle]) return binary_search_rec(pinakas,start,middle-1,x); else return binary_search_rec(pinakas,middle+1,finish,x); } }
  • 11. Β. Ασκήσεις Εφαρµογή 1: Επιστροφή της θέσης στη LinearSearch ∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα 11 Γράψτε µία συνάρτηση στην γλώσσα C η οποία τροποποιεί την γραµµική αναζήτηση ως εξής: Αντί να επιστρέφεται 0/1 ανάλογα µε το αν το στοιχείο υπάρχει στον πίνακα, να επιστρέφει -1 αν το στοιχείο δεν υπάρχει στον πίνακα Την θέση του στοιχείου, αν το στοιχείο υπάρχει στον πίνακα Γράψτε µία συνάρτηση main η οποία να αναδεικνύει την συνάρτηση αυτή (να εκτυπώνει κατάλληλο µήνυµα µε την θέση του στοιχείου στον πίνακα)
  • 12. Β. Ασκήσεις Εφαρµογή 2: Επιστροφή της θέσης στη BinarySearch ∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα 12 Γράψτε µία συνάρτηση στην γλώσσα C η οποία τροποποιεί την δυαδική αναζήτηση ως εξής: Επιστρέφει 0/1 ανάλογα µε το αν το στοιχείο υπάρχει στον πίνακα Μέσω αναφοράς σε µία νέα µεταβλητή επιστρέφει: -1 αν το στοιχείο δεν υπάρχει στον πίνακα Την θέση του στοιχείου, αν το στοιχείο υπάρχει στον πίνακα Γράψτε µία συνάρτηση main η οποία να αναδεικνύει την συνάρτηση αυτή (να εκτυπώνει αν βρέθηκε και την θέση του στοιχείου στον πίνακα)
  • 13. Β. Ασκήσεις Εφαρµογή 3: ∆υαδική Αναζήτηση µε Φθίνουσα Σειρά ∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα 13 Γράψτε µία συνάρτηση - παραλλαγη της δυαδικής αναζήτησης (χρησιµοποιήστε την επαναληπτική εκδοχή) η οποία να δουλεύει για πίνακα ο οποίο είναι ταξινοµηµένος σε φθίνουσα σειρά
  • 14. Β. Ασκήσεις Εφαρµογή 4: Πλήθος Επαναλήψεων των Αλγορίθµων Αναζήτησης ∆ηµήτρης Ψούνης, Αλγόριθµοι σε C, Μάθηµα 2: Αναζήτηση Στοιχείου σε Πίνακα 14 Γενικά αξιολογούµε έναν αλγόριθµο µετρώντας πόσο γρήγορος είναι. Αν και υπάρχουν κατάλληλα θεωρητικά µοντέλα (υπολογιστική πολυπλοκότητα αλγορίθµου κ.α.) θα προσεγγίσουµε µία σύγκριση των δύο αλγορίθµων αναζήτησης ως εξής: Κατασκευάστε µια παραλλαγή της σειριακής αναζήτησης που θα µετρά το πλήθος των επαναλήψεων (πόσες φορές τρέχει το for). Κατασκευάστε µια παραλλαγή της δυαδικής αναζήτησης που θα µετρά το πλήθος των επαναλήψεων (πόσες φορές τρέχει το while). Συγκρίνετε το πλήθος των επαναλήψεων και αναδείξτε τον νικητή (ο αλγόριθµος που έκανε τις λιγότερες επαναλήψεις)