Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 2. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Στην συνέχεια και στο επόµενο παράθυρο η εφαρµογή µας ζητάει να εισάγουµε το Username και το Password το οποίο σας έχει δοθεί από τον ΕΛΚΕ.

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΕΡΓΑΣΙΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΟ ΛΟΓΙΣΜΙΚΟ EXTEND. 1 ο εργαστήριο Διοίκησης και Παραγωγής Έργων

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

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

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Εργαστήριο Λειτουργικών Συστημάτων - Αλγόριθμοι Χρονοπρογραμματισμού. Εργαστηριακή Άσκηση

Τµήµα Πληροφορικής. Υλοποίηση LRU Cache ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ - ΕΡΓΑΣΙΑ 4. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Γενικά περί Caching

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 5/12/10, 23:59

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ. Πρώτη Σειρά ασκήσεων Ημερομηνία Παράδοσης: 24 Απριλίου 2018, 12 μ.μ.

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Μάθημα 7 ο. Αλγόριθμοι Χρονοδρομολόγησης

eorder Ηλεκτρονική Παραγγελιοληψία ΣΥ.ΦΑ. Θεσσαλονίκης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Δηλώσεις Εργαστηρίων

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

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

ΣΚΟΠΟΙ ΒΗΜΑ 1 Ο. Θα εμφανιστεί το λογότυπο του προγράμματος.. ..και μετά από λίγο ένα παράθυρο με τίτλο Προβολές CMap Tools. [1]

2.2.3 Η εντολή Εκτύπωσε

Εργαστήριο Διοίκησης Παραγωγής & Έργων. Εισαγωγή στην προσομοίωση διεργασιών χρησιμοποιώντας το λογισμικό Extend

Κατανεμημένα Συστήματα

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

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 13/1/13, 22:00

Outlook Express-User Instructions.doc 1

Πατώντας την επιλογή αυτή, ανοίγει ένα παράθυρο που έχει την ίδια μορφή με αυτό που εμφανίζεται όταν δημιουργούμε μία μεταβλητή.

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΝΕΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΠΑΡΑΓΓΕΛΙΟΛΗΨΙΑΣ. ΣΥΦΑ eοrder

Κατανεμημένα Συστήματα με Java. Ενότητα # 4: Αμοιβαίος αποκλεισμός Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Εγχειρίδιο Χρήστη - Μαθητή

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/10, 23:59

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

3. Προσομοίωση ενός Συστήματος Αναμονής.

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

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

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

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

Μάθημα 7: Αλγόριθμοι Χρονοδρομολόγησης

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

Χρησιμοποιούμε από το Λογισμικό Προσομοίωσης AnyLogic το αρχείο-μοντέλο Call Center.alp που υπάρχει στο φάκελο \models\call Center\

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

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

Προγραµµατισµός στην Basic

HY-486 Αρχές Κατανεμημένου Υπολογισμού

Δείτε τώρα και πώς θα έπρεπε να ήταν το παραπάνω: Page 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Υλοποίηση Εφαρμογής Εστιατορίου (take-away)

ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στην Python και στο IDLE

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στον Προγραμματισμό

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Πρωτόκολλο ARP. Γεωργιλά Χιονία Καθηγήτρια Πληροφορικής ΠΕ1901

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

Special edition of the Technical Chamber of Greece on Video Conference Services on the Internet, MICROSOFT CHAT v2.0

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

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

Προγραμματισμός ΙI (Θ)

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

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

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

7.3 Πρωτόκολλο TCP. 1. Το TCP πρωτόκολλο παρέχει υπηρεσίες προσανατολισµένες σε σύνδεση. Σ Λ

Εργαστηριακή Άσκηση 1

ΕΓΧΕΙΡΙΔΙΟ ΕΦΑΡΜΟΓΗΣ ΣΥΣΤΗΜΑΤΟΣ ΔΗΜΟΣΙΕΥΣΗΣ ΟΙΚΟΝΟΜΙΚΩΝ ΣΤΟΙΧΕΙΩΝ. Η Εταιρεία

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

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

Sheet PASS 1426 PASS 1428 PASS. Page 1

8.4. Δραστηριότητες - ασκήσεις

ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. DS Gomoku.

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Άρα, Τ ser = (A 0 +B 0 +B 0 +A 0 ) επίπεδο 0 + (A 1 +B 1 +A 1 ) επίπεδο 1 + +(B 5 ) επίπεδο 5 = 25[χρονικές µονάδες]

