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

Σχετικά έγγραφα
Εισαγωγή στους Αλγορίθμους

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

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

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

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

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

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

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

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

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

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

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

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

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

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

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

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

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

Εισαγωγή στους Αλγορίθμους Ενότητα 11η Άσκηση - Σταθμισμένος Χρονοπρογραμματισμός Διαστημάτων

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

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

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

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

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

Διοικητική Λογιστική

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

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

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

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

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

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

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 8: ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ΑΛΓΟΡΙΘΜΟΣ HEAPSORT

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

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

Βάσεις Περιβαλλοντικών Δεδομένων

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

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

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

Βάσεις Δεδομένων. Ενότητα 1: Εισαγωγή στις Βάσεις δεδομένων. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Ψηφιακή Επεξεργασία Εικόνων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Μηχανολογικό Σχέδιο Ι

Βέλτιστος Έλεγχος Συστημάτων

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

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

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

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αλγόριθμοι και πολυπλοκότητα Δυναμικός Προγραμματισμός

Βάσεις Περιβαλλοντικών Δεδομένων

Εισαγωγή στους Υπολογιστές

Αλγόριθμοι και πολυπλοκότητα Μελανέρυθρα δεντρα

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

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

Διοικητική Λογιστική

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 4: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΔΕΝΤΡΑ

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

Ψηφιακή Επεξεργασία Εικόνων

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

Κβαντική Επεξεργασία Πληροφορίας

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

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

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

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

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

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

Πληροφορική ΙΙ Θεματική Ενότητα 5

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

Λογιστική Κόστους Ενότητα 10: Ασκήσεις Προτύπου Κόστους Αποκλίσεων.

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

Διδακτική της Πληροφορικής

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

ΗΛΕΚΤΡΟΝΙΚΗ IΙ Ενότητα 6

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

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους

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

Οντοκεντρικός Προγραμματισμός

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

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Θέματα Εφαρμοσμένης. Ενότητα 14.2: Η ψήφος στα πρόσωπα. Θεόδωρος Χατζηπαντελής Τμήμα Πολιτικών Επιστημών ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Βέλτιστος Έλεγχος Συστημάτων

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 6: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ: ΠΡΟΒΛΗΜΑ ΑΝΑΖΗΤΗΣΗΣ

Transcript:

Εισαγωγή στους Αλγορίθμους Ενότητα 3η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr

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

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

Σκοποί ενότητας Εισαγωγή στις δομές δεδομένων λίστας και πίνακα Εισαγωγή στο δυαδικό σωρό 4

Περιεχόμενα ενότητας Βασικές λειτουργίες σε λίστες, πίνακες και δυαδικό σωρό Παραδείγματα βασικών αλγορίθμων για αναζήτηση, απαρίθμηση, ταξινόμηση Μέθοδοι ανάλυσης της χρονικής και χωρικής πολυπλοκότητας των αλογρίθμων 5

Δύο Απλές & Σημαντικές Δομές Δεδομένων

Πίνακας (array) 1 2 3 n A Πίνακας: σταθερό μέγεθος. A[i]: προσπέλαση i-στού στοιχείου Γρηγορότερη προσπέλαση στοιχείων από οποιαδήποτε άλλη δομή. A[n+1]: σφάλμα! Βγήκαμε εκτός ορίου του πίνακα. 7

Λίστες Πριν από τη διαγραφή του e : Στοιχείο e val val val Μετά τη διαγραφή του e : Στοιχείο e val val val Διπλά συνδεδεμένη λίστα: για κάθε στοιχείο e, διατηρείται ένας δείκτης προς το επόμενο στοιχείο Μεταβλητό μέγεθος Εισαγωγή/διαγραφή ενός στοιχείου e σε χρόνο Ο(1) 8

struct list_el { int val; struct list_el * next; }; Λίστες (C) typedef struct list_el item; void main() { item * curr, * head; int i; head = NULL; } for(i=1;i<=10;i++) { curr = (item *)malloc(sizeof(item)); curr->val = i; curr->next = head; head = curr; } 9

Απλοί Αλγόριθμοι και Συνηθισμένοι Χρόνοι Εκτέλεσης

