Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

Σχετικά έγγραφα
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Ανάλυση. Ο εσωτερικός ϐρόχος εκτελείται i + 1 ϕορές, για i = 0,..., n 1.

Ταξινόμηση: Εισαγωγικά. Ταξινόμηση (Sor ng) Αλγόριθμοι Απλής Ταξινόμησης. Βασικά Βήματα των Αλγορίθμων

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Πίνακες (Μια παλιά άσκηση) Πίνακες Κατακερματισμού (Hash Tables) Πίνακες (Μια παλιά άσκηση) Εισαγωγή. A n

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

Ενδεικτικές Ερωτήσεις Θεωρίας

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

Πληροφορική 2. Δομές δεδομένων και αρχείων

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Αλγόριθμοι Ταξινόμησης Μέρος 2

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

1η Σειρά Γραπτών Ασκήσεων

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

ΠΕΡΙΕΧΟΜΕΝΑ. Μονοδιάστατοι πίνακες Πότε πρέπει να χρησιμοποιούνται πίνακες Πολυδιάστατοι πίνακες Τυπικές επεξεργασίες πινάκων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Αλγόριθμοι Ταξινόμησης Μέρος 1

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κατακερµατισµός. Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετημένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

Προγραμματιστικές Τεχνικές

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δυναμική Διατήρηση Γραμμικής Διάταξης

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Κατακερματισμός. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

Δείκτες & Πίνακες Δείκτες, Πίνακες

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

Αλγόριθμοι Αναζήτησης

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Πληροφορική 2. Αλγόριθμοι

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

δυαδική αναζήτηση Παύλος Σ. Εφραιμίδης

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Προγραμματισμός Ι (ΗΥ120)

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Διδάσκων: Παναγιώτης Ανδρέου

Ουρά Προτεραιότητας: Heap

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

Εγχειρίδιο Οδηγιών. BrainStorm. Διαχείριση Πινάκων. Εισαγωγή, Μεταβολή, Διαγραφή Κατάταξη, Εντοπισμός Εγγραφών

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

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

ΘΕΜΑΤΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΕΞΕΤΑΣΕΩΝ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφ.11: Ευρετήρια και Κατακερματισμός

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

4. Συνδεδεμένες Λίστες

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ. Πίνακες και βασικές επεξεργασίες αυτών

ΒΑΣΙΚΕΣ ΕΠΕΞΕΡΓΑΣΙΕΣ ΜΟΝΟΔΙΑΣΤΑΤΩΝ ΚΑΙ ΔΙΣΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ ΟΙ ΠΙΟ ΣΗΜΑΝΤΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ

5.1. Προσδοκώμενα αποτελέσματα

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Ουρά Προτεραιότητας (priority queue)

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Ταξινόμηση. 1. Ταξινόμηση με Εισαγωγή 2. Ταξινόμηση με Επιλογή. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

Κατακερματισμός (Hashing)

Διάλεξη 23: Τεχνικές Κατακερματισμού II (Hashing)

Υπολογιστικό Πρόβληµα

ΠΡΟΣ: Τηλέφωνο: Ινστιτούτο Εκπαιδευτικής Πολιτικής ΚΟΙΝ.:

Διαχρονικές δομές δεδομένων

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας

Ενότητα 6: Κατακερματισμός Ασκήσεις και Λύσεις

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Αλγόριθµοι και Πολυπλοκότητα

Transcript:

Σύνοψη Προηγούμενου Πίνακες (Arrays Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Διαδικαστικά θέματα. Aντικείμενο Μαθήματος. Aντικείμενα, Κλάσεις, Μέθοδοι, Μεταβλητές. Κληρονομικότητα, Πολυμορφισμός. Πειραματική Aνάλυση. Πολυπλοκότητα Aσυμπτωτική Ανάλυση. Τελέλης Δομές Δεδομένων 1 / 48 Τελέλης Δομές Δεδομένων 2 / 48 Πίνακες (Arrays Πίνακες (Arrays: Βασικές Λειτουργίες Aπλή, π.χ., arr[10] = 77; Διαδεδομένη δομή αποθήκευσης δεδομένων ίδιου τύπου. Aποθήκευση δεδομένων σε Προσπέλαση δεδομένων με βάση τη θέση τους στη μνήμη. i A A[i] Δισδιάστατος Πίνακας m n είναι πίνακας με m γραμμές και n στήλες. Τα m και n αντιστοιχούν στις δύο διαστάσεις του πίνακα. Αν απαιτείται, μπορεί να χρησιμοποιούνται πολυδιάστατοι πίνακες. Π.χ., του στοιχείου με τιμή 77. από την αρχή, μέχρι να εντοπίσουμε τη θέση όπου είναι αποθηκευμένο το 77. η θέση του στοιχείου προς διαγραφή. Τα στοιχεία σε μεγαλύτερες θέσεις μετακινούνται μία θέση αριστερά. (είναι όμως δυνατό να υλοποιηθεί και με αυτό τον τρόπο. Τελέλης Δομές Δεδομένων 3 / 48 Τελέλης Δομές Δεδομένων 4 / 48

Εισαγωγή Στοιχείου Εστω πίνακας A χωρητικότητας 10 θέσεων Ένα νέο στοιχείο εισάγεται στο πρώτο κενό κελί Aναζήτηση Στοιχείου Η αναζήτηση γίνεται με βάση την τιμή του στοιχείου, έστω το 58. Διατρέχουμε τον πίνακα κελί-κελί από την πρώτη θέση μέχρι την τελευταία θέση στην οποία υπάρχει αποθηκευμένο στοιχείο. Εισαγωγή στοιχείου 37 στη θέση 0: a[0] = 37. Εάν συναντήσουμε το 58, σταματάμε (επιτυχής αναζήτηση. Εισαγωγή στοιχείου 22 στη θέση 1: a[1] = 22. Εισαγωγή στοιχείου 99 στη θέση 2: a[2] = 99. O(1 37 22 99 Μπορεί να μην το συναντήσουμε (αποτυχημένη αναζήτηση. Η αναζήτηση εξετάζει στη χειρότερη περίπτωση όλα τα n στοιχεία = (. 37 22 99 42 11 58 67 71 Τελέλης Δομές Δεδομένων 5 / 48 Τελέλης Δομές Δεδομένων 6 / 48 Συνέπεια και Διπλές Εγγραφές Άρα, δεν προβλέπεται εν γένει να περιέχει το ίδιο στοιχείο 2 φορές. Ο περιορισμός αυτός μπορεί να επιβληθεί από την υλοποίησή μας: Κατά την πράξη της ενός στοιχείου. Ελέγχουμε αν το προς εισαγωγή στοιχείο υπάρχει ήδη αποθηκευμένο. Ο έλεγχος αυτός προϋποθέτει πριν από την Στην περίπτωση αυτή η γίνεται O(n σε χρόνο O(1 Σημειώνεται ότι ίσως η εφαρμογή να απαιτεί διπλές εγγραφές. Διαγραφή Στοιχείου Η διαγραφή ενός στοιχείου απαιτεί πρώτα τον εντοπισμό του. Aφού εντοπιστεί το στοιχείο και διαγραφεί, όλα τα επόμενά του μεταφέρονται μία θέση αριστερά, ώστε να καλυφθεί το κενό. (, διότι: Aναζήτηση χρόνου O(n. Μετακίνηση O(n στοιχείων. 37 22 99 42 11 58 67 71 27 16 37 22 99 42 11 67 71 27 16 Τελέλης Δομές Δεδομένων 7 / 48 Τελέλης Δομές Δεδομένων 8 / 48

Διαγραφή: Εναλλακτική Υλοποίηση Διαγραφή και Διπλές Εγγραφές Αποφεύγουμε την ολίσθηση O(n στοιχείων προς τα αριστερά. Το τελευταίο στοιχείο αντιγράφεται στη θέση του διαγραφόμενου. 37 22 99 42 11 67 71 27 37 22 99 42 11 67 71 27 Η υλοποίηση αυτή είναι επίσης χρόνου O(n. Εξαιτίας της του στοιχείου προς διαγραφή. (από την πράξη : Πρέπει να αποφασίσουμε συμπεριφορά και. του στοιχείου με τιμή X? του στοιχείου με τιμή X? των στοιχείων με τιμή X? Η πρώτη είναι συνήθης επιλογή (τερματισμός στο πρώτο στοιχείο. Μπορούν να υλοποιηθούν όλες οι επιλογές ως χωριστές πράξεις. Τελέλης Δομές Δεδομένων 9 / 48 Τελέλης Δομές Δεδομένων 10 / 48 Πίνακες στη Java: Δημιουργία Πίνακα Πίνακες στη Java: Προσπέλαση Στοιχείων Πίνακα Με χρήση του τελεστή new. [ ] i n t A r r a y ; i n t A r r a y = [ 1 0 0 ] Τα στοιχεία ενός πίνακα προσπελαύνονται με δείκτη μέσα σε αγκύλες. tmp = i n t A r r a y [ 3 ] ; i n t A r r a y [ 7 ] = 6 6 ; [ ] i n t A r r a y = [ 1 0 0 ] ; Εύρεση μεγέθους πίνακα με χρήση του πεδίου length. a r r a y L e n g t h = i n t A r r a y. l e n g t h ; < 0 1 Τελέλης Δομές Δεδομένων 11 / 48 Τελέλης Δομές Δεδομένων 12 / 48

Πίνακες στη Java: Aρχικοποίηση Μερικά Παραδείγματα Ένας πίνακας ακεραίων αρχικοποιείται με το 0 όταν δημιουργείται. Aυτό μπορείτε να το αλλάξετε με τον εξής τρόπο: [ ] i n t A r r a y = { 0, 3, 6, 9, 12, 15, 18, 21, 24, 2 7 ; Ένας πίνακας περιέχει στοιχεία null, ώσπου αυτά να πάρουν τιμές AutoData [ ] c a r A r r a y = AutoData [ 4 0 0 0 ] ; [ ] x, y, z ; S t r i n g [ ] a ; x = [ 3 ] ; y = x ; a = S t r i n g [ 3 ] ; x [ 1 ] = 2 ; y [ 1 ] = 3 ; a [ 1 ] = H e l l o ; [ ] q ; q = [ ] { 1, 2, 3 ; [ ] r = { 7, 8, 9 ; Τελέλης Δομές Δεδομένων 13 / 48 Τελέλης Δομές Δεδομένων 14 / 48 Οργάνωση της Δομής σε Κλάση Η κλάση MyArray (και Αναζήτηση Ενσωμάτωση του πίνακα σε μία κλάση. Η κλάση αυτή θα παρέχει μια διεπαφή μεθόδων υψηλού επιπέδου: insert ( elem find ( elem delete ( elem Δε χρειάζεται ο χρήστης να ασχολείται με το δείκτη του πίνακα. Άρα, ο χρήστης επικεντρώνεται στο τι (όχι στο πώς πρόκειται να εισαχθεί, διαγραφεί και αναζητηθεί. MyArray { [ ] a ; nelems ; H i g h A r r a y ( max { a = [ max ] ; nelems = 0 ; f i n d ( s e a r c h K e y { j ; ( j = 0 ; j < nelems ; j ++ ( a [ j ] == s e a r c h K e y ; ( j == nelems ; ; Τελέλης Δομές Δεδομένων 15 / 48 Τελέλης Δομές Δεδομένων 16 / 48

Εισαγωγή, Διαγραφή Μία μέθοδος εκτύπωσης i n s e r t ( v a l u e { ( nelems >= a. l e n g t h ( ; a [ nelems ] = v a l u e ; nelems + + ; ( ; d e l e t e ( v a l u e { j ; ( j = 0 ; j < nelems ; j ++ ( v a l u e == a [ j ] ; ( j == nelems ; { ( k = j ; k < nelems ; k + + a [ k ] = a [ k + 1 ] ; nelems ; ; d i s p l a y ( { ( j = 0 ; j < nelems ; j ++ System. out. p r i n t ( a [ j ] + ; System. out. p r i n t l n ( ; Τελέλης Δομές Δεδομένων 17 / 48 Τελέλης Δομές Δεδομένων 18 / 48 Σχόλια Σχόλια: Εναλλακτική Υλοποίηση Αναζήτησης/Διαγραφής Η υλοποίηση αυτή επιτρέπει διπλές εγγραφές. Η ελέγχει μόνο αν υπάρχει αρκετός χώρος στον πίνακα. Αν όχι, επιστρέφει, διαφορετικά, επιστρέφει. Στην πράξη της υλοποιείται εκ νέου η αναζήτηση: Διότι απαιτείται η ακριβής θέση του στοιχείου προς διαγραφή. Η ακριβής θέση δε χρησιμεύει σε «εξωτερικό» χρήστη της find. Για το λόγο αυτόν η find επιστρέφει /. Οπότε, επαναλαμβάνεται ο κώδικας της αναζήτησης στη μέθοδο delete. myfind ( s e a r c h K e y { j ; ( j = 0 ; j < nelems ; j ++ ( a [ j ] == s e a r c h K e y ; ( j ; f i n d ( s e a r c h K e y { pos = myfind ( s e a r c h K e y ; ( pos == nelems ; ( ; Τελέλης Δομές Δεδομένων 19 / 48 Τελέλης Δομές Δεδομένων 20 / 48

Σχόλια: Εναλλακτική Υλοποίηση Αναζήτησης/Διαγραφής Σχόλια: Πίνακες Δυναμικού Μεγέθους d e l e t e ( v a l u e { j = myfind ( v a l u e ; ( j == nelems ; { ( k = j ; k < nelems ; k ++ a [ k ] = a [ k + 1 ] ; nelems ; ; Όταν διαπιστώνεται ότι ο πίνακας είναι πλήρης. Δημιουργείται νέος πίνακας, μεγαλύτερου μεγέθους. διπλασιασμός του μεγέθους. Αντιγράφεται όλος ο παλιός πίνακας στον νέο πίνακα. Πραγματοποιείται εισαγωγή του νέου στοιχείου. Η γίνεται στην περίπτωση αυτή O(n χρόνου. Λόγω της αντιγραφής όλων των στοιχείων του παλιού πίνακα. Τελέλης Δομές Δεδομένων 21 / 48 Τελέλης Δομές Δεδομένων 22 / 48 Ταξινομημένοι Πίνακες Ένας πίνακας στον οποίο τα δεδομένα διευθετούνται σε αύξουσα σειρά κλειδιού (ή και φθίνουσα. Η μικρότερη τιμή κλειδιού βρίσκεται στο κελί με δείκτη 0. Κάθε κελί περιέχει τιμή μεγαλύτερη από το προηγούμενο κελί. 11 22 37 42 58 67 71 83 Τελέλης Δομές Δεδομένων 23 / 48 Τελέλης Δομές Δεδομένων 24 / 48

Γραμμική Aναζήτηση Δυαδική Aναζήτηση Μπορώ να εφαρμόσω την αναζήτηση όπως ακριβώς στην περίπτωση του μη ταξινομημένου πίνακα. Διατρέχω τον πίνακα κελί-κελί από την πρώτη θέση μέχρι την τελευταία θέση στην οποία υπάρχει αποθηκευμένο στοιχείο. Εάν συναντήσουμε το 58, σταματάμε (επιτυχής αναζήτηση. Μπορεί να μην το συναντήσουμε (αποτυχημένη αναζήτηση. Λέγεται και και έχει πολυπλοκότητα O(n, όπου n το πλήθος στοιχείων του πίνακα. Πολύ ταχύτερη από τη γραμμική αναζήτηση. Πώς λειτουργεί η εύρεση του στοιχείου με τιμή X? Χωρίζει τον πίνακα στη μέση, σε αριστερό και δεξιό κομμάτι, ελέγχει το κλειδί M που περιέχεται στο μεσαίο κελί, αν X = M, τότε η αναζήτηση είναι επιτυχής. αν X < M επαναλαμβάνει τη διαδικασία στο αριστερό κομμάτι, αν X > M επαναλαμβάνει τη διαδικασία στο δεξιό κομμάτι, Τελέλης Δομές Δεδομένων 25 / 48 Τελέλης Δομές Δεδομένων 26 / 48 Παράδειγμα Δυαδικής Aναζήτησης Δυαδική Aναζήτηση 11 22 37 42 58 67 71 83 1η Επανάληψη: 11 22 37 42 58 67 71 83 2η Επανάληψη: 11 22 37 42 58 67 71 83 3η Επανάληψη: 11 22 37 42 58 67 71 83 11 22 37 42 58 67 83 Κάθε επανάληψη χωρίζει το εύρος των πιθανών τιμών στη μέση. Σε κάθε επανάληψη, υποδιπλασιάζεται το μέγεθος του πίνακα στο οποίο αναζητούμε. (log O(n Τελέλης Δομές Δεδομένων 27 / 48 Τελέλης Δομές Δεδομένων 28 / 48

Τυπική Aπόδειξη Έστω ταξινομημένος πίνακας (π.χ., ακεραίων μήκους L(0 = n. Εκτελούμε δυαδική αναζήτηση, που διαρκεί k επαναληπτικά βήματα. Στο i-οστό βήμα, εκτελούμε σταθερό αριθμό στοιχειωδών πράξεων: βρίσκουμε το μεσαίο στοιχείο ενός (υπο-πίνακα, O(1 συγκρίσεις του στοιχείου προς αναζήτηση. Επίσης, στο i-οστό βήμα δουλεύουμε σε υποπίνακα μήκους L(i 1/2: L(i = L(i 1 2 = L(i 2 2 2 = = L(0 2 i = n 2 i Ο αλγόριθμος τερματίζει όταν το μήκος του (υπο-πίνακα που εξετάζουμε σε κάποιο βήμα είναι 1: άρα, όταν L(k = 1 = n/2 k. Τότε: 2 k = n = log(2 k = log n = k = log n Υλοποίηση Ταξινομημένου Πίνακα OrderedArray { [ ] a ; nelems ; OrderedArray ( max { a = [ max ] ; nelems = 0 ; s i z e ( { nelems ; Τελέλης Δομές Δεδομένων 29 / 48 Τελέλης Δομές Δεδομένων 30 / 48 Υλοποίηση Δυαδικής Αναζήτησης myfind ( s e a r c h K e y { lowerbound = 0 ; upperbound = nbelems 1; c u r I n ; ( { c u r I n = ( lowerbound + upperbound / 2 ; ( a [ c u r I n ]== s e a r c h K e y c u r I n ; ( lowerbound > upperbound nelems ; ( a [ c u r I n ] < s e a r c h K e y lowerbound = c u r I n + 1 ; upperbound = c u r I n 1 ; f i n d ( s e a r c h K e y { j = myfind ( s e a r c h K e y ; ( j == nelems ( ; ( ; Τελέλης Δομές Δεδομένων 31 / 48 Υλοποίηση Εισαγωγής και Διαγραφής i n s e r t ( v a l u e { ( nelems >= a. l e n g t h ( ; j ; ( j = 0 ; j < nelems ; j ++ ( a [ j ] > v a l u e ; ( k = nelems ; k > j ; k a [ k ] = a [ k 1]; a [ j ] = v a l u e ; nelems + + ; ( ; d e l e t e ( v a l u e { j = myfind ( v a l u e ; ( j == nelems ; ( k = j ; k < nelems ; k ++ a [ k ] = a [ k + 1 ] ; nelems ; ; Τελέλης Δομές Δεδομένων 32 / 48

Μία Μέθοδος Εκτύπωσης Σχόλια O(n d i s p l a y ( { ( j = 0 ; j < nelems ; j ++ System. out. p r i n t ( a [ j ] + ; System. out. p r i n t l n ( ; Διότι ολισθαίνει O(n στοιχεία προς τα δεξιά, προκειμένου να τοποθετήσει το νέο στοιχείο στη σωστή θέση. Χρησιμοποιεί γραμμική αναζήτηση προς εύρεση της σωστής θέσης. Δεν επιβαρύνει την ασυμπτωτική της πολυπλοκότητα O(n: αλλά μπορεί να αποφευχθεί, με χρήση δυαδικής αναζήτησης. Απαιτείται κατάλληλη υλοποίηση της myfind, που να επιστρέφει τη θέση του αμέσως προηγούμενου στοιχείου. Τελέλης Δομές Δεδομένων 33 / 48 Τελέλης Δομές Δεδομένων 34 / 48 Σχόλια Χαρακτηριστικά Ταξινομημένων Πινάκων Κάθε νέο στοιχείο ίδιας τιμής θα εγγραφεί στη θέση του παλαιού. Διότι, γίνεται πρώτα (γραμμική αναζήτηση: για τη θέση του 1ου στοιχείου που είναι μεγαλύτερο του εισαγόμενου. Στη γραμμή: (a[ j ] > value ; Αυτό είναι συνεπές και με την υλοποίηση της δυαδικής αναζήτησης: που επιστρέφει μία θέση μόνο, εφόσον το στοιχείο υπάρχει. Εκθετικά ταχύτερη αναζήτηση από ότι σε μη ταξινομημένο πίνακα. Τίμημα: ακριβή εισαγωγή O(n χρόνου, για διατήρηση ταξινόμησης. Aν a είναι η τιμή του εισαγόμενου κλειδιού, απαιτείται ολίσθηση κατά 1 θέση των στοιχείων με μεγαλύτερα κλειδιά, για να δημιουργηθεί χώρος για το στοιχείο με τιμή a. Διαγραφή αργή, O(n χρόνου σε ταξινομημένους ή μη πίνακες. Οι ταξινομημένοι πίνακες είναι χρήσιμοι όταν οι αναζητήσεις είναι σημαντικά συχνότερες από εισαγωγές και διαγραφές. Τελέλης Δομές Δεδομένων 35 / 48 Τελέλης Δομές Δεδομένων 36 / 48

Σύνοψη Πολυπλοκότητας Γιατί δε Χρησιμοποιούμε τους Πίνακες για όλα? Γραμμική Aναζήτηση O(n Δυαδική Aναζήτηση O(log n Εισαγωγή σε ταξινομημένο πίνακα O(1 Εισαγωγή σε ταξινομημένο πίνακα O(n Διαγραφή σε ταξινομημένο πίνακα O(n Θέματα απόδοσης. Μη ταξινομημένοι πίνακες. Γρήγορη εισαγωγή O(1, όμως αργή αναζήτηση/διαγραφή O(n Ταξινομημένοι πίνακες. Γρήγορη αναζήτηση O(log n, όμως αργή εισαγωγή/διαγραφή O(n Σταθερό μέγεθος πινάκων κατά τη δημιουργία. Πρέπει να εκτιμήσουμε από πριν το μέγιστο πλήθος των στοιχείων: Διαγραφή σε ταξινομημένο πίνακα O(n Υπερεκτίμηση μεγέθους = κατανάλωση μνήμης άσκοπα. Υποτίμηση μεγέθους = ο πίνακας δεν επαρκεί. Τελέλης Δομές Δεδομένων 37 / 48 Τελέλης Δομές Δεδομένων 38 / 48 (1 Aναπαράσταση Υποσυνόλων του {0,..., n 1 (1: Aναπαράσταση Υποσυνόλων του {0,..., n 1 Ζητείται δομή αναπαράστασης υποσυνόλων του {0, 1,..., n 1. Θέλουμε να υποστηρίξουμε τις εξής βασικές πράξεις: στοιχείου a {0,..., n 1 στο τρέχον υποσύνολο. στοιχείου a {0,..., n 1 από το τρέχον υποσύνολο. αν το στοιχείο a {0,..., n 1 ανήκει στο υποσύνολο. Πόσο αποδοτικά μπορούμε να τις υλοποιήσουμε με χρήση πίνακα? Χρησιμοποιούμε πίνακα n δυαδικών στοιχείων (με τιμές true/false του a { 0,..., n 1 : A[a] = χρόνος O(1 του a { 0,..., n 1 : A[a] = χρόνος O(1 του a { 0,..., n 1 : (A[a ] ; χρόνος O(1 Τελέλης Δομές Δεδομένων 39 / 48 Τελέλης Δομές Δεδομένων 40 / 48

(2: Πιο αποδοτικοί πίνακες (2: Πιο αποδοτικοί πίνακες Θέλουμε να υλοποιήσουμε την σε πίνακα: Δίνεται απλώς μια θέση i του πίνακα (και όχι ένα στοιχείο/κλειδί. Διαγράφουμε το στοιχείο στη θέση i θέτοντας απλώς A[i ] =. Μπορούμε να έχουμε ταυτόχρονα και σε χρόνο O(1 δίχως χρήση επιπλέον δομής/μνήμης? (στον οποίο αποθηκεύουμε δεδομένα και, θα πρέπει να κάνουμε πριν από κάθε, για «κενές» θέσεις, με τιμή null. Επομένως, η θα έχει πλέον χρόνο χειρότερης περίπτωσης O(n. Είναι εφικτό εν γένει (π.χ., με χρήση δεύτερου πίνακα? Τελέλης Δομές Δεδομένων 41 / 48 Τελέλης Δομές Δεδομένων 42 / 48 Πρόβλημα 2: Πιο αποδοτικοί πίνακες Πρόβλημα 3: Κατασκευή Ομοιόμορφα Τυχαίας Μετάθεσης Aπάντηση στη δεύτερη ερώτηση: Ναι! Χρησιμοποιούμε βοηθητικό πίνακα ακεραίων, B, και έναν μετρητή last, που αρχικοποιείται στο 0. Υλοποιούμε την στη θέση i ως εξής: A [ i ] = ; B [ l a s t ] = i ; l a s t + + ; Υλοποιούμε την στοιχείου a ως εξής: A [ B [ l a s t 1]] = a ; l a s t ; Και οι δύο πράξεις σε χρόνο χειρότερης περίπτωσης O(1. Δίνεται πίνακας A με n στοιχεία. Ζητείται αλγόριθμος που: Δέχεται σαν είσοδο τον πίνακα A, «ανακατεύει» τη σειρά των στοιχείων στον A, ώστε: η τελική σειρά είναι οποιαδήποτε από τις n! μεταθέσεις των στοιχείων, με πιθανότητα 1 n!. μπορούμε να επιλέξουμε αριθμό στο {0,..., k 1 με πιθανότητα 1/k (τυχαία και ομοιόμορφα. Τελέλης Δομές Δεδομένων 43 / 48 Τελέλης Δομές Δεδομένων 44 / 48

Κατασκευή Ομοιόμορφα Τυχαίας Διάταξης Υλοποίηση σε Java Ένας αλγόριθμος με βέλτιστη πολυπλοκότητα (Donald Knuth Είσοδος: πίνακας A i = 0,..., n 1 επίλεξε μια θέση j {i,..., n 1 αντάλλαξε τα περιεχόμενα των A[i] και A[j]. A Πολυπλοκότητα: O(n. Δίνει τυχαία μετάθεση των περιεχομένων του A, με πιθανότητα 1 n!. j a v a. u t i l. Random ; s h u f f l e ( [ ] A { Random rndgen = Random ( System. c u r r e n t T i m e M i l l i s ( ; ( i = 0 ; i < A. l e n g t h ; i + + { pos = i + rndgen. n e x t I n t ( A. l e n g t h i ; tmp = A [ i ] ; A [ i ] = A [ pos ] ; A [ pos ] = tmp ; Τελέλης Δομές Δεδομένων 45 / 48 Τελέλης Δομές Δεδομένων 46 / 48 Aνάλυση Κατασκευής Ομοιόμορφα Τυχαίας Μετάθεσης Aνάλυση Κατασκευής Ομοιόμορφα Τυχαίας Μετάθεσης Η πιθανότητα του A[1] να έχει στην έξοδο την τιμή που παρατηρούμε, είναι Pr( A[1] = 1 n. Η πιθανότητα του A[2] να έχει στην έξοδο την τιμή που παρατηρούμε, A[1] είναι Pr( A[2] A[1] = 1 n 1. Η πιθανότητα του A[3] να έχει στην έξοδο την τιμή που παρατηρούμε, A[1], A[2], είναι Pr( A[3] A[1] A[2] = 1 n 2................ Η πιθανότητα του A[i] να έχει στην έξοδο την τιμή που παρατηρούμε, A[1], A[2],, A[i 1] είναι: ( Pr A[i] A[1] A[2] A[i 1] = 1 n i + 1 Η πιθανότητα να δούμε στην έξοδο τη διάταξη A που υποθέσαμε είναι: ( Pr( A = Pr A[1] A[2] A[n] ( = Pr A[n] A[1] A[2] A[n 1] ( = Pr A[n] A[1] A[2] A[n 1] ( Pr A[1] A[2] A[n 2] = n ( Pr A[i] A[1] A[2] A[i 1] i=1 = 1 1 2 1 3 1 n = 1 n! ( Pr A[1] A[2] A[n 1] ( Pr A[n 1] A[1] A[2] A[n 2] Τελέλης Δομές Δεδομένων 47 / 48 Τελέλης Δομές Δεδομένων 48 / 48