Πρόσβαση και δήλωση µαθηµάτων στον Εύδοξο

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης

Ψευδοκώδικας. November 7, 2011

Η γλώσσα προγραμματισμού C

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

Transcript:

Οικονοµικό Πανεπιστήµιο Αθηνών Τµήµα Πληροφορικής Φθινοπωρινό Εξάµηνο 2016 Δοµές Δεδοµένων - Εργασία 2 Διδάσκων: E. Μαρκάκης Ουρές προτεραιότητας - Προσοµοίωση της λειτουργίας ενός print server Σκοπός της εργασίας είναι η εξοικείωση µε τις ουρές προτεραιότητας. Ως εφαρµογή θα δούµε τον τρόπο λειτουργίας ενός print server. Φανταστείτε ένα εργαστήριο όπως το CSLAB, όπου υπάρχει ένας κοινός δικτυακός εκτυπωτής και όλοι οι χρήστες που θέλουν να τυπώσουν κάποιο αρχείο στέλνουν ένα print request στον κοινό εκτυπωτή. Ο εκτυπωτής, για κάθε request, βλέπει τη χρονική στιγµή άφιξης καθώς και το µέγεθος του αρχείου που θέλει να τυπώσει ο χρήστης και διατηρεί µία ουρά µε τα αρχεία που περιµένουν να εκτυπωθούν (δεν µπορεί να τυπώσει παράλληλα αρχεία, όταν εκτυπώνεται ένα από τα αρχεία, τα υπόλοιπα περιµένουν στην ουρά). Μία λύση θα ήταν η ουρά αυτή να είναι ουρά FIFO έτσι ώστε όταν τελειώνει η εκτύπωση ενός αρχείου, ο εκτυπωτής να παίρνει το αρχείο που έχει µείνει τον περισσότερο χρόνο στην ουρά. Αυτή η υλοποίηση όµως αδικεί τα αρχεία µικρού µήκους καθώς αν ένα αρχείο 2 ΚΒ φτάσει έστω και 1 δευτερόλεπτο µετά από ένα αρχείο µεγέθους 10 ΜΒ, θα πρέπει να περιµένει πολύ ώρα. Πιο αναλυτικά, ας δούµε ένα µικρό παράδειγµα. Για να απλοποιήσουµε το πρόβληµα, έστω ότι το µέγεθος ενός αρχείου συµβολίζει και το πόσα δευτερόλεπτα χρειάζεται για να εκτυπωθεί το αρχείο και έστω ότι ο εκτυπωτής βλέπει τις αφίξεις: t=0, άφιξη αρχείου µεγέθους 15, t=5, άφιξη αρχείου µεγέθους 100, t=10, άφιξη αρχείου µεγέθους 3. Με χρήση ουράς FIFO, τη χρονική στιγµή t=5, ο εκτυπωτής θα βάλει στην ουρά του το δεύτερο αρχείο, αφού δεν έχει τελειώσει ακόµα η εκτύπωση του πρώτου. Τη χρονική στιγµή t=10, βλέπουµε ότι θα πρέπει να βάλει στην ουρά και το τρίτο αρχείο. Στη συνέχεια, τη στιγµή t=15, ο εκτυπωτής θα επιλέξει να τυπώσει το δεύτερο αρχείο, αφού έχει µείνει στην ουρά περισσότερη ώρα από το τρίτο. Ιδανικά όµως, θα θέλαµε το τρίτο αρχείο να πάρει µεγαλύτερη προτεραιότητα έτσι ώστε τη χρονική στιγµή t=15, που τελειώνει το πρώτο αρχείο, ο εκτυπωτής να διαλέξει το τρίτο αντί για το δεύτερο αρχείο.