Γραμμικός χρόνος: O(n) Γραμμικός χρόνος. Ο χρόνος εκτέλεσης είναι το πολύ ένας σταθερός παράγοντας επί το μέγεθος της εισόδου. Υπολογισμός μέγιστου. Υπολογίστε το μέγιστο από n αριθμούς a 1,, a n. max a 1 for i = 2 to n { if (a i > max) θέσε max a i } 11

Γραμμικός χρόνος: O(n) A 7 15 8 20 3 9 45 2 6 max 7 1 η Επανάληψη (i=2) if ( 15 > 7 ) true θέσε max 15 max 15 2 η Επανάληψη (i=3) if ( 8 > 15 ) false θέσε max a i max 15 3 η Επανάληψη (i=4) if ( 20 > 15 ) true θέσε max 20 max 20 4 η Επανάληψη (i=5) if ( 3 > 20 ) false θέσε max a i max 20 5 η Επανάληψη (i=6) if ( 9 > 20 ) false θέσε max a i max 20 6 η Επανάληψη (i=7) if ( 45 > 20 ) true θέσε max 45 max 45 7 η Επανάληψη (i=8) if ( 2 > 45 ) false θέσε max a i max 45 8 η Επανάληψη (i=9) if ( 6 > 45 ) false θέσε max a i 12

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. Προσάρτηση του μικρότερου από τα a i και b j στην έξοδο. Συγχωνευμένο αποτέλεσμα ///// a i /// b j A B i = 1, j = 1 while (και οι δύο λίστες δεν είναι κενές) { if (a i b j ) Προσάρτηση του a i στη λίστα εξόδου και i=i+1 else(a i > b j )Προσάρτηση του b j στη λίστα εξόδου και j=j+1 } προσάρτηση των υπόλοιπων στοιχείων της μη άδειας λίστας στην έξοδο Ισχυρισμός. Η συγχώνευση δύο λιστών μεγέθους n παίρνει χρόνο O(n). Απόδειξη. Μετά από κάθε σύγκριση, το μέγεθος της λίστας εξόδου αυξάνεται κατά 1. 13

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 Βοηθητικός Πίνακας 14

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 Βοηθητικός Πίνακας 15

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 4 Βοηθητικός Πίνακας 16

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 4 7 Βοηθητικός Πίνακας 17

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 4 7 8 Βοηθητικός Πίνακας 18

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 4 7 8 9 Βοηθητικός Πίνακας 19

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 4 7 8 9 20 Βοηθητικός Πίνακας 20

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 4 7 8 9 20 22 Βοηθητικός Πίνακας 21

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. ελάχιστο ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 4 7 8 9 20 22 33 Βοηθητικός Πίνακας 22

Γραμμικός χρόνος: O(n) Συγχώνευση. Συγχωνεύστε δύο ταξινομημένες λίστες A = a 1,a 2,,a n και B = b 1,b 2,,b n σε μια μόνο ταξινομημένη λίστα. εξαντλήθηκε ελάχιστο 1 7 8 20 33 3 4 9 22 38 1 3 4 7 8 9 20 22 33 38 Βοηθητικός Πίνακας 23

Υπογραμμικός χρόνος Αναζήτηση σε ταξινομημένο πίνακα. Δεδομένου ενός ταξινομημένου πίνακα A[1:n] με n στοιχείa, προσδιορίστε αν ένα συγκεκριμένο στοιχείο p ανήκει στον Α. n = 11, p = 82 1 3 8 12 24 45 78 82 93 97 99 Bin-Search(A, 82, 1, 11) imid = (1 + 11)/2 = 6 if A[6] > 82 false Bin-Search(A, p, imin, imid-1) else if A[6] < 82 Bin-Search(A, 82, 7, 11) else return imid 24

Υπογραμμικός χρόνος Αναζήτηση σε ταξινομημένο πίνακα. Δεδομένου ενός ταξινομημένου πίνακα A[1:n] με n στοιχείa, προσδιορίστε αν ένα συγκεκριμένο στοιχείο p ανήκει στον Α. n = 11, p = 82 1 3 8 12 24 45 78 82 93 97 99 Bin-Search(A, 82, 7, 11) imid = (7 + 11)/2 = 9 if A[9] > 82 true Bin-Search(A, 82, 7, 8) else if A[9] < 82 Bin-Search(A, 82, 9, 11) else return imid 25

