Αλγόριθμοι & Δομές Δεδομένων

transportdingdongΛογισμικό & κατασκευή λογ/κού

14 Ιουλ 2012 (πριν από 5 χρόνια και 4 μήνες)

725 εμφανίσεις

Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 1
Αλγόριθμοι
Αλγόριθμοι
&
&
Δομές
Δομές
Δεδομένων
Δεδομένων
Ιωάννης
Ιωάννης
Γαβιώτης
Γαβιώτης
Ζ΄
Ζ΄
εξάμηνο
εξάμηνο
Τμήμα
Τμήμα
Μηχανικών
Μηχανικών
Σχεδίασης
Σχεδίασης
Προϊόντων
Προϊόντων
&
&
Συστημάτων
Συστημάτων
1
1
Εισαγωγή
Εισαγωγή
3
3
Αλγόριθμος
Αλγόριθμος
Η
Η
ακριβής
ακριβής
περιγραφή
περιγραφή
μιας
μιας
αυστηρά
αυστηρά
καθορισμένης
καθορισμένης
σειράς
σειράς
ενεργειών
ενεργειών
(
(
βημάτων
βημάτων
)
)
για
για
τη
τη
λύση
λύση
ενός
ενός
προβλήματος
προβλήματος
.
.
Υπολογιστική
Υπολογιστική
συνταγή
συνταγή
:
:
ένας
ένας
γενικός
γενικός
τρόπος
τρόπος
να
να
κάνω
κάνω
κάτι
κάτι
,
,
που
που
είναι
είναι
τόσο
τόσο
συγκεκριμένος
συγκεκριμένος
ώστε
ώστε
οποιοσδήποτε
οποιοσδήποτε
(
(
συμπεριλαμβανομένων
συμπεριλαμβανομένων
και
και
των
των
υπολογιστών
υπολογιστών
)
)
μπορεί
μπορεί
να
να
τον
τον
ακολουθήσει
ακολουθήσει
.
.
4
4
Δομή
Δομή
Δεδομένων
Δεδομένων
Παράσταση
Παράσταση
γεγονότων
γεγονότων
,
,
εννοιών
εννοιών
ή
ή
εντολών
εντολών
σε
σε
τυποποιημένη
τυποποιημένη
μορφή
μορφή
που
που
είναι
είναι
κατάλληλη
κατάλληλη
για
για
επικοινωνία
επικοινωνία
,
,
ερμηνεία
ερμηνεία
ή
ή
επεξεργασία
επεξεργασία
από
από
τον
τον
άνθρωπο
άνθρωπο
ή
ή
από
από
αυτόματα
αυτόματα
μέσα
μέσα
.
.
ΤΕ
ΤΕ
48
48
-
-
ΕΛΟΤ
ΕΛΟΤ
Προγράμματα
Προγράμματα
=
=
Αλγόριθμοι
Αλγόριθμοι
+
+
Δομές
Δομές
Δεδομένων
Δεδομένων
Niklaus
Niklaus
Wirth
Wirth
Data structure
5
5
Τι
Τι
μας
μας
Ενδιαφέρει
Ενδιαφέρει
σε
σε
ένα
ένα
Πρόγραμμα
Πρόγραμμα
Είναι
Είναι
σωστό
σωστό
;
;
Είναι
Είναι
εύκολο
εύκολο
να
να
κατανοήσουμε
κατανοήσουμε
τον
τον
κώδικα
κώδικα
;
;
Είναι
Είναι
τεκμηριωμένο
τεκμηριωμένο
;
;
Είναι
Είναι
εύκολο
εύκολο
να
να
γίνουν
γίνουν
αλλαγές
αλλαγές
;
;
Πόση
Πόση
μνήμη
μνήμη
και
και
πόσο
πόσο
χρόνο
χρόνο
απαιτεί
απαιτεί
;
;
Πόσο
Πόσο
γενικός
γενικός
είναι
είναι
ο
ο
κώδικας
κώδικας
;
;


Λύνει
Λύνει
προβλήματα
προβλήματα
για
για
μεγάλο
μεγάλο
εύρος
εύρος
εισόδων
εισόδων
χωρίς
χωρίς
τροποποιήσεις
τροποποιήσεις
;
;
Πόσο
Πόσο
μεταφέρσιμος
μεταφέρσιμος
είναι
είναι
ο
ο
κώδικας
κώδικας
;
;


Μπορεί
Μπορεί
να
να
μεταγλωττιστεί
μεταγλωττιστεί
σε
σε
άλλους
άλλους
υπολογιστές
υπολογιστές
χωρίς
χωρίς
αλλαγές
αλλαγές
;
;
6
6
Χαρακτηριστικά
Χαρακτηριστικά
Αλγορίθμου
Αλγορίθμου
Μπορεί
Μπορεί
να
να
έχει
έχει
ή
ή
να
να
μην
μην
έχει
έχει
εισόδους
εισόδους
.
.
Έχει
Έχει
τουλάχιστον
τουλάχιστον
μια
μια
έξοδο
έξοδο
.
.
Κάθε
Κάθε
εντολή
εντολή
του
του
είναι
είναι
σαφής
σαφής
και
και
χωρίς
χωρίς
διφορούμενα
διφορούμενα
.
.
Σε
Σε
κάθε
κάθε
περίπτωση
περίπτωση
ο
ο
αλγόριθμος
αλγόριθμος
τερματίζει
τερματίζει
σε
σε
πεπερασμένο
πεπερασμένο
αριθμό
αριθμό
βημάτων
βημάτων
.
.
Κάθε
Κάθε
εντολή
εντολή
πρέπει
πρέπει
να
να
είναι
είναι
αρκετά
αρκετά
«
«
απλή
απλή
»
»
ή
ή
να
να
αναλύεται
αναλύεται
σε
σε
απλούστερες
απλούστερες
που
που
προδιαγραφούν
προδιαγραφούν
την
την
μέθοδο
μέθοδο
εκτέλεσής
εκτέλεσής
τους
τους
.
.
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 2
7
7
Μικρότερη
Μικρότερη
Διαδρομή
Διαδρομή
Φτιάξτε
Φτιάξτε
οικονομικά
οικονομικά
γέφυρες
γέφυρες
που
που
να
να
συνδέουν
συνδέουν
όλα
όλα
τα
τα
νησιά
νησιά
Υπάρχει
γρήγορη λύση
8
8
Περιπλανόμενος
Περιπλανόμενος
Πωλητής
Πωλητής
Φτιάξτε
Φτιάξτε
το
το
συντομότερο
συντομότερο
δρομολόγιο
δρομολόγιο
πλοίου
πλοίου
που
που
περνάει
περνάει
από
από
όλα
όλα
τα
τα
νησιά
νησιά
Δεν υπάρχει
γρήγορη λύση
Traveling salesman
9
9
Ντόμινο
Ντόμινο
στη
στη
Σκακιέρα
Σκακιέρα
Εύκολο!
Προσπαθήστε!
Αδύνατον!
10
10
Το
Το
Τέλος
Τέλος
του
του
Κόσμου
Κόσμου




θα
θα
έλθει
έλθει
όταν
όταν
οι
οι
βουδιστές
βουδιστές
μοναχοί
μοναχοί
μετακινήσουν
μετακινήσουν
τους
τους
64
64
δίσκους
δίσκους
σε
σε
άλλο
άλλο
πύργο
πύργο
M
M
ετακινούν
ετακινούν
1
1
δίσκο
δίσκο
το
το
δευτερόλεπτο
δευτερόλεπτο
2
64
δευτερόλεπτα, δηλ. 600.000.000 χιλιετίες
11
11
Οκτώ
Οκτώ
Βασίλισσες
Βασίλισσες
στη
στη
Σκακιέρα
Σκακιέρα
Τοποθετήστε
Τοποθετήστε
8
8
βασίλισσες
βασίλισσες
έτσι
έτσι
ώστε
ώστε
καμιά
καμιά
να
να
μην
μην
απειλεί
απειλεί
κάποια
κάποια
άλλη
άλλη
.
.
Δείτε στο
http://students.ceid.upatras.gr/~papagel/project/kef5_8.htm
92 λύσεις!
Οπισθοχώρηση
12
12
Παράσταση
Παράσταση
Αλγορίθμων
Αλγορίθμων
Διαγράμματα
Διαγράμματα
ροής
ροής
(
(
flow charts)
flow charts)
Ψευδο
Ψευδο
-
-
κώδικας
κώδικας
Απεικόνιση
Απεικόνιση
σε
σε
γλώσσα
γλώσσα
προγραμματισμού
προγραμματισμού
Α
Τ
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 3
13
13
Παράδειγμα
Παράδειγμα
Ψευδοκώδικα
Ψευδοκώδικα
function
function
ΤαξινόµησηΜεΕπιλογή
ΤαξινόµησηΜεΕπιλογή
for
for
i=1
i=1
to
to
n
n
βρες
βρες
το
το
ελάχιστο
ελάχιστο
στοιχείο
στοιχείο
ψάχνοντας
ψάχνοντας
στις
στις
θέσεις
θέσεις
i
i
έως
έως
n
n
αντάλλαξέ
αντάλλαξέ
το
το
µε
µε
το
το
στοιχείο
στοιχείο
στη
στη
θέση
θέση
i
i
end for
end for
i
i
end function
end function
3 εντολές
ανάθεσης
Πώς θα βρεις
το ελάχιστο;
Χρειάζεται να
περιγράψεις τη
μέθοδο.
14
14
Επεξεργασία
Επεξεργασία
Πληροφορίας
Πληροφορίας
Παλιότερα
Παλιότερα
οι
οι
υπολογιστές
υπολογιστές
χρησιμοποιούνταν
χρησιμοποιούνταν
ως
ως
γρήγορες
γρήγορες
αριθμομηχανές
αριθμομηχανές
.
.


Έμφαση
Έμφαση
σε
σε
αριθμητικές
αριθμητικές
πράξεις
πράξεις
Τρέχουσα
Τρέχουσα
χρήση
χρήση
:
:
επεξεργαστές
επεξεργαστές
πληροφορίας
πληροφορίας


Μεγάλη
Μεγάλη
ποσότητα
ποσότητα
δεδομένων
δεδομένων


Σημαντική
Σημαντική
η
η
οργάνωση
οργάνωση
των
των
δεδομένων
δεδομένων
15
15
Τοποθεσία
Τοποθεσία
Δεδομένων
Δεδομένων
Εξαρτάται
Εξαρτάται
:
:


από
από
την
την
ποσότητα
ποσότητα
των
των
δεδομένων
δεδομένων


Από
Από
άλλα
άλλα
χαρακτηριστικά
χαρακτηριστικά
,
,
πχ
πχ
μεταβλητότητα
μεταβλητότητα
Για
Για
κύρια
κύρια
μνήμη
μνήμη
,
,
πχ
πχ
RAM
RAM


Τυχαία
Τυχαία
προσπέλαση
προσπέλαση


Μικρό
Μικρό
μέγεθος
μέγεθος


υψηλή
υψηλή
ταχύτητα
ταχύτητα
Για
Για
δευτερεύουσα
δευτερεύουσα
μνήμη
μνήμη


Προσπέλαση
Προσπέλαση
εξαρτάται
εξαρτάται
από
από
μέσον
μέσον
αποθήκευσης
αποθήκευσης
,
,
πχ
πχ
σκληρός
σκληρός
δίσκος
δίσκος
,
,
ταινία
ταινία


Μεγάλο
Μεγάλο
μέγεθος
μέγεθος
Το
Το
ίδιο
ίδιο
πρόβλημα
πρόβλημα
μπορεί
μπορεί
να
να
απαιτεί
απαιτεί
διαφορετικούς
διαφορετικούς
αλγόριθμους
αλγόριθμους
όταν
όταν
αλλάζει
αλλάζει
το
το
μέγεθος
μέγεθος
των
των
δεδομένων
δεδομένων
(
(
και
και
άρα
άρα
η
η
τοποθεσία
τοποθεσία
τους
τους
).
).


Παράδειγμα
Παράδειγμα
:
:
ΤαξινόμησηΦυσαλίδων
ΤαξινόμησηΦυσαλίδων
έναντι
έναντι
ΤαξινόμησηςΜεΕπιλογή
ΤαξινόμησηςΜεΕπιλογή
16
16
Μελέτη
Μελέτη
Δεδομένων
Δεδομένων
Γλώσσα
Γλώσσα
προγραμματισμού
προγραμματισμού
που
που
θα
θα
«
«
ζήσουν
ζήσουν
»
»
τα
τα
δεδομένα
δεδομένα


Δήλωση
Δήλωση
και
και
αναπαράσταση
αναπαράσταση
δεδομένων
δεδομένων


Χειρισμός
Χειρισμός
και
και
λειτουργίες
λειτουργίες
Η
Η
σωστή
σωστή
επιλογή
επιλογή
δομής
δομής
δεδομένων
δεδομένων
βελτιώνει
βελτιώνει
κατά
κατά
πολύ
πολύ
τις
τις
επιδόσεις
επιδόσεις
του
του
προγράμματος
προγράμματος
.
.
17
17
Σχετικά
Σχετικά
με
με
το
το
Μάθημα
Μάθημα
Διδάσκοντες

Θεωρία: gaviotis@aegean.gr

Εργαστήριο: evlach@aegean.gr
Διαλέξεις

Τρίτη 16:00-19:00 @ Αμφιθέατρο
Εργαστήριο (υποχρεωτικό)

Τετάρτη 09:00-11:00 @ Εργαστήριο υπολογιστών
18
18
Προαπαιτούμενες
Προαπαιτούμενες
Γνώσεις
Γνώσεις
Γλώσσα
Γλώσσα
προγραμματισμού
προγραμματισμού
(
(
VB, C, Java)
VB, C, Java)


Μεταβλητές
Μεταβλητές
&
&
παραστάσεις
παραστάσεις


Μέθοδοι
Μέθοδοι
(
(
συναρτήσεις
συναρτήσεις
/
/
διαδικασίες
διαδικασίες
)
)


Δομές
Δομές
ελέγχου
ελέγχου
(
(
if
if
,
,
switch
switch
)
)


Επανάληψη
Επανάληψη
(
(
for
for
,
,
while
while
)
)


Τεκμηρίωση
Τεκμηρίωση
,
,
αποσφαλμάτωση
αποσφαλμάτωση
,
,
κλάσεις
κλάσεις
/
/
αντικείμενα
αντικείμενα
Θα
Θα
γίνει
γίνει
επανάληψη
επανάληψη
στο
στο
εργαστήριο
εργαστήριο
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 4
19
19
Τι
Τι
θα
θα
Μάθουμε
Μάθουμε
Μια
Μια
μικρή
μικρή
,
,
αλλά
αλλά
ενδεικτική
ενδεικτική
γκάμα
γκάμα
υπολογιστικών
υπολογιστικών
λύσεων
λύσεων


Προφανείς
Προφανείς
,
,
κομψές
κομψές
,
,
«
«
έξυπνες
έξυπνες
»
»
Τεχνικές
Τεχνικές
για
για
να
να
σχεδιάζουμε
σχεδιάζουμε
δικές
δικές
μας
μας
λύσεις
λύσεις
σε
σε
προβλήματα
προβλήματα


Διαίρει
Διαίρει
και
και
βασίλευε
βασίλευε
(divide & conquer)
(divide & conquer)


Ωμή
Ωμή
βία
βία
(
(
brute force)
brute force)


Οπισθοχώρηση
Οπισθοχώρηση
(
(
backtracking)
backtracking)
20
20
Τι
Τι
Άλλο
Άλλο
Θα
Θα
Μάθουμε
Μάθουμε
Να
Να
εκτιμούμε
εκτιμούμε
την
την
απόδοση
απόδοση
των
των
αλγορίθμων
αλγορίθμων


Ταχύτητα
Ταχύτητα
,
,
απαιτήσεις
απαιτήσεις
μνήμης
μνήμης


Υπάρχει
Υπάρχει
πιο
πιο
καλή
καλή
λύση
λύση
στο
στο
ίδιο
ίδιο
πρόβλημα
πρόβλημα


μήπως
μήπως
αν
αν
«
«
πειράξω
πειράξω
»
»
λίγο
λίγο
το
το
πρόβλημα
πρόβλημα
Οργανώσεις
Οργανώσεις
δεδομένων
δεδομένων
που
που
«
«
διευκολύνουν
διευκολύνουν
»
»
τη
τη
λύση
λύση
προβλημάτων
προβλημάτων
Στόχος
Στόχος
:
:
να
να
δούμε
δούμε
πολλά
πολλά
προβλήματα
προβλήματα
και
και
πολλές
πολλές
λύσεις
λύσεις
τους
τους
21
21
Ποιος
Ποιος
Κάνει
Κάνει
Τι
Τι
Υπολογιστής
Υπολογιστής
Φοιτητής
Φοιτητής
Σενάριο
Σενάριο
Β
Β
Φοιτητής
Φοιτητής
Δάσκαλος
Δάσκαλος
Σενάριο
Σενάριο
Α
Α
Εκτέλεση
Εκτέλεση
Αλγόριθμος
Αλγόριθμος
22
22
Στο
Στο
Εργαστήριο
Εργαστήριο
Εξάσκηση
Εξάσκηση
στη
στη
Java (3
Java (3
πρώτα
πρώτα
εργαστήρια
εργαστήρια
)
)
Παραδείγματα
Παραδείγματα
εκτέλεσης
εκτέλεσης
των
των
αλγορίθμων
αλγορίθμων


Εκτέλεση
Εκτέλεση
βήμα
βήμα
-
-
προς
προς
-
-
βήμα
βήμα


Δοκιμή
Δοκιμή
επιδόσεων
επιδόσεων
(
(
benchmark)
benchmark)
Οπτικοποίηση
Οπτικοποίηση
των
των
δομών
δομών
δεδομένων
δεδομένων


Πώς
Πώς
εξελίσσονται
εξελίσσονται
στη
στη
ζωή
ζωή
τους
τους
Εξηγήσεις
Εξηγήσεις
,
,
υποδείξεις
υποδείξεις
&
&
συμβουλές
συμβουλές
για
για
τις
τις
ασκήσεις
ασκήσεις
23
23
Διδακτικά
Διδακτικά
Εγχειρίδια
Εγχειρίδια
-
-
Σημειώσεις
Σημειώσεις
2
2
βιβλία
βιβλία


Gregory Rawlins,
Gregory Rawlins, Αλγόριθμοι
Αλγόριθμοι
Ανάλυση
Ανάλυση
και
και
Σύγκριση
Σύγκριση
,
,
Κριτική
Κριτική
, 2004
, 2004


Γεώργιος
Γεώργιος
Γεωργακόπουλος
Γεωργακόπουλος
,
, Δομές
Δομές
Δεδομένων
Δεδομένων,
,
Πανεπιστημιακές
Πανεπιστημιακές
Εκδόσεις
Εκδόσεις
Κρήτης
Κρήτης
, 960
, 960
-
-
524
524
-
-
125
125
-
-
0, 2002
0, 2002
Υλικό
Υλικό
στην
στην
ιστοσελίδα
ιστοσελίδα
του
του
μαθήματος
μαθήματος
www.syros.aegean.gr/users/gaviotis/add
www.syros.aegean.gr/users/gaviotis/add


Κανονισμός
Κανονισμός
μαθήματος
μαθήματος
,
,
Ασκήσεις
Ασκήσεις
,
,
κά
κά


Δ
Δ
ιαφάνειες
ιαφάνειες
ΥΛΗ
24
24
Παραπομπές
Παραπομπές
M. Goodrich, R.
M. Goodrich, R.
Tamassia
Tamassia
,
, Data Structures &
Data Structures &
Algorithms in Java
Algorithms in Java, 2004, J Wiley
, 2004, J Wiley


http://java.datastructures.net
http://java.datastructures.net
W. Collins,
W. Collins,
Data Structures and the Java
Data Structures and the Java
Collection Framework, 2005,
Collection Framework, 2005,
McGraw
McGraw
-
-
Hill
Hill


http://
http://
www.mhhe.com/collins
www.mhhe.com/collins
Sahni
Sahni
,
,
Data Structures, Algorithms and
Data Structures, Algorithms and
Applications in Java,
Applications in Java,
2000, McGraw
2000, McGraw
-
-
Hill
Hill


http://
http://
www.mhhe.com/
www.mhhe.com/
sahnijava
sahnijava
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 5
25
25
Αξιολόγηση
Αξιολόγηση
με
με
Ασκήσεις
Ασκήσεις
Ενδεικτικά
Ενδεικτικά
πέρυσι
πέρυσι
6+2
6+2
ασκήσεις
ασκήσεις


προγράμματα
προγράμματα
,
,
τροποποιήσεις
τροποποιήσεις
προγραμμάτων
προγραμμάτων


αναφορά
αναφορά
(
(
χαρτί
χαρτί
)
)
Συνεισφορά
Συνεισφορά
από
από
5% (
5% (
οι
οι
εύκολες
εύκολες
και
και
γρήγορες
γρήγορες
)
)
έως
έως
15%
15%
Άθροισμα
Άθροισμα
115%
115%
Όχι
Όχι
γραπτή
γραπτή
εξέταση
εξέταση
Οι
Οι
κανόνες
κανόνες
θα
θα
οριστικοποιηθούν
οριστικοποιηθούν
με
με
την
την
ολοκλήρωση
ολοκλήρωση
των
των
εγγραφών
εγγραφών
2
2
Ανάλυση
Ανάλυση
Επιδόσεων
Επιδόσεων
Αλγορίθμων
Αλγορίθμων
27
27
Επιδόσεις
Επιδόσεις
Αλγορίθμου
Αλγορίθμου
Πόσος
Πόσος
χρόνος
χρόνος
χρειάζεται
χρειάζεται
για
για
την
την
ολοκλήρωσή
ολοκλήρωσή
του
του
(
(
πειραματικά
πειραματικά
);
);


Μετρήσεις
Μετρήσεις
για
για
διάφορα
διάφορα
μεγέθη
μεγέθη
εισόδων
εισόδων


>>
>>
για
για
διαφορετικές
διαφορετικές
εισόδους
εισόδους
ίδιου
ίδιου
μεγέθους
μεγέθους
Εξάρτηση
Εξάρτηση
από
από
:
:


Χαρακτηριστικά
Χαρακτηριστικά
υπολογιστή
υπολογιστή


Μεταγλωττιστή
Μεταγλωττιστή


Πολυεπεξεργασία
Πολυεπεξεργασία
28
28
Χρονομέτρηση
Χρονομέτρηση
Προγράμματος
Προγράμματος
Χρησιμοποιούμε
Χρησιμοποιούμε
το
το
ρολόι
ρολόι
του
του
υπολογιστή
υπολογιστή


System.currentTimeMillis
System.currentTimeMillis
()
()


Date()
Date()
Μετρούμε
Μετρούμε
για
για
διάφορες
διάφορες
εισόδους
εισόδους
ίδιου
ίδιου
μεγέθους
μεγέθους
και
και
διαφορετικά
διαφορετικά
μεγέθη
μεγέθη
.
.
29
29
Βέλτιστο
Βέλτιστο
,
,
Μέσο
Μέσο
,
,
Χείριστο
Χείριστο
Χρόνοςεκτέλεσης
Σύνολα εισόδου του ίδιου μεγέθους
Χειρότερο
Καλύτερο
30
30
Μειονεκτήματα
Μειονεκτήματα
Μετρήσεων
Μετρήσεων
Πρέπει
Πρέπει
να
να
υλοποιηθεί
υλοποιηθεί
ο
ο
αλγόριθμος
αλγόριθμος
.
.
Για
Για
να
να
προσδιοριστούν
προσδιοριστούν
βέλτιστα
βέλτιστα
,
,
μέσα
μέσα
,
,
χείριστα
χείριστα
πρέπει
πρέπει
να
να
εξαντληθούν
εξαντληθούν
όλες
όλες
οι
οι
παραλλαγές
παραλλαγές
των
των
εισόδων
εισόδων
συγκεκριμένου
συγκεκριμένου
μεγέθους
μεγέθους
.
.
Για
Για
να
να
συγκριθούν
συγκριθούν
αλγόριθμοι
αλγόριθμοι
πρέπει
πρέπει
να
να
εκτελούνται
εκτελούνται
στο
στο
ίδιο
ίδιο
υλικό
υλικό
.
.
0
20
40
60
80
100
120
Χρόνος εκτέλεσης
1000 2000 3000 4000
Μέγεθος εισόδου
Βέλτιστο
Μέσο
Χείριστο
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 6
31
31
Ανάλυση
Ανάλυση
Επιδόσεων
Επιδόσεων
Σε
Σε
πόσα
πόσα
βήματα
βήματα
τερματίζει
τερματίζει
σε
σε
σχέση
σχέση
με
με
το
το
μέγεθος
μέγεθος
της
της
εισόδου
εισόδου
;
;
Πολυπλοκότητα
Πολυπλοκότητα
χρόνου
χρόνου


Βασικές
Βασικές
πράξεις
πράξεις
σταθερού
σταθερού
κόστους
κόστους
:
:
Ανάθεση
Ανάθεση
,
,
κλήση
κλήση
/
/
επιστροφή
επιστροφή
ρουτίνας
ρουτίνας
,
,
αριθμητική
αριθμητική
πράξη
πράξη
(+,
(+,
-
-
, *, /),
, *, /),
σύγκριση
σύγκριση
δύο
δύο
αριθμών
αριθμών
,
,
προσπέλαση
προσπέλαση
στοιχείου
στοιχείου
πίνακα
πίνακα
Πολυπλοκότητα
Πολυπλοκότητα
χώρου
χώρου


Πόση
Πόση
μνήμη
μνήμη
απαιτείται
απαιτείται
για
για
την
την
αποθήκευση
αποθήκευση
της
της
δομής
δομής
των
των
δεδομένων
δεδομένων
;
;
32
32
Ποιες
Ποιες
Είναι
Είναι
Βασικές
Βασικές
Πράξεις
Πράξεις
;
;
Οι
Οι
επιδόσεις
επιδόσεις
εξαρτώνται
εξαρτώνται
από
από
το
το
υπολογιστικό
υπολογιστικό
μοντέλο
μοντέλο
της
της
πλατφόρμας
πλατφόρμας
όπου
όπου
εκτελείται
εκτελείται
ο
ο
αλγόριθμος
αλγόριθμος
apot
apot
= 0
= 0
for
for
i = 1
i = 1
to
to
n
n
for
for
j = 1
j = 1
to
to
n
n
apot
apot
+
+
+
+
apot
apot
= 0
= 0
for
for
i = 1
i = 1
to
to
n
n
apot
apot
=
=
apot
apot
+ n
+ n
apot
apot
= n * n
= n * n
1
n
2
n
2
1+5n
1+3n+15n
2
Π
ο
λ
λ
α
π
λ
α
σ
ι
α
σ
μ
ό
ς
Πρ
ό
σ
θ
ε
σ
ε
ι
ς
Α
υ
ξ
ήσ
ε
ι
ς
33
33
Άσκηση
Άσκηση
Επιδόσεων
Επιδόσεων
Υπολογίστε
Υπολογίστε
πόσες
πόσες
φορές
φορές
θα
θα
εκτελεστεί
εκτελεστεί
η
η
εντολή
εντολή
S
S
στο
στο
πρόγραμμα
πρόγραμμα
:
:
for
for
i = 1
i = 1
to
to
n
n
for
for
j = 1
j = 1
to
to
i
i
S
S
∑∑ ∑
= = =