Μέρος Α: Για να προσοµοιώσουµε τη λειτουργία ενός print server που δίνει προτεραιότητα σε αρχεία µε βάση τη διάρκεια εκτέλεσης τους, θα πρέπει πρώτα να δούµε τι ΑΤΔ θα χρειαστούµε. Συγκεκριµένα, θα πρέπει να υλοποιήσετε σίγουρα τους εξής 2 ΑΤΔ: ΑΤΔ αρχείου. Χρειαζόµαστε έναν τύπο δεδοµένων που αναπαριστά ένα αρχείο προς εκτύπωση. Ονοµάστε την κλάση αυτή PrintJob. Αντικείµενα της τάξης PrintJob πρέπει να περιέχουν ένα µοναδικό id που ανατίθεται όταν δηµιουργείται το κάθε αντικείµενο (χρήσιµο για debugging). Π.χ. δώστε id=1 στο πρώτο αρχείο που έρχεται, id=2 στο δεύτερο, κ.ο.κ. ένα πεδίο size µε το µέγεθος του αρχείου. Το µέγεθος θα πρέπει να είναι ακέραιος και να κυµαίνεται στο διάστηµα [1, MAXSIZE], όπου για τους σκοπούς της εργασίας θα θεωρήσουµε ότι MAXSIZE=128, ένα πεδίο waitingtime, το οποίο δηλώνει πόση ώρα βρίσκεται στην ουρά το αρχείο, ένα πεδίο arrivaltime που δηλώνει την στιγµή άφιξης, ένα πεδίο priority. Η προτεραιότητα θα είναι ακέραιος αριθµός και θα πρέπει να κυµαίνεται στο διάστηµα [0, 127]. Μπορείτε να προσθέσετε και όποιο άλλο πεδίο κρίνετε απαραίτητο. Τέλος, η PrintJob θα πρέπει να υλοποιεί το interface Comparable<PrintJob> έτσι ώστε να µπορέσετε να την χρησιµοποιήσετε σε µία ουρά προτεραιότητας. Για την υλοποίηση του interface, ουσιαστικά πρέπει να υλοποιήσετε κατάλληλα τη µέθοδο compareto, για να µπορείτε να συγκρίνετε αρχεία ως προς την προτεραιότητά τους. ΑΤΔ ουράς προτεραιότητας. Θα χρειαστείτε και µια αποδοτική δοµή δεδοµένων για ουρά προτεραιότητας. Μπορείτε είτε να βασιστείτε στην ουρά του εργαστηρίου είτε να φτιάξετε τη δική σας υλοποίηση από την αρχή. Είναι βολικό να χρησιµοποιήσετε υλοποίηση της ουράς µε generics, αλλά είναι επίσης αποδεκτό να φτιάξετε ουρά για αντικείµενα τύπου PrintJob. Σε κάθε περίπτωση, η ουρά σας θα πρέπει να ονοµάζεται MaxPQ και να διαθέτει τις εξής λειτουργίες µε την αντίστοιχη πολυπλοκότητα (έχουµε δει όλες τις µεθόδους εκτός από την peek, στο µάθηµα και στο εργαστήριο, η peek επιστρέφει ό,τι και η getmax αλλά χωρίς να κάνει διαγραφή). Μέθοδος Λειτουργία Πολυπλοκότητα size Μέτρηση αριθµού αντικειµένων Ο(1) isempty Ελέγχει αν η ουρά είναι άδεια Ο(1) insert Εισάγει νέο αντικείµενο στην ουρά O(logn) (*δειτε σχόλιο παρακάτω*) getmax Αφαιρεί και επιστρέφει το αντικείµενο O(logn) µε τη µέγιστη προτεραιότητα peek Επιστρέφει χωρίς να διαγράψει το O(1) αντικείµενο µε τη µέγιστη προτεραιότητα Σχόλιο: Η µέθοδος insert θα πρέπει να περιέχει και µια µέθοδο resize, για να κάνει επέκταση του πίνακα µόνο στην περίπτωση που η ουρά αποκτήσει πληρότητα άνω του 75%. Η απαίτηση για πολυπλοκότητα Ο(logn) είναι µόνο όταν δεν χρειάζεται να κληθεί και η resize.

