ABC3341, CCD2345, ,... CCDA2345, , ,00E

Σχετικά έγγραφα
fall2018/k22/home m1436+at-di.

Εισαγωγή. Interface της εφαρμογής. Κ24: Προγραμματισμός Συστήματος - 1η Εργασία, Εαρινό Εξάμηνο 2019 Προθεσμία Υποβολής: Παρασκευή 15 Μαρτίου, 23:59

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

$./MirrorInitiator -n <MirrorServerAddress> -p <MirrorServerPort> \\ -s <ContentServerAddress1:ContentServerPort1:dirorfile1:delay1, \\

an:3 are:6 a:10

0 The quick brown fox leaped over the lazy lazy dog 1 Quick brown foxes leaped over lazy dogs for fun

50 Ketseo,Theoni Sarif,Omar 104

./mydiz {-c -a -x -m -d -p -j} <archive-file> <list-of-files/dirs>

waitpid(), read(), write(), pipe(), mkfifo() κ.α.).

Kitchen Doormam. Floor with Tables. Restaurant Floorplan and Operation

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07

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

Σημειώνουμε ότι τα αρχεία περιλαμβάνουν κανονικά αρχεία, καταλόγους και συνδέσμους (links). Οι αντίστοιχες εντολές είναι οι εξής:

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

Α1. Χαρακτηρίστε τις παρακάτω προτάσεις ως σωστές ή λανθασμένες.

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

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

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

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

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

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

2η Προγραµµατιστική Εργασία

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

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

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

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

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

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

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

... s12 s13 s14. Σχήμα1: ΙεραρχίαΔιεργασιώνμε l=3καιβάθος d=3. Οκάθεεργάτης(worker)δουλεύειμετο 1/27του αρχείου των ψήφων.

ΕΡΓΑΣΙΑ. (στο μάθημα: Τεχνολογίες Εφαρμογών Διαδικτύου του Η εξαμήνου σπουδών του Τμήματος Πληροφορικής & Τηλ/νιών)

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

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

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

Λειτουργικά Συστήματα (Λ/Σ)

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Προγραµµατιστική Εργασία 1 ο Μέρος

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

Epsilon Net PYLON Platform

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

Σελίδα.1/1

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

Δημιουργώντας τον πίνακα διάστασης

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

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

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

wget --post-file meme.jpg :9646

Προγραμματισμός Διαχείρισης Συστημάτων Ι

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

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access Κεφάλαιο 2 Χειρισμός πινάκων... 27

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Κεφάλαιο 12: Είσοδος και έξοδος δεδομένων σε αρχεία

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

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

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

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

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

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

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

Εισαγωγή στην Access 2007

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Academia Financials ΕΣΟΔΑ ΕΞΟΔΑ

ΛΥΚΕΙΟ ΣΟΛΕΑΣ Σχολική χρονιά

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Διαχείριση Βάσης Δεδομένων (dbadmin)

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

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

inotify system call interface του Linux [1, 2]. prompt >>./mirr source backup uoa.gr/fall2018/k22/home compilation.

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

Πίνακες Κατακερματισμού. Hash Tables. Προγραμματισμός II 1

Standard Template Library (STL) C++ library

ΔΙΕΞΑΓΩΓΗ ΤΗΣ 1ης ΜΕΤΡΗΤΙΚΗΣ ΕΚΣΤΡΑΤΕΙΑΣ ΔΕΙΚΤΩΝ ΠΟΙΟΤΗΤΑΣ ΣΥΣΤΗΜΑΤΩΝ ΚΙΝΗΤΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Αποθήκευση και Οργάνωση αρχείων. Βάσεις Δεδομένων Μάθημα 2ο Διδάσκων: Μαρία Χαλκίδη

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Λειτουργικά Συστήματα (Λ/Σ)

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Transcript:

Κ24: Προγραμματισμός Συστήματος 1η Εργασία Εαρινό Εξάμηνο 17 Προθεσμία Υποβολής: Κυριακή 19 Μαρτίου Ωρα 23:59 Εισαγωγή στην Εργασία: Στην εργασία αυτή θα υλοποιήσετε σύνολο δομών που επιτρέπουν την εισαγωγή/τροποποίηση όπως και επερωτήσεις σε μεγάλο όγκο εγγραφών τύπου CDR (Call Detail Record). CDRs είναι εγγραφές που δημιουργούνται από υποδομές τηλεφωνίας/internet όταν πελάτες επιχειρούν ένα τηλεφώνημα, κάνουν μια κλήση δεδομένων, στέλνουν SMS κλπ. Αν και τα δεδομένα της Άσκησης θα προέρχονται από αρχεία, τελικά όλες οι εγγραφές θα αποθηκεύονται μόνο στην κύρια μνήμη και μαζί με τις μεθόδους προσπέλασης που θα δημιουργήσετε θα αποτελούν ένα απλό warehouse για CDRs. Το κόστος εισαγωγής αλλά και εκείνο της ανάκτησης μιας εγγραφής με βάση το κλειδί της (το τηλέφωνο του καλούντα) στην «βασική δομή» της άσκησης θα πρέπει να είναι πρακτικά O(1) ανεξάρτητα από τον αριθμό των εγγραφών που υπάρχουν ήδη αποθηκευμένες (δηλ. θα πρέπει να υιοθετήσετε μια μορφή hashing). Θα πρέπει επίσης να δημιουργήσετε ταυτόχρονα άλλες «δευτερεύουσες δομές» που θα επιτρέπουν γρήγορες απαντήσεις σε επερωτήσεις που ένας χρήστης πιθανόν θα ήθελε να εξάγει από το σύνολο των εγγραφών. Πιο συγκεκριμένα θα πρέπει να δημιουργήσετε: Μία δομή κατακερματισμού που χρησιμοποιεί buckets και που αποθηκεύει όλα τα εισαγόμενα CDRs στην κύρια μνήμη. Το κλειδί προσπέλασης στην εν λόγω δομή θα είναι το τηλέφωνο του καλούντα και αλλαγές (προσθαφαιρέσεις) στην εν λόγω βασική δομή επιτρέπονται οποιαδήποτε χρονική στιγμή. Μια δεύτερη δομή (πιθανόν με παρόμοια διάταξη) που θα επιτρέπει γρήγορη προσπέλαση στις εγγραφές από την πλευρά όμως των καλουμένων αριθμών. Μια δομή που να δίνει την δυνατότητα να μπορεί η/ο χρήστης της εφαρμογής να δημιουργήσει το σύνολο των κορυφαίων-καλούντων που δημιουργούν το top k% της χρηματικής εισροής του τηλεπικοινωνιακού οργανισμού. Δυνατότητα προσθαφαίρεσης εγγραφών στη διάρκεια εκτέλεσης του προγράμματος σας. Τέτοιες λειτουργίες μπορεί να επηρεάζουν όλες τις δομές που χρησιμοποιούνται και που θα πρέπει να αναδιατάσσονται κατάλληλα. Το πρόγραμμα σας θα πρέπει να ελευθερώνει όλη την μνήμη που έχει δεσμεύσει όταν τερματίζει με εύλογο τρόπο. Η Σύνθεση των Εγγραφών CDRs: Κάθε CDR είναι ουσιαστικά μια γραμμή ASCII κειμένου που αποτελείται από τα εξής στοιχεία: 1. cdr-uniq-id: μια συμβολοσειρά (μπορεί να έχει και μόνο ψηφία) που με μοναδικό τρόπο καθορίζει την κάθε τέτοια εγγραφή. 2. originator-number: είναι ο αριθμός που καλεί και αποτελείται από ένα 3 ψήφιο κωδικό χώρας και ένα 10 ψήφιο τηλεφωνικό νούμερο (π.χ. 357-2127272314 είναι ένα νούμερο για Κύπρο). 3. destination-number: ο καλούμενος αριθμός που έχει την ίδια δομή όπως ο παραπάνω. 4. date: ημερομηνία κλήσης με την μορφή DDMMYYYY όπου το DD εκφράζει την ημέρα, το MM το μήνα και το YYYY το χρόνο κλήσης (π.χ. 12012017 να δηλώνει την 12η Ιανουαρίου του 2017). 5. init-time: ώρα στο 24ωρο με την μορφή HH:MM στην οποία ξεκίνησε η κλήση (π.χ. 21:25 να υποδηλώνει ότι η κλήση έγινε στις 9 και 25 μμ.). 1

