Σύνοψη Προηγούµενου (2/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Πρόβληµα: Κατασκευή Οµοιόµορφα Τυχαίας Μετάθεσης.

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

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

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

Συλλογές, Στοίβες και Ουρές

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

Δομές Δεδομένων (Data Structures)

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

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

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

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

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Βασικές Έννοιες Δοµών Δεδοµένων

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

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

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

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Λίστες (Lists) Ορέστης Τελέλης. Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

public class ArrayStack implements Stack {

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

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Βασικές οµές εδοµένων

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

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

Δοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Κεφάλαιο 6 Ουρές Προτεραιότητας

#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Βασικές Δομές Δεδομένων

Επιµέλεια Θοδωρής Πιερράτος

public class ArrayQueue implements Queue {

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

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

υναµικές οµές εδοµένων

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

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

Ενότητα 7 Ουρές Προτεραιότητας

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

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

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

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

Στοίβες. ΟΑΤ της Στοίβας. Περιγραφή και Υλικό Ανάγνωσης. Αφηρηµένοι Τύποι εδοµένων (AΤ )

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

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

Κεφάλαιο 5 Συλλογές, Στοίβες και Ουρές

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

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

Φροντιστήριο 4 Σκελετοί Λύσεων

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

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

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Διορθώσεις σελ

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Transcript:

Σύνοψη Προηγούµενου (1/2 Στοίβες, Ουρές, Ουρές Προτεραιότητας Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Πίνακες Εισαγωγή, σε χρόνο O(1. Αναζήτηση, σε χρόνο O(n. ιαγραφή, σε χρόνο O(n (απαιτεί αναζήτηση. Αναπαράσταση Υποσυνόλου n συνεχόµενων ακεραίων (π.χ., 0, 1, 2,..., n 1: Εισαγωγή, ιαγραφή, Αναζήτηση σε χρόνο O(1. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 1 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 2 / 56 Σύνοψη Προηγούµενου (2/2 Πρόβληµα: Κατασκευή Οµοιόµορφα Τυχαίας Μετάθεσης Ταξινοµηµένοι Πίνακες υαδική Αναζήτηση, σε χρόνο O(log n. Εισαγωγή, σε χρόνο O(n. Απαιτεί: υαδική Αναζήτηση για εντοπισµό ϑέσης εισαγωγής χρόνος: O(log n. Μετακίνηση O(n στοιχείων κατά µία ϑέση χρόνος: O(n. Εισαγωγή του νέου στοιχείου στην κενή ϑέση που προκύπτει χρόνος: O(1. ιαγραφή, σε χρόνο O(n. ίνεται πίνακας A µε n στοιχεία. Ζητείται αλγόριθµος που: έχεται σαν είσοδο τον πίνακα A, «ανακατεύει» τη σειρά των στοιχείων στον A, ώστε: η τελική σειρά να είναι οποιαδήποτε από τις n! µεταθέσεις των στοιχείων, µε πιθανότητα 1 n!. εδοµένο: µπορούµε να επιλέξουµε έναν τυχαίο αριθµό από το {0, 1,..., k 1 µε πιθανότητα 1 n. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 3 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 4 / 56

Κατασκευή Οµοιόµορφα Τυχαίας Μετάθεσης Υλοποίηση σε Java Ενας αλγόριθµος µε ϐέλτιστη πολυπλοκότητα (Donald Knuth Knuth Shuffle Algorithm import java.util.random; // Permutes the array "A" uniformly at random. public void shuffle(int[] A { Είσοδος: πίνακας A 1. για i = 0,..., n 1 εκτέλεσε: 1.1 επίλεξε µια ϑέση j {i,..., n 1 τυχαία και οµοιόµορφα 1.2 αντάλλαξε τα περιεχόµενα των A[i] και A[j]. 2. επίστρεψε A Πολυπλοκότητα: O(n. ίνει τυχαία επιλεγµένη µετάθεση των περιεχοµένων του A, µε πιθανότητα 1 n!. Γιατί; Random rndgen = new Random(System.currentTimeMillis(; for(int i = 0; i < A.length; i++ { // Random position in {i, i+1,..., n-1 int pos = i+rndgen.nextint(a.length-i; // Swap int tmp = A[i]; A[i] = A[pos]; A[pos] = tmp; Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 5 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 6 / 56 Ανάλυση Κατασκευής Οµοιόµορφα Τυχαίας Μετάθεσης Ανάλυση Κατασκευής Οµοιόµορφα Τυχαίας Μετάθεσης Η πιθανότητα το 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] είναι: ( 1 Pr A[i] A[1] A[2] A[i 1] = n i + 1 Η πιθανότητα να δούµε στην έξοδο τη διάταξη A που υποθέσαµε είναι: ( Pr( A = Pr A[1] A[2] A[n] = ( = Pr A[n] A[1] A[2] A[n 1] ( = 1 Pr A[1] A[2] A[n 1] ( = 1 Pr A[n 1] A[1] A[2] A[n 2] = 1 1 ( 2 Pr A[1] A[2] A[n 2] = = 1 1 2 1 3 1 n = 1 n! ( Pr A[1] A[2] A[n 1] ( Pr A[1] A[2] A[n 2] Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 7 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 8 / 56

Ανακεφαλαίωση: Πίνακες Σηµερινό Μάθηµα Οι πίνακες είναι κατάλληλοι για αναπαράσταση δεδοµένων σαν αυτά που ϐρίσκονται σε µια ϐάση δεδοµένων. Αρχεία προσωπικού, αποθήκη, οικονοµικά δεδοµένα, κτλ. ηλαδή δεδοµένα που υφίστανται στον πραγµατικό κόσµο. Τέτοιες δοµές διευκολύνουν την πρόσβαση στα δεδοµένα. Νέες οµές εδοµένων: Στοίβες, Ουρές, Ουρές Προτεραιότητας. Υλοποιήσεις µε Πίνακες. Αποδοτική εισαγωγή, διαγραφή, και αναζήτηση δεδοµένων. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 9 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 10 / 56 οµές εδοµένων ως Προγραµµατιστικά Εργαλεία Περιορισµένη Πρόσβαση Σε έναν πίνακα, η προσπέλαση ενός αντικειµένου µπορεί να γίνει: Οι δοµές δεδοµένων που ϑα εξετάσουµε στη συνέχεια χρησιµοποιούνται ως προγραµµατιστικά εργαλεία. είτε άµεσα (εφόσον η ϑέση του είναι γνωστή, π.χ., A[12]. είτε διατρέχοντας τον πίνακα κελί-κελί ώσπου να ϐρεθεί, π.χ. µε ένα ϐρόχο: Αποτελούν εννοιολογικές αναπαραστάσεις που υποβοηθούν στην ανάπτυξη προγραµµάτων. ηµιουργούνται για να επιτελέσουν µια συγκεκριµένη λειτουργία κατά τη διάρκεια εκτέλεσης ενός προγράµµατος. Οταν ολοκληρωθεί η λειτουργία, η δοµή δε χρησιµεύει πλέον, και καταστρέφεται. for(int i = 0; i < A.length; i++ {... A[i]... Στις δοµές που ϑα εξετάσουµε τώρα η προσπέλαση είναι περιορισµένη: Μόνο ένα αντικείµενο είναι διαθέσιµο για ανάγνωση ή διαγραφή, σε κάθε δεδοµένη χρονική στιγµή. Η διεπαφή (interface των δοµών αυτών είναι σχεδιασµένη ώστε να επιβάλλει την περιορισµένη πρόσβαση. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 11 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 12 / 56

Πιο Αφηρηµένες οµές Οι στοίβες και οι ουρές είναι πιο αφηρηµένες δοµές από τους πίνακες. Ορίζονται ουσιαστικά από τη διεπαφή (interface τους. Ο εσωτερικός µηχανισµός που τις υλοποιεί δεν είναι ορατός στο χρήστη τους. Στοίβες Stacks Παράδειγµα: Μία στοίβα µπορεί να υλοποιηθεί µε χρήση πίνακα ή µε συνδεδεµένη λίστα. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 13 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 14 / 56 Στοίβα (Stack Μερικές Εφαρµογές Στοιβών LIFO (Last In, First Out δοµή δεδοµένων. Η στοίβα περιορίζει την προσπέλαση στο στοιχείο που εισήχθη πιο πρόσφατα. Η δοµή στοίβα µπορεί να υλοποιηθεί µε έναν πίνακα και έναν δείκτη στο στοιχείο της κορυφής της. x y = top Ελεγχος ισορροπίας παρενθέσεων και αγκύλων σε µία έκφραση. Συντακτική ανάλυση εκφράσεων, όπως 3 (4 + 5. Βοηθητική δοµή για αλγόριθµους εξέτασης κόµβων δέντρου ή αναζητήσεις στις κορυφές ενός γράφου. Μικροεπεξεργαστές χρησιµοποιούν αρχιτεκτονική που στηρίζεται σε στοίβες. Υπολογιστές τσέπης. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 15 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 16 / 56

Αναλογία µε Φυσικό Κόσµο Παράδειγµα Λειτουργιών Στοίβας Μια στοίβα µε ταχυδροµικές επιστολές. Εξέταση των επιστολών από πάνω προς τα κάτω. push(10 push(5 pop( push(15 push(7 pop( Μια στοίβα από πιάτα. Πλύσιµο των πιάτων από πάνω προς τα κάτω. Βασικές ενέργειες µιας στοίβας. Τοποθέτηση στοιχείου στην κορυφή µιας στοίβας: εισαγωγή push. 10 5 10 10 15 10 7 15 10 15 10 Αποµάκρυνση στοιχείου από την κορυφή: εξαγωγή pop. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 17 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 18 / 56 Υλοποίηση Στοίβας Υλοποίηση Στοίβας (1/3 Βασίζεται στη διαχείριση των παρακάτω αντικειµένων: class StackX { private int maxsize; // size of stack stack array top τύπου int «είκτης» στην κορυφή της στοίβας stackarray τύπος πίνακα Πίνακας αποθήκευσης στοιχείων της στοίβας private long[] stacarray; private int top; // top of stack - maxsize τύπου int Μέγεθος πίνακα που υλοποιεί τη στοίβα. Σηµείωση: Είναι ϐολικό να έχουµε top= 1, για την κενή στοίβα. public StackX(int s { maxsize = s; stackarray = new long[maxsize]; top = -1; // constructor // set array size // create array // no items yet - Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 19 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 20 / 56

Υλοποίηση Στοίβας (2/3 public void push(long j { // put j on top stackarray[++top] = j; public long pop( { return stackarray[top--]; // access, decrement top public long peek( { // peek at top of stack return stackarray[top]; public boolean isempty( { // true if stack empty return(top == -1; public boolean isfull( { // true if stack full return(top == maxsize - 1; Υλοποίηση Στοίβας (3/3 class StackApp { public static void main(string[] args { StackX thestack = new StackX(10; thestack.push(20; thestack.push(40; thestack.push(60; thestack.push(80; while(!thestack.isempty( { long value = thestack.pop(; System.out.print(value; System.out.print(" "; System.out.println(""; // make stack // push items // until empty // delete item // display it Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 21 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 22 / 56 Χειρισµός Λαθών Τι ϑα συµβεί κατά την εισαγωγή στοιχείου σε πλήρη στοίβα; Τι ϑα συµβεί κατά την εξαγωγή στοιχείου από κενή στοίβα; Στη συγκεκριµένη υλοποίηση ο χειρισµός των λαθών αφήνεται στο χρήστη: if (! thestack.isfull( thestack.push(item; else System.out.println("Error..."; Αλλες λύσεις: εσωτερικός έλεγχος λαθών στην κλάση. Προκειµένου να προσφέρονται στο χρήστη οι υπηρεσίες της στοίβας µε συνέπεια. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 23 / 56 Υλοποίηση µε Ελέγχους public boolean push(long j { // put j on top if (!isfull( { stackarray[++top] = j; return(true; return(false; /*** Only removes top without returning top element ***/ public void pop( { if (!isempty( top--; /*** Needs to be used for reading top (before poping ***/ public long peek( { return stackarray[top]; public boolean isempty( { return(top == -1; public boolean isfull( { return(top == maxsize - 1; Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 24 / 56

Παράδειγµα Εφαρµογής Στοίβας Αλγόριθµος Balance Checker Οι µεταγλωττιστές (compilers χρειάζεται να ελέγχουν εάν υπάρχει ισορροπία στα σύµβολα σε διάφορες εκφράσεις. "(" πρέπει να ταιριαστεί µε "". "[" πρέπει να ταιριαστεί µε "]". "/*" πρέπει να ταιριαστεί µε "*/", κ.λ.π. Παρδείγµατα µη ταιριασµάτων: a = b + (c - d * (e - f; // Extra!!! while ( m < (n[8] + a { // is missing!!! /*......... */ read character ch; while not end of file if ch is (, or [, or { push(ch; else if ch is, ], or { pop symbol from stack; if ch and popped symbol not matching return error; else if ch is anything else, ignore read next character ch from file; if stack is empty return success; else return error; Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 25 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 26 / 56 Αλγόριθµος Balance Checker Αλγόριθµος Balance Checker S = t[5] + (a (c + b read S, =, t ; [ read [ ; push( [ [ read 5 ; read ] ; pop(; // ] matches [ read + ; S = t[5] + (a (c + b ( ( read ( ; push( ( ; ( ( read c, +, b ; ( read ; pop(; // matches ( read ; pop(; // matches ( ( read ( ; push( ( ; ( read a, * ; Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 27 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 28 / 56

Πολυπλοκότητα Λειτουργιών Στοίβας Τα στοιχεία εισάγονται και ανακτώνται σε σταθερό χρόνο O(1. Είναι ανεξάρτητο του µεγέθους n της στοίβας. Και οι δύο λειτουργίες είναι πολύ αποδοτικές (γρήγορες. εν απαιτούνται συγκρίσεις στοιχείων ή µετακινήσεις στοιχείων, που εµπεριέχουν κόστος. Ουρές Queues εν προσφέρονται οι δυνατότητες: απευθείας ανάκτησης ενός συγκεκριµένου στοιχείου από τη στοίβα ανάκτησης του i-οστού στοιχείου Μπορείτε ενδεχοµένως να τις υλοποιήσετε: Τότε, ίσως δε χρειάζεται η αποδοτικότητα µιας στοίβας. Ισως χρειάζεται ένας πίνακας που κατά περίπτωση λειτουργεί σαν στοίβα. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 29 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 30 / 56 Ουρά (Queue Αναλογία µε Φυσικό Κόσµο Μία «γραµµή αναµονής» της οποίας το µήκος: αυξάνει καθώς εισάγονται στοιχεία στο τέλος της, µικραίνει καθώς αποµακρύνονται στοιχεία από την αρχή της. Αντίθετα µε τη στοίβα και τα δύο άκρα χρησιµοποιούνται. οµή εδοµένων FIFO (First In, First Out: ιατήρηση σχετικής σειράς στοιχείων, ως προς εισαγωγή/αποµάκρυνση. Ουρά αναµονής για επιβίβαση σε µέσο µαζικής µεταφοράς. Πακέτα δεδοµένων που περιµένουν τη σειρά τους να µεταδοθούν στο Internet. Ουρά εκτυπωτή µε εργασίες εκτύπωσης που αναµένουν επεξεργασία. Ουρά αποθήκευσης χαρακτήρων/συµβόλων που πληκτρολογούνται σε επεξεργαστή κειµένου. Στοιχείο που εισάγεται πριν από άλλο, ϑα εξαχθεί πιο νωρίς από το άλλο. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 31 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 32 / 56

Βασικές Λειτουργίες Ουράς Αναπαράσταση Ουράς Συνίσταται στη διαχείριση των ακόλουθων αντικειµένων: τύπου int «δείκτης» στην αρχή της ουράς Εισαγωγή στοιχείου τύπου int «δείκτης» στο τέλος της ουράς Τοποθετείται στο τέλος της ουράς. Αποµάκρυνση στοιχείου Αποµακρύνεται από την αρχή της ουράς. z y x = = qarray τύπος πίνακα πίνακας αποθήκευσης στοιχείων ουράς maxsize τύπου int µέγεθος πίνακα που υλοποιεί την ουρά Παρατηρήσεις: Θέση (στον πίνακα επόµενης εισαγωγής στοιχείου: +1. Κενή ουρά: = 0, nitems = 0, = 1 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 33 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 34 / 56 Παράδειγµα Λειτουργίας Ουράς Υλοποίηση Ουράς µε Πίνακα makeempty( Μπορεί να υλοποιηθεί χρησιµοποιώντας πίνακα. insert(a a insert(b a b Μη αποδοτική εάν µετακινούµε όλα τα στοιχεία µετά από κάθε κλήση της remove(. Σπατάλη χώρου εάν δεν χρησιµοποιούµε όλα τα κελιά. Για να αντιµετωπίσουµε το πρόβληµα διαχείρισης χώρου. Μπορούµε να ϕανταστούµε την ουρά σαν έναν κυκλικό πίνακα. remove( b ιατηρούµε (και πάλι 2 δείκτες: έναν για την αρχή ( και έναν για το τέλος της ουράς ( remove( Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 35 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 36 / 56

Κυκλική Αναπαράσταση Ουράς Παράδειγµα Λειτουργίας µε Κυκλικό Πίνακα (Αναδίπλωση Ουρά µε «Κυκλικό» Πίνακα Επανορισµός της κατάστασης κενής ουράς: (αποµάκρυνση (εισαγωγή = 0, nitems = 0, = maxsize 1 Αρχικά: c d e insert(f f c d e remove( f d e remove( f e remove( f Οταν οι δείκτες, που δείχνουν στο τέλος και στην αρχή της ουράς αντίστοιχα ϕτάσουν στο τέλος του πίνακα. Επανορίζουµε τους δείκτες ώστε να δείχνουν και οι δύο στην αρχή Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 37 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 38 / 56 Βασικές Λειτουργίες Ουράς insert(item: εισάγει το αντικείµενο item στο τέλος της ουράς. remove(: αποµακρύνει το πρώτο στοιχείο από την ουρά. peekfront(: επιστρέφει το πρώτο στοιχείο της ουράς. isempty(: ελέγχει εάν η ουρά είναι άδεια. isfull(: ελέγχει εάν η ουρά είναι γεµάτη. size(: αριθµός στοιχείων στην ουρά. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 39 / 56 Υλοποίηση Ουράς (1/3 µε Ελέγχους class Queue { private int maxsize; private long[] qarray; private int ; private int ; private int nitems; // ------------------------------------------------------ public Queue(int s { // constructor maxsize = s; qarray = new long[maxsize]; = 0; = -1; nitems = 0; // ------------------------------------------------------ public boolean insert(long j { // put items at if (!isfull( { if ( == maxsize - 1 = -1; qarray[++] = j; nitems++; return(true; return(false; Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 40 / 56

Υλοποίηση Ουράς (2/3 µε Ελέγχους public boolean remove( { // remove from the if (!isempty( { ++; if ( == maxsize = 0; nitems--; return(true; return(false; /** Needs to be used for reading (before removing**/ public long peekfront( { // peek at the item return qarray[]; public boolean isempty( { return (nitems == 0; public boolean is Full( { return (nitems == maxsize; public int size( { return(nitems; Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 41 / 56 Υλοποίηση Ουράς (3/3 µε Ελέγχους class QueueApp { public static void main(string[] args { Queue Q = new Queue(5; // queue with 5 cells Q.insert(10; Q.insert(20; // Insert 4 items Q.insert(30; Q.insert(40; // Remove 3 items: 10, 20, 30 Q.remove(; Q.remove(; Q.remove(; Q.insert(50; Q.insert(60; // Insert 4 items Q.insert(70; Q.insert(80; // (wraps around while(!q.isempty( { // Remove and display all long n = Q.peekFront(; // (40, 50, 60, 70 80 Q.remove(; System.out.print(n; System.out.print(" "; System.out.println(""; // end main // end class QueueApp Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 42 / 56 Πολυπλοκότητα Λειτουργιών Ουράς (σε πλήρη αντιστοιχία µε τη στοίβα Εισαγωγή στην / Αποµάκρυνση από την ουρά σε χρόνο O(1. Είναι ανεξάρτητο του µεγέθους n της ουράς. Και οι δύο λειτουργίες είναι πολύ αποδοτικές (γρήγορες. Ουρές Προτεραιότητας Priority Queues εν απαιτούνται συγκρίσεις στοιχείων ή µετακινήσεις στοιχείων, που εµπεριέχουν κόστος. Οµως δεν υπάρχει δυνατότητα: απευθείας ανάκτησης ενός συγκεκριµένου στοιχείου από την ουρά. ανάκτησης του i-οστού στοιχείου. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 43 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 44 / 56

Ουρές Προτεραιότητας: Εισαγωγή Ουρές Προτεραιότητας: Εισαγωγή Μια ουρά προτεραιότητας είναι µια πιο εξειδικευµένη δοµή δεδοµένων σε σχέση µε τη στοίβα ή την ουρά. Οπως και στην ουρά, τα στοιχεία αφαιρώνται από την αρχή. Οµως, τα στοιχεία ταξινοµούνται (κατά την εισαγωγή έτσι, ώστε το στοιχείο µε το χαµηλότερο (ή το υψηλότερο κλειδί να ϐρίσκεται πάντα µπροστά. Τα στοιχεία τοποθετούνται στην ουρά µε ϐάση την σηµαντικότητά τους. Θεωρούµε ότι το στοιχείο µε το µικρότερο (µεγαλύτερο κλειδί έχει µεγαλύτερη προτεραιότητα Ο στόχος µας είναι να: προσπελάσουµε το σηµαντικότερο στοιχείο στη συλλογή. αποµακρύνουµε το στοιχείο από τη συλλογή. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 45 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 46 / 56 Λειτουργίες Υλοποίηση Επιλογές για την υλοποίηση ουράς προτεραιότητας: Μία ουρά προτεραιότητας είναι ένας αφηρηµένος τύπος δεδοµένων (abstract data type -- ADT που προσφέρει µεθόδους που επιτρέπουν: Αποµάκρυνση στοιχείου µε την ελάχιστη ή µέγιστη τιµή κλειδιού (στοιχείο «στην αρχή» της ουράς. Εισαγωγή. Ταξινοµηµένος Πίνακας Αποµάκρυνση του µεγαλύτερου στοιχείου γρήγορα O(1. Εισαγωγή διαρκεί περισσότερο χρόνο: O(n. Πρέπει να µετακινηθούν O(n στοιχεία του πίνακα στη χειρότερη περίπτωση, ώστε να εισαχθεί το νέο στοιχείο στη σωστή ϑέση. Σωρός (είδος δένδρου Εκτελεί εισαγωγή και διαγραφή σε χρόνο O(log n. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 47 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 48 / 56

Ουρά Προτεραιότητας µε Πίνακα (1/3 Ουρά Προτεραιότητας µε Πίνακα (2/3 class PriorityQ { private int maxsize; private long[] qarray; // sorted arrat: max at qarray[0] private int nitems; public void insert(long item { int j; if (nitems == 0 qarray[nitems++] = items; else { // insert item public PriorityQ(int s { // Constructor maxsize = s; qarray = new long[maxsize]; nitems = 0; for(j = nitems - 1; j >= 0; j-- { if (item > qarray[j] qarray[j+1] = qarray[j]; else break; qarray[j+1] = item; nitems++; Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 49 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 50 / 56 Ουρά Προτεραιότητας µε Πίνακα (3/3 - public long removemin( { // remove minimum item return qarray[--nitems]; public long peekmin( { // peek at minimum item return qarray[nitems-1]; public boolean isempty( { // true if empty return (nitems == 0; Ουρά Προτεραιότητας µε Πίνακα (3/3 class PriorityQApp { public static void main(string[] args { PriorityQ thepq = new PriorityQ(5; thepq.insert(30; thepq.insert(50; thepq.insert(10; thepq.insert(40; thepq.insert(20; while (!thepq.isempty( { long item = thepq.remove(; System.out.print(item + " "; // 10, 20, 30, 40, 50 public boolean isfull( { // true if full return (nitems == maxsize; // end while System.out.println(""; // end main Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 51 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 52 / 56

Ασκηση 1 Υλοποίηση Ουράς µε ύο Στοίβες ιαθέτουµε δύο αντικείµενα δοµής στοίβας, S1, S2. Υποστηρίζουν τις συνήθεις λειτουργίες στοίβας: push, pop, peek, isempty, isfull, size Ασκηση 1 Υλοποίηση Ουράς µε ύο Στοίβες class Queue { private Stack S1; private Stack S2; Ζητούνται υλοποιήσεις των λειτουργιών insert και remove «εικονικής» ουράς: µόνο µε χρήση των δύο στοιβών S1, S2, σαν αποθηκευτικό µέσο, µόνο µε χρήση των λειτουργιών στοίβας (επί των S1, S2. Να δοθούν δύο υλοποιήσεις: 1. Στην πρώτη, η λειτουργία insert να είναι χρόνου O(1. 2. Στη δεύτερη, η λειτουργία remove να είναι χρόνου O(1. public Queue(int maxsize { S1 = new Stack(maxSize; S2 = new Stack(maxSize; public void insert(int item { /* implementation??? */ public int remove( { /* implementation??? */ Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 53 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 54 / 56 Ασκηση 1 - insert σε χρόνο O(1 Ασκηση 2 public void insert(int item { S1.push(item; public int remove( { while(!s1.isempty( // "Overturn" S1 into S2 S2.push( S1.pop( ; Υλοποίηση Στοίβας µε ύο Ουρές ιαθέτουµε δύο αντικείµενα δοµής ουράς, Q1, Q2. Υποστηρίζουν τις συνήθεις λειτουργίες ουρών: insert, remove, peekfront, isempty, isfull, size int item = S2.pop(; // Top of S2 was "bottom" in S1 // (was "first-in" while(!s2.isempty( // Restore S1 without item S1.push( S2.pop( ; return(item; // Return "first-in" as "first-out" Ζητούνται υλοποιήσεις των λειτουργιών push και pop «εικονικής» στοίβας: µόνο µε χρήση των δύο ουρών Q1, Q2, σαν αποθηκευτικό µέσο, µόνο µε χρήση των λειτουργιών ουράς (επί των Q1, Q2. Να δοθούν δύο υλοποιήσεις: 1. Στην πρώτη, η λειτουργία pop να είναι χρόνου O(1. Πολυπλοκότητα της remove: O(n. 2. Στη δεύτερη, η λειτουργία push να είναι χρόνου O(1. Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 55 / 56 Ο. Τελέλης Πανεπιστήµιο Πειραιώς οµές εδοµένων 56 / 56