Μέρος B: Σκοπός του Μέρους Β είναι να χρησιµοποιήστε µία ουρά προτεραιότητας για να προσοµοιώσετε τη λειτουργία ενός εκτυπωτή ο οποίος δίνει πάντα προτεραιότητα στα αρχεία µε µικρότερο µέγεθος. Σε κάθε χρονική στιγµή που ο εκτυπωτής τελειώνει την εκτύπωση ενός αρχείου, θα πρέπει να κοιτάει τα αρχεία που περιµένουν στην ουρά προτεραιότητας και να διαλέγει αυτό µε το µικρότερο µέγεθος. Input και output Input. Το πρόγραµµα που θα φτιάξετε θα πρέπει να διαβάζει από ένα αρχείο δεδοµένα στη µορφή: t 1 m 1 t 2 m 2 t 3 m 3... όπου t i είναι η χρονική στιγµή άφιξης του αρχείου µε µέγεθος m i. Για τα δεδοµένα θα πρέπει να ισχύει 0 t 1 t 2 (αλλιώς θα τυπώνετε µήνυµα λάθους). Παρατηρείστε ότι επιτρέπεται να έρθουν πολλά αρχεία την ίδια χρονική στιγµή. Επίσης, τα t i, m i θα πρέπει να είναι ακέραιοι αριθµοί και για τα µεγέθη των αρχείων ισχύει ότι 0 < m i MAXSIZE. Όταν δεν τηρείται κάποια από αυτές τις προϋποθέσεις θα πρέπει να τυπώνετε το αντίστοιχο µήνυµα λάθους. Ο print server θα πρέπει να δουλευει ως εξής: όταν έρχεται ενα νέο αρχείο και ο εκτυπωτής δεν είναι απασχοληµένος, τότε ξεκινάει η εκτύπωση του αρχείου. Σε αντίθετη περίπτωση, το αρχείο µπαίνει στην ουρά προτεραιότητας. Όταν ο εκτυπωτής τελειώνει την εκτύπωση ενός αρχείου, τότε θα πρέπει να κοιτάζει την ουρά και να επιλέγει το αρχείο µε την µεγαλύτερη προτεραιότητα. Αν έρθει ενα νέο αρχείο την ίδια στιγµή που ο εκτυπωτής τελειώνει κάποια εκτύπωση, θα πρέπει πρώτα να βάλετε στην ουρά το νέο αρχείο και µετά ο εκτυπωτής να διαλέξει το επόµενο. Output. Το πρόγραµµά σας θα πρέπει να τυπώνει σε ένα αρχείο.txt τη σειρά µε την οποία έγιναν οι εκτυπώσεις, το µέσο χρόνο αναµονής στην ουρά, αλλά και το µέγιστο χρόνο αναµονής (και από ποιο αρχείο προήλθε). Π.χ. για το παράδειγµα που αναφέραµε, στην 1 η σελίδα, θα τυπώνει στο αρχείο: t=15, completed file 1 t=18, completed file 3 t=118, completed file 2 Average waiting time = 6 Maximum waiting time = 13, achieved by file 2 Οδηγίες και συµβουλές για την υλοποίηση (υπάρχουν και άλλοι τρόποι για να κάνετε το κοµµάτι της προσοµοίωσης, µπορείτε να κάνετε ό,τι είναι πιο βολικό για εσάς): Το πρόγραµµα πρέπει να διαβάζει την είσοδο από αρχείο. Διαβάστε όλο το αρχείο εισόδου, και αποθηκεύστε όλα τα αντικείµενα PrintJob σε µία λίστα µονής σύνδεσης µε αύξουσα σειρά ως προς τη χρονική στιγµή άφιξης. Μην τα αποθηκεύσετε σε πίνακα. Έτσι δεν θα χρειαστεί να ασχοληθείτε ξανά µε το αρχείο εισόδου. Στη συνέχεια θα πρέπει να αποφασίζετε πότε θα αφαιρείτε αντικείµενα από τη λίστα για να τα βάλετε στην ουρά προτεραιότητας ή για να τα στείλετε για εκτύπωση.