Υπογραμμικός χρόνος Αναζήτηση σε ταξινομημένο πίνακα. Δεδομένου ενός ταξινομημένου πίνακα A[1:n] με n στοιχείa, προσδιορίστε αν ένα συγκεκριμένο στοιχείο p ανήκει στον Α. n = 11, p = 82 1 3 8 12 24 45 78 82 93 97 99 Bin-Search(A, 82, 7, 8) imid = (7 + 8)/2 = 8 (στρογγυλοποίηση) if A[8] > 82 false Bin-Search(A, p, imin, imid-1) else if A[8] < 82 Bin-Search(A, p, imid+1, imax) else return imid 26

Υπογραμμικός χρόνος Αναζήτηση σε ταξινομημένο πίνακα. Δεδομένου ενός ταξινομημένου πίνακα A[1:n] με n στοιχείa, προσδιορίστε αν ένα συγκεκριμένο στοιχείο p ανήκει στον Α. Λύση O(log n). Δυαδική αναζήτηση. Κλήση Bin-Search (A,p,1,n). Bin-Search(A, p, imin, imax) imid = (imin + imax)/2 if A[imid] > p Bin-Search(A, p, imin, imid-1) else if A[imid] < p Bin-Search(A, p, imid+1, imax) else return imid Μέγεθος «ενεργής» περιοχής αναζήτησης μειώνεται κατά ½ σε κάθε επανάληψη. Μετά από k επαναλήψεις, μέγεθος «ενεργής» περιοχής (1/2) k n Τερματίζουμε όταν (1/2) k n = 1, δηλ. όταν k = log n. Άρα, συνολικός χρόνος Ο(log n) 27

Χρόνος O(n log n) Χρόνος O(n log n). Συναντάται σε αλγόριθμους «διαίρει-και-βασίλευε». Ταξινόμηση. Ο mergesort και ο heapsort είναι αλγόριθμοι ταξινόμησης που εκτελούν O(n log n) συγκρίσεις. Μέγιστο άδειο διάστημα. Δεδομένων n χρονοσφραγίδων x 1,, x n στις οποίες φθάνουν αντίγραφα ενός αρχείου σε ένα διακομιστή, ποιό είναι το μέγιστο χρονικό διάστημα στην διάρκεια του οποίου δεν έφτασε κανένα αντίγραφο αρχείου στον διακομιστή; Λύση O(n log n). Ταξινόμησε τις χρονοσφραγίδες. Σάρωσε την ταξινομημένη λίστα στη σειρά, προσδιορίζοντας το μέγιστο κενό μεταξύ διαδοχικών χρονοσφραγίδων. 28

Τετραγωνικός χρόνος: O(n 2 ) Τετραγωνικός χρόνος. Απαριθμήστε όλα τα ζευγάρια στοιχείων. Κοντινότερο ζευγάρι σημείων. Δεδομένης μιας λίστας n σημείων σε ένα επίπεδο (x 1, y 1 ),, (x n, y n ), βρείτε το ζευγάρι με την μικρότερη απόσταση. Λύση O(n 2 ). Δοκιμάστε κάθε ζευγάρι σημείων. min (x 1 - x 2 ) 2 + (y 1 - y 2 ) 2 for i = 1 to n { for j = i+1 to n { d (x i - x j ) 2 + (y i - y j ) 2 if (d < min) min d } } Δεν χρειάζεται να πάρουμε την ρίζα 29

Κυβικός χρόνος: O(n 3 ) Κυβικός χρόνο. Απαριθμήστε όλες τις τριάδες στοιχείων. Συμπληρωματικότητα συνόλων. Δεδομένων n συνόλων S 1,, S n καθένα από τα οποία είναι υποσύνολο του 1, 2,, n, υπάρχουν κάποια ζευγάρια συνόλων που να είναι ξένα; Λύση O(n 3 ). Για κάθε ζευγάρι συνόλων, ελέγξτε αν είναι ξένα. foreach σύνολο S i { foreach άλλο σύνολο S j { foreach στοιχείο p του S i { Βρές αν το p ανήκει και στο S j } if (κανένα στοιχείο του S i δεν ανήκει στο S j ) Ανέφερε ότι τα S i και S j είναι ξένα } } Υπόθεση: κατάλληλη δομή υποσυνόλου, έτσι ώστε ο έλεγχος αν ένα στοιχείο ανήκει σε κάποιο υποσύνολο γίνεται σε Ο(1) χρόνο. 30