6. duration: διάρκεια της κλήσης σε λεπτά. 7. type: είδος κλήσης που μπορεί να είναι ομιλία, διεκπεραίωση δεδομένων και SMS. 8. tarrif: τιμολόγιο που ισχύει για την εν λόγω κλήση και μπορεί να είναι ενδοχώρια, διεθνής για κλήσεις ομιλίας και δεδομένων, και κόστος μικρού μηνύματος. Για απλοποίηση μπορεί να έχουμε μόνο τριών ειδών τιμολογήσεις. 9. fault-condition: περιγράφει με ένα ακέραιο το πρόβλημα (αν υπήρξε τέτοιο) το οποίο και εμπόδισε την ομαλή εξέλιξη της κλήσης (π.χ., διακοπή κλήσης λόγω προβλήματος στο router, λόγω hand-off, κλπ.). Τα διάφορα πεδία του CDR μπορούν να χωρίζονται μεταξύ τους στο αρχείο εισόδου με ;. Η Σύνθεση της Δομής που θα Δημιουργήσετε: Οι εγγραφές CDRs θα διαβάζονται από ένα η πολλαπλά αρχεία εισόδου. Η εισαγωγή των εγγραφών οδηγεί στην δημιουργία και διαχείριση ενός αριθμού από δομές που είναι δύο πίνακες κατακερματισμού (hash-tables) και ένας διαδικό-μαξιμαλιστικός σωρός (binary max heap [;]). Το Σχήμα 1 δείχνει μια μερική αλλά αντιπροσωπευτική κατάσταση της σύνθετης δομής που θα δημιουργήσετε για να υλοποιήσετε την εφαρμογή werhauz. Η σύνθετη δομή αποτελείται από δύο hash-tables (που χρησιμοποιούν κουβάδες συγκεκριμένου μεγέθους για να αποθηκεύουν τα στοιχεία των εγγραφών που διαβάζονται) και ένα binary max heap το οποίο για κάθε τηλέφωνο που υπάρχει διαθέτει το συνολικό ποσό που έχει δημιουργήσει σαν εισόδημα για την εταιρεία τηλεφωνίας. f (callee id) Hash Table 2 ABC3341, 3302102345678 CCD2345, 3002107275212,... CCDA2345, 3002107175323,... 3002106868681. 3002113030308 4103101234567 6103307654321 Hash Table 1 3002104562345 203,34 E... 3002104562300 198,56E 2203104567 103,90E f(caller id) 3002107275212 caller bucket 3472114567890 4513345678988 23456712345678 3103014056787 2203104567123 3002113030308 6103307654321 133,00E 3002107275111 111,00E 3103014056787 58,09E 4102119873488 99,99E 3002107275223 3452106547812 3002104562345 Generated Revenue 34,01E 4513345678988 129,00E Binary Max Heap Structure. bucket for "rest" if CDR information ABC1234, 3002106969698,... (rest cdr info) ABC3456, 3006789206745... ABC1234, 3002106969698,... (rest cdr info) ABC3456, 3006789206745...... Σχήμα 1: Παράδειγμα Δομών για την εφαρμογή werhauz Τα βασικά χαρακτηριστικά των δομών του Σχήματος1 είναι τα εξής: 1. Υπάρχουν δύο πίνακες κατακερματισμού (hash-table1 και hash-table2) που προσφέρουν γρήγορες προσπελάσεις στα στοιχεία των εγγραφών από τους «καλούντες αριθμούς» αλλά και από τους «καλούμενους 2