Είναι βολικό να χρησιµοποιήσετε µία µεταβλητή Τ που προσοµοιώνει το χρόνο. Η µεταβλητή αυτή θα σας βοηθήσει στο να ελέγχετε κάθε πότε πρέπει να προβείτε σε νέες ενέργειες. Π.χ. τη στιγµή Τ = t 1, αφαιρείτε από τη λίστα το πρώτο αντικείµενο (αν υπάρχει µόνο ένα που φτάνει όταν Τ = t 1 ), το οποίο και ξεκινάτε να εκτελείτε, αφού δεν υπάρχει κάτι σε εκκρεµότητα εκείνη τη στιγµή. Η επόµενη στιγµή που χρειάζεται να κάνετε κάτι είναι ουσιαστικά τη στιγµή Τ = t 1 + m 1, οπότε και τελειώνει το πρώτο PrintJob. Τότε θα πρέπει να δείτε ποια αντικείµενα έχουν ήδη έρθει στο χρονικό διάστηµα [t 1, t 1 + m 1 ] (διαβάζοντας από τη λίστα που φτιάξατε), να τα βάλετε στην ουρά προτεραιότητας, και να δείτε ποιο πρέπει να επιλέξετε για εκτύπωση. Είναι πολύ σηµαντικό όπως συνεχίζεται η εκτέλεση, να προσέχετε να ενηµερώνετε πρώτα την ουρά προτεραιότητας, προτού αποφασίσετε ποιο θα είναι το επόµενο αρχείο που θα εκτυπωθεί. Δεν είναι αποδεκτό να έχετε ενα for loop όπου θα αυξάνετε την µεταβλητή Τ κατά 1 και να βλέπετε αν χρειάζεται να κάνετε κάτι εκείνη τη χρονική στιγµή. Δεν είναι αποδοτική µια τέτοια υλοποίηση. Αντιθέτως, θέλουµε να κάνετε κάποια ενέργεια µόνο όποτε είναι απαραίτητο (δηλαδή µόνο όταν συµβαίνει κάτι). Προσοµοιώσεις τέτοιου τύπου ονοµάζονται event-driven simulations (σε αντίθεση µε τις time-driven simulations, που στη συγκεκριµένη εφαρµογή δεν έχουν καλή απόδοση). Δείτε την τελευταία σελίδα για την ονοµασία του προγράµµατος και άλλες σχετικές πληροφορίες. Μέρος Γ: Με την υλοποίηση του Μέρους Β, το γεγονός ότι τα µικρά αρχεία δεν περιµένουν πολύ ώρα, µπορεί τελικά να επιφέρει µεγάλες καθυστερήσεις στα µεγάλα αρχεία. Έστω ότι επεκτείνουµε το παράδειγµα της 1 ης σελίδας, ως εξής: t=0, άφιξη αρχείου µεγέθους 15, t=5, άφιξη αρχείου µεγέθους 100, t=10, άφιξη αρχείου µεγέθους 3, t=17, άφιξη αρχείου µεγέθους 25, t=40, άφιξη αρχείου µεγέθους 30, t=70, άφιξη αρχείου µεγέθους 48, Βλέπουµε ότι το δεύτερο αρχείο θα αργήσει πάρα πολύ να εκτυπωθεί, αν δίνουµε συνέχεια προτεραιότητα στα µικρότερα αρχεία. Για να µην δηµιοργούνται τέτοια φαινόµενα, µπορούµε να αλλάξουµε την προτεραιότητα του κάθε αρχείου έτσι ώστε σταδιακά να παίρνει υπόψιν το χρόνο παραµονής στην ουρά. Ένας τρόπος που χρησιµοποιείται στην πράξη είναι ο εξής: αρχικά οι προτεραιότητες είναι όπως και στο µέρος Β, αλλά κάθε 15 δευτερόλεπτα (ξεκινώντας από τη χρονική στιγµή που ήρθε το πρώτο αρχείο), η προτεραιότητα ανανεώνεται και γίνεται: priority = min(127, priority + waitingtime) Έτσι σταδιακά τα µεγάλα αρχεία θα εκτυπωθούν καθώς θα υπερισχύσουν έναντι µικρών αρχείων που έχουν εισαχθεί πιο πρόσφατα στην ουρά. Στο παράδειγµα παραπάνω µε τα 6 αρχεία, το δεύτερο αρχείο θα εκτελεστεί πριν το τελευταίο, µε βάση το νέο αυτό κανόνα. Υλοποιήστε το νέο αλγόριθµο. Η έξοδος του προγράµµατος θα πρέπει να είναι όπως και στο µέρος Β.

