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

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

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

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

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

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

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

Πληροφορική & Τηλεπικοινωνίες

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

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

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

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Επίπεδο Αρχείου Μπλοκ

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Επίπεδο Αρχείου Εγγραφών

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

Linear Hashing. Linear vs other Hashing

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης

Εργαστήριο 9: Αρχεία

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

Δομημένος Προγραμματισμός

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

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

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

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

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

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

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

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

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

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

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

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

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

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

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Ασκήσεις - Μελέτες περίπτωσης για το μάθημα Προγραμματισμός II

ΛΥΣΗ ΤΗΣ ΔΕΥΤΕΡΗΣ ΑΣΚΗΣΗΣ Όλγα Γκουντούνα

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

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

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

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

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

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης

Εργαστήριο 5. Εαρινό Εξάμηνο

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

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

Ειδικά Θέματα Προγραμματισμού

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

Μεθόδων Επίλυσης Προβλημάτων

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Μεθόδων Επίλυσης Προβλημάτων

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

S, (5, -3, 34, -23, 7) ( *, _

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

FAIL PASS PASS οριακά

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους

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

Transcript:

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο 2009 2010 Καθηγητής Δ. Γουνόπουλος Άσκηση 2 Σε συνέχεια της πρώτης άσκησης, σκοπός της δεύτερης εργασίας είναι η καλύτερη κατανόηση των διαφορετικών τύπων κατακερματισμού που υπάρχουν. Πιο συγκεκριμένα, θα υλοποιήσετε ένα σύνολο συναρτήσεων που διαχειρίζονται αρχεία τα οποία δημιουργήθηκαν βάσει γραμμικού κατακερματισμού (Linear Hash). Επιπλέον, καλείστε να υλοποιήσετε διαφορετικές συναρτήσεις κατακερματισμού, και να αξιολογήσετε την απόδοσή τους σε δεδομένα τα οποία θα δίνονται, ώστε να γίνει κατανοητό το πόσο μπορεί να επηρεάσει την απόδοση ενός ΣΔΒΔ η συνάρτηση κατακερματισμού. Οι συναρτήσεις που καλείστε να υλοποιήσετε αφορούν τη διαχείριση ευρετηρίων που στηρίζονται στο γραμμικό κατακερματισμό. Η υλοποίησή τους θα γίνει πάνω από το επίπεδο διαχείρισης μπλοκ υποχρεωτικά, το οποίο δίνεται έτοιμο ως βιβλιοθήκη. Τα πρωτότυπα (definitions) των συναρτήσεων που καλείστε να υλοποιήσετε όσο και των συναρτήσεων της βιβλιοθήκης επιπέδου μπλοκ δίνονται στη συνέχεια, μαζί με επεξήγηση για τη λειτουργικότητα που θα επιτελεί η κάθε μία. Η διαχείριση των αρχείων γραμμικού κατακερματισμού γίνεται μέσω των συναρτήσεων με το πρόθεμα LH_. Τα αρχεία αυτά έχουν μέσα εγγραφές, τις οποίες διαχειρίζεστε μέσω των κατάλληλων συναρτήσεων. Οι εγγραφές είναι της μορφής που δίνεται στη συνέχεια: typedef struct{ int id, char name[15], char surname[20], char city[10]; }Record; Το πρώτο μπλοκ (block) κάθε αρχείου γραμμικού κατακερματισμού περιλαμβάνει ειδική πληροφορία (ή αλλιώς μετα-πληροφορία) σχετικά με το ίδιο το αρχείο. Το είδος της πληροφορίας αυτής εξαρτάται από την υλοποίηση του καθενός. Τέτοιου είδους πληροφορία αφορά π.χ. το πεδίο κατακερματισμού, τον τύπο του πεδίου κ.λπ. Στη συνέχεια δίνεται ένα παράδειγμα των εγγραφών που θα προστίθενται στα αρχεία που θα δημιουργείτε με την υλοποίησή σας. Εγγραφές με τις οποίες μπορείτε να ελέγξετε το πρόγραμμά σας θα δοθούν υπό μορφή αρχείων κειμένου, μαζί με κατάλληλες συναρτήσεις main στο site του μαθήματος. {15, Giorgos, Papadopoulos, Ioannina } {4, Tasos, Politis, Athina } {300, Yannis, Stratakis, Larissa }

Συναρτήσεις BF (Block File) Στη συνέχεια, περιγράφονται οι συναρτήσεις που αφορούν το επίπεδο από block, πάνω στο οποίο θα βασιστείτε για την υλοποίηση των συναρτήσεων που ζητούνται. Η υλοποίηση των συναρτήσεων αυτών θα δοθεί έτοιμη με τη μορφή βιβλιοθήκης. Στο αρχείο κεφαλίδας BF.h που θα σας δοθεί υπάρχουν τα πρωτότυπα των συναρτήσεων μαζί με σχόλια για το πώς δουλεύουν και το μέγεθος ενός μπλοκ που είναι BF_BLOCK_SIZE, ίσο με 512 bytes. void BF_Init() Η συνάρτηση BF_Init αρχικοποιεί το επίπεδο BF. int BF_CreateFile( char* filename /* όνομα αρχείου */ ) Η συνάρτηση BF_CreateFile δημιουργεί ένα αρχείο με όνομα filename το οποίο αποτελείται από block. Αν το αρχείο υπάρχει ήδη το παλιό αρχείο διαγράφεται. Σε περίπτωση επιτυχούς εκτέλεσης επιστρέφει 0, ενώ σε περίπτωση αποτυχίας επιστρέφει ένα αρνητικό αριθμό. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_OpenFile( char* filename /* όνομα αρχείου */ ) Η συνάρτηση BF_OpenFile ανοίγει ένα υπάρχον αρχείο από block με όνομα filename. Σε περίπτωση επιτυχίας επιστρέφει το αναγνωριστικό του αρχείου, ενώ σε περίπτωση αποτυχίας επιστρέφει ένα αρνητικό αριθμό. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_CloseFile( int filedesc /* αναγνωριστικό αρχείου block */ ) Η συνάρτηση BF_CloseFile κλείνει το ανοιχτό αρχείο με αναγνωριστικό αριθμό filedesc. Σε περίπτωση επιτυχούς εκτέλεσης επιστρέφει 0, ενώ σε περίπτωση αποτυχίας επιστρέφει ένα αρνητικό αριθμό. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_GetBlockCounter( int filedesc /* αναγνωριστικό αρχείου block */ ) Η συνάρτηση BF_GetBlockCounter δέχεται ως όρισμα τον αναγνωριστικό αριθμό filedesc ενός ανοιχτού αρχείου από block και επιστρέφει τον αριθμό των διαθέσιμων block του σε περίπτωση επιτυχούς εκτέλεσης. Σε περίπτωση αποτυχίας, επιστρέφει ένα αρνητικό αριθμό. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_AllocateBlock( int filedesc /* αναγνωριστικό αρχείου block */ ) Με τη συνάρτηση BF_AllocateBlock δεσμεύεται ένα καινούριο block για το αρχείο με αναγνωριστικό αριθμό filedesc. Το νέο block αρχικοποιείται με μηδενικά και δεσμεύεται πάντα στο τέλος του αρχείου, οπότε ο αριθμός του block είναι BF_GetBlockCounter(fileDesc) - 1. Σε περίπτωση επιτυχούς εκτέλεσης επιστρέφει 0, ενώ σε περίπτωση αποτυχίας επιστρέφει ένα αρνητικό αριθμό. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError.

int BF_ReadBlock( int filedesc, /* αναγνωριστικό αρχείου block */ int blocknumber, /* ο αριθμός ενός δεσμευμένου block μέσα στο αρχείο */ void** block /* δείκτης στα δεδομένα του block (αναφορά) */ ) Η συνάρτηση BF_ReadBlock βρίσκει το block με αριθμό blocknumber του ανοιχτού αρχείου με αναγνωριστικό αριθμό filedesc. Η μεταβλητή block αποτελεί ένα δείκτη στα δεδομένα του block, το οποίο θα πρέπει να έχει δεσμευτεί. Σε περίπτωση επιτυχούς εκτέλεσης επιστρέφει 0, ενώ σε περίπτωση αποτυχίας επιστρέφει ένα αρνητικό αριθμό. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_WriteBlock( int filedesc, /* αναγνωριστικό αρχείου block */ int blocknumber /* ο αριθμός ενός δεσμευμένου block μέσα στο αρχείο */ ) Η συνάρτηση BF_WriteBlock γράφει στο δίσκο το δεσμευμένο block με αριθμό blocknumber του ανοιχτού αρχείου με αναγνωριστικό αριθμό filedesc. Σε περίπτωση επιτυχούς εκτέλεσης επιστρέφει 0, ενώ σε περίπτωση αποτυχίας επιστρέφει ένα αρνητικό αριθμό. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. void BF_PrintError( char* message /* μήνυμα προς εκτύπωση */ ) Η συνάρτηση BF_PrintError βοηθά στην εκτύπωση των σφαλμάτων που δύναται να υπάρξουν με την κλήση συναρτήσεων του επιπέδου αρχείου block. Εκτυπώνεται στο stderr το message ακολουθούμενο από μια περιγραφή του πιο πρόσφατου σφάλματος. Συναρτήσεις LH (Linear Hash) Στη συνέχεια περιγράφονται οι συναρτήσεις που καλείστε να υλοποιήσετε και αφορούν το επίπεδο αρχείων γραμμικού κατακερματισμού. int LH_CreateIndex( char *filename, /* όνομα αρχείου */ char* attrname, /* το όνομα του πεδίου που είναι το κλειδί για το συγκεκριμένο αρχείο */ char attrtype, /* τύπος πεδίου-κλειδιού: 'c', 'i' */ int attrlength, /* μήκος πεδίου-κλειδιού */ int buckets, /* αρχικό πλήθος κάδων κατακερματισμού */ float loadthrs /* κατώφλι του παράγοντα φόρτωσης αρχείου για διάσπαση */ ) Η συνάρτηση LH_CreateIndex χρησιμοποιείται για τη δημιουργία και κατάλληλη αρχικοποίηση ενός άδειου αρχείου γραμμικού κατακερματισμού με όνομα filename. Σε περίπτωση επιτυχίας επιστρέφει 0, ενώ σε περίπτωση αποτυχίας επιστρέφει -1.

LH_info* LH_OpenIndex( char *filename /* όνομα αρχείου προς άνοιγμα */ ) Η συνάρτηση LH_OpenIndex ανοίγει το αρχείο με όνομα filename και διαβάζει την μετα-πληροφορία του αρχείου γραμμικού κατακερματισμού. Κατόπιν, ενημερώνει μια δομή όπου κρατούνται όσες πληροφορίες κρίνετε απαραίτητες προκειμένου να μπορείτε να επεξεργαστείτε στη συνέχεια τις εγγραφές του. Μια ενδεικτική δομή με τέτοιες πληροφορίες δίνεται στη συνέχεια: typedef struct { int filedesc; /* αναγνωριστικός αριθμός ανοίγματος αρχείου από το επίπεδο block */ char* attrname; /* το όνομα του πεδίου που είναι το κλειδί για το συγκεκριμένο αρχείο */ char attrtype, /* τύπος πεδίου-κλειδιού: 'c', 'i' */ int attrlength, /* μήκος πεδίου-κλειδιού */ int buckets, /* αρχικό πλήθος κάδων κατακερματισμού */ float loadthrs /* κατώφλι του παράγοντα φόρτωσης αρχείου για διάσπαση */ } LH_info; Όπου attrname, attrtype και attrlength αφορούν το πεδίο-κλειδί, filedesc είναι ο αναγνωριστικός αριθμός του ανοίγματος του αρχείου, όπως επιστράφηκε από το επίπεδο διαχείρισης μπλοκ και numbuckets είναι το πλήθος των κάδων που υπάρχουν στο αρχείο. Τέλος, loadthrs είναι ένα μέγιστο κατώφλι του επιτρεπόμενου παράγοντα φόρτωσης του αρχείου. Σε περίπτωση επιτυχίας επιστρέφει τη δομή πληροφοριών του αρχείου, ενώ σε περίπτωση αποτυχίας επιστρέφει τιμή NULL. int LH_CloseIndex( LH_info* header_info /* πληροφορίες του αρχείου προς κλείσιμο */ ) Η συνάρτηση LH_CloseIndex κλείνει το αρχείο γραμμικού κατακερματισμού που προσδιορίζεται με τη δομή header_info. Η συνάρτηση είναι υπεύθυνη και για την αποδέσμευση της μνήμης που καταλαμβάνει η δομή που περάστηκε ως παράμετρος, στην περίπτωση που το κλείσιμο πραγματοποιήθηκε επιτυχώς. Σε περίπτωση επιτυχίας επιστρέφει 0, ενώ σε διαφορετική περίπτωση -1. int LH_InsertEntry ( LH_info* header_info, /* επικεφαλίδα του αρχείου*/ Record record /* δομή που προσδιορίζει την εγγραφή */ ) Η συνάρτηση LH_InsertEntry εισάγει μία εγγραφή στο αρχείο γραμμικού κατακερματισμού, σύμφωνα και με την αντίστοιχη θεωρία. Οι πληροφορίες που αφορούν το αρχείο βρίσκονται στη δομή header_info, όπως αυτές επιστράφηκαν από την LH_OpenIndex, ενώ η εγγραφή προς εισαγωγή δίνεται στην παράμετρο record. Αν μετά την εισαγωγή της εγγραφής ο παράγοντας φόρτωσης του αρχείου είναι μεγαλύτερος από το σχετικό κατώφλι, τότε θα πρέπει να γίνεται διάσπαση των buckets. Ο παράγοντας φόρτωσης του αρχείου λαμβάνει υπόψη του μόνο το πλήθος των buckets και όχι τα blocks υπερχείλισης που μπορεί να υπάρχουν. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφει 0, ενώ σε διαφορετική περίπτωση -1. int LH_FindAllEntries( LH_info header_info, /* επικεφαλίδα του αρχείου / void *value, /* τιμή του πεδίου-κλειδιού προς αναζήτηση */ ) Η συνάρτηση αυτή χρησιμοποιείται για την εκτύπωση όλων των εγγραφών που υπάρχουν στο αρχείο γραμμικού κατακερματισμού οι οποίες έχουν τιμή στο πεδίο-κλειδί ίση με value. Η παράμετρος header_info δίνει πληροφορίες για το αρχείο κατακερματισμού, όπως είχαν επιστραφεί από την LH_OpenIndex. Για κάθε εγγραφή

του αρχείου με τιμή στο πεδίο-κλειδί ίση με value, εκτυπώνονται τα περιεχόμενά της (συμπεριλαμβανομένου και του πεδίου-κλειδιού). Να εκτυπώνει επίσης το πόσα blocks διαβάστηκαν μέχρι να βρεθούν όλες οι εγγραφές. Σε περίπτωση επιτυχίας επιστρέφει το πλήθος των εγγραφών που τυπώθηκαν, ενώ σε περίπτωση λάθους επιστρέφει -1. Συναρτήσεις Κατακερματισμού Να υλοποιήσετε τουλάχιστον δύο (2) συναρτήσεις κατακερματισμού, και στα πλαίσια της εργασίας να τις αξιολογήσετε ως προς: α) Το πόσα blocks έχει ένα αρχείο β) Το ελάχιστο, το μέσο και το μέγιστο πλήθος εγγραφών που έχει κάθε bucket ενός αρχείου γ) Το μέσο αριθμό των blocks που έχει κάθε bucket δ) Το πλήθος των buckets που έχουν μπλοκ υπερχείλισης, και πόσα μπλοκ είναι αυτά για κάθε bucket. Για το σκοπό αυτό, να υλοποιήσετε τη συνάρτηση: int HashStatistics( char* filename /* όνομα του αρχείου που ενδιαφέρει */ ) Η συνάρτηση διαβάζει το αρχείο με όνομα filename και τυπώνει τα στατιστικά που αναφέρθηκαν προηγουμένως. Σε περίπτωση επιτυχίας επιστρέφει 0, ενώ σε περίπτωση λάθους επιστρέφει -1. Παράδοση εργασίας Η εργασία μπορεί να γίνει ατομικά ή ομαδικά (2 ατόμων). Γλώσσα υλοποίησης: C / C++ Περιβάλλον υλοποίησης: Linux (gcc 4.3+) ή Windows (Visual Studio 2008). Η επιλογή έγινε με βάση τα διαθέσιμα εργαλεία ανάπτυξης που υπάρχουν στη σχολή. Παραδοτέα: Τα αρχεία πηγαίου κώδικα (sources) και τα αντίστοιχα αρχεία κεφαλίδας (headers) καθώς και readme αρχείο με περιγραφή / σχόλια πάνω στην υλοποίησή σας. Ημερομηνία Παράδοσης: 31 Μαΐου Τρόπος παράδοσης: Ηλεκτρονικά, σύμφωνα και με τις οδηγίες που θα δοθούν στο site του μαθήματος (www.di.uoa.gr/~k18).