τηλ. αριθμούς». 2. Οι πίνακες κατακερματισμού θα χρησιμοποιούν κουβάδες για να εξυπηρετήσουν εγγραφές που που παρουσιάζουν «σύγκρουση»/collision (δηλ. το αποτέλεσμα της συνάρτησης κατακερματισμού οδηγεί στο ίδιο στοιχείο του hash table. Αν χρειάζονται πιο πολλοί από ένα κουβάδες για να αποθηκευτούν δεδομένα, δημιουργούνται δυναμικά και διατάσσονται σε μια λίστα. Για παράδειγμα τα τηλεφωνικά νούμερα 3002107275212 και 4513345678988 καταλήγουν στο ίδιο στοιχείο του πρώτου πίνακα κατακερματισμού και συνεπώς στο ίδιο κουβά. Για κάθε τέτοιο αριθμό υπάρχει ένα σύνολο από τηλέφωνα (CDRs) στα οποία έχει γίνει κλήση. Η δευτερεύουσα λίστα (που φαίνεται στο κάτω τμήμα του Σχήματος 1 (σε χρωματισμό light pink) ουσιαστικά παρέχει «όλες» τις πληροφορίες για τις κλήσεις που έχει πραγματοποιήσει το νούμερο 3002107275212. 3. Ο πρώτος πίνακας κατακερματισμού ουσιαστικά παρέχει προσπέλαση για τους ποιους έχει καλέσει ένας τηλ. αριθμός. Ο δεύτερος πίνακας κάνει το αντίστροφο: για κάθε αριθμό που έχει δεχτεί κλήση προσφέρει πληροφορίες για τους αριθμούς που τον/την έχουν καλέσει (δηλ. inverted access method). 4. Και οι δύο πίνακες μπορούν να οργανωθούν με τον ίδιο τρόπο. Αυτό είναι και το κατ ελάχιστον αναμενόμενο στην άσκηση αυτή αφού έτσι τα δεδομένα θα αποθηκευτούν μαξιμαλιστικά «δύο» φορές στους 2 πίνακες κατακερματισμού. Ο στόχος σε αυτή την άσκηση είναι να υπάρξει όσο το δυνατόν μικρότερη επικάλυψη στοιχείων (data duplication). 5. Καθώς οι εγγραφές εισάγονται, επίσης δημιουργούμε ένα binary max-heap που ο στόχος του είναι να προσφέρει γρήγορη προσπέλαση στους «καλύτερους πελάτες» (δηλ. αυτούς που δαπανούν πιο πολλά χρήματα για τις τηλεπικοινωνιακές τους ανάγκες). Στο δεξί τμήμα του Σχήματος 1 παραθέτουμε ένα δείγμα τέτοιας δομής. Το τηλ. νούμερο 3451283456707 έχει δαπανήσει μέχρι στιγμής 203,34 και είναι η κάλλιστη επίδοση από πλευράς πελατών. Το binary max-heap είναι ουσιαστικά ένα priority queue. Γραμμή Κλήσης της Εφαρμογής: Η εφαρμογή μπορεί να κληθεί με τον παρακάτω τρόπο:./werhauz -o Operations -h1 Hashtable1NumOfEntries -h2 Hashtable2NumOfEntries -s BucketSize -c config-file όπου./werhauz είναι το εκτελέσιμο, Operations είναι ένα αρχείο σειριακής εισόδου με λειτουργίες που θα πρέπει να εφαρμοστούν στις δομές (δηλ. ερωτήσεις, εισαγωγές, προσαυξήσεις ποσών σε συγκεκριμένες εγγραφές, κλπ.). Η λίστα αυτών των λειτουργιών δίνεται παρακάτω. Τέτοιες λειτουργίες μπορούν να εισαχθούν και χειρωνακτικά και από το prompt της εφαρμογής (δηλαδή το standard input). Εάν υπάρχει και αρχείο (με -o) και εντολές του prompt, οι λειτουργίες του αρχείου εφαρμόζονται πρώτες. Hashtable1NumOfEntries είναι ο αριθμός θέσεων του πίνακα κατακερματισμού 1. Hashtable2NumOfEntries είναι ο αριθμός θέσεων του πίνακα κατακερματισμού 2. BucketSize είναι ο αριθμός των Bytes που δίνει το μέγεθος του κάθε bucket στους πίνακες κατακερματισμού. config-file είναι ένα προαιρετικό configuration αρχείο που μπορεί να χρησιμοποιηθεί για την παραμετροποίηση της εφαρμογής σας. Η χρήση της εν λόγω σημαίας είναι προαιρετική. 3

Οι σημαίες μπορούν να χρησιμοποιηθούν με οποιαδήποτε σειρά στην γραμμή εκτέλεσης του προγράμματος και δεν μπορείτε να κάνετε αλλαγές στη ονομασία τους. Περιγραφή της Διεπαφής (Λειτουργίες) του Προγράμματος: Η εφαρμογή επιτρέπει στον χρήστη να αλληλεπιδρά με την δομή και να ανασύρει, αποθηκεύει, ή υπολογίζει διάφορες πληροφορίες με τις παρακάτω εντολές (η μορφή των εντολών είναι αυστηρή): 1. insert cdr-record εισαγωγή ενός CDR στις δομές. 2. delete caller cdr-id διαγραφή μιας εγγραφής που έχει συγκεκριμένο cdr-id και ο καλών είναι ο caller. 3. find caller [time1][year1] [time2][year2] παρουσίασε όλα τα CDRs ενός συνδρομητή (με επιλογή στο εύρος χρόνου ή/και ημερομηνίας). Αν υπάρχει ορισμος για [time1] θα πρέπει να υφίσταται και ορισμός για [time2]. Επίσης το ίδιο ισχύει και για την χρήση των μη υποχρεωτικών παραμέτρων [year1] και [year2]. 4. lookup callee [time1][year1] [time2][year2] για τον συνδρομητή βρείτε όλες τις κλήσεις που έχει δεχτεί (επίσης με επιλογή στο εύρος χρόνου ή/και ημερομηνίας). 5. indist1 caller1 caller2 παρουσίασε όλους τους συνδρομητές που έχουν επικοινωνήσει και με την caller1 και την caller2 αλλά οι δύο τελευταίοι δεν έχουν καμία άμεση επικοινωνία μεταξύ τους. 6. topdest caller βρες τον κωδικό χώρας που έχει καλέσει ο caller τις πιο πολλές φορές. Ποιος είναι ο κωδικός αλλά και ο αριθμός των κλήσεων; 7. top k βρες τους αριθμούς των συνδρομητών που έχουν δημιουργήσει το top-k% του εισοδήματος της εταιρείας. 8. bye η λειτουργία του werhauz έχει ολοκληρωθεί. Ελευθερώνετε όλο το χώρο που έχουν καταλάβει οι δομές που έχετε χρησιμοποιήσει. Η εντολή αυτή μπορεί να ακολουθείται από δημιουργία νέων δομών. 9. print hashttablex τυπώνει το περιεχόμενο του hastable X στην οθόνη εργασίας με ένα κατανοητό τρόπο. 10. dump hashttablex filename(προαιρετικό) αν επιλέξετε να υλοποιήσετε την λειτουργία αυτή ουσιαστικά σε οποιαδήποτε φάση εκτέλεσης κάνετε εξαγωγή σε στο filename όλη την δομή για το hashtable X που έχει κατασκευαστεί μέχρι στιγμής. Χαρακτηριστικά του Προγράμματος που Πρέπει να Γράψετε: 1. Δεν μπορείτε να κάνετε pre-allocate οποιοσδήποτε χώρο αφού η δομή(-ές) θα πρέπει να μπορεί(-ουν) να μεγαλώσει(-ουν) χωρίς ουσιαστικά κανέναν περιορισμό όσον αφορά στον αριθμό των εγγραφών που μπορούν να αποθηκεύσουν. Η χρήση στατικών πινάκων/δομών που δεσμεύονται στην διάρκεια της συμβολομετάφρασης του προγράμματος σας δεν είναι αποδεκτές επιλογές. Γενικά, θα πρέπει να αποφύγετε την χρήση στατικών πινάκων. 2. Αν πιθανώς κάποια κομμάτια του κωδικά σας προέλθουν από κάποια δημόσια πηγή, θα πρέπει οπωσδήποτε να δώσετε αναφορά στην εν λόγω πηγή είτε αυτή είναι βιβλίο, σημειώσεις, Internet URL κλπ. και να εξηγήσετε πως ακριβώς χρησιμοποιήσατε την εν λόγω αναφορά. 3. Εχετε πλήρη ελευθερία να επιλέξετε το τρόπο με τον οποίο τελικά θα υλοποιήσετε βοηθητικές δομές. 4

Διαδικαστικά: Το πρόγραμμά σας θα πρέπει να γραφτεί σε C (ή C++ αλλά χωρίς την χρήση έτοιμων δομών της standard βιβλιοθήκης/stl) και να τρέχει στα Linux workstations του τμήματος. Το πρόγραμμα σας (source code) πρέπει να αποτελείται από τουλάχιστον δυο (και κατά προτίμηση πιο πολλά) διαφορετικά αρχεία. Η χρήση του separate compilation είναι επιτακτική! Η οργάνωση και η αναγνωσιμότητα (μαζί με την ύπαρξη σχολίων) του κώδικα περιλαμβάνονται στα κριτήρια βαθμολόγησης. Για επιπρόσθετες ανακοινώσεις, παρακολουθείτε το forum του μαθήματος στο piazza.com. Η πλήρης διεύθυνση είναι https://piazza.com/uoa.gr/spring2017/k24/home. Η παρακολούθηση του φόρουμ στο Piazza είναι υποχρεωτική. Στην διάρκεια των μαθημάτων της πρώτης εβδομάδας κυκλοφορούμε hard-copy λίστα στην τάξη στην οποία θα πρέπει να δώσετε το όνομά σας και το Unix user-id σας. Με αυτό το τρόπο μπορούμε να γνωρίζουμε ποιος/-α προτίθεται να υποβάλλει την 1η αυτή άσκηση και έτσι, μπορούμε να προβούμε στις κατάλληλες ενέργειες για την τελική υποβολή της άσκησης. Τι πρέπει να Παραδοθεί: 1. Μια σύντομη και περιεκτική εξήγηση για τις επιλογές που έχετε κάνει στο σχεδιασμό του προγράμματος σας (1-2 σελίδες ASCII κειμένου είναι αρκετές) σε αρχείο README. 2. Οποιαδήποτε πηγή πληροφορίας, συμπεριλαμβανομένου και κώδικα που μπορεί να βρήκατε στο Διαδίκτυο ή αλλού θα πρέπει να αναφερθεί και στον πηγαίο κώδικά σας αλλά και στο παραπάνω README. 3. Ολη η δουλειά σας σε ένα tar-file (OnomaEponymoProject1.tar) που να περιέχει όλα τα source files, header files, Makefile. Άλλες Σημαντικές Παρατηρήσεις: 1. Οι εργασίες είναι ατομικές. 2. Οποιος υποβάλλει / δείχνει κώδικα που δεν έχει γραφτεί από την ίδια/τον ίδιο μηδενίζεται στο μάθημα. 3. Αν και αναμένεται να συζητήσετε με φίλους και συνεργάτες το πως θα επιχειρήσετε να δώσετε λύση στο πρόβλημα, αντιγραφή κώδικα (οποιαδήποτε μορφής) είναι κάτι που δεν επιτρέπεται. Οποιοσδήποτε βρεθεί αναμεμιγμένος σε αντιγραφή κώδικά απλά παίρνει μηδέν στο μάθημα. Αυτό ισχύει για όσους εμπλέκονται ανεξάρτητα από το ποιος έδωσε/πήρε κλπ. Αναφορές [1] J. Williams, Binary Heap: Description of A Priority Queue Structure, https://en.wikipedia.org/ wiki/binary_heap, February 2017. 5