Πολυωνυμικός χρόνος: Χρόνος O(n k ) Ανεξάρτητο σύνολο μεγέθους k. Δεδομένου ενός γραφήματος, υπάρχουν k κορυφές τέτοιες ώστε ανά δύο να μην συνδέονται με μια πλευρά; Λύση O(n k ). Απαριθμήστε όλα τα υποσύνολα k κορυφών. Το k είναι σταθερά foreach υποσύνολο S με k κόμβους { έλεγξε αν το S αποτελεί ανεξάρτητο σύνολο if (S είναι ένα ανεξάρτητο σύνολο){ δήλωσε ότι το S είναι ένα ανεξάρτητο σύνολο } } Έλεγχος αν το S είναι ανεξάρτητο σύνολο = O(k 2 ). Αριθμός υποσυνόλων k στοιχείων = n k n (n 1) (n 2) (n k 1) k (k 1) (k 2) (2) (1) nk k! O(k 2 n k / k!) = O(n k ) Πολυωνυμικού χρόνου για k=17, αλλά όχι χρήσιμο στην πράξη 31

Εκθετικός χρόνος Υποσύνολα Συνόλου. Δεδομένου ενός συνόλου S βρείτε όλα τα υποσύνολά του. Λύση O( 2 n ). Απαριθμήστε όλα τα υποσύνολα. Έστω: S {2,8,9} S 0 { } S 1 {2} S 2 {8} S 3 {9} S 4 {2,8} S 5 {2,9} S 6 {8,9} S 7 {2,8,9} 32

Σωρός Θεμελιώδης Δομή Δεδομένων

Σωρός (Heap) Ορισμός: ισοστασθμισμένο δυαδικό δένδρο. Συνδυάζει πλεονεκτήματα ταξινομημένου πίνακα και λίστας. Το κλειδί κάθε κόμβου είναι τουλάχιστον τόσο μεγάλο όσο αυτό του γονέα του. Διάταξη σωρού: για κάθε στοιχείο v, σε έναν κόμβο i, το στοιχείο w στο γονέα του i ικανοποιεί τη σχέση: key(w) key(v) Για κάθε κόμβο στη θέση i: parent(i) = Li/2, leftchild(i) = 2i, rightchild(i) = 2i+1 34

Η διαδικασία Heapify-up Στόχος: διόρθωση ενός σχεδόν σωρού με μετακίνηση ενός στοιχείου προς τη ρίζα Σχεδόν σωρός με πολύ μικρό κλειδί στη θέση H[i]: το στοιχείο v στη θέση i, έχει πολύ μικρό κλειδί H[i], που πιθανόν παραβιάζει την ιδιότητα διάταξης σωρού. Heapify-up(H, i): If i > 1 then έστω j = parent(i) = i/2 If key[h[i]] < key[h[j]] then Κάνε εναλλαγή των στοιχείων H[i] και H[j] Heapify-up(H, j) Endif Endif Χρόνος Heapify-up: Ο(log n) Εισαγωγή στοιχείου: τοποθέτηση του νέου στοιχείου ως τελευταίο στον σωρό και κλήση της Heapify-up. Χρόνος: O(log n) 35

Η διαδικασία Heapify-up Στόχος: διόρθωση ενός σχεδόν σωρού με μετακίνηση ενός στοιχείου προς τη ρίζα Σχεδόν σωρός με πολύ μικρό κλειδί στη θέση H[i]: το στοιχείο v στη θέση i, έχει πολύ μικρό κλειδί H[i], που πιθανόν παραβιάζει την ιδιότητα διάταξης σωρού. Η διαδικασία Heapify-up μετακινεί το στοιχείο v προς τη ρίζα. Εναλλαγή των κλειδιών 3 και 11. Ομοίως για τα κλειδιά 3 και 5. 36