Μέρος Δ: Σύγκριση. Στο µέρος αυτό θα κάνετε µία µικρή πειραµατική αξιολόγηση για να δείτε τη συµπεριφορά των αλγορίθµων στην πράξη. Χρησιµοποιήστε την Random του πακέτου java.util και δηµιουργήστε τυχαία δεδοµένα εισόδου για 5 διαφορετικές τιµές του N, όπου µε Ν συµβολίζουµε το πλήθος των αρχείων προς εκτύπωση. Διαλέξτε 5 τιµές του Ν στο διάστηµα [100, 50.000]. Οι τιµές που θα διαλέξετε θα πρέπει να απέχουν µεταξύ τους τουλάχιστον κατά 5000. Π.χ. µπορείτε να διαλέξτε µια τιµή κάτω από 500, µια κοντά στο 5000, µία κοντά στο 50000 και άλλες 2 ενδιάµεσα. Για κάθε τιµή του Ν, δηµιουργήστε 10 διαφορετικά input files για τους αλγορίθµους του µέρους Β και Γ, συνολικά δηλαδή θα δηµιουργήσετε 50 αρχεία τυχαίων δοκιµαστικών δεδοµένων. Στη συνέχεια γράψτε ένα πρόγραµµα που θα εκτελεί και τους 2 αλγορίθµους για τα 50 αρχεία εισόδου, και θα τυπώνει τα αντίστοιχα αρχεία εξόδου. Για κάθε τιµή του N, βρείτε τη µέση τιµή του average waiting time και του maximum waiting time από τα 10 αρχεία που εκτελέσατε µε το συγκεκριµένο Ν. Παραδοτέα: Για την εργασία θα υποβάλετε τα εξής αρχεία: 1) Τα αρχεία MaxPQ.java και PrintJob.java για τους ΑΤΔ ουράς προτεραιότητας και αρχείου αντίστοιχα. 2) AlgorithmB.java, το πρόγραµµα που εκτελεί τον αλγόριθµο του µέρους B. Δεν θα έχει main, αλλά θα περιέχει µία static void µέθοδο µε όνοµα runb, µέσα στην οποία θα καλούνται οι σχετικές µέθοδοι για την ανάγνωση του input και την εκτέλεση του αλγορίθµου. 3) AlgorithmC.java, το πρόγραµµα που εκτελεί τον αλγόριθµο του µέρους Γ. Δεν θα έχει main, αλλά θα περιέχει µία static void µέθοδο µε όνοµα runc, σε αντιστοιχία µε το µέρος B. 4) Comparisons.java, το πρόγραµµα του Μέρους Δ, που διαβάζει τα τυχαία δεδοµένα εισόδου, εκτελεί και τους δύο αλγορίθµους και παράγει τα αρχεία εξόδου που χρειάζονται για να συγκρίνετε τους 2 αλγορίθµους. Το πρόγραµµα θα περιέχει µέθοδο main, η οποία θα καλεί τις runb, και runc που αναφέρονται παραπάνω. 5) Σε ξεχωριστό subdirectory βάλτε τα τυχαία δεδοµένα εισόδου που θα παράγετε (50 αρχεία). Δεν απαιτείται ο κώδικας µε τον οποίο θα παράγετε τα τυχαία δεδοµένα. 6) Ό,τι άλλα αρχεία έχετε χρησιµοποιήσει και απαιτούνται για να τρέξει ο κώδικάς σας. 7) Τέλος, θα πρέπει να υποβάλετε µία αναφορά σε pdf αρχείο µε όνοµα project2-report.pdf, στην οποία θα αναφέρετε τα µέλη της οµάδας σας, θα περιγράψετε συνοπτικά την υλοποίησή σας και θα συγκρίνετε την αποδοτικότητα των 2 αλγορίθµων ως προς τα δεδοµένα µε τα οποία τους χρησιµοποιήσατε. Είναι βολικό να χρησιµοποιήσετε πίνακες για να δείξετε συγκεντρωτικά αποτελέσµατα. Π.χ. µπορείτε σε ένα πίνακα να δείξετε για κάθε τιµή του Ν, τη µέση τιµή του average waiting time και τη µέση τιµή του maximum waiting time, από τα 10 αρχεία που έχετε µε Ν αφίξεις. Να αναφέρετε ό,τι παρατηρήσεις έχετε να κάνετε σχετικά µε τη συµπεριφορά των 2 αλγορίθµων για το average waiting time και το maximum waiting time. Όποιος θέλει µπορεί να χρησιµοποιήσει και γραφικές παραστάσεις. Όλα τα παραπάνω αρχεία θα πρέπει να µπουν σε ένα αρχείο zip. Το όνοµα που θα δώσετε στο αρχείο αυτό θα είναι ο αριθµός µητρώου σας πχ. 3030056_3030066.zip ή

3030056.zip (αν δεν είστε σε οµάδα). Στη συνέχεια, θα υποβάλλετε το zip αρχείο σας στην περιοχή του µαθήµατος «Εργασίες» στο e-class. Η προθεσµία παράδοσης της εργασίας είναι Δευτέρα, 19 Δεκεµβρίου 2016 και ώρα 23:59.