+
==
n
i
i
j
n
i
n
nn
i
1
2
1 1
5,0
2
)1(
1
34
34
Μέτρηση
Μέτρηση
Επιδόσεων
Επιδόσεων
Χειρότερη
Χειρότερη
περίπτωση
περίπτωση


Για
Για
δεδομένο
δεδομένο
μέγεθος
μέγεθος
εισόδου
εισόδου
n
n
επιλέγεται
επιλέγεται
εκείνη
εκείνη
η
η
είσοδος
είσοδος
που
που
απαιτεί
απαιτεί
τις
τις
περισσότερες
περισσότερες
πράξεις
πράξεις
.
.


Ασφαλές
Ασφαλές
αλλά
αλλά
όχι
όχι
ενδεικτικό
ενδεικτικό
όριο
όριο
Μέσος
Μέσος
όρος
όρος


Όλες
Όλες
οι
οι
δυνατές
δυνατές
είσοδοι
είσοδοι
συγκεκριμένου
συγκεκριμένου
μεγέθους
μεγέθους
θεωρούνται
θεωρούνται
ισοπίθανες
ισοπίθανες
,
,
υπολογίζεται
υπολογίζεται
το
το
κόστος
κόστος
καθεμιάς
καθεμιάς
και
και
βγαίνει
βγαίνει
ο
ο
μέσος
μέσος
όρος
όρος
.
.


Δυσκολότερο
Δυσκολότερο
να
να
υπολογιστεί
υπολογιστεί
35
35
Εύρεση
Εύρεση
Μέγιστου
Μέγιστου
function
function
µέγιστος∆ιανύσµατος
µέγιστος∆ιανύσµατος
Είσοδος
Είσοδος
:
:
πίνακας
πίνακας
A[
A[
0
0
..n]
..n]
,
,
µη
µη
ταξινοµηµένος
ταξινοµηµένος
Έξοδος
Έξοδος
:
:
το
το
µεγαλύτερο
µεγαλύτερο
στοιχείο
στοιχείο
του
του
πίνακα
πίνακα
t = A[
t = A[
0
0
]
]
προσωρινά
προσωρινά
µέγιστος
µέγιστος
είναι
είναι
ο
ο
πρώτος
πρώτος
for
for
i
i
=
=
1
1
to
to
n
n
if
if
A[i
A[i
] > t
] > t
then
then
t =
t =
A[i
A[i
]
]
end if
end if
end for
end for
return
return
t
t
end function
end function
Βήµατα
n
0...n
Μ
ε
τ
ρ
ή
σ
τ
ε
μ
ε
α
κ
ρ
ί
β
ε
ι
α
ό
λ
ε
ς
τ
ι
ς
σ
τ
ο
ι
χ
ε
ι
ώ
δ
ε
ι
ς
π
ρ
ά
ξ
ε
ι
ς
(
α
ν
α
φ
ο
ρ
έ
ς
σ
τ
η
μ
ν
ή
μ
η
,

α
ν
α
θ
έ
σ
ε
ι
ς
,

σ
υ
γ
κ
ρ
ί
σ
ε
ι
ς
,

.
.
.
36
36
Ασυμπτωτικός
Ασυμπτωτικός
Συμβολισμός
Συμβολισμός
Ο
Ο
Μια
Μια
συνάρτηση
συνάρτηση
f(n
f(n
)
)
είναι
είναι
τάξης
τάξης
Ο
Ο
με
με
μια
μια
άλλη
άλλη
συνάρτηση
συνάρτηση
g(n
g(n
),
),
όταν
όταν
υπάρχουν
υπάρχουν
ακέραιος
ακέραιος
n
n
0
0
και
και
σταθερά
σταθερά
c
c
για
για
τα
τα
οποία
οποία
ισχύει
ισχύει
για
για
κάθε
κάθε
n>n
n>n
0
0
,
,
ότι
ότι
f(n
f(n
) <
) <
c.g(n
c.g(n
)
)
Πρακτικά
Πρακτικά
:
:
Για
Για
μέγεθος
μέγεθος
εισόδου
εισόδου
πάνω
πάνω
από
από
κάποιο
κάποιο
όριο
όριο
,
,
η
η
συνάρτηση
συνάρτηση
g
g
«
«
φράσσει
φράσσει
»
»
την
την
f.
f.
f(n) = O(g(n))
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 7
37
37
Μέγεθος
Μέγεθος
Τάξης
Τάξης
Ο
Ο
Όροι
Όροι
χαμηλότερης
χαμηλότερης
τάξεως
τάξεως
μπορούν
μπορούν
να
να
παραληφθούν
παραληφθούν
.
.
Παραδείγματα
Παραδείγματα
:
:


f(n
f(n
)=3n
)=3n
2
2
+2n+1
+2n+1
,
,
τότε
τότε
f(n
f(n
) = O(n
) = O(n
2
2
)
)


f(n
f(n
)=n
)=n
.
.
lgn+8n+3lgn
lgn+8n+3lgn
,
,
τότε
τότε
f(n
f(n
) =
) =
O(n
O(n
.
.
lgn
lgn
)
)
lgn
lgn
συμβολίζει
συμβολίζει
log
log
2
2
n
n


logn
logn
υπονοεί
υπονοεί
log
log
10
10
n
n
Έστω
Έστω
f(n
f(n
) = 3n
) = 3n
2
2
+4n
+4n
+
+
2
2
.
.
Τότε
Τότε
f(n
f(n
) = O(n
) = O(n
2
2
)
)
Αν
Αν
f(n
f(n
)
)
είναι
είναι
πολυώ
πολυώ
-
-
νυμο
νυμο
βαθμού
βαθμού
d
d
,
,
τότε
τότε


Αγνοούμε
Αγνοούμε
τους
τους
όρους
όρους
χαμηλότερων
χαμηλότερων
βαθμών
βαθμών
.
.


Αγνοούμε
Αγνοούμε
το
το
συντελεστή
συντελεστή
του
του
x
x
d
d
.
.
Σύμφωνα
Σύμφωνα
με
με
τον
τον
ορισμό
ορισμό
ισχύει
ισχύει
επίσης
επίσης
f(n
f(n
)
)
=
=
Ο
Ο
(
(
n
n
3
3
),
),
αλλά
αλλά
ας
ας
μην
μην
είμαστε
είμαστε
σπάταλοι
σπάταλοι


38
38
Γραμμική
Γραμμική
Αναζήτηση
Αναζήτηση
function
function
γραµµικήΑναζήτηση
γραµµικήΑναζήτηση
Είσοδος
Είσοδος
:
:
πίνακας
πίνακας
A[1..n]
A[1..n]
,
,
µη
µη
ταξινοµηµένος
ταξινοµηµένος
Είσοδος
Είσοδος
:
:
αριθµός
αριθµός
x
x
Έξοδος
Έξοδος
:
:
η
η
θέση
θέση
του
του
x
x
στον
στον
πίνακα
πίνακα
,
,
αλλιώς
αλλιώς
0
0
for
for
i
i
=
=
1
1
to
to
n
n
if
if
A[i
A[i
] = x
] = x
then
then


βρέθηκε
βρέθηκε
return
return
i
i
end if
end if
end for
end for
return
return
0
0


δεν
δεν
βρέθηκε
βρέθηκε
end function
end function
Μ
ε
π
ο
λ
λ
ή
τ
ύ
χ
η
:

1

ε
π
α
ν
ά
λ
η
ψ
η
Α
ν
γ
κ
α
ν
τ
έ
μ
η
ς
:

n

ε
π
α
ν
α
λ
ή
ψ
ε
ι
ς
Κ
α
τ
ά
μ
έ
σ
ο
ό
ρ
ο
;
39
39
Ρυθμοί
Ρυθμοί
Ανάπτυξης
Ανάπτυξης
Αργοί
Αργοί
αλγόριθμοι
αλγόριθμοι
O(2
O(2
n
n
)
)
Εκθετική
Εκθετική
Για
Για
k=2,
k=2,
τετραγωνική
τετραγωνική
.
.
Για
Για
k=3,
k=3,
κυβική
κυβική
.
.
O(n
O(n
k
k
)
)
Πολυωνυμική
Πολυωνυμική
O(n
O(n
.
.
lgn
lgn
)
)
-
-
Σειριακή
Σειριακή
αναζήτηση
αναζήτηση
O(n
O(n
)
)
Γραμμική
Γραμμική
Δυαδική
Δυαδική
αναζήτηση
αναζήτηση
Ο
Ο
(
(
lgn
lgn
)
)
Λογαριθμική
Λογαριθμική
Ο
Ο
αλγόριθμος
αλγόριθμος
τερματίζει
τερματίζει
σε
σε
σταθερό
σταθερό
χρόνο
χρόνο
ανεξαρτήτως
ανεξαρτήτως
του
του
μεγέθους
μεγέθους
της
της
εισόδου
εισόδου
Ο
Ο
(
(
c
c
)
)
Σταθερή
Σταθερή
40
40
Εξέλιξη
Εξέλιξη
Πολυπλοκότητας
Πολυπλοκότητας
Εκθετική
Τετραγωνική
Γραµµική
nlogn
Λογαριθµική
41
41
Τιμές
Τιμές
Κατηγοριών
Κατηγοριών
42
42
Ταξινόμηση
Ταξινόμηση
Συναρτήσεων
Συναρτήσεων
Επιδόσεων
Επιδόσεων
Ποιες
Ποιες
συναρτήσεις
συναρτήσεις
(
(
που
που
συναντούμε
συναντούμε
συχνά
συχνά
αναλύοντας
αναλύοντας
αλγορίθμους
αλγορίθμους
)
)
«
«
απογειώνονται
απογειώνονται
»
»
πιο
πιο
γρήγορα
γρήγορα
;
;
nnnnnn ppppp
10
1
2
lglglglg
!22
22!2lg
nn
n
nnnnn pppppp
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 8
43
43
Τυπολόγιο
Τυπολόγιο
Αθροισμάτων
Αθροισμάτων
2
)1(
1
+
=

=
nn
i
n
i
6
)12)(1(
1
2
++
=

=
nnn
i
n
i
2
1
3
2
)1(






+
=

=
nn
i
n
i
44
44
Πολυπλοκότητα
Πολυπλοκότητα
Προβλήματος
Προβλήματος
Κανονικά
Κανονικά
ένας
ένας
αλγόριθμος
αλγόριθμος
χαρακτηρίζεται
χαρακτηρίζεται
από
από
την
την
πολυπλοκότητά
πολυπλοκότητά
του
του
.
.
Μπορεί
Μπορεί
να
να
αποδειχθεί
αποδειχθεί
ότι
ότι
δεν
δεν
είναι
είναι
δυνατόν
δυνατόν
να
να
υπάρξει
υπάρξει
κάποιος
κάποιος
αλγόριθμος
αλγόριθμος
που
που
να
να
λύνει
λύνει
το
το
πρόβλημα
πρόβλημα
κάτω
κάτω
από
από
μια
μια
συγκεκριμένη
συγκεκριμένη
κατηγορία
κατηγορία
πολυπλοκότητας
πολυπλοκότητας
.
.


Αυτό
Αυτό
είναι
είναι
εγγενές
εγγενές
χαρακτηριστικό
χαρακτηριστικό
του
του
προβλήματος
προβλήματος
,
,
και
και
δεν
δεν
εξαρτάται
εξαρτάται
από
από
κάποια
κάποια
λύση
λύση
του
του
.
.
45
45
Μέσοι
Μέσοι
Όροι
Όροι
Προθεμάτων
Προθεμάτων
εκδ
εκδ
. 1
. 1
subroutine
subroutine
µέσοςΌροςΠροθεµάτων
µέσοςΌροςΠροθεµάτων
1
1
Είσοδος
Είσοδος
:
:
πίνακας
πίνακας
Χ
Χ
[
[
1
1
..n]
..n]
Έξοδος
Έξοδος
:
:
πίνακας
πίνακας
Α
Α
[1..
[1..
n]
n]
Επαναλήψεις
Επαναλήψεις
for
for
i
i
=
=
1
1
to
to
n
n
n
n
s = 0
s = 0
for
for
j =
j =
1
1
to
to
i
i
i
i
s = s +
s = s +
X[j
X[j
]
]
end for
end for
j
j
A[i
A[i
] = s / i
] = s / i
end for
end for
i
i
end sub
end sub
)(5.0
2
)1.(
1
22
1 11
nOn
nn
i
n
i
n
i
i
j
=≈
+
==
∑ ∑∑
= ==
46
46
Μέσοι
Μέσοι
Όροι
Όροι
Προθεμάτων
Προθεμάτων
έκδ
έκδ
. 2
. 2
subroutine
subroutine
µέσοςΌροςΠροθεµάτων
µέσοςΌροςΠροθεµάτων
2
2
Είσοδος
Είσοδος
:
:
πίνακας
πίνακας
Χ
Χ
[
[
1
1
..n]
..n]
Έξοδος
Έξοδος
:
:
πίνακας
πίνακας
Α
Α
[1..
[1..
n]
n]
s = 0
s = 0
Επαναλήψεις
Επαναλήψεις
for
for
i
i
=
=
1
1
to
to
n
n
n
n
s = s +
s = s +
X[i
X[i
]
]
A[i
A[i
] = s / i
] = s / i
end for
end for
i
i
end sub
end sub
)(1
1
nOn
n
i
==

=
47
47
Μέγιστη
Μέγιστη
Υποακολουθία
Υποακολουθία
Δίδεται
Δίδεται
πίνακας
πίνακας
ακεραίων
ακεραίων
μεγέθους
μεγέθους
n
n
και
και
ζητείται
ζητείται
να
να
βρεθεί
βρεθεί
η
η
μέγιστη
μέγιστη
τιμή
τιμή
ανάμεσα
ανάμεσα
στα
στα
αθροίσματα
αθροίσματα
των
των
συνεχόμενων
συνεχόμενων
στοιχείων
στοιχείων
.*
.*
Παράδειγμα
Παράδειγμα
Είσοδος
Είσοδος
:
:
4
4
-
-
5
5
7
7
10
10
Υποακολουθίες
Υποακολουθίες
:
:
4
4
-
-
1
1
6
6
16
16
-
-
5
5
2
2
12
12
7
7
17
17
10
10
*
*
Κατά
Κατά
σύμβαση
σύμβαση
το
το
μέγιστο
μέγιστο
πρόθεμα
πρόθεμα
είναι
είναι
τουλάχιστον
τουλάχιστον
0.
0.
48
48
Απαρίθμηση
Απαρίθμηση
Υποακολουθιών
Υποακολουθιών
Αυτό θα
χρησιμοποιήσουμε στο
πρόγραμμα που
ακολουθεί
Άσκηση:
Υλοποιήστε αυτό!
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 9
49
49
Λύση
Λύση
1
1


Ο
Ο
(
(
n
n
3
3
)
)
public static
public static
int
int
maxSubSum1
maxSubSum1
(int
(int
[] a) {
[] a) {
int
int
maxSum
maxSum
= 0;
= 0;
for
for
(
(
int
int
i = 0; i <
i = 0; i <
a.length
a.length
; i++)
; i++)
for
for
(
(
int
int
j = i; j <
j = i; j <
a.length
a.length
; j++) {
; j++) {
int
int
thisSum
thisSum
= 0;
= 0;
for
for
(
(
int
int
k = i; k <= j; k++)
k = i; k <= j; k++)
thisSum
thisSum
+=
+=
a[k
a[k
];
];
if
if
(
(
thisSum
thisSum
>
>
maxSum
maxSum
)
)
maxSum
maxSum
=
=
thisSum
thisSum
;
;
}
}
return
return
maxSum
maxSum
;
;
}
}
thisSum = sumFromTo(i, j)
Υπολογισμός
μερικού
αθροίσματος
Αρχή
υποακολουθίας
Τέλος
υποακολουθίας
50
50
Ανάλυση
Ανάλυση
Λύσης
Λύσης
1
1
∑∑ ∑ ∑∑ ∑∑∑∑∑∑

=

=

=

=

=

=

=

=

=

= =
=+−=+−=
1
0
1 1
0
1
0
1 1
0
111
0
1
1)1(1
n
i
n
ij
n
i
n
i
n
ij
n
i
n
ij
n
ij
n
i
n
ij
j
ik
ijij
∑∑∑

=

=

=
−+−−
+−−
=
1
0
1
0
2
1
0
22
)()(
2
n
i
n
i
n
i
inini
iinn
)2(
2
1
2
1
0
2
niiinn
n
i
−−++=


=






−−++=
∑∑∑∑∑

=

=

=

=

=
in
i
n
i
n
i
n
i
n
i
iniinn
0
1
0
1
0
2
1
0
1
0
2
211
2
1











+−
++=
2
223
23
2
26
32
2
1
n
nnnnn
nn
6
264
23
nnn +−
=
51
51
Λύση
Λύση
2
2
-
-
Ο
Ο
(
(
n
n
2
2
)
)
public static
public static
int
int
maxSubSum
maxSubSum
2
2
(
(
int
int
[] a) {
[] a) {
int
int
maxSum
maxSum
= 0;
= 0;
for
for
(
(
int
int
i = 0; i <
i = 0; i <
a.length
a.length
; i++) {
; i++) {
int
int
thisSum
thisSum
= 0;
= 0;
for
for
(
(
int
int
j = i; j <
j = i; j <
a.length
a.length
; j++) {
; j++) {
thisSum
thisSum
+=
+=
a[j
a[j
];
];
if
if
(
(
thisSum
thisSum
>
>
maxSum
maxSum
)
)
maxSum
maxSum
=
=
thisSum
thisSum
;
;
} //end for j
} //end for j
}
}
return
return
maxSum
maxSum
;
;
} //end maxPro2
} //end maxPro2
Συσσώρευση
του μερικού
αθροίσματος
Αρχή
υποακολουθίας
Τέλος
υποακολουθίας
52
52
Λύση
Λύση
3
3
-
-
Ο
Ο
(
(
n
n
)
)
public static
public static
int
int
maxSubSum3
maxSubSum3
(
(
int
int
[] a) {
[] a) {
int
int
maxSum
maxSum
= 0
= 0
,
,
thisSum
thisSum
= 0;
= 0;
for
for
(
(
int
int
j = 0; j <
j = 0; j <
a.length
a.length
; j++) {
; j++) {
thisSum
thisSum
+=
+=
a[j
a[j
];
];
if
if
(
(
thisSum
thisSum
>
>
maxSum
maxSum
)
)
maxSum
maxSum
=
=
thisSum
thisSum
;
;
else if
else if
(
(
thisSum
thisSum
< 0)
< 0)
thisSum
thisSum
= 0;
= 0;
}
}
return
return
maxSum
maxSum
;
;
}
}
Ένα
πέρασμα
Τέλος
υποακολουθίας
53
53
Εκτέλεση
Εκτέλεση
Λύσης
Λύσης
3
3
4
-5
7
10
maxSum
0
4
4
7
17
thisSum
0
4
-1
0
7
17
j
0
1
2
3
Εκτελέστε τον
αλγόριθμο για:
3 -4 5 -2 1 -1 2 -7 6
54
54
Δύσκολα
Δύσκολα
Προβλήματα
Προβλήματα
Εννοιολογικά
Εννοιολογικά
δύσκολο
δύσκολο
:
:
δεν
δεν
έχουμε
έχουμε
αλγόριθμο
αλγόριθμο
,
,
επειδή
επειδή
δεν
δεν
καταλαβαίνουμε
καταλαβαίνουμε
καλά
καλά
το
το
πρόβλημα
πρόβλημα
.
.
Αναλυτικά
Αναλυτικά
δύσκολο
δύσκολο
:
:
έχουμε
έχουμε
αλγόριθμο
αλγόριθμο
που
που
λύνει
λύνει
το
το
πρόβλημα
πρόβλημα
,
,
αλλά
αλλά
δεν
δεν
μπορούμε
μπορούμε
να
να
υπολογίσουμε
υπολογίσουμε
τις
τις
επιδόσεις
επιδόσεις
του
του
.
.
Υπολογιστικά
Υπολογιστικά
δύσκολο
δύσκολο
:
:
έχουμε
έχουμε
αλγόριθμο
αλγόριθμο
,
,
αλλά
αλλά
είναι
είναι
απελπιστικά
απελπιστικά
αργός
αργός
.
.
Υπολογιστικά
Υπολογιστικά
άλυτο
άλυτο
:
:
δεν
δεν
υπάρχει
υπάρχει
αλγόριθμος
αλγόριθμος
που
που
να
να
λύνει
λύνει
το
το
πρόβλημα
πρόβλημα
.
.
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 10
55
55
Πώς
Πώς
Αντιμετωπίζουμε
Αντιμετωπίζουμε
τα
τα
Δύσκολα
Δύσκολα
Όταν
Όταν
απαιτείται
απαιτείται
εκθετικός
εκθετικός
χρόνος
χρόνος
και
και
πάνω
πάνω
,
,
ο
ο
χρόνος
χρόνος
απογειώνεται
απογειώνεται
ακόμη
ακόμη
και
και
για
για
μικρές
μικρές
εισόδους
εισόδους
.
.
Προσεγγιστικοί
Προσεγγιστικοί
αλγόριθμοι
αλγόριθμοι
:
:
κοντινές
κοντινές
λύσεις
λύσεις
Πιθανοτικοί
Πιθανοτικοί
αλγόριθμοι
αλγόριθμοι
:
:
βρίσκουν
βρίσκουν
τη
τη
λύση
λύση
τις
τις
περισσότερες
περισσότερες
φορές
φορές


όχι
όχι
πάντα
πάντα
56
56
Επίλογος
Επίλογος
Η
Η
ανάλυση
ανάλυση
του
του
αλγορίθμου
αλγορίθμου
είναι
είναι
χρήσιμη
χρήσιμη
γιατί
γιατί
μας
μας
δείχνει
δείχνει
πόσο
πόσο
καλός
καλός
είναι
είναι
.
.


Αν
Αν
είναι
είναι
κακός
κακός
,
,
τουλάχιστον
τουλάχιστον
το
το
ξέρουμε
ξέρουμε
.
.
Αν
Αν
το
το
πρόβλημα
πρόβλημα
δεν
δεν
είναι
είναι
εγγενώς
εγγενώς
δύσκολο
δύσκολο
,
,
θα
θα
προσπαθήσουμε
προσπαθήσουμε
να
να
βρούμε
βρούμε
καλύτερο
καλύτερο
.
.


Προσπαθώντας
Προσπαθώντας
με
με
μικρές
μικρές
βελτιώσεις
βελτιώσεις
στον
στον
κώδικα
κώδικα
,
,
είναι
είναι
σα
σα
να
να
κάνουμε
κάνουμε
μαραγκοδουλειά
μαραγκοδουλειά
χρησιμοποιώντας
χρησιμοποιώντας
γυαλόχαρτο
γυαλόχαρτο
(
(
αντί
αντί
για
για
πριόνι
πριόνι
).
).
3
3
Αναδρομικοί
Αναδρομικοί
&
&
Παράλληλοι
Παράλληλοι
Αλγόριθμοι
Αλγόριθμοι
58
58
Είδη
Είδη
Αλγορίθμων
Αλγορίθμων
Αναδρομικοί
Αναδρομικοί
(
(
recursive)
recursive)
:
:
καλούν
καλούν
τον
τον
εαυτό
εαυτό
τους
τους


Για
Για
να
να
λύσουν
λύσουν
ένα
ένα
πρόβλημα
πρόβλημα
συγκεκριμένου
συγκεκριμένου
μεγέθους
μεγέθους
,
,
λύνουν
λύνουν
το
το
ίδιο
ίδιο
πρόβλημα
πρόβλημα
για
για
μικρότερο
μικρότερο
μέγεθος
μέγεθος
Παράλληλοι
Παράλληλοι
:
:
εκτελούνται
εκτελούνται
σε
σε
υπολογιστές
υπολογιστές
με
με
πολλές
πολλές
μονάδες
μονάδες
επεξεργασίας
επεξεργασίας


Τα
Τα
μερικά
μερικά
αποτελέσματα
αποτελέσματα
από
από
κάθε
κάθε
μονάδα
μονάδα
συνδυάζονται
συνδυάζονται
για
για
τον
τον
υπολογισμό
υπολογισμό
της
της
λύσης
λύσης


Δεν
Δεν
αλλάζει
αλλάζει
τάξη
τάξη
μεγέθους
μεγέθους
των
των
επιδόσεων
επιδόσεων
59
59
Αναδρομή
Αναδρομή
Ένα
Ένα
πρόβλημα
πρόβλημα
μπορεί
μπορεί
να
να
επιλυθεί
επιλυθεί
αναδρομικά
αναδρομικά
όταν
όταν
:
:


είναι
είναι
γνωστό
γνωστό
το
το
τελικό
τελικό
βήμα
βήμα
,
,
και
και


το
το
πρώτο
πρώτο
βήμα
βήμα
της
της
γενικής
γενικής
λύσης
λύσης
του
του
προβλήματος
προβλήματος
οδηγεί
οδηγεί
στο
στο
αρχικό
αρχικό
πρόβλημα
πρόβλημα
,
,
αλλά
αλλά
λίγο
λίγο
πιο
πιο
κοντά
κοντά
στο
στο
τελικό
τελικό
βήμα
βήμα
.
.
Υλοποίηση
Υλοποίηση
σε
σε
γλώσσες
γλώσσες
προγραμματισμού
προγραμματισμού


Υπορουτίνα
Υπορουτίνα
που
που
στο
στο
σώμα
σώμα
της
της
καλεί
καλεί
τον
τον
εαυτό
εαυτό
της
της
.
.
60
60
Παραγοντικό
Παραγοντικό
function
function
efac
efac
(n)
(n)
gin = 1
gin = 1
for
for
i = 1
i = 1
to
to
n
n
gin =
gin =
gin
gin
* i
* i
end for
end for
i
i
return
return
gin
gin
end function
end function
function
function
rfac
rfac
(n)
(n)
if
if
n = 1
n = 1
then
then
return
return
1
1
else
else
return
return
n*
n*
rfac
rfac
(n
(n
-
-
1)
1)
end function
end function

=
=⋅−⋅⋅⋅⋅=
n
i
innn
1
)1(321!L



>−⋅
=
=
1)!1(
11
!
nnn
n
n
Έκδοση με επανάληψη Έκδοση με αναδρομή
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 11
61
61
Παράλληλο
Παράλληλο
Παραγοντικό
Παραγοντικό
function
function
pgin
pgin
(
(
i, j)
i, j)
//
//
i*(i+1)*
i*(i+1)*


*j
*j
if
if
i = j
i = j
then return
then return
i
i
else
else
parbegin
parbegin
k = (i + j) / 2
k = (i + j) / 2
return
return
pgin
pgin
(i, k) *
(i, k) *
pgin
pgin
(k+1, j)
(k+1, j)
parend
parend
5!
5!
= pgin(1,5)
= pgin(1,5)
= pgin(1,3)*pgin(4,5)
= pgin(1,3)*pgin(4,5)
= (
= (
pgin(1,2)*pgin(3,3)
pgin(1,2)*pgin(3,3)
)
)
*
*
(
(
pgin(4,4)*pgin(5,5)
pgin(4,4)*pgin(5,5)
)
)
62
62
Χρυσή
Χρυσή
Τομή
Τομή
Χωρίστε
Χωρίστε
γραμμή
γραμμή
σε
σε
δυο
δυο
τμήματα
τμήματα
,
,
έτσι
έτσι
ώστε
ώστε
ο
ο
λόγος
λόγος
του
του
όλου
όλου
προς
προς
το
το
μεγάλο
μεγάλο
τμήμα
τμήμα
να
να
ισούται
ισούται
με
με
το
το
μεγάλο
μεγάλο
προς
προς
το
το
μικρό
μικρό
τμήμα
τμήμα
.
.
φ = 1,6180339...
63
63
Εφαρμογές
Εφαρμογές
της
της
Χρυσής
Χρυσής
Τομής
Τομής
Όστρακο
Κοχλίας
αυτιού
Μήκος προς πλάτος του
Παρθενώνα (Φειδίας)
64
64
Λαγοί
Λαγοί
Έχεις
Έχεις
δύο
δύο
λαγούς
λαγούς
.
.
Από
Από
δύο
δύο
λαγούς
λαγούς
γεννιούνται
γεννιούνται
κάθε
κάθε
μήνα
μήνα
άλλοι
άλλοι
δύο
δύο
από
από
το
το
δεύτερο
δεύτερο
μήνα
μήνα
της
της
ζωής
ζωής
τους
τους
.
.
Πώς
Πώς
αυξάνει
αυξάνει
ο
ο
πληθυσμός
πληθυσμός
τους
τους
κάθε
κάθε
μήνα
μήνα
;
;
Κάθε
Κάθε
μήνα
μήνα
θα
θα
υπάρχουν
υπάρχουν
όσοι
όσοι
λαγοί
λαγοί
και
και
τον
τον
προηγούμενο
προηγούμενο
συν
συν
τα
τα
γεννητούρια
γεννητούρια
των
των
λαγών
λαγών
που
που
ζούσαν
ζούσαν
και
και
τον
τον
προ
προ
-
-
προηγούμενο
προηγούμενο
μήνα
μήνα
.
.



≥−+−
=
=
2)2()1(
1,01
)(
nnfnf
n
nf
65
65
Αριθμοί
Αριθμοί
Φιμπονάτσι
Φιμπονάτσι
function rfibo(n)
if n<=1 then return 1
else return rfibo(n-1) + rfibo(n-2)
Ιταλός μαθηματικός γεννημένος το 1175
34
34
21
21
13
13
8
8
5
5
3
3
2
2
1
1
1
1
f(n
f(n
)
)
8
8
7
7
6
6
5
5
4
4
3
3
2
2
1
1
0
0
n
n
Έκπληξη!
Ο ρυθμός αύξησης της
ακολουθίας είναι φ.
66
66
Φιμπονάτσι
Φιμπονάτσι
με
με
Επανάληψη
Επανάληψη
function
function
efibo
efibo
(n
(n
)
)
past = 1;
past = 1;
previous = 1;
previous = 1;
present = 1
present = 1
for
for
i = 2
i = 2
to
to
n
n
past = previous;
past = previous;
previous = present
previous = present
present = previous + past
present = previous + past
end for
end for
i
i
return
return
present
present
end function
end function
Αν
Αν
και
και
κομψός
κομψός
,
,
ο
ο
αναδρομικός
αναδρομικός
αλγόριθμος
αλγόριθμος
έχει
έχει
εκθετικό
εκθετικό
κόστος
κόστος
Ο
Ο
(
(
φ
φ
n
n
)
)
.
.
Η
Η
επαναληπτική
επαναληπτική
εκδοχή
εκδοχή
του
του
έχει
έχει
γραμμικό
γραμμικό
κόστος
κόστος
Ο
Ο
(n)
(n)
.
.
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 12
67
67
Πύργοι
Πύργοι
του
του
Ανόι
Ανόι
function
function
hanoi
hanoi
(n, start, finish, temp)
(n, start, finish, temp)


Μετακινεί
Μετακινεί
n
n
δίσκους
δίσκους
από
από
το
το
στύλο
στύλο
start
start
στο
στο


finish
finish
,
,
χρησιµοποιώντας
χρησιµοποιώντας
τον
τον
temp
temp
ως
ως
ενδιάµεσο
ενδιάµεσο
if
if
n
n
>
>
0
0
then
then
1
1
hanoi
hanoi
(n
(n
-
-
1, start, temp, finish)
1, start, temp, finish)
2
2
print (
print (


από
από


+start +
+start +


βάλε
βάλε
στο
στο


+ finish)
+ finish)
3
3
hanoi
hanoi
(n
(n
-
-
1, temp, finish, start)
1, temp, finish, start)


3
3
endif
endif
Δοκιμή
1
3
2
start temp finish
68
68
Διερεύνηση
Διερεύνηση
Ανόι
Ανόι
Πόσες
Πόσες
μετακινήσεις
μετακινήσεις
απαιτεί
απαιτεί
ο
ο
αλγόριθμος
αλγόριθμος
;
;
).2(12
12
12
2
2)0(2
2)(2
1
0
1
0
1
0
nn
n
n
j
j
n
j
jn
ni
i
j
ji
O
T
inT
=−=
=


==
=+=
=+−=




=

=
=

=
=++++
+−=
==
=++−=
=++−=
=
+

=

)222(
)(2
21)2(4
1]1)2(2[2
1)1(2)(
110 i
i
inT
nT
nT
nTnT
L
L
69
69
Επαναληπτικός
Επαναληπτικός
Αλγόριθμος
Αλγόριθμος
για
για
Πύργους
Πύργους
του
του
Ανόι
Ανόι
Βάλε
Βάλε
τους
τους
τρεις
τρεις
πασσάλους
πασσάλους
σε
σε
έναν
έναν
κύκλο
κύκλο
.
.
Μετάφερε
Μετάφερε
τον
τον
μικρότερο
μικρότερο
δίσκο
δίσκο
στον
στον
επόμενο
επόμενο
πάσσαλο
πάσσαλο
ως
ως
προς
προς
τη
τη
φορά
φορά
των
των
δεικτών
δεικτών
του
του
ρολογιού
ρολογιού
,
,
εκτός
εκτός
κι
κι
αν
αν
η
η
προηγούμενη
προηγούμενη
κίνηση
κίνηση
ήταν
ήταν
η
η
μεταφορά
μεταφορά
του
του
μικρότερου
μικρότερου
δίσκου
δίσκου
.
.
Διαφορετικά
Διαφορετικά
,
,
κάνε
κάνε
τη
τη
μοναδική
μοναδική
άλλη
άλλη
νόμιμη
νόμιμη
κίνηση
κίνηση
Άσκηση:
υλοποιήστε
τον
4
4
Αφαιρετικοί
Αφαιρετικοί
Τύποι
Τύποι
Δεδομένων
Δεδομένων
Ορισμός
Ορισμός


Υλοποίηση
Υλοποίηση
71
71
Τύποι
Τύποι
Δεδομένων
Δεδομένων
Ένας
Ένας
τύπος
τύπος
δεδομένων
δεδομένων
είναι
είναι
ένα
ένα
σύνολο
σύνολο
τιμών
τιμών
και
και
μια
μια
συλλογή
συλλογή
λειτουργιών
λειτουργιών
επί
επί
των
των
τιμών
τιμών
αυτών
αυτών
.
.


Π
Π
x,
x,
οι
οι
ακέραιοι
ακέραιοι
αριθμοί
αριθμοί
(
(
int
int
)
)
και
και
οι
οι
πράξεις
πράξεις
επ
επ


αυτών
αυτών
(+,
(+,
-
-
, *, /,
, *, /,
modulo,
modulo,
κλπ
κλπ
).
).
Μπορούμε
Μπορούμε
να
να
ορίσουμε
ορίσουμε
και
και
νέους
νέους
τύπους
τύπους
δεδομένων
δεδομένων
ή
ή
να
να
ορίσουμε
ορίσουμε
νέες
νέες
λειτουργίες
λειτουργίες
για
για
υπάρχοντες
υπάρχοντες
τύπους
τύπους
δεδομένων
δεδομένων
.
.


Πχ
Πχ
,
,
οι
οι
ημερομηνίες
ημερομηνίες
και
και
οι
οι
λειτουργίες
λειτουργίες
:
:
σύγκριση
σύγκριση
,
,
αφαίρεση
αφαίρεση
(
(
χρονικό
χρονικό
διάστημα
διάστημα
)
)
Data types
72
72
Αφαιρετικοί
Αφαιρετικοί
Τύποι
Τύποι
Δεδομένων
Δεδομένων
Προδιαγραφή
Προδιαγραφή
μιας
μιας
δομής
δομής
δεδομένων
δεδομένων


Ορίζει
Ορίζει
ιδιότητες
ιδιότητες
&
&
λειτουργίες
λειτουργίες
Πχ
Πχ
,
,
σε
σε
ημερομηνία
ημερομηνία
,
,
ιδιότητες
ιδιότητες
είναι
είναι
έτος
έτος
,
,
μήνας
μήνας
,
,
ημέρα
ημέρα
Στις
Στις
λειτουργίες
λειτουργίες
καθορίζεται
καθορίζεται
τι
τι
παίρνουν
παίρνουν
ως
ως
είσοδο
είσοδο
(
(
λίστα
λίστα
παραμέτρων
παραμέτρων
)
)
και
και
τι
τι
επιστρέφουν
επιστρέφουν
.
.


Επίσης
Επίσης
,
,
τι
τι
σφάλματα
σφάλματα
παράγουν
παράγουν
και
και
υπό
υπό
ποιες
ποιες
συνθήκες
συνθήκες
.
.
Περιγράφεται
Περιγράφεται
η
η
σημασιολογία
σημασιολογία
(
(
τι
τι
κάνει
κάνει


όχι
όχι
πώς
πώς
το
το
κάνει
κάνει
).
).


Δεν
Δεν
καθορίζεται
καθορίζεται
τρόπος
τρόπος
υλοποίησης
υλοποίησης
.
.
Διότι
Διότι
:
:
Υπάρχουν
Υπάρχουν
διάφοροι
διάφοροι
τρόποι
τρόποι
υλοποίησης
υλοποίησης
ενός
ενός
ΑΤΔ
ΑΤΔ
.
.
Εξαρτάται
Εξαρτάται
από
από
γλώσσα
γλώσσα
προγραμματισμού
προγραμματισμού
,
,
από
από
προσδοκώμενη
προσδοκώμενη
χρήση
χρήση
,
,
κλπ
κλπ
.
.
Abstract data types
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 13
73
73
Υλοποίηση
Υλοποίηση
ΑΤΔ
ΑΤΔ
Αποκρύπτεται
Αποκρύπτεται
ο
ο
τρόπος
τρόπος
που
που
αναπαριστάνεται
αναπαριστάνεται
η
η
πληροφορία
πληροφορία
που
που
περικλείει
περικλείει
.
.


Μπορεί
Μπορεί
να
να
μην
μην
αποκαλύπτονται
αποκαλύπτονται
ούτε
ούτε
καν
καν
οι
οι
αλγόριθμοι
αλγόριθμοι
που
που
χρησιμοποιεί
χρησιμοποιεί
.
.


Ο
Ο
κατασκευαστής
κατασκευαστής
της
της
υλοποίησης
υλοποίησης
μπορεί
μπορεί
να
να
εξελίσσει
εξελίσσει
το
το
«
«
εσωτερικό
εσωτερικό
»
»
,
,
χωρίς
χωρίς
ο
ο
χρήστης
χρήστης
του
του
ΑΤΔ
ΑΤΔ
να
να
χρειαστεί
χρειαστεί
να
να
αλλάξει
αλλάξει
το
το
πρόγραμμά
πρόγραμμά
του
του
.
.
Παράδειγμα
Παράδειγμα
:
:
αναπαράσταση
αναπαράσταση
κλάσματος
κλάσματος


δύο
δύο
ακέραιοι
ακέραιοι
,
,
πχ
πχ
ar
ar
= 3, par
= 3, par
=
=
4
4


μια
μια
συμβολοσειρά
συμβολοσειρά
,
,
πχ
πχ
val
val
=
=


3/4
3/4


74
74
Ευρετήριο
Ευρετήριο
Ονομάτων
Ονομάτων
Πρέπει
Πρέπει
να
να
υποστηρίζει
υποστηρίζει
λειτουργίες
λειτουργίες
:
:


εντοπισμός
εντοπισμός
(
(
υπάρχει
υπάρχει
το
το
τάδε
τάδε
όνομα
όνομα
;)
;)


εισαγωγή
εισαγωγή


διαγραφή
διαγραφή
Δεν
Δεν
έχουν
έχουν
έννοια
έννοια
οι
οι
επιδόσεις
επιδόσεις
,
,
γιατί
γιατί
δεν
δεν
υπάρχει
υπάρχει
υλοποίηση
υλοποίηση
.
.


Μπορεί
Μπορεί
να
να
υπάρχουν
υπάρχουν
απαιτήσεις
απαιτήσεις
επιδόσεων
επιδόσεων
.
.


Μπορεί
Μπορεί
να
να
υπάρχει
υπάρχει
αναμενόμενη
αναμενόμενη
χρήση
χρήση
,
,
πχ
πχ
ποια
ποια
είναι
είναι
η
η
πιο
πιο
κοινή
κοινή
λειτουργία
λειτουργία
;
;
75
75
ΑΤΔ
ΑΤΔ
στη
στη
Java
Java
Φτιάχνουμε
Φτιάχνουμε
μια
μια
διεπαφή
διεπαφή
(
(
interface
interface
)
)
που
που
ορίζει
ορίζει
την
την
προδιαγραφή
προδιαγραφή
των
των
λειτουργιών
λειτουργιών
.
.
Η
Η
λειτουργικότητα
λειτουργικότητα
του
του
ορίζεται
ορίζεται
από
από
μια
μια
κλάση
κλάση
που
που
υλοποιεί
υλοποιεί
(
(
implements
implements
)
)
το
το
interface
interface
.
.
Τα
Τα
στιγμιότυπα
στιγμιότυπα
του
του
ΑΤΔ
ΑΤΔ
χρησιμοποιούνται
χρησιμοποιούνται
από
από
μια
μια
κλάση
κλάση
που
που
εισάγει
εισάγει
(
(
imports
imports
)
)
μια
μια
κλάση
κλάση
που
που
υλοποιεί
υλοποιεί
τον
τον
ΑΤΔ
ΑΤΔ
.
.
interface
object
class
implements
new
76
76
Παράδειγμα
Παράδειγμα
ΑΤΔ
ΑΤΔ
Μοντέλο
Μοντέλο
για
για
χρηματιστηριακές
χρηματιστηριακές
πράξεις
πράξεις
(
(
αγοραπωλησίες
αγοραπωλησίες
μετοχών
μετοχών
)
)


Τα
Τα
δεδομένα
δεδομένα
που
που
αποθηκεύονται
αποθηκεύονται
είναι
είναι
οι
οι
εντολές
εντολές
αγοράς
αγοράς
/
/
πώλησης
πώλησης
.
.


Οι
Οι
λειτουργίες
λειτουργίες
που
που
υποστηρίζονται
υποστηρίζονται
είναι
είναι
:
:
order
order
buy
buy
(stock
(stock
, shares, price)
, shares, price)
order
order
sell
sell
(stock
(stock
, shares, price)
, shares, price)
void
void
cancel
cancel
(order
(order
)
)


Εξαιρέσεις
Εξαιρέσεις
:
:
Αγορά
Αγορά
/
/
Πώληση
Πώληση
ανύπαρκτης
ανύπαρκτης
μετοχής
μετοχής
Ακύρωση
Ακύρωση
ανύπαρκτης
ανύπαρκτης
εντολής
εντολής
77
77
Πώς
Πώς
«
«
Βλέπουμε
Βλέπουμε
»
»
έναν
έναν
ΑΤΔ
ΑΤΔ
Ως
Ως
χρήστες
χρήστες


Μας
Μας
ενδιαφέρει
ενδιαφέρει
ο
ο
ΑΤΔ
ΑΤΔ
να
να
υποστηρίζει
υποστηρίζει
τις
τις
λειτουργίες
λειτουργίες
που
που
μας
μας
είναι
είναι
απαραίτητες
απαραίτητες


Μας
Μας
ενδιαφέρει
ενδιαφέρει
οι
οι
λειτουργίες
λειτουργίες
να
να
εκτελούνται
εκτελούνται
γρήγορα
γρήγορα
.
.
Ως
Ως
κατασκευαστές
κατασκευαστές


Μας
Μας
ενδιαφέρει
ενδιαφέρει
η
η
εσωτερική
εσωτερική
δομή
δομή
των
των
δεδομένων
δεδομένων
.
.


Μας
Μας
ενδιαφέρει
ενδιαφέρει
η
η
υλοποίηση
υλοποίηση
αποδοτικών
αποδοτικών
αλγορίθμων
αλγορίθμων
που
που
να
να
εκτελούν
εκτελούν
τις
τις
λειτουργίες
λειτουργίες
.
.
78
78
Υλοποίηση
Υλοποίηση
ΑΤΔ
ΑΤΔ
public class BankAccount {
public class BankAccount {
private double balance;
private double balance;
public BankAccount() {
public BankAccount() {
balance = 0.0d; //
balance = 0.0d; //
νεος
νεος
λογαριασµος
λογαριασµος
µε
µε
υπολοιπο
υπολοιπο
0
0
}
}
public boolean deposit(double amount) {
public boolean deposit(double amount) {
if (amount > 0.0d) {
if (amount > 0.0d) {
balance += amount; //
balance += amount; //
καταθεση
καταθεση
return true; }
return true; }
else
else
return false;
return false;
}
}
public boolean withdraw(double amount) {
public boolean withdraw(double amount) {
if ((amount>0) && (amount <= balance)) {
if ((amount>0) && (amount <= balance)) {
balance
balance
-
-
= amount; //
= amount; //
αναληψη
αναληψη
return true; }
return true; }
else
else
return false;
return false;
}
}
public double
public double
getBalance
getBalance
() { return balance; }
() { return balance; }
}
}
/**
* Καταθέτει το ποσόν στον λογαριασµό
*
* @param Θετικός αριθµός-αντιστοιχεί στο ποσό της κατάθεσης
* @return Αληθές αν έγινε η κατάθεση, ψευδές αν δεν έγινε.
*/
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 14
79
79
public class BankAccountDemo {
public class BankAccountDemo {
public static void main(String[] args) {
public static void main(String[] args) {
BankAccount myAccount = new BankAccount();
BankAccount myAccount = new BankAccount();
boolean ok;
boolean ok;
ok = myAccount.deposit(100.0);
ok = myAccount.deposit(100.0);
ok = myAccount.withdraw(50.0);
ok = myAccount.withdraw(50.0);
ok = myAccount.withdraw(70.0);
ok = myAccount.withdraw(70.0);
ok = myAccount.deposit(
ok = myAccount.deposit(
-
-
200.0);
200.0);
System.out.println(myAccount.getBalance());
System.out.println(myAccount.getBalance());
}
}
}
}
Χρήση
Χρήση
ΑΤΔ
ΑΤΔ
80
80
Ο
Ο
-
-
Ο
Ο
για
για
τη
τη
υλοποίηση
υλοποίηση
ΑΤΔ
ΑΤΔ
Ο
Ο
αντικειμενοστρεφής
αντικειμενοστρεφής
προγραμματισμός
προγραμματισμός
είναι
είναι
κατάλληλο
κατάλληλο
εργαλείο
εργαλείο
για
για
την
την
υλοποίηση
υλοποίηση
ΑΤΔ
ΑΤΔ
:
:


Ενθυλακώνει
Ενθυλακώνει
την
την
αναπαράσταση
αναπαράσταση
των
των
δεδομένων
δεδομένων
(
(
private
private
/
/
protected
protected
).
).


Παρέχει
Παρέχει
πρόσβαση
πρόσβαση
στις
στις
λειτουργίες
λειτουργίες
μέσω
μέσω
της
της
δημόσιας
δημόσιας
διεπαφής
διεπαφής
(
(
public
public
)
)
.
.


Απαγορεύοντας
Απαγορεύοντας
την
την
άμεση
άμεση
πρόσβαση
πρόσβαση
στα
στα
δεδομένα
δεδομένα
του
του
ΑΤΔ
ΑΤΔ
,
,
επιβάλει
επιβάλει
την
την
ορθότητα
ορθότητα
της
της
κατάστασης
κατάστασης
.
.


Διαχωρίζει
Διαχωρίζει
προδιαγραφή
προδιαγραφή
από
από
υλοποίηση
υλοποίηση
(
(
interface
interface


implements
implements
)
)
.
.
81
81
Γιατί
Γιατί
Java;
Java;
Ανεξάρτητη
Ανεξάρτητη
υπολογιστικής
υπολογιστικής
πλατφόρμας
πλατφόρμας
Υποστηρίζει
Υποστηρίζει
δείκτες
δείκτες
(
(
pointers)
pointers)


Όχι
Όχι
αριθμητική
αριθμητική
δεικτών
δεικτών
που
που
είναι
είναι
επικίνδυνη
επικίνδυνη
Επίπεδα
Επίπεδα
ορατότητας
ορατότητας
δεδομένων
δεδομένων


Public, protected, private
Public, protected, private
Ενσωματωμένη
Ενσωματωμένη
διαχείριση
διαχείριση
μνήμης
μνήμης


Συλλογή
Συλλογή
απορριμμάτων
απορριμμάτων
Διαχείριση
Διαχείριση
σφαλμάτων
σφαλμάτων
και
και
εξαιρέσεων
εξαιρέσεων
5
5
Πίνακες
Πίνακες
Λειτουργίες
Λειτουργίες


Χρήση
Χρήση
83
83
Πίνακες
Πίνακες
Η
Η
πιο
πιο
βασική
βασική
δομή
δομή
αποθήκευσης
αποθήκευσης
δεδομένων
δεδομένων


Υποστηρίζεται
Υποστηρίζεται
από
από
όλες
όλες
τις
τις
γλώσσες
γλώσσες
προγραμματισμού
προγραμματισμού
.
.
Συνεχόμενες
Συνεχόμενες
θέσεις
θέσεις
στην
στην
κύρια
κύρια
μνήμη
μνήμη


Προσπέλαση
Προσπέλαση
μέσω
μέσω
δείκτη
δείκτη


Στατική
Στατική
δομή
δομή


το
το
μέγεθος
μέγεθος
ορίζεται
ορίζεται
εξαρχής
εξαρχής
και
και
δεν
δεν
αλλάζει
αλλάζει
.
.
43
43
6
6
13
13
5
5
31
31
4
4
8
8
3
3
13
13
2
2
7
7
1
1
43
43
0
0
Τιμή
Τιμή
Δείκτης
Δείκτης
Διεύθυνση
βάσης
Χώρος για
κάθε στοιχείο
84
84
Δυαδική
Δυαδική
Αναζήτηση
Αναζήτηση
Σε
Σε
ποια
ποια
θέση
θέση
βρίσκεται
βρίσκεται
η
η
τιμή
τιμή
4
4
5;
5;
Διατηρούνται
Διατηρούνται
τρεις
τρεις
δείκτες
δείκτες
low, high,
low, high,
και
και
mid
mid


μεσαίος
μεσαίος
21
33
41
57
67
78
79
81
84
86
98
99
14
1
2
3
4
5
6
7
8
9
10
11
12
0
low
high
mid
Binary Search
Binary Search
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 15
85
85
Κώδικας
Κώδικας
Δυαδικής
Δυαδικής
Αναζήτησης
Αναζήτησης


αναζητεί
αναζητεί
το
το
x
x
στις
στις
θέσεις
θέσεις
a[l
a[l
]
]
έως
έως
a[h
a[h
]
]


και
και
επιστρέφει
επιστρέφει
τη
τη
θέση
θέση
που
που
βρέθηκε
βρέθηκε


αν
αν
δεν
δεν
βρεθεί
βρεθεί
επιστρέφει
επιστρέφει
NOT_FOUND
NOT_FOUND
function
function
binsrch
binsrch
(l, h, x)
(l, h, x)
m = (h
m = (h
+
+
l)
l)
/
/
2
2


ακέραια
ακέραια
διαίρεση
διαίρεση
if x =
if x =
a[m
a[m
] then return (m
] then return (m
)
)


βρέθηκε
βρέθηκε
else if l = h then return (NOT_FOUND)
else if l = h then return (NOT_FOUND)
else
else
if x >
if x >
a[m
a[m
] then
] then
binsrch
binsrch
(m+1, h, x)
(m+1, h, x)
else
else
binsrch
binsrch
(l, m
(l, m
-
-
1, x)
1, x)
86
86
Ανάλυση
Ανάλυση
Δυαδικής
Δυαδικής
Αναζήτησης
Αναζήτησης
76
76
7
7
76
76
6
6
65
65
5
5
54
54
4
4
54
54
3
3
43
43
2
2
32
32
1
1
21
21
0
0
Αναζητούμε
Αναζητούμε
την
την
τιμή
τιμή
39.
39.
Με
Με
κάθε
κάθε
προσπάθεια
προσπάθεια
,
,
υποδιπλασιάζουμε
υποδιπλασιάζουμε
την
την
περιοχή
περιοχή
αναζήτησης
αναζήτησης
.
.
Πρώτο
Τρίτο
Δεύτερο
K)
4
(2)
2
(1)(
n
T
n
TnT +=+=
)1(lg)
2
(
2
lg
Tn
n
Ti
i
n
ni
i
+=+=
=
=
87
87
Λειτουργίες
Λειτουργίες
επί
επί
Πινάκων
Πινάκων
Μη
Μη
ταξινομημένοι
ταξινομημένοι
Γραμμική
Γραμμική
αναζήτηση
αναζήτηση
Ο
Ο
(
(n
n)
)
Εισαγωγή
Εισαγωγή


Αν
Αν
επιτρέπονται
επιτρέπονται
διπλότυπα
διπλότυπα
,
,
O(1)
O(1)
.
.
Διαγραφή
Διαγραφή
Ο
Ο
(1)
(1)


Διατήρηση
Διατήρηση
σειράς
σειράς


Μετατόπιση
Μετατόπιση
,
,
O(n
O(n
)
)
Ταξινομημένοι
Ταξινομημένοι
Δυαδική
Δυαδική
αναζήτηση
αναζήτηση
O(lg
O(lgn
n)
)
Εισαγωγή
Εισαγωγή
O(n)
O(n)


Εύρεση
Εύρεση
σωστής
σωστής
θέσης
θέσης


Μετατόπιση
Μετατόπιση
στοιχείων
στοιχείων
Διαγραφή
Διαγραφή
O(n)
O(n)


Υποχρεωτικά
Υποχρεωτικά
μετατόπιση
μετατόπιση
Ισχυρό
σημείο
88
88
Κόσκινο
Κόσκινο
του
του
Ερατοσθένη
Ερατοσθένη


βρίσκει
βρίσκει
τους
τους
πρώτους
πρώτους
αριθµούς
αριθµούς
µέχρι
µέχρι
το
το
n
n
declare
declare
a
a
as
as
array
array
[
[
n
n
]
]
of
of
boolean
boolean
for
for
i = 2
i = 2
to
to
n
n
a[i
a[i
] =
] =
PRWTOS
PRWTOS


αρχικά
αρχικά
όλοι
όλοι
θεωρούνται
θεωρούνται
πρώτοι
πρώτοι
endfor
endfor
for
for
i = 2
i = 2
to
to
n
n
if
if
a[i
a[i
]=PRWTOS
]=PRWTOS
then
then


αν
αν
είναι
είναι
πρώτος
πρώτος
,
,
for
for
j =
j =
i+i
i+i
to
to
n
n
step
step
i
i


όλα
όλα
τα
τα
πολλαπλάσιά
πολλαπλάσιά
του
του
a[j
a[j
] =
] =
OXI_PRWTOS
OXI_PRWTOS


∆ΕΝ
∆ΕΝ
είναι
είναι
πρώτοι
πρώτοι
endfor
endfor
endif
endif
endfor
endfor
Βελτιστοποίηση1:
αγνόησε τους άρτιους
Βελτιστοποίηση2:
είναι ανάγκη μέχρι τοn;
89
89
Μειονεκτήματα
Μειονεκτήματα
Πινάκων
Πινάκων
Για
Για
να
να
αλλάξει
αλλάξει
το
το
μέγεθός
μέγεθός
τους
τους
απαιτείται
απαιτείται
να
να
ξαναφτιαχτούν
ξαναφτιαχτούν
.
.


Όσο
Όσο
είναι
είναι
άδεια
άδεια
,
,
έχουμε
έχουμε
σπατάλη
σπατάλη
.
.


Όταν
Όταν
γεμίσουν
γεμίσουν
,
,
πρέπει
πρέπει
να
να
δεσμευτεί
δεσμευτεί
άλλος
άλλος
χώρος
χώρος
,
,
να
να
γίνει
γίνει
αντιγραφή
αντιγραφή
και
και
να
να
αποδεσμευτεί
αποδεσμευτεί
ο
ο
αρχικός
αρχικός
χώρος
χώρος
.
.
Όχι
Όχι
καλές
καλές
επιδόσεις
επιδόσεις
για
για
την
την
αναζήτηση
αναζήτηση
.
.
90
90
public interface ArrayInterface {
public interface ArrayInterface {
/**
/**
* @param
* @param
element
element
το
το
στοιχείο
στοιχείο
που
που
ψάχνω
ψάχνω
να
να
βρω
βρω
* @return
* @return
η
η
θέση
θέση
του
του
στον
στον
πίνακα
πίνακα
,
,
διαφορετικά
διαφορετικά
(
(
-
-
1)
1)
*/
*/
public int
public int
isIn
isIn
(Object element);
(Object element);
/**
/**
* @param element
* @param element
στοιχείο
στοιχείο
που
που
θέλω
θέλω
να
να
προσθέσω
προσθέσω
* @throws Exception
* @throws Exception
αν
αν
ο
ο
πίνακας
πίνακας
είναι
είναι
γεµάτος
γεµάτος
*/
*/
public void
public void
add
add
(Object element) throws Exception ;
(Object element) throws Exception ;
/**
/**
* @param element
* @param element
στοιχείο
στοιχείο
που
που
θέλω
θέλω
να
να
αφαιρέσω
αφαιρέσω
*/
*/
public void
public void
remove
remove
(Object element);
(Object element);
}
}
Διεπαφή
Διεπαφή
ΑΤΔ
ΑΤΔ


Πίνακας
Πίνακας


Φτιάξτεκλάσηπουναυλοποιείτηδιεπαφή
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 16
91
91
Πακέτο
Πακέτο
java.util.Vector
java.util.Vector
Διαχειρίζεται
Διαχειρίζεται
πίνακες
πίνακες
μεταβαλλόμενου
μεταβαλλόμενου
μεγέθους
μεγέθους
και
και
ετερογενών
ετερογενών
περιεχομένων
περιεχομένων
.
.
Vector v = new Vector (100,20)
Vector v = new Vector (100,20)
Όταν
Όταν
γεμίσει
γεμίσει
,
,
μεγαλώνει
μεγαλώνει
.
.
null
null
4
4
3
3
2
2
1
1
0
0
Αναφορά
Αναφορά
Δείκτης
Δείκτης
321
321
Άρης
Άρης
-
-
73.6
73.6
Νίκος
Νίκος
Αρχικό μέγεθος
Αύξηση
92
92
Μέθοδοι
Μέθοδοι
για
για
Vector
Vector
addElement
addElement
("X
("X
")
")
στο
στο
τέλος
τέλος
insertElementAt
insertElementAt
("Y
("Y
", 3)
", 3)
μετακι
μετακι
-
-
νώντας
νώντας
τα
τα
επόμενα
επόμενα
μια
μια
θέση
θέση
προς
προς
τα
τα
κάτω
κάτω
removeElement
removeElement
("X
("X
")
")
διαγράφει
διαγράφει
την
την
πρώτη
πρώτη
εμφάνιση
εμφάνιση
του
του
Χ
Χ
που
που
θα
θα
βρει
βρει
removeElementAt
removeElementAt
(3)
(3)
Συρρίκνωση
Συρρίκνωση
με
με
trimToSize
trimToSize
()
()
Αναζήτηση
Αναζήτηση
με
με
contains
contains
("X
("X
")
")
Δείτετεκμηρίωσηγιαjava.util.Vector
6
6
Στοίβες
Στοίβες
Stacks
Stacks
94
94
Πώς
Πώς
Λειτουργεί
Λειτουργεί
μια
μια
Στοίβα
Στοίβα
Βγαίνει
Βγαίνει
πρώτος
πρώτος
,
,
αυτός
αυτός
που
που
μπήκε
μπήκε
τελευταίος
τελευταίος
.
.
LIFO = Last In First Out
LIFO = Last In First Out
Παραδείγματα
Παραδείγματα
χρήσης
χρήσης
:
:


Πιάτα
Πιάτα
στο
στο
ντουλάπι
ντουλάπι


Οπισθοδρόμηση
Οπισθοδρόμηση
σε
σε
επισκέψεις
επισκέψεις
ιστοσελίδων
ιστοσελίδων


Αναίρεση
Αναίρεση
/
/
Επανάληψη
Επανάληψη
επεξεργασίας
επεξεργασίας
95
95
Στοίβα
Στοίβα
ως
ως
ΑΤΔ
ΑΤΔ
Αποθηκεύει
Αποθηκεύει
κάθε
κάθε
είδους
είδους
αντικείμενο
αντικείμενο
Κύριες
Κύριες
λειτουργίες
λειτουργίες
:
:


void
void
push
push
(object
(object
):
):
εισάγει
εισάγει
στοιχείο
στοιχείο
στη
στη
στοίβα
στοίβα


Object
Object
pop
pop
():
():
αφαιρεί
αφαιρεί
το
το
στοιχείο
στοιχείο
που
που
μπήκε
μπήκε
τελευταίο
τελευταίο


boolean
boolean
isEmpty
isEmpty
():
():
είναι
είναι
η
η
στοίβα
στοίβα
άδεια
άδεια
;
;
Εξαίρεση
Εξαίρεση
εγείρεται
εγείρεται
όταν
όταν
προσπαθήσουμε
προσπαθήσουμε
να
να
αφαιρέσουμε
αφαιρέσουμε
από
από
άδεια
άδεια
στοίβα
στοίβα
.
.
Βοηθητικές
Βοηθητικές
λειτουργίες
λειτουργίες
:
:


Object
Object
top
top
():
():
επιστρέφει
επιστρέφει
το
το
τελευταίο
τελευταίο
στοιχείο
στοιχείο
χωρίς
χωρίς
να
να
το
το
αφαιρεί
αφαιρεί
από
από
τη
τη
στοίβα
στοίβα


int
int
size
size
():
():
επιστρέφει
επιστρέφει
το
το
πλήθος
πλήθος
των
των
αποθηκευμένων
αποθηκευμένων
στοιχείων
στοιχείων
96
96
Διεπαφή
Διεπαφή
Στοίβας
Στοίβας
public interface
public interface
Stack
Stack
Interface {
Interface {
/**
/**
* @param
* @param
το
το
στοιχείο
στοιχείο
που
που
εισάγεται
εισάγεται
στην
στην
κορυφή
κορυφή
της
της
στοίβας
στοίβας
*/
*/
public
public
void
void
push
push
(Object element);
(Object element);
/**
/**
* @
* @
return
return
το
το
στοιχείο
στοιχείο
που
που
αφαιρέθηκε
αφαιρέθηκε
από
από
την
την
στοίβα
στοίβα
*/
*/
public
public
Object
Object
pop
pop
();
();
/**
/**
* @
* @
return
return
αν
αν
είναι
είναι
άδεια
άδεια
η
η
στοίβα
στοίβα
*/
*/
public
public
boolean
boolean
isEmpty
isEmpty
();
();
}
}
Υ
λ
ο
π
οι
ήσ
τ
ε
t
o
p
κ
α
ι
s
i
z
e
χ
ρ
ησ
ι
μ
οπ
οι
ώ
ν
τ
α
ς
τ
ι
ς
β
α
σ
ι
κ
έ
ς
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 17
97
97
Χρήση
Χρήση
:
:
Κλήσεις
Κλήσεις
Μεθόδων
Μεθόδων
Το
Το
περιβάλλον
περιβάλλον
εκτέλεσης
εκτέλεσης
διατηρεί
διατηρεί
την
την
αλυσίδα
αλυσίδα
των
των
ενεργών
ενεργών
κλήσεων
κλήσεων
σε
σε
μια
μια
στοίβα
στοίβα
.
.
Όταν
Όταν
καλείται
καλείται
μια
μια
μέθοδος
μέθοδος
,
,
εισάγεται
εισάγεται
στη
στη
στοίβα
στοίβα
μια
μια
εγγραφή
εγγραφή
με
με


Τοπικές
Τοπικές
μεταβλητές
μεταβλητές
και
και
αποτέλεσμα
αποτέλεσμα


Μετρητής
Μετρητής
προγράμματος
προγράμματος
(
(
PC)
PC)
:
:
ποια
ποια
είναι
είναι
η
η
εντολή
εντολή
που
που
εκτελείται
εκτελείται
Όταν
Όταν
μια
μια
μέθοδος
μέθοδος
επιστρέφει
επιστρέφει
,
,
η
η
εγγραφή
εγγραφή
της
της
αφαιρείται
αφαιρείται
από
από
τη
τη
στοίβα
στοίβα
και
και
η
η
εκτέλεση
εκτέλεση
συνεχίζεται
συνεχίζεται
στη
στη
μέθοδος
μέθοδος
που
που
είναι
είναι
στην
στην
κορυφή
κορυφή
της
της
στοίβας
στοίβας
.
.
main() {
int i = 5;
foo(i);
}
foo(int j) {
int k;
k = j+1;
bar(k);
}
bar(int m) {

}
bar
PC = 1
m = 6
foo
PC = 3
j = 5
k = 6
main
PC = 2
i = 5
98
98
Υλοποίηση
Υλοποίηση
Στοίβας
Στοίβας
Ένας
Ένας
πίνακας
πίνακας
S
S
και
και
μια
μια
μεταβλητή
μεταβλητή
t
t
που
που
δείχνει
δείχνει
στο
στο
στοιχείο
στοιχείο
του
του
πίνακα
πίνακα
που
που
αποθηκεύει
αποθηκεύει
την
την
κορυφή
κορυφή
της
της
στοίβας
στοίβας
.
.
Αρχικά
Αρχικά
t =
t =
-
-
1.
1.
Ο
Ο
πίνακας
πίνακας
ξεκινά
ξεκινά
να
να
γεμίζει
γεμίζει
από
από
το
το
στοιχείο
στοιχείο
με
με
δείκτη
δείκτη
0
0
.
.
Στην
Στην
κατασκευή
κατασκευή
της
της
στοίβας
στοίβας
,
,
δηλώνεται
δηλώνεται
το
το
μέγεθος
μέγεθος
Ν
Ν
του
του
πίνακα
πίνακα
.
.
99
99
Επιδόσεις
Επιδόσεις
&
&
Περιορισμοί
Περιορισμοί
Επιδόσεις
Επιδόσεις


Έστω
Έστω
n
n
το
το
πλήθος
πλήθος
των
των
στοιχείων
στοιχείων
στη
στη
στοίβα
στοίβα


Απαιτούμενος
Απαιτούμενος
χώρος
χώρος
O
O
(
(
n
n
)
)


Κάθε
Κάθε
λειτουργία
λειτουργία
τρέχει
τρέχει
σε
σε
χρόνο
χρόνο
O
O
(1)
(1)
Περιορισμοί
Περιορισμοί


Το
Το
μέγιστο
μέγιστο
μέγεθος
μέγεθος
της
της
στοίβας
στοίβας
πρέπει
πρέπει
να
να
δηλωθεί
δηλωθεί
εκ
εκ
των
των
προτέρων
προτέρων
(
(
κατά
κατά
την
την
κατασκευή
κατασκευή
της
της
)
)
και
και
δεν
δεν
μπορεί
μπορεί
να
να
αλλάξει
αλλάξει
.
.


Αν
Αν
προσπαθήσουμε
προσπαθήσουμε
να
να
εισάγουμε
εισάγουμε
στοιχείο
στοιχείο
σε
σε
μια
μια
πλήρη
πλήρη
στοίβα
στοίβα
,
,
θα
θα
προκληθεί
προκληθεί
εξαίρεση
εξαίρεση
.
.
100
100
Αναπτυσσόμενη
Αναπτυσσόμενη
Στοίβα
Στοίβα
Όταν
Όταν
ζητείται
ζητείται
προσθήκη
προσθήκη
στοιχείου
στοιχείου
και
και
η
η
στοίβα
στοίβα
είναι
είναι
γεμάτη
γεμάτη
,
,
αντί
αντί
να
να
εγερθεί
εγερθεί
εξαίρεση
εξαίρεση
αντικαθιστούμε
αντικαθιστούμε
τον
τον
πίνακα
πίνακα
με
με
έναν
έναν
μεγαλύτερου
μεγαλύτερου
μεγέθους
μεγέθους
.
.


Ο
Ο
παλιός
παλιός
πίνακας
πίνακας
πετιέται
πετιέται
στα
στα
σκουπίδια
σκουπίδια
(
(
garbage collection).
garbage collection).
Πόσο
Πόσο
μεγαλύτερο
μεγαλύτερο
:
:


Αύξησε
Αύξησε
το
το
μέγεθος
μέγεθος
κατά
κατά
c
c
θέσεις
θέσεις
(
(
σταθερά
σταθερά
)
)


Διπλασίασε
Διπλασίασε
το
το
μέγεθος
μέγεθος
Για
Για
συμμετρία
συμμετρία
:
:


Αν
Αν
η
η
πληρότητα
πληρότητα
πέσει
πέσει
κάτω
κάτω
από
από
πχ
πχ
50%,
50%,
να
να
μειωθεί
μειωθεί
το
το
μέγεθος
μέγεθος
.
.
Algorithmpush(o)
if t = S.length − 1 then
A ←new array of
size …
for i ←0 to t do
A[i] ←S[i]
S ←A
t ←t + 1
S[t] ←o
7
7
Ουρές
Ουρές
Queues
Queues
102
102
Πώς
Πώς
Λειτουργεί
Λειτουργεί
μια
μια
Ουρά
Ουρά
Βγαίνει
Βγαίνει
πρώτος
πρώτος
,
,
αυτός
αυτός
που
που
μπήκε
μπήκε
πρώτος
πρώτος
.
.
FIFO = First In First Out
FIFO = First In First Out
Παραδείγματα
Παραδείγματα
χρήσης
χρήσης
:
:


Σειρά
Σειρά
αναμονής
αναμονής
για
για
εξυπηρέτηση
εξυπηρέτηση


Αυτοκίνητα
Αυτοκίνητα
σε
σε
πάρκινγκ
πάρκινγκ
με
με
μια
μια
είσοδο
είσοδο
/
/
έξοδο
έξοδο
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 18
103
103
Ουρά
Ουρά
ως
ως
ΑΤΔ
ΑΤΔ
Εισαγωγές
Εισαγωγές
και
και
διαγραφές
διαγραφές
ακολουθούν
ακολουθούν
FIFO.
FIFO.
Μέγεθος
Μέγεθος
ουράς
ουράς
απεριόριστο
απεριόριστο
Τύπος
Τύπος
στοιχείων
στοιχείων
οποιοσδήποτε
οποιοσδήποτε
Βασικές
Βασικές
λειτουργίες
λειτουργίες
:
:


enqueue
enqueue
(object):
(object):
εισάγει
εισάγει
στοιχείο
στοιχείο
στο
στο
πίσω
πίσω
μέρος
μέρος
της
της
ουράς
ουράς


Object
Object
dequeue
dequeue
():
():
αφαιρεί
αφαιρεί
και
και
επιστρέφει
επιστρέφει
το
το
στοιχείο
στοιχείο
στην
στην
κορυφή
κορυφή
της
της
ουράς
ουράς
104
104
Λειτουργίες
Λειτουργίες
σε
σε
Ουρές
Ουρές
Βοηθητικές
Βοηθητικές
λειτουργίες
λειτουργίες


Object
Object
front
front
():
():
επιστρέφει
επιστρέφει
το
το
στοιχείο
στοιχείο
στην
στην
κορυφή
κορυφή
,
,
χωρίς
χωρίς
να
να
το
το
αφαιρεί
αφαιρεί


int
int
size
size
():
():
πλήθος
πλήθος
στοιχείων
στοιχείων


boolean
boolean
isEmpty
isEmpty
():
():
είναι
είναι
άδεια
άδεια
η
η
ουρά
ουρά
;
;
Εξαιρέσεις
Εξαιρέσεις


Προσπάθεια
Προσπάθεια
εκτέλεσης
εκτέλεσης
της
της
dequeue
dequeue
ή
ή
της
της
front
front
σε
σε
μια
μια
άδεια
άδεια
ουρά
ουρά
προκαλεί
προκαλεί
έγερση
έγερση
της
της
EmptyQueueException
EmptyQueueException
105
105
public interface Queue {
public int size();
public boolean isEmpty();
public Object front()
throws EmptyQueueException;
public void enqueue(Object o);
public Object dequeue()
throws EmptyQueueException;
}
Διεπαφή
Διεπαφή
Ουράς
Ουράς
106
106
Εφαρμογές
Εφαρμογές
για
για
Ουρές
Ουρές
Λίστες
Λίστες
αναμονής
αναμονής
Προσπέλαση
Προσπέλαση
σε
σε
διαμοιραζόμενους
διαμοιραζόμενους
πόρους
πόρους


Παράδειγμα
Παράδειγμα
:
:
δικτυακός
δικτυακός
εκτυπωτής
εκτυπωτής
που
που
εξυπηρετεί
εξυπηρετεί
πολλούς
πολλούς
χρήστες
χρήστες
.
.
107
107
Ουρά
Ουρά
με
με
Πίνακα
Πίνακα
Πίνακας
Πίνακας
μεγέθους
μεγέθουςN
Nμε
με
κυκλικό
κυκλικό
τρόπο
τρόπο
Μεταβλητές
Μεταβλητές
διατηρούν
διατηρούν
κορυφή
κορυφή
και
και
οπίσθια
οπίσθια


f
f
δείχνει
δείχνει
στο
στο
πρώτο
πρώτο
στοιχείο
στοιχείο


r
r δείχνει
δείχνει
αμέσως
αμέσως
μετά
μετά
το
το
τελευταίο
τελευταίο
στοιχείο
στοιχείο
Η
Η
θέση
θέση
r
r
του
του
πίνακα
πίνακα
παραμένει
παραμένει
κενή
κενή
.
.
Αρχικά
Αρχικά
f = r
f = r
άδεια
άδεια
ουρά
ουρά
Q
0 1 2 rf
Q
0 1 2 fr
Αναδιπλωµένη ουρά
108
108
Τρόπος
Τρόπος
Λειτουργίας
Λειτουργίας
Χρησιμοποιούμε
Χρησιμοποιούμε
τον
τον
τελεστή
τελεστή
modulo
modulo
(
(
υπόλοιπο
υπόλοιπο
ακέραιας
ακέραιας
διαίρεσης
διαίρεσης
)
)
Algorithmsize()
return ( N - (f – r ) ) mod N
AlgorithmisEmpty()
return (f = r)
Q
0 1 2 rf
Q
0 1 2 fr
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 19
109
109
Εισαγωγή
Εισαγωγή
/
/
Διαγραφή
Διαγραφή
σε
σε
Ουρά
Ουρά
Παρατηρήστε
Παρατηρήστε
ότι
ότι
μια
μια
θέση
θέση
του
του
πίνακα
πίνακα
παραμένει
παραμένει
πάντα
πάντα
κενή
κενή
.
.
Algorithmenqueue(o)
if size() = N − 1 then
throw
FullQueueException
else
Q[r] ←o
r ←(r + 1) mod N
Algorithmdequeue()
if isEmpty() then
throw
EmptyQueueException
else
o ←Q[f]
f ←(f + 1) mod N
return o
8
8
Συνδεδεμένες
Συνδεδεμένες
Λίστες
Λίστες
Απλά
Απλά
&
&
διπλά
διπλά
συνδεδεμένες
συνδεδεμένες
111
111
Απλά
Απλά
Συνδεδεμένη
Συνδεδεμένη
Λίστα
Λίστα
(
(
ΑΣΛ
ΑΣΛ
)
)
Αλυσίδα
Αλυσίδα
κόμβων
κόμβων
που
που
ο
ο
καθένας
καθένας
παραπέμπει
παραπέμπει
στον
στον
επόμενό
επόμενό
του
του
Ο
Ο
κάθε
κάθε
κόμβος
κόμβος
έχει
έχει
δύο
δύο
τμήματα
τμήματα
:
:


data
data
:
:
περιέχει
περιέχει
είτε
είτε
τα
τα
δεδομένα
δεδομένα
,
,
είτε
είτε
μια
μια
αναφορά
αναφορά
προς
προς
τα
τα
δεδομένα
δεδομένα
.
.


next
next
:
:
περιέχει
περιέχει
μια
μια
αναφορά
αναφορά
προς
προς
τον
τον
επόμενο
επόμενο
κόμβο
κόμβο
της
της
λίστας
λίστας
.
.
Ο
Ο
τελευταίος
τελευταίος
κόμβος
κόμβος
το
το
έχει
έχει
null
null
.
.
Χρειάζεται
Χρειάζεται
να
να
διατηρούμε
διατηρούμε
μια
μια
αναφορά
αναφορά
προς
προς
τον
τον
πρώτο
πρώτο
κόμβο
κόμβο
της
της
λίστας
λίστας
.
.
Linked list
112
112
Χαρακτηριστικά
Χαρακτηριστικά
Λιστών
Λιστών
Καλύτερη
Καλύτερη
χρησιμοποίηση
χρησιμοποίηση
(utilization)
(utilization)
χώρου
χώρου


Εκχωρείται
Εκχωρείται
όσος
όσος
χρησιμοποιείται
χρησιμοποιείται
,
,
αλλά
αλλά


χρειάζεται
χρειάζεται
χώρος
χώρος
για
για
αποθήκευση
αποθήκευση
συνδέσμου
συνδέσμου
.
.
Καθυστέρηση
Καθυστέρηση
εξαιτίας
εξαιτίας
δυναμικής
δυναμικής
δέσμευσης
δέσμευσης
και
και
αποδέσμευσης
αποδέσμευσης
χώρου
χώρου


Στους
Στους
πίνακες
πίνακες
η
η
δέσμευση
δέσμευση
γίνεται
γίνεται
μια
μια
φορά
φορά
στην
στην
αρχή
αρχή
και
και
η
η
αποδέσμευση
αποδέσμευση
στο
στο
τέλος
τέλος
.
.
Στους
Στους
αναπτυσσόμενους
αναπτυσσόμενους
/
/
συρρικνούμενους
συρρικνούμενους
υπάρχει
υπάρχει
κόστος
κόστος
διαχείρισης
διαχείρισης
,
,
όταν
όταν
το
το
μέγεθος
μέγεθος
μεταβάλλεται
μεταβάλλεται
σημαντικά
σημαντικά
113
113
Πότε
Πότε
Χρησιμοποιούμε
Χρησιμοποιούμε
Λίστες
Λίστες
;
;
Όταν
Όταν
ενδιαφερόμαστε
ενδιαφερόμαστε
κυρίως
κυρίως
να
να
διαπερνούμε
διαπερνούμε
γραμμικά
γραμμικά
μια
μια
συλλογή
συλλογή
στοιχείων
στοιχείων


Αντιπαράθεση
Αντιπαράθεση
:
:
τυχαία
τυχαία
προσπέλαση
προσπέλαση
στο
στο
i
i
-
-
οστό
οστό
στοιχείο
στοιχείο
καλύτερα
καλύτερα
πίνακας
πίνακας
Όταν
Όταν
θέλουμε
θέλουμε
να
να
αλλάζουμε
αλλάζουμε
συχνά
συχνά
τη
τη
σειρά
σειρά
των
των
στοιχείων
στοιχείων
και
και
η
η
μετακίνησή
μετακίνησή
τους
τους
κοστίζει
κοστίζει
.
.
Όταν
Όταν
θέλουμε
θέλουμε
να
να
διατηρούμε
διατηρούμε
πολλαπλές
πολλαπλές
ταξινομήσεις
ταξινομήσεις
των
των
ίδιων
ίδιων
στοιχείων
στοιχείων


Πχ
Πχ
ταξινόμηση
ταξινόμηση
υπαλλήλου
υπαλλήλου
με
με
ΑΜ
ΑΜ
,
,
επώνυμο
επώνυμο
&
&
όνομα
όνομα
,
,
τμήμα
τμήμα
,
,
κλπ
κλπ
114
114
Υλοποίηση
Υλοποίηση
Κόμβου
Κόμβου
public class Node {
public class Node {
private Object
private Object
data
data
;
;
private Node
private Node
next
next
;
;
public
public
Node
Node
(Object
(Object
d, Node n) {
d, Node n) {
data = d; next = n; }
data = d; next = n; }
public
public
Node
Node
() {
() {
this(null
this(null
, null); }
, null); }
//
//
µέθοδοι
µέθοδοι
get
get
και
και
set
set
}
}
Κυκλική αναφορά:
ένας κόμβος περιέχει
δεδομένα (data) και μια
αναφορά προς έναν άλλο
κόμβο.
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 20
115
115
Ένθεση
Ένθεση
Στοιχείου
Στοιχείου
στην
στην
Αρχή
Αρχή
ΑΣΛ
ΑΣΛ
1. Κατασκευή
κόμβου:
γέμισμα data,
next = head
2. ενημέρωση
head
1: x = new Node(“Baltimore”, head)
2: head = x
116
116
Ένθεση
Ένθεση
Στοιχείου
Στοιχείου
στο
στο
Τέλος
Τέλος
ΑΣΛ
ΑΣΛ
1: x=new Node(“Zurich”, null) 2: tail.next=x 3: tail=x
Διατηρούμε άλλον
ένα δείκτη στο
τέλος της λίστας
για να μην
χρειάζεται να τη
διατρέχουμε.
117
117
Αναζήτηση
Αναζήτηση
σε
σε
ΑΣΛ
ΑΣΛ
function
function
efind
efind
(list
(list
l, element x) {
l, element x) {
while
while
(
(
l
l
<>
<>
null
null
)
)
//
//
επανάληψη
επανάληψη
if
if
(
(
l.data
l.data
= x
= x
)
)
return true
return true
else l =
else l =
l.next
l.next
//
//
επόµενος
επόµενος
κόµβος
κόµβος
return false }
return false }
function
function
rfind
rfind
(list
(list
l, element x)
l, element x)
if
if
(
(
l = null
l = null
)
)
return false
return false
elseif
elseif
(
(
l.data
l.data
= x
= x
)
)
return true
return true
else
else
rfind
rfind
(l.next
(l.next
, x)
, x)
//
//
αναδροµή
αναδροµή
118
118
Συνένωση
Συνένωση
ΑΣΛ
ΑΣΛ
Concatenation:
Concatenation:
Θέτουμε
Θέτουμε
ως
ως
επόμενο
επόμενο
του
του
τελευταίου
τελευταίου
κόμβου
κόμβου
της
της
μιας
μιας
τον
τον
αρχικό
αρχικό
κόμβο
κόμβο
της
της
άλλης
άλλης
.
.
function
function
concat
concat
(
(
list x, list y) {
list x, list y) {
if
if
(
(
x = null
x = null
)
)
then x
then x
= y
= y
//
//
κενή
κενή
λίστα
λίστα
else {
else {
t = x
t = x
while
while
(
(
t.next
t.next
<> null
<> null
)
)
//
//
διαπέραση
διαπέραση
t =
t =
t.next
t.next
t.next
t.next
= y
= y
//
//
τελευταίος
τελευταίος
κόµβος
κόµβος
}
}
}
}
119
119
Ταξινομημένες
Ταξινομημένες
ΑΣΛ
ΑΣΛ
Σειριακή
Σειριακή
αναζήτηση
αναζήτηση


Δεν
Δεν
συμφέρει
συμφέρει
να
να
χρησιμοποιήσουμε
χρησιμοποιήσουμε
δυαδική
δυαδική
Ένθεση
Ένθεση
κόμβου
κόμβου
Πρέπει
Πρέπει
να
να
διατηρούμε
διατηρούμε
και
και
τον
τον
προηγούμενο
προηγούμενο
Συγχώνευση
Συγχώνευση
(
(
merging)
merging)
δύο
δύο
ταξινομημένων
ταξινομημένων
λιστών
λιστών


Αρχικά
Αρχικά
το
το
αποτέλεσμα
αποτέλεσμα
είναι
είναι
μια
μια
κενή
κενή
λίστα
λίστα
.
.


Συγκρίνουμε
Συγκρίνουμε
τους
τους
πρώτους
πρώτους
κόμβους
κόμβους
της
της
καθεμιάς
καθεμιάς
.
.
Τον
Τον
μικρότερο
μικρότερο
τον
τον
αφαιρούμε
αφαιρούμε
από
από
την
την
λίστα
λίστα
που
που
ανήκει
ανήκει
και
και
τον
τον
εισάγουμε
εισάγουμε
στο
στο
τέλος
τέλος
του
του
αποτελέσματος
αποτελέσματος
.
.


Όταν
Όταν
εξαντληθεί
εξαντληθεί
η
η
μια
μια
λίστα
λίστα
,
,
κολλάμε
κολλάμε
τα
τα
υπόλοιπα
υπόλοιπα
στοιχεία
στοιχεία
της
της
άλλης
άλλης
λίστας
λίστας
στο
στο
αποτέλεσμα
αποτέλεσμα
.
.
120
120
Επιδόσεις
Επιδόσεις
ΑΣΛ
ΑΣΛ
Εισαγωγή
Εισαγωγή
στην
στην
αρχή
αρχή
Ο
Ο
(1)
(1)
Διαγραφή
Διαγραφή
στην
στην
αρχή
αρχή
Ο
Ο
(1)
(1)
Εισαγωγή
Εισαγωγή
στο
στο
τέλος
τέλος
Ο
Ο
(1)
(1)


Εάν
Εάν
διατηρούμε
διατηρούμε
για
για
τη
τη
λίστα
λίστα
τον
τον
αρχικό
αρχικό
και
και
τον
τον
τελικό
τελικό
κόμβο
κόμβο
της
της
Διαγραφή
Διαγραφή
στο
στο
τέλος
τέλος
Ο
Ο
(1)
(1)


Φτάνει
Φτάνει
να
να
μην
μην
χρειάζεται
χρειάζεται
να
να
διατηρούμε
διατηρούμε
τον
τον
τελικό
τελικό
κόμβο
κόμβο
της
της
λίστας
λίστας
-
-
αλλιώς
αλλιώς
απαιτείται
απαιτείται
διαπέραση
διαπέραση
Ο
Ο
(
(
n)
n)
Αναζήτηση
Αναζήτηση
στοιχείου
στοιχείου
Ο
Ο
(
(
n
n
)
)
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 21
121
121
Στοίβες
Στοίβες
&
&
Ουρές
Ουρές
με
με
ΑΣΛ
ΑΣΛ
Στοίβα
Στοίβα
:
:
Στο
Στο
head
head
της
της
λίστας
λίστας
είναι
είναι
η
η
κορυφή
κορυφή
της
της
στοίβας
στοίβας
-
-
όλες
όλες
οι
οι
λειτουργίες
λειτουργίες
σε
σε
Ο
Ο
(1)
(1)
Ουρά
Ουρά
:
:
Χρησιμοποιούμε
Χρησιμοποιούμε
την
την
παραλλαγή
παραλλαγή
της
της
ΑΣΛ
ΑΣΛ
με
με
δείκτες
δείκτες
στον
στον
πρώτο
πρώτο
και
και
στον
στον
τελευ
τελευ
-
-
ταίο
ταίο
κόμβο
κόμβο
της
της
.
.
Στο
Στο
head
head
της
της
λίστας
λίστας
γίνονται
γίνονται
οι
οι
διαγραφές
διαγραφές
και
και
στο
στο
tail
tail
οι
οι
ενθέσεις
ενθέσεις
-
-
όλες
όλες
οι
οι
λειτουργίες
λειτουργίες
σε
σε
Ο
Ο
(1)
(1)
122
122
Επίδοση
Επίδοση
Δυαδικής
Δυαδικής
Αναζήτησης
Αναζήτησης
σε
σε
ΑΣΛ
ΑΣΛ
(
(
χάριν
χάριν
παραδείγματος
παραδείγματος
)
)
Για
Για
να
να
ψάξουμε
ψάξουμε
λίστα
λίστα
μήκους
μήκους
n,
n,
πρέπει
πρέπει
να
να
φτάσουμε
φτάσουμε
στο
στο
μεσαίο
μεσαίο
της
της
στοιχείο
στοιχείο
,
,
που
που
απαιτεί
απαιτεί
n/2
n/2
πράξεις
πράξεις
,
,
και
και
έπειτα
έπειτα
το
το
μέγεθος
μέγεθος
της
της
λίστας
λίστας
προς
προς
αναζήτηση
αναζήτηση
είναι
είναι
n/2
n/2
.
.
Το
Το
κόστος
κόστος
της
της
δυαδικής
δυαδικής
αναζήτησης
αναζήτησης
σε
σε
ΑΣΛ
ΑΣΛ
ισούται
ισούται
με
με
της
της
γραμμικής
γραμμικής
!
!
1)1
2
1
1
)
2
1
(1
(
)
2
1
()1(
2
)
2
(
24
)
4
(
2
)
2
()(
1
1 1
2
lg
−=−



≈+=+=
==++=+=
+
= =
=
=
∑ ∑
nn
nT
nn
T
nnn
T
nn
TnT
i
i
j
i
j
j
n
ni
ji
i
L
123
123
Αναστροφή
Αναστροφή
ΑΣΛ
ΑΣΛ
static Node
static Node
reverse
reverse
(Node x) {
(Node x) {
Node t, y = x, r = null;
Node t, y = x, r = null;
while (y != null) {
while (y != null) {
t =
t =
y.next
y.next
;
;
y.next
y.next
= r;
= r;
r = y;
r = y;
y = t;
y = t;
}
}
return r;
return r;
}
}
Απαιτείταιναδιατηρούμε
συνδέσμουςπροςτρεις
συνεχόμενουςκόμβους:
rδείχνειπροςτηνήδη
ανεστραμμένηλίστα
yτοτμήματηςλίσταςπου
έπεται
to δεύτεροςκόμβοςτηςμη
ανεστραμμένηςλίστας
124
124
Διπλά
Διπλά
Συνδεδεμένες
Συνδεδεμένες
Λίστες
Λίστες
(
(
ΔΣΛ
ΔΣΛ
)
)
Χρήση
Χρήση
για
για
διπλοουρές
διπλοουρές
(
(
dequeues
dequeues
):
):
Ένθεση
Ένθεση
&
&
διαγραφή
διαγραφή
και
και
από
από
τα
τα
δύο
δύο
άκρα
άκρα
Διαπέραση
Διαπέραση
και
και
προς
προς
τις
τις
δύο
δύο
κατευθύνσεις
κατευθύνσεις
.
.
Ειδικοί
Ειδικοί
«
«
άδειοι
άδειοι
»
»
κόμβοι
κόμβοι
για
για
αρχή
αρχή
/
/
τέλος
τέλος
125
125
Κυκλικές
Κυκλικές
Λίστες
Λίστες
Παραλλαγή
Παραλλαγή
διπλά
διπλά
διασυνδεδεμένης
διασυνδεδεμένης
λίστας
λίστας
Δεν
Δεν
χρησιμοποιούμε
χρησιμοποιούμε
ειδικούς
ειδικούς
κόμβους
κόμβους
αρχής
αρχής
/
/
τέλους
τέλους
.
.
9
9
Ακολουθίες
Ακολουθίες
Διανύσματα
Διανύσματα
&
&
Λίστες
Λίστες
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 22
127
127
Ακολουθία
Ακολουθία
ως
ως
ΑΤΔ
ΑΤΔ
Μια
Μια
συλλογή
συλλογή
στοιχείων
στοιχείων
στα
στα
οποία
οποία
έχει
έχει
επιβληθεί
επιβληθεί
κάποια
κάποια
σειρά
σειρά
.
.


Μέσω
Μέσω
θέσης
θέσης
(
(
rank)
rank)
: 1
: 1
ος
ος
2
2
ος
ος
,
,


,
,
n
n
-
-
οστός
οστός


Μέσω
Μέσω
σχέσης
σχέσης
:
:
προηγούμενος
προηγούμενος
/
/
επόμενος
επόμενος
Διάνυσμα
Διάνυσμα
(
(
μονοδιάστατος
μονοδιάστατος
πίνακας
πίνακας
):
):
συλλογή
συλλογή
που
που
τα
τα
στοιχεία
στοιχεία
της
της
προσπελαύνονται
προσπελαύνονται
μέσω
μέσω
θέσης
θέσης
Λίστα
Λίστα
:
:
συλλογή
συλλογή
που
που
τα
τα
στοιχεία
στοιχεία
της
της
προσπελαύνονται
προσπελαύνονται
μέσω
μέσω
σχέσης
σχέσης
128
128
Διεπαφή
Διεπαφή
Διανύσματος
Διανύσματος
Object
Object
elementAtRank(rank
elementAtRank(rank
)
)
void
void
replaceAtRank(rank
replaceAtRank(rank
, element)
, element)
void
void
insertAtRank(rank
insertAtRank(rank
, element)
, element)
Object
Object
removeAtRank(rank
removeAtRank(rank
)
)
Όλες
Όλες
εγείρουν
εγείρουν
εξαίρεση
εξαίρεση
InvalidRank
InvalidRank
αν
αν
η
η
θέση
θέση
δεν
δεν
υπάρχει
υπάρχει
.
.
129
129
Διεπαφή
Διεπαφή
Λίστας
Λίστας
Position first()
Position first()
Position last()
Position last()
boolean
boolean
isFirst(p
isFirst(p
)
)
boolean
boolean
isLast(p
isLast(p
)
)
Position
Position
before(p
before(p
)
)
Position
Position
after(p
after(p
)
)
replaceElement(p,e
replaceElement(p,e
)
)
insertFirst(e
insertFirst(e
)
)
insertLast(e
insertLast(e
)
)
insertBefore(p,e
insertBefore(p,e
)
)
insertAfter(p,e
insertAfter(p,e
)
)
remove(p
remove(p
)
)
Position είναι ένας προσδιορισμός του χώρου
που ενθυλακώνει το στοιχείο, πχ ο κόμβος.
130
130
Επιδόσεις
Επιδόσεις
Υλοποιήσεων
Υλοποιήσεων
Ακολουθίας
Ακολουθίας
O(1)
O(1)
O(1)
O(1)
replaceElement
replaceElement
O(1)
O(1)
O(n
O(n
)
)
remove
remove
O(1)
O(1)
O(n
O(n
)
)
insertAfter
insertAfter
,
,
insertBefore
insertBefore
O(1)
O(1)
O(1)
O(1)
insertFirst
insertFirst
,
,
insertLast
insertLast
O(n
O(n
)
)
O(n
O(n
)
)
insertAtRank
insertAtRank
,
,
removeAtRank
removeAtRank
O(n
O(n
)
)
O(1)
O(1)
replaceAtRank
replaceAtRank
O(1)
O(1)
O(1)
O(1)
first, last, before, after
first, last, before, after
O(n
O(n
)
)
O(1)
O(1)
atRank
atRank
,
,
rankOf
rankOf
,
,
elementAtRank
elementAtRank
O(1)
O(1)
O(1)
O(1)
size,
size,
isEmpty
isEmpty
Λίστα
Λίστα
Πίνακας
Πίνακας
Λειτουργίες
Λειτουργίες
131
131
Άσκηση
Άσκηση
n
n παιδιά
παιδιά
κάθονται
κάθονται
κυκλικά
κυκλικά
και
και
περνούν
περνούν
το
το
καθένα
καθένα
στο
στο
διπλανό
διπλανό
του
του
(
(
κατά
κατά
τη
τη
φορά
φορά
του
του
ρολογιού
ρολογιού
)
)
μια
μια


πατάτα
πατάτα


.
.
Ό
Ό
ταν
ταν
η
η
πατάτα
πατάτα
μεταβιβαστεί
μεταβιβαστείm
mφορές
φορές
,
,
το
το
παιδί
παιδί
που
που
κρατάει
κρατάει
την
την
πατάτα
πατάτα
,
,
αποχωρεί
αποχωρεί
και
και
ο
ο
κύκλος
κύκλος
κλείνει
κλείνει
.
.
Αυτός
Αυτός
που
που
μένει
μένει
τελευταίος
τελευταίος
,
,
κερδίζει
κερδίζει
.
.
Πίνακας
Πίνακας
ή
ή
λίστα
λίστα
είναι
είναι
η
η
καλύτερη
καλύτερη
δομή
δομή
;
;
10
10
Δέντρα
Δέντρα
Δυαδικά
Δυαδικά
Δέντρα
Δέντρα
Αναζήτησης
Αναζήτησης
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 23
133
133
Ορισμοί
Ορισμοί
Ιεραρχικός
Ιεραρχικός
Μη
Μη
γραμμικός
γραμμικός
τύπος
τύπος
δεδομένων
δεδομένων
Γονέας
Γονέας


Παιδιά
Παιδιά
Αδέλφια
Αδέλφια
:
:
κόμβοι
κόμβοι
με
με
κοινό
κοινό
πατέρα
πατέρα
Πρόγονοι
Πρόγονοι


Απόγονοι
Απόγονοι
Μερικοί από τους απογόνους του Αβραάμ,
Γένεση κεφ.25-26
134
134
Ορολογία
Ορολογία
Ρίζα
Ρίζα
:
:
κόμβος
κόμβος
που
που
δεν
δεν
έχει
έχει
γονέα
γονέα
Φύλλα
Φύλλα
:
:
κόμβοι
κόμβοι
χωρίς
χωρίς
παιδιά
παιδιά
Ταξινομημένο
Ταξινομημένο
δέντρο
δέντρο
:
:
υπάρχει
υπάρχει
σειρά
σειρά
στα
στα
παιδιά
παιδιά
135
135
Δυαδικό
Δυαδικό
Δέντρο
Δέντρο
Ταξινομημένο
Ταξινομημένο
δέντρο
δέντρο
,
,
όπου
όπου
κάθε
κάθε
κόμβος
κόμβος
έχει
έχει
το
το
πολύ
πολύ δύο
δύο
παιδιά
παιδιά
,
,
το
το
αριστερό
αριστερό
και
και
το
το
δεξί
δεξί
.
.


Μπορεί
Μπορεί
να
να
έχει
έχει
και
και
ένα
ένα
μόνον
μόνον
παιδί
παιδί
.
.
Σε
Σε
ένα
ένα
γνήσιο
γνήσιο
δυαδικό
δυαδικό
δέντρο
δέντρο
κάθε
κάθε
κόμβος
κόμβος
έχει
έχει
0
0
ή
ή
2
2
παιδιά
παιδιά
.
.
Α
R
H
W
X
E
D
C
L
N
U
U
Y
136
136
Δέντρα
Δέντρα
Αποφάσεων
Αποφάσεων
Γνήσια
Γνήσια
δυαδικά
δυαδικά
δέντρα
δέντρα
που
που
προκύπτουν
προκύπτουν
από
από
τις
τις
απαντήσεις
απαντήσεις
ΝΑΙ
ΝΑΙ


ΟΧΙ
ΟΧΙ
σε
σε
διαδοχικά
διαδοχικά
ερωτήματα
ερωτήματα
.
.
Κλειδί στη θέση START;
Γύρισε το κλειδί.
Ρώτα ειδικό.
Φόρτισέ την.
Μπουκωμένος κινητήρας.
Γυρίζει η μίζα;
ΝΑΙ
ΟΧΙ
ΝΑΙ
ΝΑΙ
ΟΧΙ
ΟΧΙ
Άδεια μπαταρία;
Decision trees
137
137
Αριθμητικές
Αριθμητικές
Παραστάσεις
Παραστάσεις
Εσωτερικοί
Εσωτερικοί
κόμβοι
κόμβοι
είναι
είναι
πράξεις
πράξεις
.
.
Εξωτερικοί
Εξωτερικοί
κόμβοι
κόμβοι
(
(
φύλλα
φύλλα
)
)
είναι
είναι
τιμές
τιμές
.
.
((((3+1)*3)/((9-5)+2))-((3*(7-4))+6))
138
138
Μέθοδοι
Μέθοδοι
Δέντρων
Δέντρων
data
data
():
():
επιστρέφει
επιστρέφει
τα
τα
δεδομένα
δεδομένα
ενός
ενός
κόμβου
κόμβου
root
root
():
():
επιστρέφει
επιστρέφει
τη
τη
ρίζα
ρίζα
ενός
ενός
δέντρου
δέντρου
parent
parent
():
():
επιστρέφει
επιστρέφει
τον
τον
πατέρα
πατέρα
του
του
κόμβου
κόμβου
children
children
():
():
επιστρέφει
επιστρέφει
τα
τα
παιδιά
παιδιά
του
του
κόμβου
κόμβου


Για
Για
δυαδικά
δυαδικά
δέντρα
δέντρα
left
left
(),
(),
right
right
(
(
)
)
isInternal
isInternal
()
()
,
,
isExternal
isExternal
()
()
,
,
isRoot
isRoot
()
()
:
:
βοηθητικές
βοηθητικές
size
size
()
()
,
,
elements
elements
()
()
:
:
βοηθητικές
βοηθητικές
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 24
139
139
Απαριθμητής
Απαριθμητής
Η
Η
μέθοδος
μέθοδος
children
children
()
()
δεν
δεν
επιστρέφει
επιστρέφει
ένα
ένα
αποτέλεσμα
αποτέλεσμα
,
,
αλλά
αλλά
ένα
ένα


σύνολο
σύνολο


τιμών
τιμών
.
.
Ορίζεται
Ορίζεται
να
να
είναι
είναι
απαριθμητής
απαριθμητής
,
,
δηλαδή
δηλαδή
όταν
όταν
κληθεί
κληθεί
,
,
επιστρέφει
επιστρέφει
μια
μια
ακολουθία
ακολουθία
παιδιών
παιδιών
.
.
Διατρέχουμε
Διατρέχουμε
με
με
τη
τη
hasNext
hasNext
()
()
PositionIterator
PositionIterator
ch
ch
=
=
t.children(n
t.children(n
);
);
while
while
ch.
ch.
hasNext
hasNext
() {
() {
//
//
διαπερνά
διαπερνά
τα
τα
παιδιά
παιδιά
του
του
n
n
}
}
Iterator
140
140
Βάθος
Βάθος
Κόμβου
Κόμβου
Η
Η
απόστασή
απόστασή
του
του
από
από
τη
τη
ρίζα
ρίζα
.
.
Ισούται
Ισούται
με
με
το
το
πλήθος
πλήθος
των
των
προγόνων
προγόνων
του
του
κόμβου
κόμβου
.
.
function
function
depth
depth
(t, n)
(t, n)
//
//
επιστρέφει
επιστρέφει
το
το
βάθος
βάθος
του
του
κόμβου
κόμβου
n
n
στο
στο
δέντρο
δέντρο
t
t
if
if
isRoot(t
isRoot(t
, n) return 0
, n) return 0
/
/
/
/
κόμβος
κόμβος
είναι
είναι
ρίζα
ρίζα
του
του
δέντρου
δέντρου
else
else
//
//
το
το
βάθος
βάθος
του
του
πατέρα
πατέρα
προσαυξημένο
προσαυξημένο
κατά
κατά
1
1
return
return
1+
1+
depth(t
depth(t
,
,
t.parent(n
t.parent(n
))
))
//
//
ανεβαίνει
ανεβαίνει
ένα
ένα
επίπεδο
επίπεδο
L
R
H
W
N
D
C
0
1
2
3
141
141
Ύψος
Ύψος
Κόμβου
Κόμβου
&
&
Δέντρου
Δέντρου
Ύψος
Ύψος
ενός
ενός
κόμβου
κόμβου
είναι
είναι
η
η
απόστασή
απόστασή
του
του
από
από
το
το
μακρινότερο
μακρινότερο
παιδί
παιδί
του
του
.
.


Αναδρομικός
Αναδρομικός
υπολογισμός
υπολογισμός
:
:
το
το
μέγιστο
μέγιστο
από
από
τα
τα
ύψη
ύψη
των
των
παιδιών
παιδιών
του
του
προσαυξημένο
προσαυξημένο
κατά
κατά
1.
1.
Ύψος
Ύψος
ενός
ενός
δέντρου
δέντρου
είναι
είναι
το
το
ύψος
ύψος
της
της
ρίζας
ρίζας
του
του
.
.
L
R
H
W
N
D
C
1
3
0
0
2
0
0
142
142
Κόμβοι
Κόμβοι
n
n
και
και
Ύψος
Ύψος
h
h
R
H
N
C
h < n
h=3
n=4
n
n


2
2
h
h
+1
+1
-
-
1
1
L
R
H
W
N
D
C
h=2
n=7
0
2
1
Στο επίπεδο i,
το
το
πολύ
πολύ
2
i
κόμβοι
12
12
2
1
0


=
+
=

h
h
i
i
143
143
Διαπέραση
Διαπέραση
Δέντρου
Δέντρου
Ένας
Ένας
συστηματικός
συστηματικός
τρόπος
τρόπος
επίσκεψης
επίσκεψης
όλων
όλων
των
των
κόμβων
κόμβων
του
του
δέντρου
δέντρου
Συνήθως
Συνήθως
ορίζεται
ορίζεται
αναδρομικά
αναδρομικά
.
.
Θα
Θα
δούμε
δούμε
4
4
τρόπους
τρόπους
διαπέρασης
διαπέρασης
:
:


Εσωδιάταξη
Εσωδιάταξη


Προδιάταξη
Προδιάταξη


Μεταδιάταξη
Μεταδιάταξη


Διάταξη
Διάταξη
κατά
κατά
επίπεδα
επίπεδα
Tree traversal
144
144
Προδιάταξη
Προδιάταξη
Δέντρου
Δέντρου
Επισκεπτόμαστε
Επισκεπτόμαστε
τον
τον
πατέρα
πατέρα
και
και
μετά
μετά
τα
τα
παιδιά
παιδιά
του
του
.
.
Εφαρμόζουμε
Εφαρμόζουμε
αυτόν
αυτόν
τον
τον
κανόνα
κανόνα
αναδρομικά
αναδρομικά
στα
στα
υποδέντρα
υποδέντρα
.
.
Preorder traversal
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 25
145
145
Μεταδιάταξη
Μεταδιάταξη
Δέντρου
Δέντρου
Επισκεπτόμαστε
Επισκεπτόμαστε
όλα
όλα
τα
τα
παιδιά
παιδιά
πριν
πριν
επισκεφθούμε
επισκεφθούμε
τον
τον
πατέρα
πατέρα
τους
τους
.
.
Αρχεία & κατάλογοι
Postordertraversal
146
146
Εσωδιάταξη
Εσωδιάταξη
Δέντρου
Δέντρου
Ορίζεται
Ορίζεται
μόνον
μόνον
για
για
δυαδικά
δυαδικά
δέντρα
δέντρα
.
.
Επισκεπτόμαστε
Επισκεπτόμαστε
πρώτα
πρώτα
το
το
αριστερό
αριστερό
παιδί
παιδί
,
,
μετά
μετά
τον
τον
πατέρα
πατέρα
και
και
τέλος
τέλος
το
το
δεξί
δεξί
παιδί
παιδί
.
.
Inordertraversal
147
147
3
2
1
6
5
4
-2
-1
0
-3
Κ
Υ
Ρ
Ε
Τ
Μ
(Ρ (Τ (Κ (- Ε)) -) (Υ (- Μ))
Σχεδίαση
Σχεδίαση
Δέντρου
Δέντρου
Σειρά επίσκεψης κατά εσωδιάταξη
Βάθος* (-1)
148
148
Δυαδικά
Δυαδικά
Δέντρα
Δέντρα
Αναζήτησης
Αναζήτησης
(
(
ΔΔΑ
ΔΔΑ
)
)
Κάθε
Κάθε
κόμβος
κόμβος
είναι
είναι
μεγαλύτερος
μεγαλύτερος
των
των
κόμβων
κόμβων
του
του
αριστερού
αριστερού
του
του
κλάδου
κλάδου
και
και
μικρότερος
μικρότερος
των
των
κόμβων
κόμβων
του
του
δεξιού
δεξιού
του
του
κλάδου
κλάδου
.
.
Όταν
Όταν
διαπεραστούν
διαπεραστούν
με
με
εσωδιάταξη
εσωδιάταξη
(
(
πατέρας
πατέρας
,
,
αριστερό
αριστερό
,
,
δεξί
δεξί
),
),
εμφανίζονται
εμφανίζονται
τα
τα
στοιχεία
στοιχεία
ταξινομημένα
ταξινομημένα
.
.
3
6
10
14
9
7
8
Binary search trees
149
149
Εισαγωγή
Εισαγωγή
σε
σε
Δέντρα
Δέντρα
Αναζήτησης
Αναζήτησης
Διατρέχει
Διατρέχει
το
το
δέντρο
δέντρο
από
από
τη
τη
ρίζα
ρίζα
προς
προς
τα
τα
κάτω
κάτω
μέχρι
μέχρι
να
να
φτάσει
φτάσει
σε
σε
κάποιο
κάποιο
φύλλο
φύλλο
και
και
εκεί
εκεί
εισάγει
εισάγει
νέο
νέο
φύλλο
φύλλο
.
.
Άρα
Άρα
επίδοση
επίδοση
Ο
Ο
(
(h
h),
),
όπου
όπουh
h το
το
ύψος
ύψος
του
του
δέντρου
δέντρου
.
.
Χειρότερη
Χειρότερη
περίπτωση
περίπτωση
:
:h
h =
=
O(
O(n
n)
)
μακρόστενο
μακρόστενο
δέντρο
δέντρο
//
//
εισάγει
εισάγει
κόμβο
κόμβο
με
με
πληροφορία
πληροφορία
x
x
στο
στο
δέντρο
δέντρο
t
t
function
function
insert
insert
(x
(x
, t)
, t)
//
//
εισάγει
εισάγει
και
και
διπλότυπα
διπλότυπα
if t = null then
if t = null then
t = new
t = new
Node(x
Node(x
, null, null)
, null, null)
//
//
κατασκευή
κατασκευή
else
else
//
//
ψάξε
ψάξε
παρακάτω
παρακάτω
(
(
στα
στα
παιδιά
παιδιά
)
)
if x
if x
<
<
t.data
t.data
then
then
insert
insert
(x
(x
,
,
t.left
t.left
)
)
else
else
insert
insert
(x
(x
,
,
t.right
t.right
)
)
150
150
Διαγραφή
Διαγραφή
σε
σε
Δέντρα
Δέντρα
Αναζήτησης
Αναζήτησης
function
function
remove
remove
(x, t)
(x, t)
//
//
διαγραφή
διαγραφή
κόμβου
κόμβου
με
με
x
x
στο
στο
δέντρο
δέντρο
t
t
if x = null then
if x = null then
return(t
return(t
)
)
//
//
δεν
δεν
βρέθηκε
βρέθηκε


μην
μην
κάνεις
κάνεις
τίποτα
τίποτα
elseif
elseif
x<
x<
t.data
t.data
then
then
t.left
t.left
=
=
remove
remove
(x
(x
,
,
t.left
t.left
)
)
//
//
ψάξε
ψάξε
elseif
elseif
x>
x>
t.data
t.data
then
then
t.right
t.right
=
=
remove
remove
(x
(x
,
,
t.right
t.right
)
)
//
//
ψάξε
ψάξε
else
else
//
//
βρήκαμε
βρήκαμε
τον
τον
κόμβο
κόμβο
που
που
θα
θα
διαγράψουμε
διαγράψουμε
if
if
t.left
t.left
=
=
null then t =
null then t =
t.right
t.right
//
//
μόνο
μόνο
δεξί
δεξί
παιδί
παιδί
elseif
elseif
t.right
t.right
=null then t =
=null then t =
t.left
t.left
//
//
μόνο
μόνο
αριστερό
αριστερό
παιδί
παιδί
else
else
//
//
δύο
δύο
παιδιά
παιδιά
//
//
βρες
βρες
το
το
μικρότερο
μικρότερο
κόμβο
κόμβο
του
του
δεξιού
δεξιού
υποδέντρου
υποδέντρου
t.data
t.data
=
=
findMin(t.right).data
findMin(t.right).data
t.right
t.right
=
=
remove
remove
(t.data
(t.data
,
,
t.right
t.right
)
)
//
//
σβήσε
σβήσε
το
το
μικρό
μικρό
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 26
151
151
Δέντρα
Δέντρα
AVL
AVL
ΔΔΑ
ΔΔΑ
όπου
όπου
για
για
κάθε
κάθε
κόμβο
κόμβο
το
το
ύψος
ύψος
του
του
αριστερού
αριστερού
και
και
το
το
δεξιού
δεξιού
του
του
παιδιού
παιδιού
διαφέρουν
διαφέρουν
το
το
πολύ
πολύ
κατά
κατά
1.
1.
Παρότι
Παρότι
δεν
δεν
είναι
είναι
πλήρη
πλήρη
,
,
έχουν
έχουν
ύψος
ύψος
1,44
1,44
lg
lg
(
(
n
n
+
+
2)
2)
-
-
0,328
0,328
Όλες
Όλες
οι
οι
λειτουργίες
λειτουργίες
σε
σε
Ο
Ο
(
(
lg
lgn
n )
)
AVL
OXI AVL
2
0 0
0
0
1
0
0
0
2
3
1
1
3
Από
Από
Adelson
Adelson
-
-
Velskii
Velskii
Landis
Landis
1962
1962
152
152
Ανισοσκελή
Ανισοσκελή
Δέντρα
Δέντρα
Αναζήτησης
Αναζήτησης
Αν
Αν
ένα
ένα
δυαδικό
δυαδικό
δέντρο
δέντροn
n κόμβων
κόμβων
είναι
είναι
ισοσκελισμένο
ισοσκελισμένο
,
,
τότε
τότε
έχει
έχει
ύψος
ύψος
:
:
Εισαγωγές
Εισαγωγές
/
/
διαγραφές
διαγραφές
μπορεί
μπορεί
να
να
παράγουν
παράγουν
ανισοσκελή
ανισοσκελή
δέντρα
δέντρα
με
με
ύψος
ύψος
n
n
(
(
το
το
χειρότερο
χειρότερο
).
).


Πότε
Πότε
συμβαίνει
συμβαίνει
αυτό
αυτό
;
;
Οι
Οι
μέθοδοι
μέθοδοι
των
των
ΔΔΑ
ΔΔΑ
είναι
είναι
Ο
Ο
(
(
h
h
),
),
όπου
όπουh
h είναι
είναι
το
το
ύψος
ύψος
και
και
Διατήρηση
Διατήρηση
ισορροπίας
ισορροπίας


Τροποποιούμε
Τροποποιούμε
το
το
δυαδικό
δυαδικό
δέντρο
δέντρο
,
,
έτσι
έτσι
ώστε
ώστε
να
να
είναι
είναι


γεμάτο
γεμάτο


κόμβους
κόμβους
 
nlg


[
)
nnh,lg∈
153
153
Διαπέραση
Διαπέραση
κατά
κατά
Επίπεδα
Επίπεδα
function
function
diaperasiKataEpipeda
diaperasiKataEpipeda
(node)
(node)
enqueue(node
enqueue(node
)
)
//
//
τοποθέτησε
τοποθέτησε
στην
στην
ουρά
ουρά
ενόσω
ενόσω
η
η
ουρά
ουρά
δεν
δεν
είναι
είναι
άδεια
άδεια
{
{
w =
w =
dequeue
dequeue
()
()
//
//
κάνε
κάνε
ό
ό
,
,
τι
τι
θέλεις
θέλεις
με
με
το
το
w
w
για
για
κάθε
κάθε
παιδί
παιδί
c
c
του
του
w
w
enqueue(c
enqueue(c
)
)
}
}
154
154
Διασυνδεδεμένα
Διασυνδεδεμένα
Δυαδικά
Δυαδικά
Δέντρα
Δέντρα
Κάθε
Κάθε
κόμβος
κόμβος
του
του
δέντρου
δέντρου
είναι
είναι
ένα
ένα
αντικείμενο
αντικείμενο
με
με
ιδιότητες
ιδιότητες
:
:
data, left, right, parent.
data, left, right, parent.
Ο parent
ίσως δεν
χρειάζεται.
155
155
Αναπαράσταση
Αναπαράσταση
Δυαδικού
Δυαδικού
Δέντρου
Δέντρου
με
με
Διάνυσμα
Διάνυσμα
Πίνακας
Πίνακας
1
1


2
2
h
h
+1
+1
-
-
1
1
θέσεων
θέσεων
,
,
όπου
όπου
h
h
το
το
ύψος
ύψος
του
του
δέντρου
δέντρου
.
.
Η
Η
ρίζα
ρίζα
του
του
δέντρου
δέντρου
στη
στη
θέση
θέση
1.
1.
Το
Το
αριστερό
αριστερό
παιδί
παιδί
του
του
κόμβου
κόμβου
της
της
θέσης
θέσης
χ
χ
στη
στη
θέση
θέση
2
2
χ
χ
και
και
το
το
δεξί
δεξί
στη
στη
θέση
θέση
2
2
χ
χ
+1.
+1.
Γρήγορο
Γρήγορο
Σπατάλη
Σπατάλη
χώρου
χώρου


Ειδικά
Ειδικά
για
για
αραιά
αραιά
δέντρα
δέντρα
156
156
Αναπαράσταση
Αναπαράσταση
Δέντρου
Δέντρου
με
με
Αδέλφια
Αδέλφια
Οι
Οι
κόμβοι
κόμβοι
δεν
δεν
έχουν
έχουν
σταθερό
σταθερό
αριθμό
αριθμό
παιδιών
παιδιών
.
.
Σύνδεσμοι
Σύνδεσμοι
προς
προς
παιδί
παιδί
και
και
πρώτο
πρώτο
αδέλφι
αδέλφι
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 27
157
157
Υπολογιζόμενες
Υπολογιζόμενες
Ιδιότητες
Ιδιότητες
Δέντρων
Δέντρων
Ο
Ο
συντελεστής
συντελεστής
ισορροπίας
ισορροπίας
ενός
ενός
κόμβου
κόμβου
είναι
είναι
η
η
διαφορά
διαφορά
του
του
ύψους
ύψους
του
του
δεξιού
δεξιού
και
και
του
του
αριστερού
αριστερού
του
του
υποδέντρου
υποδέντρου
.
.
Κοντινότερος
Κοντινότερος
κοινός
κοινός
πρόγονος
πρόγονος
δύο
δύο
κόμβων
κόμβων
Η
Η
απόσταση
απόσταση
δύο
δύο
κόμβων
κόμβων
είναι
είναι
το
το
πλήθος
πλήθος
των
των
ακμών
ακμών
αναμεταξύ
αναμεταξύ
τους
τους
.
.
Η
Η
μέγιστη
μέγιστη
απόσταση
απόσταση
ανάμεσα
ανάμεσα
σε
σε
οποιουσδήποτε
οποιουσδήποτε
κόμβους
κόμβους
καλείται
καλείται
διάμετρος
διάμετρος
του
του
δέντρου
δέντρου
.
.
11
11
Ουρές
Ουρές
Προτεραιοτήτων
Προτεραιοτήτων
Δέντρα
Δέντρα
Σωρού
Σωρού
159
159
Ορισμός
Ορισμός
Ουράς
Ουράς
Προτεραιότητας
Προτεραιότητας
Συλλογή
Συλλογή
στοιχείων
στοιχείων
που
που
ενσωματώνουν
ενσωματώνουν
προτεραιότητες
προτεραιότητες


Λίστα
Λίστα
αναμονής
αναμονής
επιβατών
επιβατών
αεροπλάνου
αεροπλάνου


Διεργασίες
Διεργασίες
προς
προς
εξυπηρέτηση
εξυπηρέτηση
στην
στην
ουρά
ουρά
του
του
επεξεργαστή
επεξεργαστή
/
/
εκτυπωτή
εκτυπωτή
Υποστηρίζει
Υποστηρίζει
(
(
α
α
)
)
εισαγωγή
εισαγωγή
και
και
(
(
β
β
)
)
εξαγωγή
εξαγωγή
κατά
κατά
την
την
προτεραιότητα
προτεραιότητα
-
-
όχι
όχι
κατά
κατά
FIFO
FIFO
.
.
Μικρή
Μικρή
τιμή
τιμή


Υψηλή
Υψηλή
προτεραιότητα
προτεραιότητα
Priority queue
160
160
Μέθοδοι
Μέθοδοι
Ουράς
Ουράς
Προτεραιότητας
Προτεραιότητας
insert(d, p)
insert(d, p)
:
:
εισάγει
εισάγει
ένα
ένα
νέο
νέο
στοιχείο
στοιχείο
με
με
τιμή
τιμή
d
d
και
και
προτεραιότητα
προτεραιότητα
p
p
removeMin()
removeMin()
:
:
αφαιρεί
αφαιρεί
από
από
την
την
ουρά
ουρά
και
και
επιστρέφει
επιστρέφει
το
το
στοιχείο
στοιχείο
με
με
την
την
υψηλότερη
υψηλότερη
προτεραιότητα
προτεραιότητα
(
(
μικρότερη
μικρότερη
τιμή
τιμή
)
)
minPriority()
minPriority()
:
:
επιστρέφει
επιστρέφει
την
την
υψηλότερη
υψηλότερη
προτεραιότητα
προτεραιότητα
size()
size()
,
,
isEmpty()
isEmpty()
:
:
βοηθητικές
βοηθητικές
Ουρά προτεραιοτήτων
insert removeMin
161
161
Υλοποίηση
Υλοποίηση
με
με
Μη
Μη
Ταξινομημένη
Ταξινομημένη
Ακολουθία
Ακολουθία
insert
insert


Εισαγωγή
Εισαγωγή
στο
στο
τέλος
τέλος
της
της
ακολουθίας
ακολουθίας


Ο
Ο
(1)
(1)
είτε
είτε
για
για
διάνυσμα
διάνυσμα
,
,
είτε
είτε
για
για
διασυνδεδεμένη
διασυνδεδεμένη
λίστα
λίστα
removeMin
removeMin


Αναζήτηση
Αναζήτηση
της
της
μικρότερης
μικρότερης
προτεραιότητας
προτεραιότητας


Ο
Ο
(
( n
n )
)
για
για
γραμμική
γραμμική
αναζήτηση
αναζήτηση
και
και
κάλυψη
κάλυψη
κενού
κενού
Όχι
Όχι
μόνον
μόνον
στη
στη
χειρότερη
χειρότερη
,
,
αλλά
αλλά
και
και
στην
στην
καλύτερη
καλύτερη
περίπτωση
περίπτωση
162
162
Υλοποίηση
Υλοποίηση
με
με
Ταξινομημένη
Ταξινομημένη
Ακολουθία
Ακολουθία
insert
insert


Για
Για
να
να
τοποθετηθεί
τοποθετηθεί
στη
στη
σωστή
σωστή
θέση
θέση
πρέπει
πρέπει
να
να
αναζητηθεί
αναζητηθεί
:
:
Ο
Ο
(
(
n
n
)
)
για
για
λίστα
λίστα
και
και
Ο
Ο
(
(
lg
lg
n
n
)
)
για
για
διάνυσμα
διάνυσμα
+
+
να
να
εισαχθεί
εισαχθεί
Ο
Ο
(1)
(1)
για
για
λίστα
λίστα
Ο
Ο
(
( n
n )
)
για
για
διάνυσμα
διάνυσμα


Συνολικά
Συνολικά
Ο
Ο
(
( n
n ),
),
όποιο
όποιο
κι
κι
αν
αν
διαλέξεις
διαλέξεις
removeMin
removeMin


O(1)
O(1)
,
,
αφού
αφού
η
η
μικρότερη
μικρότερη
προτεραιότητα
προτεραιότητα
είναι
είναι
τοποθετημένη
τοποθετημένη
στην
στην
πρώτη
πρώτη
θέση
θέση
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 28
163
163
Υλοποίηση
Υλοποίηση
με
με
Δέντρο
Δέντρο
Δυαδικής
Δυαδικής
Αναζήτησης
Αναζήτησης
insert
insert


Για
Για
να
να
τοποθετηθεί
τοποθετηθεί
στη
στη
σωστή
σωστή
θέση
θέση
Ο
Ο
(
( h
h )
)


Στην
Στην
καλύτερη
καλύτερη
περίπτωση
περίπτωση
h
h
= O(
= O(
lg
lg
n
n
)
)
και
και
στη
στη
χειρότερη
χειρότερη
περίπτωση
περίπτωσηh
h =
=
O(
O(n
n ).
).
removeMin
removeMin


Όπως
Όπως
και
και
η
η
insert
insert
Μπορούμε καλύτερα;
164
164
Πλήρες
Πλήρες
Δυαδικό
Δυαδικό
Δέντρο
Δέντρο
Όλα
Όλα
τα
τα
επίπεδά
επίπεδά
του
του
είναι
είναι
γεμάτα
γεμάτα
κόμβους
κόμβους
,
,
εκτός
εκτός
ίσως
ίσως
από
από
το
το
τε
τε
-
-
λευταίο
λευταίο
,
,
όπου
όπου
οι
οι
κενές
κενές
θέσεις
θέσεις
έπονται
έπονται
των
των
κατειλημμένων
κατειλημμένων
.
.
Σωρός
Σωρόςn
n κόμβων
κόμβων
έχει
έχει
ύψος
ύψος
Με
Με
ύψος
ύψοςh
h έχει
έχει
μεταξύ
μεταξύ
2
2
h
h
και
και
2
2
h
h+1
+1
-
-
1
1
κόμβους
κόμβους
.
.
Συνήθως
Συνήθως
αναπαριστάνεται
αναπαριστάνεται
με
με
διάνυσμα
διάνυσμα


Αν
Αν
ένας
ένας
κόμβος
κόμβος
είναι
είναι
στη
στη
θέση
θέση
j
j
,
,
το
το
αριστερό
αριστερό
του
του
παιδί
παιδί
στη
στη
θέση
θέση
2
2j
j,
,
το
το
δεξί
δεξί
στη
στη2j+
2j+1
1
,
,
πατέρας
πατέρας


Σπατάλη
Σπατάλη
< 2
< 2
n
n-
-
1
1
κενοί
κενοί
κόμβοι
κόμβοι
στο
στο
τελευταίο
τελευταίο
επίπεδο
επίπεδο


2/j
 
nlg
ύψος h
1
165
165
Δέντρο
Δέντρο
Σωρού
Σωρού
Πλήρες
Πλήρες
δυαδικό
δυαδικό
δέντρο
δέντρο
όπου
όπου
ο
ο
πατέρας
πατέρας
κάθε
κάθε
κόμβου
κόμβου
είναι
είναι
μικρότερος
μικρότερος
ή
ή
ίσος
ίσος
με
με
το
το
κόμβο
κόμβο
.
.


Κάθε
Κάθε
μονοπάτι
μονοπάτι
από
από
τα
τα
φύλλα
φύλλα
προς
προς
τη
τη
ρίζα
ρίζα
είναι
είναι
σε
σε
φθίνουσα
φθίνουσα
ταξινόμηση
ταξινόμηση
.
.
15
5
4
6
12
14
9
25
16
20
7
11
Σημειώστε διαφορά
με Δυαδικά Δέντρα
Αναζήτησης
Heap tree
166
166
Εφαρμογή
Εφαρμογή
Δέντρων
Δέντρων
Σωρού
Σωρού
Για
Για
την
την
αναπαράσταση
αναπαράσταση
ουράς
ουράς
προτεραιότητας
προτεραιότητας
,
,
τοποθετούμε
τοποθετούμε
τα
τα
κλειδιά
κλειδιά
των
των
στοιχείων
στοιχείων
της
της
ουράς
ουράς
σαν
σαν
στοιχεία
στοιχεία
που
που
ταξινομούμε
ταξινομούμε
στους
στους
κόμβους
κόμβους
.
.
Εισαγωγή
Εισαγωγή
διαδοχικά
διαδοχικά
:
:
(
(
Γιάννης
Γιάννης
, 7), (
, 7), (
Άννα
Άννα
, 5),
, 5),
(
(
Νίκος
Νίκος
, 5), (
, 5), (
Λουκάς
Λουκάς
, 6),
, 6),
(
(
Μαίρη
Μαίρη
, 5), (
, 5), (
Νανά
Νανά
, 6)
, 6)
Μαίρη
5
Νανά
6
Λουκάς
6
Γιάννης
7
Νίκος
5
Άννα
5
167
167
Εισαγωγή
Εισαγωγή
στο
στο
Δέντρο
Δέντρο
Σωρού
Σωρού
15
5
4
6
12
14
9
25
16
20
11
2
7
Κίνηση
φυσαλίδας
Επιδόσεις:
O(h)=O( lgn)
Φ
τ
ι
ά
ξ
τ
ε
κ
ώ
δ
ι
κ
α
i
n
s
e
r
t
168
168
Διαγραφή
Διαγραφή
από
από
το
το
Δέντρο
Δέντρο
Σωρού
Σωρού
-
-
1
1
Η ρίζα (που θα διαγραφεί) αντιμετατίθεται με τον
τελευταίο κόμβο για να διατηρηθεί πλήρες
δέντρο.
15
5
4
6
12
14
9
25
16
20
11
7
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 29
169
169
Διαγραφή
Διαγραφή
από
από
το
το
Δέντρο
Δέντρο
Σωρού
Σωρού
-
-
2
2
Κίνηση σαν βαρίδι:
ανταλλαγή με μικρότερο παιδί
15
5
6
12
14
9
25
16
20
11
7
Επιδόσεις:
O(h)=O( lgn)
Φτιάξτε
κώδικα
removeMin
Το ελάχιστο στοιχείο
μπορεί να επιστραφεί
άμεσα σε αυτόν που
το ζήτησε, και η
αναδιοργάνωση του
σωρού να
προχωρήσει
ασύγχρονα.
170
170
Σύγκριση
Σύγκριση
Επιδόσεων
Επιδόσεων
Αναπαραστάσεις
Αναπαραστάσεις
ουράς
ουράς
προτεραιοτήτων
προτεραιοτήτων
O(
O(
lg
lgn
n )..O(
)..O(n
n )*
)*
Ο
Ο
(
(
lg
lg
n
n
)..O(
)..O(
n
n
)*
)*
Δυαδικό
Δυαδικό
Δέντρο
Δέντρο
Αναζήτησης
Αναζήτησης
O(
O(
lg
lgn
n )
)
O(
O(
lg
lg
n
n
)
)
Σωρός
Σωρός
O(1)
O(1)
O(
O(n
n )
)
removeMin
removeMin
Ο
Ο
(
(
n
n
)
)
Ο
Ο
(1)
(1)
insert
insert
Ταξινομ
Ταξινομ
ημένη
ημένη
λίστα
λίστα
Μη
Μη
ταξινομη
ταξινομη
μένη
μένη
λίστα
λίστα
Δομή
Δομή
Μέθοδος
Μέθοδος
... στη χειρότερη περίπτωση
* Όταν το ΔΔΑ γίνεται ανισοσκελές.
171
171
Κατασκευή
Κατασκευή
Δέντρου
Δέντρου
Σωρού
Σωρού
Για
Για
να
να
κατασκευάσουμε
κατασκευάσουμε
ένα
ένα
σωρό
σωρό
από
απόn
n
στοιχεία
στοιχεία
,
,
μπορούμε
μπορούμε
να
να
εκτελέσουμε
εκτελέσουμεn
n
διαδοχικά
διαδοχικά
insert
insert
με
με
κόστος
κόστος
Αλλά
Αλλά
μπορούμε
μπορούμε
και
και
καλύτερα
καλύτερα
:
:
Φτιάχνουμε
Φτιάχνουμε
ένα
ένα
πλήρες
πλήρες
δέντρο
δέντρο
με
με
τα
τα
n
n
στοιχεία
στοιχεία
(
(
δεν
δεν
είναι
είναι
σωρός
σωρός
)
)
και
και
μετά
μετά
εκτελούμε
εκτελούμε
για
για
όλους
όλους
τους
τους
εσωτερικούς
εσωτερικούς
κόμβους
κόμβους
(
(
από
από
τον
τον
τελευταίο
τελευταίο
προς
προς
τη
τη
ρίζα
ρίζα
)
)


κίνηση
κίνηση
σαν
σαν
βαρίδι
βαρίδι


για
για
να
να
γίνει
γίνει
σωρός
σωρός
.
.
Κόστος
Κόστος
buildHeap
buildHeap
=
=
Ο
Ο
(
(
n
n
)
)
)lg(lg
1
nnOi
n
i
=

=
172
172
Το
Το
πρόβλημα
πρόβλημα
της
της
Επιλογής
Επιλογής
Σε
Σε
μια
μια
ακολουθία
ακολουθία
n
n
στοιχείων
στοιχείων
,
,
βρες
βρες
το
το
k
k
-
-
οστό
οστό
(
(
Selection Problem)
Selection Problem)
Ειδικές
Ειδικές
περιπτώσεις
περιπτώσειςk
k


Για
Γιαk
k =
=
1
1
,
,
βρίσκεις
βρίσκεις
τον
τον
πρώτο
πρώτο
σε
σεn
n


Για
Για
k
k
=
=
2,
2,
βρίσκεις
βρίσκεις
τον
τον
πρώτο
πρώτο
σε
σε
n
n
και
και
τον
τον
δεύτερο
δεύτερο
σε
σε
n
n
-
-
1
1
.
.
Υπάρχει
Υπάρχει
βέλτιστος
βέλτιστος
αλγόριθμος
αλγόριθμος

≈ n
n+lg
+lgn
n


Για
Γιαk
k =
=n
n/2,
/2,
βρίσκεις
βρίσκεις
τον
τον
μεσαίο
μεσαίο
Προσεγγίσεις
Προσεγγίσεις
:
:


Ταξινομείς
Ταξινομείςn
n σε
σε
Ο
Ο
(
(n
n
.
.lg
lgn
n)
)
και
και
παίρνεις
παίρνεις
το
τοk
k-
-
οστό
οστό
σε
σε
Ο
Ο
(1)
(1)


Κατασκευάζεις
Κατασκευάζεις
σωρό
σωρόn
n στοιχείων
στοιχείων
σε
σε
Ο
Ο
(
(n
n)
)
και
και
εκτελείς
εκτελείςk
k
φορές
φορές
removeMin
removeMin
σε
σε
Ο
Ο
(
(k
k.lg
.lgn
n)
)
12
12
Λεξικά
Λεξικά
Πίνακες
Πίνακες
Κατακερματισμού
Κατακερματισμού



0
1
2
3
4
451-229-0004
981-101-0004
025-612-0001
174
174
Ορισμός
Ορισμός
Λεξικού
Λεξικού
Συλλογή
Συλλογή
στοιχείων
στοιχείων
(
(
κλειδί
κλειδί
,
,
τιμή
τιμή
)
)
στην
στην
οποία
οποία
αναζητούμε
αναζητούμε την
την
τιμή
τιμή
με
με
βάση
βάση
το
το
κλειδί
κλειδί
(
(
dictionary).
dictionary).


Δεν
Δεν
αναζητούμε
αναζητούμε
με
με
βάση
βάση
την
την
τιμή
τιμή
του
του
στοιχείου
στοιχείου
,
,
απλώς
απλώς
την
την
ανασύρουμε
ανασύρουμε
.
.


Δεν
Δεν
ενδιαφέρει
ενδιαφέρει
η
η
ταξινομημένη
ταξινομημένη
διαπέραση
διαπέραση
,
,
ή
ή
η
η
εύρεση
εύρεση
ελάχιστου
ελάχιστου
/
/
μέγιστου
μέγιστου
.
.


Δευτερεύουσας
Δευτερεύουσας
σημασίας
σημασίας
:
:
εισαγωγή
εισαγωγή
/
/
διαγραφή
διαγραφή
Παραδείγματα
Παραδείγματα
:
:
τηλεφωνικός
τηλεφωνικός
κατάλογος
κατάλογος
,
,
εγκυκλοπαίδεια
εγκυκλοπαίδεια
,
,
χρονολόγιο
χρονολόγιο
Dictionary
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 30
175
175
Ιδιότητες
Ιδιότητες
Λεξικού
Λεξικού
Το
Το
κλειδί
κλειδί
και
και
το
το
στοιχείο
στοιχείο
μπορεί
μπορεί
να
να
είναι
είναι
οποιουδήποτε
οποιουδήποτε
τύπου
τύπου
.
.
Μη
Μη
ταξινομημένο
ταξινομημένο
λεξικό
λεξικό
:
:
αν
αν
δεν
δεν
ορίζεται
ορίζεται
διάταξη
διάταξη
των
των
κλειδιών
κλειδιών


Ή
Ή
δεν
δεν
έχει
έχει
νόημα
νόημα
,
,
πχ
πχ
τραπεζικοί
τραπεζικοί
λογαριασμοί
λογαριασμοί
Επιτρέπονται
Επιτρέπονται
διπλότυπες
διπλότυπες
τιμές
τιμές
κλειδιών
κλειδιών
.
.


Όταν
Όταν
απαγορεύονται
απαγορεύονται
,
,
έχουμε
έχουμε
μια
μια
συνειρμική
συνειρμική
αποθήκη
αποθήκη
(
(
associative store)
associative store)
.
.
Συμβολίζουμε
Συμβολίζουμε
με
με
n
n
το
το
πλήθος
πλήθος
των
των
στοιχείων
στοιχείων
176
176
Λεξικό
Λεξικό
ως
ως
ΑΤΔ
ΑΤΔ
findElement(k
findElement(k
)
)
:
:
αναζήτηση
αναζήτηση
με
με
το
το
κλειδί
κλειδί
,
,
επιστρέφει
επιστρέφει
την
την
τιμή
τιμή
insertItem(k
insertItem(k
, e)
, e)
:
:
εισάγει
εισάγει
νέο
νέο
στοιχείο
στοιχείο
removeElement(k
removeElement(k
)
)
:
:
διαγράφει
διαγράφει
στοιχείο
στοιχείο
findAllElements(k
findAllElements(k
) :
) :
απαριθμητής
απαριθμητής
removeAllElements(k
removeAllElements(k
)
)
:
:
απαριθμητής
απαριθμητής
size(),
size(),
isEmpty
isEmpty
()
()
keys()
keys()
,
,
elements()
elements()
:
:
απαριθμητές
απαριθμητές
177
177
Αρχείο
Αρχείο
Καταγραφής
Καταγραφής
Μια
Μια
απλοϊκή
απλοϊκή
υλοποίηση
υλοποίηση
λεξικού
λεξικού
ως
ως
μη
μη
ταξινομημένη
ταξινομημένη
γραμμική
γραμμική
ακολουθία
ακολουθία
.
.


Αρχείο
Αρχείο
δοσοληψιών
δοσοληψιών
βάσεων
βάσεων
δεδομένων
δεδομένων
:
:
καταγράφει
καταγράφει
τις
τις
αλλαγές
αλλαγές
στα
στα
δεδομένα
δεδομένα
με
με
τη
τη
σειρά
σειρά
που
που
συμβαίνουν
συμβαίνουν
Γρήγορες
Γρήγορες
εισαγωγές
εισαγωγές
Ο
Ο
(1),
(1),
συμβαίνουν
συμβαίνουν
συχνά
συχνά
Αργές
Αργές
αναζητήσεις
αναζητήσεις
Ο
Ο
(
(
n
n
),
),
συμβαίνουν
συμβαίνουν
αραιά
αραιά
Log File
178
178
Κάδοι
Κάδοι
Για
Για
να
να
αποθηκεύσουμε
αποθηκεύσουμεn
n στοιχεία
στοιχεία
στο
στο
λεξικό
λεξικό
που
που
τα
τα
κλειδιά
κλειδιά
τους
τους
είναι
είναι
ακέραιοι
ακέραιοι
0..
0..Ν
Ν-
-
1
1
,
,
χρησιμοποιούμε
χρησιμοποιούμε
πίνακα
πίνακα
μεγέθους
μεγέθουςΝ
Ν


Στην
Στηνi
i-
-
οστή
οστή
θέση
θέση
αποθηκεύεται
αποθηκεύεται
η
η
τιμή
τιμή
του
του
στοιχείου
στοιχείου
με
με
κλειδί
κλειδίi
i –

αν
αν
υπάρχει
υπάρχει
στο
στο
λεξικό
λεξικό
.
.
Χώρος
Χώρος
Ο
Ο
(
(
N),
N),
χρόνος
χρόνος
Ο
Ο
(1),
(1),
χρησιμοποίηση
χρησιμοποίηση
n
n
/
/
N
N
Δεν
Δεν
επιτρέπονται
επιτρέπονται
διπλότυπα
διπλότυπα
κλειδιά
κλειδιά
,
,
αλ
αλ
-
-
λιώς
λιώς
προκαλούνται
προκαλούνται
συγκρούσεις
συγκρούσεις
(
(
collisions).
collisions).
Buckets
179
179
Κατακερματισμός
Κατακερματισμός
Για
Για
να
να
αντιμετωπίσουμε
αντιμετωπίσουμε
τα
τα
μειονεκτήματα
μειονεκτήματα
των
των
κάδων
κάδων
,
,
αποθηκεύουμε
αποθηκεύουμε
το
το
στοιχείο
στοιχείο
με
με
κλειδί
κλειδίk
k,
,
στη
στη
θέση
θέσηh(k
h(k
)
) του
του
πίνακα
πίνακα
.
.
Συνάρτηση
Συνάρτηση
κατακερματισμού
κατακερματισμού
h
h
:
:


Όταν
Όταν
k
k
δεν
δεν
είναι
είναι
ακέραιος
ακέραιος
,
,
το
το
h(k
h(k
)
)
είναι
είναι
.
.


Έχει
Έχει
τιμές
τιμές
από
από
0
0
ως
ωςΝ
Ν-
-
1.
1.
Συγκρούσεις
Συγκρούσεις
,
,
όταν
όταν
k
k
1
1


k
k
2
2
και
και
h(k
h(k
1
1
) = h(k
) = h(k
2
2
)
)


Διαφορετικά
Διαφορετικά
κλειδιά
κλειδιά
πέφτουν
πέφτουν
στον
στον
ίδιο
ίδιο
κάδο
κάδο
(
(
θέση
θέση
στον
στον
πίνακα
πίνακα
κατακερματισμού
κατακερματισμού
).
).
Hashing
180
180
Πίνακας
Πίνακας
Κατακερματισμού
Κατακερματισμού




0
1
2
3
4
9997
9998
9999

451-229-0004
981-101-0003
200-751-9998
025-612-0001
Συμβολίζουμε μεNτο
μέγεθος του πίνακα,
εδώ Ν = 10000
Χρησιμοποιείται η
συνάρτηση
κατακερματισμού:
«πάρε τα 4 τελευταία
ψηφία», δηλ.
h(k) = kmod Ν
n= πλήθος στοιχείων
Hash Table
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 31
181
181
Αντιμετώπιση
Αντιμετώπιση
Συγκρούσεων
Συγκρούσεων
Όσο
Όσο
δεν
δεν
έχουμε
έχουμε
συγκρούσεις
συγκρούσεις
,
,
ο
ο
κατακερματισμός
κατακερματισμός
αποδίδει
αποδίδει
σε
σε
χρόνο
χρόνο
Ο
Ο
(1)
(1)
Ορισμός
Ορισμός
:
:
Παράγων
Παράγων
Φόρτου
Φόρτουλ
λ
=
=
n / N
n / N


n
n
=
=
πλήθος
πλήθος
στοιχείων
στοιχείων
που
που
έχουν
έχουν
εισαχθεί
εισαχθεί


N
N=
=
μέγεθος
μέγεθος
πίνακα
πίνακα
Στην
Στην
περίπτωση
περίπτωση
συγκρούσεων
συγκρούσεων
τα
τα
στοιχεία
στοιχεία
μπορεί
μπορεί
να
να
φυλάσσονται
φυλάσσονται
:
:


σε
σε
άλλη
άλλη
δομή
δομή
δεδομένων
δεδομένων
έξω
έξω
από
από
τον
τον
πίνακα
πίνακα


σε
σε
εναλλακτικές
εναλλακτικές
θέσεις
θέσεις
του
του
πίνακα
πίνακα
κατακερματισμού
κατακερματισμού
182
182
Εξωτερική
Εξωτερική
Αλυσίδωση
Αλυσίδωση
Αντί
Αντί
ο
ο
κάδος
κάδος
να
να
περιέχει
περιέχει
τα
τα
στοιχεία
στοιχεία
του
του
λεξικού
λεξικού
,
,
παραπέμπει
παραπέμπει
σε
σε
(
(
μη
μη
ταξινομημένες
ταξινομημένες
)
)
ακολουθίες
ακολουθίες
.
.
Καλύτερη
Καλύτερη
περίπτωση
περίπτωση
:
:
n
n
στοιχεία
στοιχεία
ισοκατανέμονται
ισοκατανέμονται
σε
σε
Ν
Ν
κάδους
κάδους
,
,
άρα
άρα
κάθε
κάθε
αλυσίδα
αλυσίδα
έχει
έχει
μήκος
μήκοςn
n
/
/
N
N.
.
Μειώνει
Μειώνει
χρόνο
χρόνο
αναζήτησης
αναζήτησης
Αυξάνει
Αυξάνει
απαιτήσεις
απαιτήσεις
χώρου
χώρου
External Chaining
h(k
h(k
) = k
) = k modulo
modulo
13
13
183
183
Ανοικτή
Ανοικτή
Διευθυνσιοδότηση
Διευθυνσιοδότηση
με
με
Δοκιμή
Δοκιμή
Αδύνατο
Αδύνατο
σημείο
σημείο
εξωτερικής
εξωτερικής
αλυσίδωσης
αλυσίδωσης
είναι
είναι
οι
οι
ακολουθίες
ακολουθίες
λόγω
λόγω
συγκρούσεων
συγκρούσεων
.
.
Όταν
Όταν
η
η
θέση
θέση
είναι
είναι
κατειλημμένη
κατειλημμένη
(
(
σύγκρουση
σύγκρουση
),
),
παρέχεται
παρέχεται
εναλλακτική
εναλλακτική
θέση
θέση
μέσα
μέσα
στον
στον
πίνακα
πίνακα
.
.


Όλα
Όλα
τα
τα
στοιχεία
στοιχεία
μέσα
μέσα
στον
στον
πίνακα
πίνακα
Πρέπει
Πρέπει
οι
οι
κάδοι
κάδοι
να
να
είναι
είναι
περισσότεροι
περισσότεροι
των
των
στοιχείων
στοιχείων
του
του
λεξικού
λεξικού
(
(n
n <
< N
N)
)


Πρακτικά
Πρακτικά
η
η
μέθοδος
μέθοδος
λειτουργεί
λειτουργεί
καλά
καλά
,
,
όταν
ότανλ
λ < 0,5
< 0,5
Open Addressingwith Probing
184
184
Γραμμική
Γραμμική
Δοκιμή
Δοκιμή
Όταν
Όταν
προκύπτει
προκύπτει
σύγκρουση
σύγκρουση
,
,
το
το
στοιχείο
στοιχείο
τοποθετείται
τοποθετείται
στον
στον
επόμενο
επόμενο
μη
μη
κατειλημμένο
κατειλημμένο
κάδο
κάδο
.
.
Διαγραφή
Διαγραφή
:
:
για
για
όλα
όλα
τα
τα
επόμενα
επόμενα
στοιχεία
στοιχεία
της
της
ομάδας
ομάδας
,
,
χρειάζεται
χρειάζεται
επανεισαγωγή
επανεισαγωγή
.
.
Προκαλεί
Προκαλεί
ομαδοποίηση
ομαδοποίηση
(
(
clustering):
clustering):
πάλι
πάλι
σχηματίζονται
σχηματίζονται
«
«
αλυσίδες
αλυσίδες
»
»
μόνο
μόνο
που
που
είναι
είναι
εσωτερικές
εσωτερικές
στον
στον
πίνακα
πίνακα


Αντιμετωπίζεται
Αντιμετωπίζεται
με
με
τετραγωνική
τετραγωνική
δοκιμή
δοκιμή
(
(
quadratic
quadratic
probing
probing
): 0, 1, 4, 9, 16
): 0, 1, 4, 9, 16
Linear Probing
185
185
Παράδειγμα
Παράδειγμα
Γραμμικής
Γραμμικής
Δοκιμής
Δοκιμής


Συνάρτηση
Συνάρτηση
κατακερματισμού
κατακερματισμού
h
h
(
(
x
x
)
)
=
=
x
x
mod
mod
13
13


Εισάγονται
Εισάγονται
τα
τα
κλειδιά
κλειδιά
: 1
: 1
8, 41, 22, 44, 59,
8, 41, 22, 44, 59,
32, 31, 73,
32, 31, 73,
με
με
αυτή
αυτή
τη
τη
σειρά
σειρά
0 1 2 3 4 5 6 7 8 9 10 11 12
41
18
44
59
32
22
31
73
186
186
Ανακατακερματισμός
Ανακατακερματισμός
Όταν
Όταν
ο
ο
παράγων
παράγων
φόρτου
φόρτου
βγαίνει
βγαίνει
εκτός
εκτός
ορίων
ορίων
,
,
αλλάζουμε
αλλάζουμε
το
το
πλήθος
πλήθοςN
N των
των
κάδων
κάδων
και
και
εφαρμόζουμε
εφαρμόζουμε
σε
σε
όλα
όλα
τα
τα
στοιχεία
στοιχεία
την
την
(
(
τροποποιημένη
τροποποιημένη
)
)
συνάρτηση
συνάρτηση
κατακερματισμού
κατακερματισμού
.
.
Rehashing
0
0,5
1
0,8
0,1
Σπατάλη
Σπατάλη
χώρου
χώρου
Πολλές
Πολλές
συγκρούσεις
συγκρούσεις
Ομαδοποίηση
Ομαδοποίηση
Αποδεκτές
Αποδεκτές
τιμές
τιμές
λ
λ
=
=
n
n
/
/
N
N
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 32
187
187
Επιδόσεις
Επιδόσεις
Κατακερματισμού
Κατακερματισμού
Στην
Στην
χειρότερη
χειρότερη
περίπτωση
περίπτωση
,
,
όλες
όλες
οι
οι
λειτουργίες
λειτουργίες
απαιτούν
απαιτούν
χρόνο
χρόνο
Ο
Ο
(
(n
n)
)
.
.
Ο
Ο
αναμενόμενος
αναμενόμενος
χρόνος
χρόνος
είναι
είναι
Ο
Ο
(1),
(1),
φτάνει
φτάνει
ο
ο
συντελεστής
συντελεστής
πληρότητας
πληρότητας
να
να
μην
μην
φτάνει
φτάνει
κοντά
κοντά
στο
στο
100%.
100%.
Κρίσιμοι
Κρίσιμοι
παράγοντες
παράγοντες
:
:


επιλογή
επιλογή
συνάρτησης
συνάρτησης
με
με
βάση
βάση
τις
τις
ιδιότητες
ιδιότητες
και
και
την
την
κατανομή
κατανομή
των
των
κλειδιών
κλειδιών
,
,
και
και


τήρηση
τήρηση
του
τουλ
λ,
,


μέθοδος
μέθοδος
αντιμετώπισης
αντιμετώπισης
των
των
συγκρούσεων
συγκρούσεων
13
13
Ταξινόμηση
Ταξινόμηση
Sorting
Sorting
189
189
Ταξινόμηση
Ταξινόμηση
Εισαγωγής
Εισαγωγής
Το
Το
αριστερό
αριστερό
τμήμα
τμήμα
του
του
πίνακα
πίνακα
είναι
είναι
ταξινομημένο
ταξινομημένο


το
το
δεξί
δεξί
όχι
όχι
.
.
Το
Το
πρώτο
πρώτο
στοιχείο
στοιχείο
του
του
δεξιού
δεξιού
τμήματος
τμήματος
τοποθετείται
τοποθετείται
στη
στη
σωστή
σωστή
θέση
θέση
του
του
στο
στο
αριστερό
αριστερό
τμήμα
τμήμα
,
,
σπρώχνοντας
σπρώχνοντας
τα
τα
υπόλοιπα
υπόλοιπα
μια
μια
θέση
θέση
προς
προς
τα
τα
δεξιά
δεξιά
.
.
Βήματα
Βήματα
:
:
1.
1.
Εύρεση
Εύρεση
σωστής
σωστής
θέσης
θέσης
(
(
σειριακή
σειριακή
/
/
δυαδική
δυαδική
αναζ
αναζ
)
)
2.
2.
Μετατόπιση
Μετατόπιση
των
των
στοιχείων
στοιχείων
από
από
τη
τη
σωστή
σωστή
και
και
μετά
μετά
Insertion Sort
190
190
Επιδόσεις
Επιδόσεις
Ταξινόμησης
Ταξινόμησης
Εισαγωγής
Εισαγωγής
17
Ταξινομημένος υποπίνακας
Μη ταξινομημένος υποπίνακας
0 1 j i-1 i n-1
12
19
21
στοιχείο εισαγωγής
51
Στοιχεία που μετατοπίζονται
Θέση
εισαγωγής
Στο βήμα i (για 1 ≤ i ≤n-1): κάνουμε
(j+1) συγκρίσεις συν (i-j) μετατοπίσεις,
δηλαδή συνολικά i+1 πράξεις
Υποθέτουμε σειριακή αναζήτηση
)(
2
1
)1(
2
2
1
1
nO
nn
i
n
i
=
−+
=+


=
191
191
Ταξινόμηση
Ταξινόμηση
Επιλογής
Επιλογής
Το
Το
αριστερό
αριστερό
τμήμα
τμήμα
του
του
πίνακα
πίνακα
είναι
είναι
ταξινομημένο
ταξινομημένο


το
το
δεξί
δεξί
όχι
όχι
.
.
Βρίσκει
Βρίσκει
το
το
μικρότερο
μικρότερο
στοιχείο
στοιχείο
του
του
δεξιού
δεξιού
τμήματος
τμήματος
και
και
το
το
ενθέτει
ενθέτει
ως
ως
τελευταίο
τελευταίο
του
του
αριστερού
αριστερού
τμήματος
τμήματος


Χρειάζεται
Χρειάζεται
να
να
αντιμεταθέσει
αντιμεταθέσει
(
(
swap)
swap)
δύο
δύο
στοιχεία
στοιχεία
:
:
το
το
πρώτο
πρώτο
του
του
μη
μη
ταξινομημένου
ταξινομημένου
τμήματος
τμήματος
με
με
το
το
μικρότερο
μικρότερο
του
του
μη
μη
ταξινομημένου
ταξινομημένου
τμήματος
τμήματος
.
.
Χρειάζεται
Χρειάζεται
(
(
n
n
-
-
1)+(
1)+(
n
n
-
-
2)+...+ 2+1
2)+...+ 2+1
συγκρίσεις
συγκρίσεις
συν
συν
3
3
n
n
αναθέσεις
αναθέσεις
(
(
για
για
τις
τις
αντιμεταθέσεις
αντιμεταθέσεις
)
)
,
,
δηλαδή
δηλαδή
(
(n
n -
-
1).
1).n
n / 2
/ 2
+3
+3n
n = O(
= O(n
n
2
2
)
)
Selection Sort
192
192
Ταξινόμηση
Ταξινόμηση
Φυσαλίδας
Φυσαλίδας
Σαρώνουμε
Σαρώνουμε
τον
τον
πίνακα
πίνακα
από
από
τα
τα
αριστερά
αριστερά
προς
προς
τα
τα
δεξιά
δεξιά
,
,
αντιμεταθέτοντας
αντιμεταθέτοντας
όλα
όλα
τα
τα
εκτός
εκτός
σειράς
σειράς
στοιχεία
στοιχεία
.
.
Στο
Στο
τέλος
τέλος
του
του
περάσματος
περάσματος
i
i
,
,
οι
οι
i
i
τελευταίες
τελευταίες
θέσεις
θέσεις
είναι
είναι
ταξινομημένες
ταξινομημένες
.
.


Γι
Γι
αυτό
αυτό
το
το
επόμενο
επόμενο
πέρασμα
πέρασμα
ξεκινά
ξεκινά
καλύπτει
καλύπτει
τα
τα
στοιχεία
στοιχεία
0
0
έως
έως
(
(n
n

– i
i
)
)
.
.
Αν
Αν
σε
σε
κάποιο
κάποιο
πέρασμα
πέρασμα
δεν
δεν
γίνει
γίνει
καμιά
καμιά
αντιμετάθεση
αντιμετάθεση
,
,
τερματίζουμε
τερματίζουμε
πρόωρα
πρόωρα
.
.
Bubble Sort
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 33
193
193
Τα
Τα
x
x
εία
εία
Ταξινόμηση
Ταξινόμηση
Επιλέγουμε
Επιλέγουμε
ένα
ένα
στοιχείο
στοιχείο
του
του
πίνακα
πίνακα
(
(
στοιχείο
στοιχείο
διαχωρισμού
διαχωρισμού
,
,
pivot
pivot
).
).
Αναδιατάσσουμε
Αναδιατάσσουμε
τα
τα
στοιχεία
στοιχεία
του
του
πίνακα
πίνακα
,
,
έτσι
έτσι
ώστε
ώστε
όλα
όλα
τα
τα
μικρότερά
μικρότερά
του
του
να
να
είναι
είναι
στον
στον
αριστερό
αριστερό
υποπίνακα
υποπίνακα
και
και
όλα
όλα
τα
τα
μεγαλύτερά
μεγαλύτερά
του
του
στον
στον
δεξί
δεξί
.
.
Το
Το
στοιχείο
στοιχείο
διαχωρισμού
διαχωρισμού
έχει
έχει
τοποθετηθεί
τοποθετηθεί
στη
στη
σωστή
σωστή
του
του
θέση
θέση
.
.
Η
Η
διαδικασία
διαδικασία
εφαρμόζεται
εφαρμόζεται
αναδρομικά
αναδρομικά
για
για
τον
τον
αριστερό
αριστερό
και
και
το
το
δεξί
δεξί
υποπίνακα
υποπίνακα
,
,
μέχρι
μέχρι
να
να
εκφυλιστούν
εκφυλιστούν
σε
σε
μέγεθος
μέγεθος
1.
1.
Quick Sort
194
194
Υλοποίηση
Υλοποίηση
Quicksort
Quicksort
Ως
Ως
στοιχείο
στοιχείο
διαχωρισμού
διαχωρισμού
s
s
επιλέγεται
επιλέγεται
το
το
τελευταίο
τελευταίο
.
.
i
i
ξεκινάει
ξεκινάει
από
από
αριστερό
αριστερό
άκρο
άκρο
και
και
ανεβαίνει
ανεβαίνει
μέχρι
μέχρι
να
να
βρει
βρει
στοιχείο
στοιχείο
>=
>=
του
του
s
s
j
j
ξεκινάει
ξεκινάει
από
από
δεξί
δεξί
άκρο
άκρο
και
και
κατεβαίνει
κατεβαίνει
μέχρι
μέχρι
να
να
βρει
βρει
στοιχείο
στοιχείο
<=
<=
s
s


Και
Και
τα
τα
δύο
δύο
τερματίζουν
τερματίζουν
αν
αν
φτάσουν
φτάσουν
στο
στο
άλλο
άλλο
άκρο
άκρο
ή
ή
να
να
ξεπεράσουν
ξεπεράσουν
το
το
ένα
ένα
το
το
άλλο
άλλο
.
.
Τα
Τα
στοιχεία
στοιχεία
στα
στα
i, j
i, j
αντιμετατίθενται
αντιμετατίθενται
.
.
195
195
Παράδειγμα
Παράδειγμα
Quicksort
Quicksort
6 4 3 1 2 8 5 9 7
Στοιχείο
διαχωρισμού
i j
6 4 3 1 2 5 8 9 7
i
j
6 4 3 1 2 5 7 9 8
Στη σωστή θέση
196
196
Ψευδοκώδικας
Ψευδοκώδικας
*
*
Quicksort
Quicksort
function quicksort(q)
varlist less, pivotList, greater
if length(q) ≤ 1 then
return q
else
select a pivot valuepivot fromq
for each x in q except the pivot element
if x < pivot then add x to less
if x ≥ pivot then add x to greater
add pivotto pivotList
return concatenate(quicksort(less), pivotList, quicksort(greater))
Αναδρομή
* Πηγή: http://en.wikipedia.org/wiki/Quicksort
197
197
Στιγμιότυπα
Στιγμιότυπα
του
του
Πίνακα
Πίνακα
κατά
κατά
το
το
QuickSort
QuickSort
1. Αρχικά μη ταξινομημένος 2.Με κόκκινο το στοιχείο διαχωρισμού
3. Αναδρομή αριστερός και
δεξιός υποπίνακας
4. Τελικό αποτέλεσμα
198
198
Διαίρει
Διαίρει
&
&
Βασίλευε
Βασίλευε
Το
Το
αρχικό
αρχικό
πρόβλημα
πρόβλημα
διασπάται
διασπάται
σε
σε
περισσότερα
περισσότερα
προβλήματα
προβλήματα
μικρότερου
μικρότερου
μεγέθους
μεγέθους
.
.
Το
Το
κάθε
κάθε
υποπρόβλημα
υποπρόβλημα
επιλύεται
επιλύεται
με
με
αναδρομικό
αναδρομικό
τρόπο
τρόπο


Είτε
Είτε
επαναδιασπάται
επαναδιασπάται
,
,
είτε
είτε
φτάνει
φτάνει
σε
σε
οριακό
οριακό
σημείο
σημείο
απλότητας
απλότητας
,
,
οπότε
οπότε
επιλύεται
επιλύεται
.
.
Οι
Οι
επιμέρους
επιμέρους
λύσεις
λύσεις
συνδυάζονται
συνδυάζονται
για
για
να
να
λύσουν
λύσουν
το
το
μεγαλύτερο
μεγαλύτερο
πρόβλημα
πρόβλημα
.
.
Divide & Conquer
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 34
199
199
Επιδόσεις
Επιδόσεις
Quicksort
Quicksort
Η
Η
χειρότερη
χειρότερη
περίπτωση
περίπτωση
συμβαίνει
συμβαίνει
όταν
όταν
ο
ο
πίνακας
πίνακας
είναι
είναι
ήδη
ήδη
ταξινομημένος
ταξινομημένος
.
.


Ο
Ο
αλγόριθμος
αλγόριθμος
αποδίδει
αποδίδει
καλύτερα
καλύτερα
,
,
όσο
όσο
πιο
πιο
τυχαία
τυχαία
είναι
είναι
τοποθετημένα
τοποθετημένα
τα
τα
στοιχεία
στοιχεία
του
του
πίνακα
πίνακα
.
.
Μέση
Μέση
περίπτωση
περίπτωση
1,39.
1,39.
n
n
.lg
.lg
n
n
Βελτιώσεις
Βελτιώσεις
:
:


Στοίβα
Στοίβα
αντί
αντί
αναδρομής
αναδρομής


Ένα
Ένα
πέρασμα
πέρασμα
ελέγχει
ελέγχει
για
για
διάταξη
διάταξη
για
για
να
να
αποφύγουμε
αποφύγουμε
την
την
χειρότερη
χειρότερη
περίπτωση
περίπτωση
.
.
Ιστορικό: Εφευρέθηκε από τον
CAR Hoare to 1961 και είναι ο
ταχύτερος αλγόριθμος
ταξινόμησης γενικής χρήσης.
200
200
Ταξινόμηση
Ταξινόμηση
Σωρού
Σωρού
Εισάγουμε
Εισάγουμε
τα
τα
στοιχεία
στοιχεία
που
που
θέλουμε
θέλουμε
να
να
ταξινομήσουμε
ταξινομήσουμε
σε
σε
έναν
έναν
σωρό
σωρό


Ο
Ο
(
(n
n)
)


Σωρός
Σωρός
:
:
δυαδικό
δυαδικό
,
,
ισοσκελισμένο
ισοσκελισμένο
δέντρο
δέντρο
που
που
κάθε
κάθε
κόμβος
κόμβος
είναι
είναι
μικρότερος
μικρότερος
από
από
τα
τα
παιδιά
παιδιά
του
του
.
.
Διαδοχικά
Διαδοχικά
απομακρύνουμε
απομακρύνουμε
από
από
το
το
σωρό
σωρό
το
το
μικρότερο
μικρότερο
στοιχείο
στοιχείο
του
του
(
(
ρίζα
ρίζα
).
).
Κάθε
Κάθε
φορά
φορά
ο
ο
σωρός
σωρός
αναδιαρθρώνεται
αναδιαρθρώνεται


Ο
Ο
(
(
n
n
.lg
.lg
n
n
)
)
Heap Sort
201
201
Ταξινόμηση
Ταξινόμηση
Συγχώνευσης
Συγχώνευσης
1.
1.
Διαιρεί
Διαιρεί
τον
τον
πίνακα
πίνακα
σε
σε
δύο
δύο
(
(
ίσα
ίσα
)
)
κομμάτια
κομμάτια
μεγέθους
μεγέθους
~
~n
n/2.
/2.
2.
2.
Ταξινομεί
Ταξινομεί
τους
τους
δύο
δύο
υποπίνακες
υποπίνακες
αναδρομικά
αναδρομικά
,
,
μέχρι
μέχρι
το
το
μέγεθος
μέγεθος
να
να
γίνει
γίνει
2.
2.
3.
3.
Συγχωνεύει
Συγχωνεύει
τους
τους
δύο
δύο
υποπίνακες
υποπίνακες
σε
σε
ένα
ένα
διατεταγμένο
διατεταγμένο
πίνακα
πίνακα
.
.
Τακτική
Τακτική
«
«
διαίρει
διαίρει
&
&
βασίλευε
βασίλευε
»
»
Κόστος
Κόστος
χειρότερης
χειρότερης
περίπτωσης
περίπτωσης
:
:
Τ
Τ
(
(
n
n
)=T(
)=T(
n
n
/2)+T(
/2)+T(
n
n
/2)+
/2)+
n
n
=
=
n
n
.lg
.lg
n
n
Merge Sort
202
202
Επιδόσεις
Επιδόσεις
Αλγορίθμων
Αλγορίθμων
Ταξινόμησης
Ταξινόμησης
n
nO(
O(n
n.lg
.lgn
n)
)
O(
O(n
n.lg
.lgn
n)
)
Σωρού
Σωρού
n
n
+lg
+lg
n
n
O(
O(
n
n
.lg
.lg
n
n
)
)
Ο
Ο
(
(
n
n
2
2
)
)
Συγχώνευσης
Συγχώνευσης
2
2n
nO(
O(n
n.lg
.lgn
n)
)
Ο
Ο
(
(n
n
2
2
)
)
Ταχεία
Ταχεία
ταξινόμηση
ταξινόμηση
n
n
Ο
Ο
(
(
n
n
2
2
)
)
Ο
Ο
(
(
n
n
2
2
)
)
Φυσαλίδων
Φυσαλίδων
n

Ο
(
(n
n
2
2
)
)
Ο
Ο
(
(n
n
2
2
)
)
Επιλογής
Επιλογής
n
n
Ο
Ο
(
(
n
n
2
2
)
)
Ο
Ο
(
(
n
n
2
2
)
)
Εισαγωγής
Εισαγωγής
Βέλτιστος
Βέλτιστος
χρόνος
χρόνος
Μέσος
Μέσος
χρόνος
χρόνος
Χείριστος
Χείριστος
χρόνος
χρόνος
Αλγόριθμος
Αλγόριθμος
Ταξινόμησης
Ταξινόμησης
14
14
Γραφήματα
Γραφήματα
Graphs
Graphs
204
204
Ορισμός
Ορισμός
Ένα
Ένα
γράφημα
γράφημα
G
G
αποτελείται
αποτελείται
από
από
ένα
ένα
σύνολο
σύνολο
κορυφών
κορυφών
V
V
και
και
ένα
ένα
σύνολο
σύνολο
ακμών
ακμών
Ε
Ε
.
.
Οι
Οι
ακμές
ακμές
είναι
είναι
ζεύγη
ζεύγη
κορυφών
κορυφών
.
.
Κόρινθος
Σπάρτη
Αίγιο
Τρίπολη
Άργος
Καλαμάτα
Πάτρα
Πύργος
Graph, vertices, edges
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 35
205
205
Παραλλαγές
Παραλλαγές
Γραφημάτων
Γραφημάτων
Ακμές
Ακμές
με
με
βάρη
βάρη
Πολυγραφήματα
Πολυγραφήματα
:
:
μεταξύ
μεταξύ
δύο
δύο
κορυφών
κορυφών
,
,
πολλές
πολλές
ακμές
ακμές
.
.
Όταν
Όταν
δύο
δύο
κορυφές
κορυφές
συνδέονται
συνδέονται
με
με
μια
μια
ακμή
ακμή
,
,
ονομάζονται
ονομάζονται
γειτονικές
γειτονικές
.
.
Ένα
Ένα
σύνολο
σύνολο
συνεχόμενων
συνεχόμενων
ακμών
ακμών
λέγεται
λέγεται
μονοπάτι
μονοπάτι
.
.
X
U
V
W
Z
Y
a
c
b
e
d
f
g
h
i
j
206
206
Κι
Κι
Άλλοι
Άλλοι
Ορισμοί
Ορισμοί
Όταν
Όταν
οι
οι
ακμές
ακμές
έχουν
έχουν
αρχή
αρχή
και
και
τέλος
τέλος
,
,
το
το
γράφημα
γράφημα
λέγεται
λέγεται
κατευθυνόμενο
κατευθυνόμενο
(directed)
(directed)
.
.


Βαθμός
Βαθμός
εισόδου
εισόδου
(in
(in
-
-
degree)
degree)
μιας
μιας
κορυφής
κορυφής
:
:
οι
οι
ακμές
ακμές
που
που
καταλήγουν
καταλήγουν
σε
σε
αυτήν
αυτήν
.
.


Βαθμός
Βαθμός
εξόδου
εξόδου
(out
(out
-
-
degree)
degree)
μιας
μιας
κορυφής
κορυφής
:
:
οι
οι
ακμές
ακμές
που
που
ξεκινούν
ξεκινούν
από
από
αυτήν
αυτήν
.
.


Βαθμός
Βαθμός
(degree)
(degree)
μιας
μιας
κορυφής
κορυφής
:
:
βαθμός
βαθμός
εισόδου
εισόδου
+
+
βαθμός
βαθμός
εξόδου
εξόδου
207
207
Μέθοδοι
Μέθοδοι
του
του
ΑΤΔ
ΑΤΔ
Γράφημα
Γράφημα
Για
Για
μη
μη
κατευθυνόμενα
κατευθυνόμενα
γραφήματα
γραφήματα


vertices()
vertices()
:
:
απαριθμητής
απαριθμητής
κορυφών
κορυφών
γραφήματος
γραφήματος


edges()
edges()
:
:
απαριθμητής
απαριθμητής
ακμών
ακμών
γραφήματος
γραφήματος


incidentEdges(v
incidentEdges(v
)
)
:
:
απαριθμητής
απαριθμητής
ακμών
ακμών
που
που
άπτονται
άπτονται
της
της
κορυφής
κορυφής
v
v


endVertices(e
endVertices(e
)
)
:
:
ζευγάρι
ζευγάρι
κορυφών
κορυφών
που
που
συνδέει
συνδέει
η
η
ακμή
ακμή
e
e
Επιστρέφει
Επιστρέφει
πίνακα
πίνακα
δύο
δύο
στοιχείων
στοιχείων
208
208
Δευτερεύουσες
Δευτερεύουσες
Μέθοδοι
Μέθοδοι
Χρησιμοποιώντας
Χρησιμοποιώντας
τις
τις
προηγούμενες
προηγούμενες
,
,
υλοποιήστε
υλοποιήστε
:
:
numVertices
numVertices
(),
(),
numEdges
numEdges
() :
() :
πλήθος
πλήθος
,
,
degree(v
degree(v
),
),
opposite(v,e
opposite(v,e
)
)
,
,
adjacentVertices(v
adjacentVertices(v
),
),
areAdjacent(v,w
areAdjacent(v,w
)
)
function Vertex
function Vertex
opposite
opposite
(v
(v
, e) {
, e) {
int
int
[] a =
[] a =
endVertices
endVertices
(e
(e
);
);
//
//
πίνακας
πίνακας
2
2
στοιχείων
στοιχείων
return (t[0]
return (t[0]
==
==
v)
v)
?
?
t[1]
t[1]
:
:
t[0]; }
t[0]; }
function
function
boolean
boolean
areAdjacent
areAdjacent
(v
(v
, w) {
, w) {
Iterator
Iterator
x =
x =
incidentEdges
incidentEdges
(v
(v
);
);
while (
while (
x.hasNext
x.hasNext
)
)
if (
if (
opposite
opposite
(v,x
(v,x
)
)
==
==
w) return true;
w) return true;
return false; }
return false; }
209
209
Μέθοδοι
Μέθοδοι
(
(
συνέχεια
συνέχεια
...)
...)
insertVertex
insertVertex
(o
(o
)
)
insertEdge
insertEdge
(v
(v
, w, o)
, w, o)
removeVertex
removeVertex
(v
(v
)
)
removeEdge
removeEdge
(e
(e
)
)
Για
Για
κατευθυνόμε
κατευθυνόμε
-
-
να
να
γραφήματα
γραφήματα
:
:
inDegree(v
inDegree(v
)
)
outDegree(v
outDegree(v
)
)
inIncidentEdges(v
inIncidentEdges(v
)
)
outIncidentEdges(v
outIncidentEdges(v
)
)
inAdjacentVertices(v
inAdjacentVertices(v
)
)
outAdjacent
outAdjacent
-
-
Vertices(v
Vertices(v
)
)
210
210
Πίνακας
Πίνακας
Γειτνιάσεως
Γειτνιάσεως
Πίνακας
Πίνακας
δύο
δύο
διαστάσεων
διαστάσεων
που
που
οι
οι
γραμμές
γραμμές
είναι
είναι
οι
οι
κορυφές
κορυφές
εκκίνησης
εκκίνησης
και
και
οι
οι
στήλες
στήλες
οι
οι
κορυφές
κορυφές
τερματισμού
τερματισμού
.
.
Κάθε
Κάθε
θέση
θέση
του
του
πίνακα
πίνακα
περιέχει
περιέχει
τα
τα
βάρη
βάρη
των
των
ακμών
ακμών
.
.
15
15
28
28
4
4
3
3
6
6
10
10
2
2
6
6
1
1
7
7
23
23
0
0
4
4
3
3
2
2
1
1
0
0
4
1
3
2
0
23
28
15
10
7
6
6
Adjacency Matrix
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 36
211
211
Αξιολόγηση
Αξιολόγηση
Πίνακα
Πίνακα
Γειτνιάσεως
Γειτνιάσεως
Χώρος
Χώρος
Ο
Ο
(
(n
n
2
2
),
),
όπου
όπουn
n =
=
πλήθος
πλήθος
κορυφών
κορυφών
Αν
Αν
το
το
γράφημα
γράφημα
είναι
είναι
μη
μη
κατευθυνόμενο
κατευθυνόμενο
,
,
ο
ο
πίνακας
πίνακας
είναι
είναι
συμμετρικός
συμμετρικός
ως
ως
προς
προς
την
την
κύρια
κύρια
διαγώνιο
διαγώνιο
.
.
Ιδανική
Ιδανική
αναπαράσταση
αναπαράσταση
για
για
«
«
πυκνά
πυκνά
»
»
γραφήματα
γραφήματα
Προσθαφαίρεση
Προσθαφαίρεση
κορυφής
κορυφής
απαιτεί
απαιτεί
αναδιαμόρφωση
αναδιαμόρφωση
του
του
πίνακα
πίνακα
.
.
Οι
Οι
ακμές
ακμές
κορυφής
κορυφής
απαιτούν
απαιτούν
Ο
Ο
(
(
n
n
)
)
χρόνο
χρόνο
.
.
Γειτονικές
Γειτονικές
κορυφές
κορυφές
σε
σε
Ο
Ο
(
(1
1)
)
χρόνο
χρόνο
212
212
Λίστα
Λίστα
Γειτνιάσεως
Γειτνιάσεως
Μια
Μια
πρωτεύουσα
πρωτεύουσα
συλλογή
συλλογή
αναπαριστάνει
αναπαριστάνει
κορυφές
κορυφές
.
.
Κάθε
Κάθε
κορυφή
κορυφή
οδηγεί
οδηγεί
σε
σε
μια
μια
δευτερεύουσα
δευτερεύουσα
συλλογή
συλλογή
που
που
περιέχει
περιέχει
τις
τις
γειτονικές
γειτονικές
κορυφές
κορυφές
.
.
4
1
3
2
0
23
28
15
10
7
6
6
4
4
3
3
2
2
1
1
0
0
6
6
1
1
10
10
0
0
23
23
2
2
6
6
3
3
7
7
3
3
28
28
2
2
15
15
3
3
Adjacency list
213
213
Αξιολόγηση
Αξιολόγηση
Λίστας
Λίστας
Γειτνιάσεως
Γειτνιάσεως
Χώρος
Χώρος
Ο
Ο
(
(n
n+
+m
m),
),
όπου
όπουn
n =
=
πλήθος
πλήθος
κορυφών
κορυφών
και
καιm
m=
=
πλήθος
πλήθος
ακμών
ακμών


Λιγότερος
Λιγότερος
από
από
τον
τον
πίνακα
πίνακα
γειτνιάσεως
γειτνιάσεως
Ιδανική
Ιδανική
αναπαράσταση
αναπαράσταση
για
για
«
«
αραιά
αραιά
»
»
γραφήματα
γραφήματα
Οι
Οι
ακμές
ακμές
κορυφής
κορυφής
απαιτούν
απαιτούν
χρόνο
χρόνο
της
της
τάξης
τάξης
του
του
βαθμού
βαθμού
της
της
κορυφής
κορυφής
.
.


Ενώ
Ενώ
απαιτούσαν
απαιτούσαν
σταθερό
σταθερό
χρόνο
χρόνο
με
με
τον
τον
πίνακα
πίνακα
.
.
214
214
Πίνακας
Πίνακας
Ακμών
Ακμών
Χρησιμοποιεί
Χρησιμοποιεί
έναν
έναν
πίνακα
πίνακα
κορυφές
κορυφές
και
και
έναν
έναν
για
για
τις
τις
ακμές
ακμές
,
,
όπου
όπου
εκτός
εκτός
από
από
το
το
βάρος
βάρος
τους
τους
αποθηκεύονται
αποθηκεύονται
και
και
δύο
δύο
δείκτες
δείκτες
προς
προς
τις
τις
κορυφές
κορυφές
.
.
4
1
3
2
0
23
28
15
10
7
6
6
4
4
3
3
2
2
1
1
0
0
15
15
3
3
4
4
28
28
2
2
4
4
10
10
0
0
2
2
6
6
1
1
2
2
6
6
3
3
1
1
7
7
3
3
0
0
23
23
2
2
0
0
Edge Matrix
215
215
Παραδείγματα
Παραδείγματα
Αναπαραστάσεων
Αναπαραστάσεων
Κατευθυνόμενο γράφημα
Μη Κατευθυνόμενο γράφημα
216
216
Επιδόσεις
Επιδόσεις
Αναπαραστάσεων
Αναπαραστάσεων
1
1
βαθµός
βαθµός
(
(
v
v
)
)
1
1
1
1
ελάχιστο
ελάχιστο
(
(
βαθµός
βαθµός
(
(
v
v
),
),
βαθµός
βαθµός
(
(
w
w
))
))
βαθµός
βαθµός
(
(
v
v
)
)
n
n
+
+
m
m
Λίστα
Λίστα
Γειτνιάσεως
Γειτνιάσεως
1
1
n
n
2
2
1
1
n
n
2
2
1
1
n
n
n
n
2
2
Πίνακας
Πίνακας
Γειτνιάσεως
Γειτνιάσεως
n
n
+
+
m
m
Χώρος
Χώρος
m
m
removeVertex(
removeVertex(
v
v
)
)
1
1
insertEdge
insertEdge
(
(
v, w, o
v, w, o
)
)
1
1
insertVertex
insertVertex
(
(
o
o
)
)
1
1
removeEdge
removeEdge
(
(
e
e
)
)
m
m
areAdjacent (
areAdjacent (
v, w
v, w
)
)
m
m
incidentEdges(
incidentEdges(
v
v
)
)
Πίνακας
Πίνακας
Ακμών
Ακμών
n
n
κορυφές
κορυφές
m
m
ακμές
ακμές
όχι
όχι
παράλληλες
παράλληλες
ακμές
ακμές
όχι
όχι
ακμές
ακμές
(
(
v, v)
v, v)
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 37
217
217
Υπογραφήματα
Υπογραφήματα
Υπογράφημα
Υπογράφημα
(
(
subgraph
subgraph
)
)
S
S
ενός
ενός
γραφήματος
γραφήματος
G
G
είναι
είναι
ένα
ένα
γράφημα
γράφημα
που
που


οι
οι
ακμές
ακμές
του
του
S
S
είναι
είναι
υποσύνολο
υποσύνολο
ων
ων
ακμών
ακμών
του
του
G
G


οι
οι
κορυφές
κορυφές
του
του
S
S
είναι
είναι
υποσύ
υποσύ
-
-
νολο
νολο
των
των
κορυφών
κορυφών
του
του
G
G
Επικαλύπτον
Επικαλύπτον
(spanning)
(spanning)
υπογράφημα
υπογράφημα
του
του
G
G
είναι
είναι
ένα
ένα
υπογράφημα
υπογράφημα
που
που
περιέχει
περιέχει
όλες
όλες
τις
τις
κορυφές
κορυφές
του
του
G.
G.
218
218
Συνεκτικότητα
Συνεκτικότητα
Γραφημάτων
Γραφημάτων
Ένα
Ένα
γράφημα
γράφημα
με
με
n
n
κορυφές
κορυφές
,
,
έχει
έχει
Ο
Ο
(
(n
n
2
2
)
)
ακμές
ακμές
.
.
Ένα
Ένα
γράφημα
γράφημα
είναι
είναι
συνεκτικό
συνεκτικό
αν
αν
υπάρχει
υπάρχει
μονοπάτι
μονοπάτι
ανάμεσα
ανάμεσα
σε
σε
όλες
όλες
του
του
τις
τις
κορυφές
κορυφές
.
.


Έχει
Έχει
τουλάχιστον
τουλάχιστον
n
n
-
-
1
1
ακμές
ακμές
.
.
Συνεκτικό γράφηµα
Μη συνεκτικό γράφηµα µε
δύο συνεκτικές συνιστώσες
219
219
Δέντρα
Δέντρα
&
&
Δάση
Δάση
Δάσος
Δάσος
είναι
είναι
ένα
ένα
γράφημα
γράφημα
χωρίς
χωρίς
κύκλους
κύκλους
.
.
Δέντρο
Δέντρο
είναι
είναι
ένα
ένα
συνεκτικό
συνεκτικό
γράφημα
γράφημα
δίχως
δίχως
κύκλους
κύκλους
.
.


Κάθε
Κάθε
δέντρο
δέντρο
n
n
κορυφών
κορυφών
έχει
έχει
ακριβώς
ακριβώς n
n
-
-
1
1
ακμές
ακμές
.
.
Μη ‘γεωμετρικός’
ορισμός
220
220
Αναζήτηση
Αναζήτηση
σε
σε
Βάθος
Βάθος
(
(
ΑσΒ
ΑσΒ
)
)
Αρχικά
Αρχικά
όλες
όλες
οι
οι
κορυφές
κορυφές
μαρκάρονται
μαρκάρονται
ως
ως
ανεξερεύνητες
ανεξερεύνητες
.
.
Η
Η
διαπέραση
διαπέραση
ξεκινά
ξεκινά
από
από
μια
μια
τυχαία
τυχαία
κορυφή
κορυφή
v
v
η
η
οποία
οποία
σημειώνεται
σημειώνεται
ως
ως
εξερευνημένη
εξερευνημένη
.
.
Επιλέγεται
Επιλέγεται
τυχαία
τυχαία
μια
μια
ακμή
ακμή
της
της
v
v
.
.


Αν
Αν
αυτή
αυτή
οδηγεί
οδηγεί
σε
σε
μια
μια
ανεξερεύνητη
ανεξερεύνητη
κορυφή
κορυφή
w,
w,
ο
ο
αλγόριθμος
αλγόριθμος
εφαρμόζεται
εφαρμόζεται
αναδρομικά
αναδρομικά
στη
στη
w.
w.


[
[
Όταν
Όταν
δεν
δεν
βρεθεί
βρεθεί
καμιά
καμιά
ανεξερεύνητη
ανεξερεύνητη
κορυφή
κορυφή
,
,
η
η
αναζήτηση
αναζήτηση
συνεχίζεται
συνεχίζεται
από
από
την
την
προηγούμενη
προηγούμενη
επισκεφθείσα
επισκεφθείσα
κορυφή
κορυφή
.]
.]
221
221
Παράδειγμα
Παράδειγμα
ΑσΒ
ΑσΒ
Αρχική
Αρχική
κορυφή
κορυφή
Α
Α


Υποθέτουμε
Υποθέτουμε
ότι
ότι
επιλέγεται
επιλέγεται
η
η
μικρότερη
μικρότερη
κορυφή
κορυφή
C
B
A
F
G
K
J
I
H
E
D
8
7
6
5
4
3
2
1
0
9
10
Ακμές
δέντρου
Οπισθοακμές
ΑΡΧΗ
ΤΕΛΟΣ
222
222
Ψευδοκώδικας
Ψευδοκώδικας
ΑσΒ
ΑσΒ
διαδικασία
διαδικασία
ΑσΒ
ΑσΒ
(
(
κορυφή
κορυφή
v) {
v) {
εάν
εάν
δεν
δεν
έχουμε
έχουμε
επισκεφθεί
επισκεφθεί
την
την
κορυφή
κορυφή
v {
v {
σημείωσε
σημείωσε
ότι
ότι
τώρα
τώρα
επισκεπτόμαστε
επισκεπτόμαστε
τη
τη
v
v
για
για
όλες
όλες
τις
τις
ακμές
ακμές
(v, w)
(v, w)
//
//
ξεκινούν
ξεκινούν
από
από
τη
τη
v
v
και
και
οδηγούν
οδηγούν
σε
σε
μια
μια
w
w
ΑσΒ
ΑσΒ
(
(
w)
w)
//
//
αναδρομή
αναδρομή
}
}
}
}
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 38
223
223
Παράδειγμα
Παράδειγμα
ΑσΒ
ΑσΒ
D
B
A
C
E
D
B
A
C
E
D
B
A
C
E
ακµή που έχουµε επισκεφθεί
οπισθοακµή
A
κορυφή που έχουµε επισκεφθεί
A
κορυφή που δεν έχουµε επισκεφθεί
ακµή που δεν έχουµε επισκεφθεί
224
224
Παράδειγμα
Παράδειγμα
(
(
συνέχεια
συνέχεια
)
)
D
B
A
C
E
D
B
A
C
E
D
B
A
C
E
D
B
A
C
E
225
225
Παρατηρήσεις
Παρατηρήσεις
για
για
ΑσΒ
ΑσΒ
Επισκέπτεται
Επισκέπτεται
όλες
όλες
τις
τις
κορυφές
κορυφές
που
που
ανήκουν
ανήκουν
στην
στην
ίδια
ίδια
συνεκτική
συνεκτική
συνιστώσα
συνιστώσα
που
που
ανήκει
ανήκει
η
η
κορυφή
κορυφή
από
από
την
την
οποία
οποία
ξεκίνησε
ξεκίνησε
ο
ο
ΑσΒ
ΑσΒ
.
.
Οι
Οι
ακμές
ακμές
που
που
ακολουθεί
ακολουθεί
συνιστούν
συνιστούν
ένα
ένα
επικαλύπτον
επικαλύπτον
δέντρο
δέντρο
του
του
γραφήματος
γραφήματος
.
.
Φτιάχνει
Φτιάχνει
«
«
μακρόστενα
μακρόστενα
»
»
δέντρα
δέντρα
:
:
μεγάλο
μεγάλο
ύψος
ύψος
,
,
μικρό
μικρό
πλάτος
πλάτος
Είναι
Είναι
γενίκευση
γενίκευση
της
της
προδιάταξης
προδιάταξης
που
που
είχαμε
είχαμε
δει
δει
στα
στα
δέντρα
δέντρα
.
.
226
226
Λαβύρινθος
Λαβύρινθος
Ο
Ο
αλγόριθμος
αλγόριθμος
της
της
ΑσΒ
ΑσΒ
είναι
είναι
ανάλογος
ανάλογος
με
με
τη
τη
στρατηγική
στρατηγική
που
που
ακολουθούμε
ακολουθούμε
στο
στο
παιχνίδι
παιχνίδι
όπου
όπου
εξερευνούμε
εξερευνούμε
ένα
ένα
λαβύρινθο
λαβύρινθο
.
.
227
227
Αναζήτηση
Αναζήτηση
σε
σε
Πλάτος
Πλάτος
(
(
ΑσΠ
ΑσΠ
)
)
Διατρέχει
Διατρέχει
το
το
γράφημα
γράφημα
κατά
κατά
«
«
επίπεδα
επίπεδα
»
»
.
.
Για
Για
κάθε
κάθε
κορυφή
κορυφή
επισκέπτεται
επισκέπτεται
όλες
όλες
τις
τις
γειτονικές
γειτονικές
της
της
(
(
που
που
δεν
δεν
έχει
έχει
ήδη
ήδη
επισκεφθεί
επισκεφθεί
).
).
Έπειτα
Έπειτα
ξεκινά
ξεκινά
τις
τις
επισκέψεις
επισκέψεις
στους
στους
γείτονες
γείτονες
των
των
κορυφών
κορυφών
του
του
προηγούμενου
προηγούμενου
επιπέδου
επιπέδου
.
.
Ο
Ο
ΑσΠ
ΑσΠ
ξεκινά
ξεκινά
από
από
μια
μια
(
(
τυχαία
τυχαία
)
)
κορυφή
κορυφή
και
και
επισκέπτεται
επισκέπτεται


όλες
όλες
τις
τις
κορυφές
κορυφές
που
που
έχουν
έχουν
απόσταση
απόσταση
1,
1,


μετά
μετά
όλες
όλες
εκείνες
εκείνες
που
που
έχουν
έχουν
απόσταση
απόσταση
2,
2,
κοκ
κοκ
.
.
228
228
Παράδειγμα
Παράδειγμα
ΑσΠ
ΑσΠ
Αρχική
Αρχική
κορυφή
κορυφή
Α
Α


Υποθέτουμε
Υποθέτουμε
ότι
ότι
επιλέγεται
επιλέγεται
η
η
μικρότερη
μικρότερη
κορυφή
κορυφή
C
B
A
F
G
K
J
I
H
E
D
8
7
6
5
4
3
2
10
9
10
Ε
π
ί
π
ε
δ
ο
3
Ε
π
ί
π
ε
δ
ο
2
Ε
π
ί
π
ε
δ
ο
1
Ακμές
δέντρου
Ακμές
διασταυρώσεως
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 39
229
229
Ψευδοκώδικας
Ψευδοκώδικας
ΑσΠ
ΑσΠ
διαδικασία
διαδικασία
ΑσΠ
ΑσΠ
(
(
γράφημα
γράφημα
G
G
) {
) {
θέσε
θέσε
όλες
όλες
τις
τις
κορυφές
κορυφές
του
του
G
G
ως
ως
ανεξερεύνητες
ανεξερεύνητες
φτιάξε
φτιάξε
μια
μια
ουρά
ουρά
q
q
τοποθέτησε
τοποθέτησε
στην
στην
ουρά
ουρά
το
το
αρχικό
αρχικό
στοιχείο
στοιχείο
της
της
διαπέρασης
διαπέρασης
ενόσω
ενόσω
η
η
ουρά
ουρά
δεν
δεν
είναι
είναι
άδεια
άδεια
v =
v =
q.dequeue
q.dequeue
()
()
εάν
εάν
δεν
δεν
την
την
έχει
έχει
επισκεφθεί
επισκεφθεί
ακόμη
ακόμη
{
{
σημείωσε
σημείωσε
ότι
ότι
την
την
επισκέφθηκες
επισκέφθηκες
για
για
όλες
όλες
τις
τις
ακμές
ακμές
(
(
v, w)
v, w)
που
που
ξεκινούν
ξεκινούν
από
από
την
την
v
v
q.enqueue(w
q.enqueue(w
)
)
}
}
//
//
τέλος
τέλος
εάν
εάν
}
}
//
//
τέλος
τέλος
ενόσω
ενόσω
}
}
//
//
τέλος
τέλος
ΑσΠ
ΑσΠ
230
230
Παρατηρήσεις
Παρατηρήσεις
για
για
ΑσΠ
ΑσΠ
Η
Η
υλοποίηση
υλοποίηση
χρησιμοποιεί
χρησιμοποιεί
μια
μια
ουρά
ουρά
.
.
Φτιάχνει
Φτιάχνει
«
«
πλατιά
πλατιά
»
»
δέντρα
δέντρα
:
:
μικρό
μικρό
ύψος
ύψος
,
,
πολλά
πολλά
κλαδιά
κλαδιά
Χρήσιμη
Χρήσιμη
αν
αν
θέλουμε
θέλουμε
να
να
βρούμε
βρούμε
τις
τις
κορυφές
κορυφές
που
που
απέχουν
απέχουν
συγκεκριμένη
συγκεκριμένη
(
(
πχ
πχ
μικρότερη
μικρότερη
)
)
απόσταση
απόσταση
από
από
μια
μια
κορυφή
κορυφή
.
.
Είναι
Είναι
γενίκευση
γενίκευση
της
της
διαπέρασης
διαπέρασης
κατά
κατά
επίπεδα
επίπεδα
που
που
είχαμε
είχαμε
δει
δει
στα
στα
δέντρα
δέντρα
231
231
Προσπελασιμότητα
Προσπελασιμότητα
Πρόβλημα
Πρόβλημα
:
:
Βρείτε
Βρείτε
αν
αν
υπάρχει
υπάρχει
μονοπάτι
μονοπάτι
από
από
μια
μια
κορυφή
κορυφή
v
v
προς
προς
μια
μια
κορυφή
κορυφή
w
w
.
.
Διαπερνώντας
Διαπερνώντας
το
το
γράφημα
γράφημα
βρίσκουμε
βρίσκουμε
όλες
όλες
τις
τις
κορυφές
κορυφές
που
που
είναι
είναι
προσπελάσιμες
προσπελάσιμες
από
από
τη
τη
v.
v.


Αν
Αν
χρησιμοποιήσουμε
χρησιμοποιήσουμε
ΑσΠ
ΑσΠ
το
το
μονοπάτι
μονοπάτι
είναι
είναι
το
το
ελάχιστο
ελάχιστο
(
(
σε
σε
πλήθος
πλήθος
ακμών
ακμών
).
).
Πχ
Πχ
v=4, w=3
v=4, w=3
4
1
3
2
0
Reachability
232
232
Ισχυρά
Ισχυρά
Συνεκτικότητα
Συνεκτικότητα
Πρόβλημα
Πρόβλημα
:
:
Προσδιορίστε
Προσδιορίστε
αν
αν
ένα
ένα
κατευθυνόμενο
κατευθυνόμενο
γράφημα
γράφημα
είναι
είναι
ισχυρά
ισχυρά
συνεκτικό
συνεκτικό
,
,
δηλ
δηλ
.
.
από
από
κάθε
κάθε
κορυφή
κορυφή
v
v
μπορείς
μπορείς
να
να
προσπελάσεις
προσπελάσεις
κάθε
κάθε
κορυφή
κορυφή
w.
w.


Αν
Αν
όχι
όχι
,
,
υπολογίστε
υπολογίστε
το
το
πλήθος
πλήθος
των
των
ισχυρά
ισχυρά
συνεκτικών
συνεκτικών
συνιστωσών
συνιστωσών
του
του
.
.
Λύση
Λύση
1
1
:
:
εφαρμόζω
εφαρμόζω
ΑσΒ
ΑσΒ
για
για
όλες
όλες
τις
τις
κορυφές
κορυφές
.
.


Αν
Αν
από
από
κάθε
κάθε
κορυφή
κορυφή
είναι
είναι
προσπελάσιμες
προσπελάσιμες
όλες
όλες
οι
οι
υπόλοιπες
υπόλοιπες
κορυφές
κορυφές
,
,
τότε
τότε
το
το
γράφημα
γράφημα
είναι
είναι
ισχυρά
ισχυρά
συνεκτικό
συνεκτικό
.
.
Κόστος
Κόστος
O(n.(n+m
O(n.(n+m
))
))
Strong Connectivity
233
233
Ισχυρά
Ισχυρά
Συνεκτικότητα
Συνεκτικότητα
(2)
(2)
Λύση
Λύση
2
2
:
:
εφαρμόζω
εφαρμόζω
ΑσΒ
ΑσΒ
για
για
μια
μια
κορυφή
κορυφή
v
v
και
και
αν
αν
οι
οι
υπόλοιπες
υπόλοιπες
n
n
-
-
1
1
προσπελαύνονται
προσπελαύνονται
,
,
αναστρέφω
αναστρέφω
τις
τις
ακμές
ακμές
και
και
εφαρμόζω
εφαρμόζω
πάλι
πάλι
ΑσΒ
ΑσΒ
.
.
Κόστος
Κόστος
Ο
Ο
(
(
n+m
n+m
)
)
4
1
3
2
0
4
1
3
2
0
Ανάστροφο
234
234
Κύκλοι
Κύκλοι
σε
σε
Γράφημα
Γράφημα
διαδικασία
διαδικασία
ΑσΒ
ΑσΒ
-
-
Κύκλοι
Κύκλοι
(
(
κορυφή
κορυφή
v) {
v) {
//
//
εάν
εάν
το
το
γράφημα
γράφημα
//
//
είναι
είναι
ισχυρά
ισχυρά
συνεκτικό
συνεκτικό
,
,
η
η
εκκίνηση
εκκίνηση
δεν
δεν
έχει
έχει
σημασία
σημασία
εάν
εάν
δεν
δεν
έχουμε
έχουμε
επισκεφθεί
επισκεφθεί
την
την
κορυφή
κορυφή
v {
v {
σημείωσε
σημείωσε
ότι
ότι
τώρα
τώρα
επισκεπτόμαστε
επισκεπτόμαστε
τη
τη
v
v
για
για
όλες
όλες
τις
τις
ακμές
ακμές
(v, w)
(v, w)
//
//
ξεκινούν
ξεκινούν
από
από
τη
τη
v
v
και
και
οδηγούν
οδηγούν
σε
σε
μια
μια
w
w
ΑσΒ
ΑσΒ
-
-
Κύκλοι
Κύκλοι
(
(
w)
w)
//
//
αναδρομή
αναδρομή
}
}
αλλιώς
αλλιώς
τύπωσε
τύπωσε
«
«
Υπάρχει
Υπάρχει
κύκλος
κύκλος
»
»
&
&
επέστρεψε
επέστρεψε
}
}
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 40
235
235
ΑσΒ
ΑσΒ
έναντι
έναντι
ΑσΠ
ΑσΠ


Συνεκτικότητα
Συνεκτικότητα
δι
δι
-
-
γράφων
γράφων


Κοντινότερο
Κοντινότερο
μονοπάτι
μονοπάτι




Συνεκτικές
Συνεκτικές
συνιστώσες
συνιστώσες
,
,
μονοπάτια
μονοπάτια
,
,
κύκλοι
κύκλοι
ΑσΠ
ΑσΠ
ΑσΒ
ΑσΒ
Τομείς
Τομείς
εφαρμογής
εφαρμογής
C
B
A
E
D
L
0
L
1
F
L
2
C
B
A
E
D
F
ΑσΒ ΑσΠ
236
236
Κατευθυνόμενα
Κατευθυνόμενα
Άκυκλα
Άκυκλα
Γραφήματα
Γραφήματα
Εφαρμογές
Εφαρμογές


Προαπαιτούμενα
Προαπαιτούμενα
μαθήματα
μαθήματα


Προγραμματισμός
Προγραμματισμός
εργασιών
εργασιών
Αλγόριθμοι
Πληροφορική Ι
Προγραμματισμός ΙΙ
Προγραμματισμός Ι
Πληροφορική ΙΙ
Προγραμματισμός στο Διαδίκτυο
Διακριτά
Μαθηματικά
Directed Acyclic Graph -DAG
237
237
Τοπολογική
Τοπολογική
Διάταξη
Διάταξη
Πρόβλημα
Πρόβλημα
:
:
οι
οι
κορυφές
κορυφές
να
να
μπουν
μπουν
σε
σε
μια
μια
σειρά
σειρά
ώστε
ώστε
να
να
μην
μην
παραβιάζεται
παραβιάζεται
καμιά
καμιά
προαπαίτηση
προαπαίτηση
.
.
Ορισμοί
Ορισμοί
:
:


Πηγή
Πηγή
:
:
μια
μια
κορυφή
κορυφή
με
με
βαθμό
βαθμό
εισόδου
εισόδου
= 0
= 0


Καταβόθρα
Καταβόθρα
:
:
μια
μια
κορυφή
κορυφή
με
με
βαθμό
βαθμό
εξόδου
εξόδου
= 0
= 0
Λύση
Λύση
με
με
επανάληψη
επανάληψη
:
:
επισκέψου
επισκέψου
πρώτα
πρώτα
τις
τις
πηγές
πηγές
και
και
αφαίρεσε
αφαίρεσε
τις
τις
ακμές
ακμές
που
που
φεύγουν
φεύγουν
από
από
αυτές
αυτές
.
.
Topological Sort
238
238
Αλγόριθμος
Αλγόριθμος
Τοπολογικής
Τοπολογικής
Διάταξης
Διάταξης
διαδικασία
διαδικασία
τοπολΔιάτ
τοπολΔιάτ
(
(
G)
G)
υπολόγισε
υπολόγισε
τον
τον
βαθμό
βαθμό
εισόδου
εισόδου
των
των
κορυφών
κορυφών
εάν
εάν
υπάρχουν
υπάρχουν
κορυφές
κορυφές
που
που
δεν
δεν
έχεις
έχεις
επισκεφθεί
επισκεφθεί
αν
αν
υπάρχει
υπάρχει
μία
μία
πηγή
πηγή
τότε
τότε
αφαίρεσε
αφαίρεσε
τις
τις
ακμές
ακμές
του
του
γραφήματος
γραφήματος
που
που
...
...
εξέρχονται
εξέρχονται
της
της
πηγής
πηγής
ενημερώνοντας
ενημερώνοντας
τους
τους
...
...
αντίστοιχους
αντίστοιχους
βαθμούς
βαθμούς
εισόδου
εισόδου
επέστρεψε
επέστρεψε
πηγή
πηγή
&
&
τοπολΔιάτ
τοπολΔιάτ
(
(
G)
G)
//
//
αναδρομή
αναδρομή
αλλιώς
αλλιώς
τύπωσε
τύπωσε
ΑΠΟΤΥΧΙΑ
ΑΠΟΤΥΧΙΑ
239
239
Μεταβατική
Μεταβατική
Κλειστότητα
Κλειστότητα
Πρόβλημα
Πρόβλημα
:
:
Για
Για
ένα
ένα
γράφημα
γράφημα
G
G
=(
=(
V,
V,
E),
E),
κατασκευάστε
κατασκευάστε
ένα
ένα
G
G
*
*
=(V,
=(V,
E
E
*
*
)
)
που
που
έχει
έχει
ακμές
ακμές
(
(
u,
u,
w)
w)
,
,
αν
αν
στο
στο
G,
G,
η
η
w
w
είναι
είναι
προσπελάσιμη
προσπελάσιμη
από
από
τη
τη
u
u
(
(
δηλ
δηλ
.
.
υπάρχει
υπάρχει
μονοπάτι
μονοπάτι
u
u






w)
w)
.
.


V =
V =
κορυφές
κορυφές
(
(
Vertices) E =
Vertices) E =
ακμές
ακμές
(
(
Edges)
Edges)


Μήκος
Μήκος
μονοπατιού
μονοπατιού
1 ..
1 ..


Εφαρμογή
Εφαρμογή
:
:
δοθέντος
δοθέντος
του
του
οργανογράμματος
οργανογράμματος
μιας
μιας
εταιρίας
εταιρίας
,
,
βρες
βρες
όλους
όλους
τους
τους
ανθρώπους
ανθρώπους
που
που
προΐστανται
προΐστανται
ενός
ενός
υπαλλήλου
υπαλλήλου
.
.
Transitive Closure
240
240












0111
1011
1101
0000












0101
1011
1101
0000












0101
0010
1100
0000












0101
0010
1101
0000
Αλγόριθμος
Αλγόριθμος
Μεταβατικής
Μεταβατικής
Κλειστότητας
Κλειστότητας
Για
Για
όλες
όλες
τις
τις
κορυφές
κορυφές
w
w
πρόσθεσε
πρόσθεσε
στο
στο
γράφημα
γράφημα
του
του
αποτελέσματος
αποτελέσματος
τις
τις
ακμές
ακμές
από
από
μια
μια
αναζήτηση
αναζήτηση
με
με
κορυφή
κορυφή
εκκίνησης
εκκίνησης
τη
τη
w
w
4
3
1
2












0101
0010
1100
0000
Αρχικά Μετά την 1 Μετά τη 2 Μετά την 3 Μετά την 4
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 41
241
241
Ελάχιστο
Ελάχιστο
Επικαλύπτον
Επικαλύπτον
Δέντρο
Δέντρο
Για
Για
συνεκτικό
συνεκτικό
μη
μη
κατευθυνόμενο
κατευθυνόμενο
γράφημα
γράφημα
με
με
βάρη
βάρη
Πρόβλημα
Πρόβλημα
:
:
να
να
βρεθεί
βρεθεί
συνεκτικό
συνεκτικό
επικαλύπτον
επικαλύπτον
γράφημα
γράφημα
με
με
το
το
ελάχιστο
ελάχιστο
συνολικό
συνολικό
βάρος
βάρος
.
.
Εφαρμογή
Εφαρμογή
:
:
Δίκτυο
Δίκτυο
ηλεκτροδότησης
ηλεκτροδότησης


Θέλουμε
Θέλουμε
να
να
κατασκευάσουμε
κατασκευάσουμε
ένα
ένα
δίκτυο
δίκτυο
από
από
γραμμές
γραμμές
που
που
να
να
συνδέουν
συνδέουν
τις
τις
πόλεις
πόλεις
σε
σε
ένα
ένα
χάρτη
χάρτη
.
.
Για
Για
κάθε
κάθε
διαδρομή
διαδρομή
που
που
συνδέει
συνδέει
δύο
δύο
πόλεις
πόλεις
γνωρίζουμε
γνωρίζουμε
το
το
κόστος
κόστος
(
(
πχ
πχ
απόσταση
απόσταση
).
).
Ελάχιστο
Ελάχιστο
μήκος
μήκος
καλωδίων
καλωδίων
ηλεκτρονικού
ηλεκτρονικού
κυκλώματος
κυκλώματος
Minimum Spanning Tree
242
242
Αλγόριθμος
Αλγόριθμος
Kruskal
Kruskal
διαδικασία
διαδικασία
Kruskal(G
Kruskal(G
)
)
A = {}
A = {}
//
//
το
το
αποτέλεσμα
αποτέλεσμα
για
για
κάθε
κάθε
κορυφή
κορυφή
v:
v:
φτιάξε
φτιάξε
-
-
σύνολο
σύνολο
(
(
v)
v)
ταξινόμησε
ταξινόμησε
τις
τις
ακμές
ακμές
κατ΄
κατ΄
αύξουσα
αύξουσα
σειρά
σειρά
για
για
κάθε
κάθε
ακμή
ακμή
(
(
u,
u,
w)
w)
από
από
τη
τη
«
«
φθηνότερη
φθηνότερη
»
»
εάν
εάν
σύνολο
σύνολο
(
(
u)
u)


σύνολο
σύνολο
(
(
w)
w)
τότε
τότε
A = A U {(u,
A = A U {(u,
w)}
w)}
ένωσε
ένωσε
τα
τα
σύνολα
σύνολα
u
u
και
και
w
w
243
243
Εκτέλεση
Εκτέλεση
Kruskal
Kruskal
244
244
Συντομότερο
Συντομότερο
Μονοπάτι
Μονοπάτι
Μοναδικής
Μοναδικής
Πηγής
Πηγής
Πρόβλημα
Πρόβλημα
:
:
Για
Για
συγκεκριμένη
συγκεκριμένη
κορυφή
κορυφή
εκκίνησης
εκκίνησης
v
v
να
να
βρεθούν
βρεθούν
τα
τα
μονοπάτια
μονοπάτια
με
με
το
το
μικρότερο
μικρότερο
βάρος
βάρος
*
*
για
για
όλες
όλες
τις
τις
υπόλοιπες
υπόλοιπες
κορυφές
κορυφές
του
του
γραφήματος
γραφήματος
.
.
Εφαρμογή
Εφαρμογή
:
:
κατευθυνόμενο
κατευθυνόμενο
γράφημα
γράφημα
με
με
(
(
θετικά
θετικά
)
)
βάρη
βάρη
*
*
όχι
όχι
με
με
το
το
μικρότερο
μικρότερο
μήκος
μήκος


βλέπε
βλέπε
ΑσΠ
ΑσΠ
245
245
Αλγόριθμος
Αλγόριθμος
Dijkstra
Dijkstra
διαδικασία
διαδικασία
Dijkstra
Dijkstra
(
(
κορυφές
κορυφές
V,
V,
ακμές
ακμές
Ε
Ε
,
,
κορυφή
κορυφή
εκκίνησης
εκκίνησης
s)
s)
για
για
όλες
όλες
τις
τις
κορυφές
κορυφές
w
w
του
του
V
V
θέσε
θέσε
distance
distance
(
(
w) =
w) =


distance(s
distance(s
) = 0
) = 0
//
//
απέχει
απέχει
0
0
από
από
τον
τον
εαυτό
εαυτό
της
της
S = {s}
S = {s}
//
//
κορυφές
κορυφές
που
που
έχουμε
έχουμε
επισκεφθεί
επισκεφθεί
Q = V
Q = V
-
-
{s}
{s}
//
//
κορυφές
κορυφές
που
που
δεν
δεν
έχουμε
έχουμε
επισκεφθεί
επισκεφθεί
ενόσω
ενόσω
Q
Q


{}
{}
//
//
μέχρι
μέχρι
να
να
εξαντληθούν
εξαντληθούν
οι
οι
κορυφές
κορυφές
για
για
κάθε
κάθε
γείτονα
γείτονα
w
w
της
της
u
u
//
//
υπάρχει
υπάρχει
(
(
u,w
u,w
)
)
στο
στο
Ε
Ε
//
//
ενημέρωσε
ενημέρωσε
την
την
απόσταση
απόσταση
της
της
w
w
από
από
τη
τη
u
u
distance
distance
(
(
w)
w)
=
=
min
min
{
{
distance(w
distance(w
), distance
), distance
(
(
u) +
u) +
E(u,w
E(u,w
) }
) }
θέσε
θέσε
u =
u =
κορυφή
κορυφή
στο
στο
Q
Q
με
με
την
την
ελάχιστη
ελάχιστη
distance
distance
S = S U {u} Q = Q
S = S U {u} Q = Q
-
-
{u}
{u}
246
246
Εκτέλεση
Εκτέλεση
Dijkstra
Dijkstra
(
(
εκκίνηση
εκκίνηση
0)
0)
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 42
15
15
Ταίριασμα
Ταίριασμα
Προτύπων
Προτύπων
Pattern Matching
Pattern Matching
248
248
Ακριβές
Ακριβές
Ταίριασμα
Ταίριασμα
Προτύπου
Προτύπου
Πρόβλημα
Πρόβλημα
:
:
Δίδεται
Δίδεται
μια
μια
συμβολοσειρά
συμβολοσειρά
T
T
μήκους
μήκουςn
n και
και
ένα
ένα
πρότυπο
πρότυπο
P
P
μήκους
μήκουςm
m.
.
Ζητείται
Ζητείται
ο
ο
εντοπισμός
εντοπισμός
των
των
εμφανίσεων
εμφανίσεων
του
του
P
P
μέσα
μέσα
στο
στο
T.
T.
Εφαρμογές
Εφαρμογές
:
:


Αναζήτηση
Αναζήτηση
κειμένου
κειμένου


Αναζήτηση
Αναζήτηση
υποδομής
υποδομής
στο
στο
DNA
DNA
249
249
Απλοϊκή
Απλοϊκή
Λύση
Λύση
Αλγόριθμος
Αλγόριθμος
τύπου
τύπου
brute force
brute force
Ξεκινούμε
Ξεκινούμε
από
από
την
την
πρώτη
πρώτη
θέση
θέση
του
του
Τ
Τ
και
και
εξετάζουμε
εξετάζουμε
αν
αν
οι
οι
χαρακτήρες
χαρακτήρες
του
του
ταυτίζονται
ταυτίζονται
με
με
τους
τους
χαρακτήρες
χαρακτήρες
του
του
προτύπου
προτύπου
.
.
Μόλις
Μόλις
βρούμε
βρούμε
διαφορά
διαφορά
,
,
εγκαταλείπουμε
εγκαταλείπουμε
.
.
Συνεχίζουμε
Συνεχίζουμε
την
την
ίδια
ίδια
διαδικασία
διαδικασία
με
με
την
την
επόμενη
επόμενη
θέση
θέση
του
του
Τ
Τ
,
,
κοκ
κοκ
μέχρι
μέχρι
τη
τη
θέση
θέση
n
n
-
-
m
m
+1. (
+1. (
Γιατί
Γιατί
;)
;)
T =
T =
abrababracadabra
abrababracadabra
P =
P =
abracadabra
abracadabra
n = 16, m = 11
n = 16, m = 11
abrababracadabra
abrababracadabra
abra
abra
c
c
adabra
adabra
a
a
bracadabra
bracadabra
a
a
bracadabra
bracadabra
ab
ab
r
r
acadabra
acadabra
a
a
bracadabra
bracadabra
abracadabra
abracadabra
250
250
Ψευδοκώδικας
Ψευδοκώδικας
Ταιριάσματος
Ταιριάσματος
Αλγόριθμος
Αλγόριθμος
ΑκριβέςΤαίριασμα
ΑκριβέςΤαίριασμα
(
(
T, P)
T, P)
n =
n =
length(T
length(T
); m =
); m =
length(P
length(P
);
);
for
for
i = 1
i = 1
to
to
n
n
-
-
m+1
m+1
//
//
το
το
ξεκίνημα
ξεκίνημα
του
του
παραθύρου
παραθύρου
for
for
j = 1
j = 1
to
to
m
m
//
//
οι
οι
χαρακτήρες
χαρακτήρες
του
του
προτύπου
προτύπου
if
if
T(i+j
T(i+j
-
-
1) !=
1) !=
P(j
P(j
)
)
then
then
next
next
i
i
//
//
αποτυχία
αποτυχία
next
next
j
j
return
return
i
i
//
//
βρέθηκε
βρέθηκε
ταίριασμα
ταίριασμα
next
next
i
i
Κόστος
Κόστος
χειρότερης
χειρότερης
περίπτωσης
περίπτωσης
:
:
Ο
Ο
(
(
n.m
n.m
)
)
251
251
Αλγόριθμος
Αλγόριθμος
Knuth
Knuth
-
-
Morris
Morris
-
-
Pratt
Pratt
(1977)
(1977)
Γίνεται
Γίνεται
προεπεξεργασία
προεπεξεργασία
του
του
προτύπου
προτύπου
P:
P:


Για
Για
κάθε
κάθε
θέση
θέση
του
του
προτύπου
προτύπου
βρίσκουμε
βρίσκουμε
πόσο
πόσο
μεγάλο
μεγάλο
πρόθεμα
πρόθεμα
του
του
προτύπου
προτύπου
υπάρχει
υπάρχει
που
που
να
να
συμπίπτει
συμπίπτει
με
με
το
το
επίθεμα
επίθεμα
που
που
τελειώνει
τελειώνει
σε
σε
αυτή
αυτή
τη
τη
θέση
θέση
.
.
4
4
3
3
2
2
1
1
0
0
1
1
0
0
1
1
0
0
0
0
0
0
f(j
f(j
)
)
11
11
10
10
9
9
8
8
7
7
6
6
5
5
4
4
3
3
2
2
1
1
j
j
a
a
r
r
b
b
a
a
d
d
a
a
c
c
a
a
r
r
b
b
a
a
Πρόθεμα μήκους 2 του προτύπου
συμπίπτει με επίθεμα που τελειώνει εδώ
252
252
Ταίριασμα
Ταίριασμα
κατά
κατά
KMP
KMP
Κατά
Κατά
την
την
αναζήτηση
αναζήτηση
του
του
ταιριάσματος
ταιριάσματος
όσο
όσο
οι
οι
πρώτοι
πρώτοι
χαρακτήρες
χαρακτήρες
διαφέρουν
διαφέρουν
προχωρούμε
προχωρούμε
γραμμικά
γραμμικά
στο
στο
κείμενο
κείμενο
Τ
Τ
.
.
Αν
Αν
οι
οι
j
j
πρώτοι
πρώτοι
χαρακτήρες
χαρακτήρες
του
του
προτύπου
προτύπου
και
και
κειμένου
κειμένου
ταυτίζονται
ταυτίζονται
και
και
j=m,
j=m,
τότε
τότε
βρήκαμε
βρήκαμε
ταίριασμα
ταίριασμα
.
.


Αν
Αν
όμως
όμως
j<m
j<m
και
και
στον
στον
επόμενο
επόμενο
χαρακτήρα
χαρακτήρα
διαφέρουν
διαφέρουν
,
,
τότε
τότε
το
το
κείμενο
κείμενο
μπορεί
μπορεί
να
να
συνεχίσει
συνεχίσει
να
να
συγκρίνεται
συγκρίνεται
με
με
ασφάλεια
ασφάλεια
με
με
τον
τον
f(j
f(j
)
)
χαρακτήρα
χαρακτήρα
.
.


Συνεπώς
Συνεπώς
μετακινήσαμε
μετακινήσαμε
το
το
παράθυρο
παράθυρο
κατά
κατά
j
j
-
-
f(j
f(j
)
)
.
.
Πανεπιστήμιο Αιγαίου
Τμήμα Μηχ/κών Σχεδίασης Προϊόντων & Συστημάτων
7051: Αλγόριθμοι & Δομές Δεδομένων
4ο έτος
Πέμπτη, 15 Δεκεμβρίου 2005
Ιωάννης Γαβιώτης
gaviotis@aegean.gr
http://www.syros.aegean.gr/users/gaviotis/add 43
253
253
Εκτέλεση
Εκτέλεση
KMP
KMP
T =
T =
a b r a
a b r a
b
b
a b r a c a d a b r a
a b r a c a d a b r a
P =
P =
a b r a
a b r a
c
c
a d a b r a
a d a b r a
Η
Η
σύγκριση
σύγκριση
ξεκίνησε
ξεκίνησε
από
από
την
την
αρχή
αρχή
με
με
επιτυχία
επιτυχία
ως
ως
τον
τον
πέμπτο
πέμπτο
χαρακτήρα
χαρακτήρα
του
του
Τ
Τ
,
,
όπου
όπου
απέτυχε
απέτυχε
.
.
Ο
Ο
απλός
απλός
αλγόριθμος
αλγόριθμος
θα
θα
συνέχιζε
συνέχιζε
συγκρίνοντας
συγκρίνοντας
το
το
P
P
με
με
το
το
δεύτερο
δεύτερο
χαρακτήρα
χαρακτήρα
του
του
Τ
Τ
.
.
Ο
Ο
KMP
KMP
συγκρίνει
συγκρίνει
τον
τον
Τ
Τ
i
i
με
με
τον
τον
P
P
f(j)+1
f(j)+1
= P
= P
2
2
.
.
j=4
i=5
a b r a c a d a b r a
a b r a c a d a b r a
Απλός
Απλός
a b r a c a d a b r a
a b r a c a d a b r a
KMP
KMP
254
254
Επιδόσεις
Επιδόσεις
Χάρη
Χάρη
στα
στα
«
«
άλματα
άλματα
»
»
,
,
ο
ο
αλγόριθμος
αλγόριθμος
KMP
KMP
είναι
είναι
ταχύτερος
ταχύτερος
.
.
Απαιτεί
Απαιτεί
χρόνο
χρόνο
Ο
Ο
(
(n
n+
+m
m)
)


Ο
Ο
(
(
m)
m)
για
για
την
την
προεπεξεργασία
προεπεξεργασία
του
του
προτύπου
προτύπου


Ο
Ο
(
(
n)
n)
για
για
τη
τη
φάση
φάση
του
του
ταιριάσματος
ταιριάσματος
στη
στη
χειρότερη
χειρότερη
περίπτωση
περίπτωση