Η διαδικασία Heapify-down Στόχος: διόρθωση ενός σχεδόν σωρού με μετακίνηση ενός στοιχείου προς τa φύλλα Σχεδόν σωρός με πολύ μεγάλο κλειδί στη θέση H[i]: το στοιχείο v στη θέση i, έχει πολύ μεγάλο κλειδί H[i], που πιθανόν παραβιάζει την ιδιότητα διάταξης σωρού. Heapify-down(H, i): Έστω n = length(h) If 2i > n then Τερμάτισε με αμετάβλητο H Else if 2i < n then Έστω left = 2i, και right = 2i+1 Έστω j ο δείκτης που ελαχιστοποιεί τα key[h[left]] και key[h[right]] Else if 2i = n then Έστω j = 2i Endif If key[h[j]] < key[h[i]] then Κάνε εναλλαγή των στοιχείων πίνακα H[i] και H[j] Heapify-down(H, j) Endif Χρόνος Heapify-down: Ο(log n) Διαγραφή στοιχείου v: αντικατάσταση του v με το τελευταίο στοιχείο του σωρού και κλήση της Heapify-down. Χρόνος: O(log n) 37

Η διαδικασία Heapify-down Στόχος: διόρθωση ενός σχεδόν σωρού με μετακίνηση ενός στοιχείου προς τa φύλλα Σχεδόν σωρός με πολύ μεγάλο κλειδί στη θέση H[i]: το στοιχείο v στη θέση i, έχει πολύ μεγάλο κλειδί H[i], που πιθανόν παραβιάζει την ιδιότητα διάταξης σωρού. Η διαδικασία Heapify-down μετακινεί το στοιχείο w προς τα κάτω στα φύλλα του δένδρου. Εναλλαγή των κλειδιών 21 και 7. Ομοίως για τα κλειδιά 21 και 8. 38

Ουρά Προτεραιότητας Δομή δεδομένων που διατηρεί ένα σύνολο στοιχείων S Κάθε στοιχείο v є S key(v) Υποστήριξη εισαγωγής/διαγραφής στοιχείου και επιλογής στοιχείου με το μικρότερο key() 39

Ουρά Προτεραιότητας Υλοποίηση με Σωρό CreateHeap(H): επιστρέφει κενό σωρό H έτοιμο να αποθηκεύσει Ν στοιχεία Αρχικοποίηση: O(N) Insert(H,v): εισάγει το στοιχείο v στον Η (Heapify-up) O(log N) Delete(H,i): διαγράφει το στοιχείο στη θέση i του H (Heapify-down) O(log N) FindMin(H): εύρεση μικρότερου στοιχείου στον H O(1) ExtractMin(H): εύρεση και διαγραφή μικρότερου στοιχείου από τον H O(log N) Εφαρμογή: ταξινόμηση n στοιχείων με χρήση σωρού Heapsort Αρχικοποίησε έναν σωρό H με τα n στοιχεία Κάλεσε n φορές την ExtractMin(H) Χρόνος: O(n log n) 40

Βιβλιογραφία 1. J. Kleinberg and E. Tardos, Σχεδιασμός Αλγορίθμων, ελληνική έκδοση, Εκδόσεις Κλειδάριθμος, 2008 2. T. Cormen, C. Leiserson, R. Rivest, and C. Stein, Εισαγωγή στους Αλγορίθμους, ελληνική έκδοση, Πανεπιστημιακές Εκδόσεις Κρήτης, 2012 3. K. Mehlhorn and P. Sanders, Αλγόριθμοι και Δομές Δεδομένων Τα βασικά εργαλεία, ελληνική έκδοση, Εκδόσεις Κλειδάριθμος, 2014 4. S. Dasgupta, C. Papadimitriou, and U. Vazirani, Αλγόριθμοι, ελληνική έκδοση, Εκδόσεις Κλειδάριθμος, 2008 5. Θ. Παπαθεοδώρου, Αλγόριθμοι: Εισαγωγικά Θέματα και Παραδείγματα, Εκδόσεις Πανεπιστημίου Πατρών, 1999 41

Τέλος Ενότητας 42

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. 43

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Πατρών, Χρήστος Ζαρολιάγκης, 2014. «Εισαγωγή στους Αλγορίθμους». Έκδοση: 1.0. Πάτρα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: https://eclass.upatras.gr/courses/ceid1083 44

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

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους. 46