ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 2 ο Μέρος
|
|
- Χριστόφορος Τρικούπης
- 7 χρόνια πριν
- Προβολές:
Transcript
1 ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία 2 ο Μέρος Ημερομηνία Παράδοσης: Τετάρτη, 15 Ιανουαρίου 2014, ώρα 23:59. Τρόπος Παράδοσης: Χρησιμοποιώντας το πρόγραμμα submit. Πληροφορίες για το πώς λειτουργεί το submit παρέχονται στην ιστοσελίδα του μαθήματος. Copyright for photos by Martin Doerr Γενική Περιγραφή Κατά αντιστοιχία με το 1 ο μέρος της εργασίας σας, καλείστε να υλοποιήσετε ένα πρόγραμμα που υποστηρίζει (προσομοιώνει) τη λειτουργία μίας υπηρεσίας διαμοιρασμού φωτογραφιών παρόμοιας με το Instagram. Κάθε χρήστης μπορεί να αναρτά τις φωτογραφίες που επιθυμεί ώστε να μπορούν άλλοι χρήστες να τις προβάλουν. Η υπηρεσία υποστηρίζει πολλαπλούς λογαριασμούς. Κάθε λογαριασμός ανήκει σε κάποιο χρήστη. Ο ίδιος χρήστης μπορεί να κατέχει περισσότερους του ενός λογαριασμούς. Ο χρήστης ενός λογαριασμού έχει τη δυνατότητα: να αναρτά φωτογραφίες στο λογαριασμό. να δηλώνει πως του αρέσουν (like) φωτογραφίες δικές του ή άλλων χρηστών. να επισημαίνει (tag) τον εαυτό του σε φωτογραφίες που τον απεικονίζουν ή να επισημαίνει άλλους χρήστες σε δικές του φωτογραφίες. να συνενώνει δύο λογαριασμούς που του ανήκουν. Για παράδειγμα, ας υποθέσουμε ότι ένας χρήστης έχει δύο λογαριασμούς, έναν για οικογενειακές φωτογραφίες και έναν για επαγγελματικές. Ο χρήστης έχει τη δυνατότητα να αποφασίσει ότι θέλει να έχει μόνο ένα λογαριασμό όπου θα συγκεντρώσει τις φωτογραφίες των δύο άλλων λογαριασμών του. 1
2 να διαχωρίζει το σύνολο των φωτογραφιών που περιέχονται σε κάποιο λογαριασμό του σε δύο ή περισσότερα σύνολα κάθε ένα εκ των οποίων θα ανήκει σε διαφορετικούς λογαριασμούς αυτού του χρήστη. Αναλυτική Περιγραφή Ζητούμενης Υλοποίησης Για την υλοποίηση της παραπάνω υπηρεσίας θα χρειαστείτε τις ακόλουθες κεντρικές δομές δεδομένων: 1. Έναν πίνακα κατακερματισμού, AC[], ο οποίος διατηρεί πληροφορίες για όλους τους λογαριασμούς στο σύστημα. Αυτή η δομή ονομάζεται πίνακας κατακερματισμού λογαριασμών (ahashtable_p) και παρουσιάζεται στο Σχήμα 1. Κάθε στοιχείο AC[i] του πίνακα κατακερματισμού λογαριασμών περιέχει έναν δείκτη στο πρώτο στοιχείο μιας αλυσίδας που περιέχει εκείνα τα struct account_t για τα οποία το aid τους έχει τιμή κατακερματισμού ίση με i. Άρα, ο πίνακας κατακερματισμού επιλύει συγκρούσεις με τη μέθοδο των αλυσίδων, όπου οι αλυσίδες είναι ταξινομημένες ως προς το αναγνωριστικό (aid) των λογαριασμών. Το μέγεθος του πίνακα κατακερματισμού (ahashtable_size_g) θα πρέπει να επιλέγεται από εσάς προσεχτικά και θα πρέπει να είστε σε θέση να δικαιολογήσετε την επιλογή σας. Για την υλοποίηση της συνάρτησης κατακερματισμού θα πρέπει να χρησιμοποιήσετε καθολικό κατακερματισμό. Για την υλοποίηση του καθολικού κατακερματισμού παρέχονται, ένας πίνακας primes_g[] με 160 πρώτους αριθμούς σε αύξουσα σειρά, το μέγιστο πλήθος εγγραφών, μέσο της μεταβλητής max_regs_g και το μέγιστο κλειδί, μέσο της μεταβλητής max_id_g. Οι δύο αυτές μεταβλητές είναι global και έχουν δηλωθεί στο myinstagram.h. Αρχικοποιούνται στη main βάσει τιμών που αναγράφονται στις πρώτες γραμμές του test_file. Node 5 Node 3 Node 5 aid < Node 3 aid Node 7 Node 15 Node 23 aid < Node 2 aid Node 23 Node 2 Σχήμα 1 2. Ένα ταξινομημένο, βάσει του πεδίου pid, δένδρο δυαδικής αναζήτησης με κόμβο φρουρό, το οποίο θα περιέχει όλες τις φωτογραφίες που έχουν ανεβάσει οι λογαριασμοί της υπηρεσίας. Αυτή η δομή ονομάζεται δένδρο φωτογραφιών (pbinarytree_p) και παρουσιάζεται στο Σχήμα 2. Το δένδρο αυτό είναι απλά-συνδεδεμένο (δηλαδή κάθε κόμβος του δεν αποθηκεύει δείκτη προς τον γονικό του κόμβο). Για την υλοποίηση των δομών αυτών χρειάζονται οι ακόλουθοι τύποι εγγραφών (structs): 1. Κάθε θέση του πίνακα κατακερματισμού λογαριασμών είναι ένας δείκτης σε μία αλυσίδα (account_t *). Kάθε στοιχείο της αλυσίδας αυτής είναι μία εγγραφή (ένα struct) τύπου account_t με τα ακόλουθα πεδία: aid: Αναγνωριστικό του λογαριασμού. Ένας μοναδικός αριθμός που αντιστοιχεί στο λογαριασμό. 2
3 myphotos: Δείκτης (τύπου myphoto_t *) στη ρίζα ενός διπλά-συνδεδεμένου δυαδικού δένδρου, ταξινομημένου ως προς το πεδίο pid, κάθε στοιχείο του οποίου αντιστοιχεί σε μια φωτογραφία που ανήκει στο λογαριασμό. Το δένδρο αυτό ονομάζεται δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό aid. Κάθε στοιχείο του δένδρου προσωπικών φωτογραφιών ενός λογαριασμού είναι μία εγγραφή (ένα struct) τύπου myphoto_t με τα ακόλουθα πεδία: o o o o pid: Το αναγνωριστικό της φωτογραφίας. p: Δείκτης (τύπου myphoto_t *) στον πατέρα του κόμβου. lc: Δείκτης (τύπου myphoto_t *) στο αριστερό παιδί του κόμβου. rc: Δείκτης (τύπου myphoto_t *) στο δεξί παιδί του κόμβου. next: Δείκτης (τύπου account_t *) στον επόμενο κόμβο της αλυσίδας. Μια εγγραφή τύπου account_t παρουσιάζεται στο Σχήμα 3. Node 1 Node 2 Node 3 Node 5 Node 4 Node 6 Κόμβος φρουρός Node 5 pid < Node 2 pid < Node 4 pid < Node 1 pid < Node 6 pid < Node 3 pid Σχήμα 2 G aid myphotos Next Μία εγγραφή του δένδρου προσωπικών φωτογραφιών του λογαριασμού aid pid 6 < pid 2 < pid 1 < pid 4 < pid 3 < pid 5 pid 1 pid 2 pid 3 pid 6 pid 4 pid 5 Σχήμα 3: Εγγραφή τύπου account_t. 2. Κάθε κόμβος του δένδρου φωτογραφιών είναι μια εγγραφή (ένα struct) τύπου photo_t με τα ακόλουθα πεδία: 3
4 pid: Αναγνωριστικό της φωτογραφίας. Είναι ένας μοναδικός αριθμός που αντιστοιχεί σε κάθε φωτογραφία. aid: Αναγνωριστικό του λογαριασμού στον οποίο ανήκει η φωτογραφία. location: Αναγνωριστικό της τοποθεσίας όπου τραβήχτηκε η φωτογραφία. date: Ένας αριθμός που αντιστοιχεί στην ημερομηνία στην οποία δημιουργήθηκε η φωτογραφία. Η ημερομηνία έχει την ίδια μορφή όπως και στο πρώτο μέρος της προγραμματιστικής εργασίας. tags: Πίνακας 5 θέσεων που ονομάζεται πίνακας επισημάνσεων. Κάθε θέση του πίνακα περιέχει ένα δείκτη (τύπου account_t *) σε έναν κόμβο μιας εκ των λιστών του πίνακα κατακερματισμού λογαριασμών. Ο λογαριασμός που αντιστοιχεί σε αυτόν τον κόμβο έχει επισημανθεί (γίνει tag) σε αυτή τη φωτογραφία. likes: Δείκτης (τύπου like_t *) στη ρίζα ενός δυαδικού φυλλο-προσανατολισμένου δένδρου, ταξινομημένου ως προς το πεδίο aid. Το δένδρο αυτό ονομάζεται δένδρο οπαδών της φωτογραφίας με αναγνωριστικό pid. Κάθε στοιχείο αυτού του δένδρου είναι μία εγγραφή (ένα struct) τύπου like_t με τα ακόλουθα πεδία: o o o aid: Αναγνωριστικό λογαριασμού που έχει δηλώσει πως του αρέσει η φωτογραφία (έχει κάνει like στην φωτογραφία). lc: Δείκτης (τύπου like_t *) στο αριστερό παιδί του κόμβου. rc: Δείκτης (τύπου like_t *) στο δεξί παιδί του κόμβου. lc: Δείκτης (τύπου photo_t *) στο αριστερό παιδί του κόμβου. rc: Δείκτης (τύπου photo_t *) στο δεξί παιδί του κόμβου. Μια εγγραφή τύπου photo_t παρουσιάζεται στο Σχήμα 4. tags pid aid location date likes lc rc aid 1 lc rc aid 1 < aid 2 < aid 3 aid 1 lc rc aid 2 lc rc aid 2 lc rc aid 3 lc rc Σχήμα 4: Εγγραφή τύπου photo_t. 4
5 Δυαδικό δένδρο φωτογραφιών pbinarytree_p likes likes likes likes likes likes G Δείκτες στον κόμβο Φρουρό Δείκτες προς τους κόμβους των αλυσιδών του πίνακα κατακερματισμού Φυλλοπροσανατολισμένο Δένδρο likes Δείκτες προς φυλλοπροσανατολισμ ένο δένδρο likes Δένδρο προσωπικών φωτογραφιών myphotos Πίνακας κατακερματισμού ahashtable_p Σχήμα 5 5
6 Το Σχήμα 5 παρουσιάζει τις δομές της προγραμματιστικής εργασίας με συγκεντρωτικό τρόπο όπου, για λόγους απλότητας, στις εγγραφές (structs) τύπου photo_t δεν εμφανίζονται τα στατικά πεδία (εμφανίζονται μόνο τα πεδία που αποθηκεύουν δείκτες). Συγκεκριμένα, τα πεδία κάθε κόμβου του δένδρου φωτογραφιών που εμφανίζονται στο Σχήμα 5 είναι τα εξής: tags, likes, lc και rc με αυτή τη σειρά. Τρόπος Λειτουργίας Προγράμματος Το πρόγραμμα που θα δημιουργηθεί θα πρέπει να εκτελείται καλώντας την ακόλουθη εντολή: <executable> <hashtable-size> <input-file> όπου <executable> είναι το όνομα του εκτελέσιμου αρχείου του προγράμματος (π.χ. a.out), <hashtable-size> είναι το μέγεθος του πίνακα κατακερματισμού και <input-file> είναι το όνομα ενός αρχείου εισόδου (π.χ. testfile) που περιέχει γεγονότα των ακόλουθων μορφών: R <aid>: Γεγονός τύπου Register το οποίο σηματοδοτεί τη δημιουργία ενός νέου λογαριασμού (account_t) στο σύστημα με αναγνωριστικό <aid> και κενό δένδρο προσωπικών φωτογραφιών (myphotos). Το γεγονός αυτό πρέπει να δημιουργεί το νέο λογαριασμό και να τον προσθέτει στον πίνακα κατακερματισμού λογαριασμών. Μετά το πέρας της εκτέλεσης ενός τέτοιου γεγονότος το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: R <aid> DONE D <aid>: Γεγονός τύπου Delete account το οποίο σηματοδοτεί τη διαγραφή του λογαριασμού με αναγνωριστικό <aid>. Κατά τη διαγραφή ενός λογαριασμού πρέπει να διαγράφονται και όλες οι φωτογραφίες που ανήκουν στο λογαριασμό (δηλαδή όλα τα στοιχεία του δένδρου προσωπικών φωτογραφιών του λογαριασμού, καθώς και οι αντίστοιχες φωτογραφίες από το δένδρο φωτογραφιών). Επίσης, θα πρέπει να διαγραφούν όλες οι πιθανές αναφορές σε αυτόν το λογαριασμό μέσω επισημάνσεων (tags) ή/και likes. Συγκεκριμένα, θα πρέπει να εξεταστούν όλα τα στοιχεία του δένδρου φωτογραφιών και να γίνονται κατάλληλες αλλαγές στον πίνακα επισημάνσεων κάθε τέτοιου στοιχείου, αν χρειάζεται, καθώς και να εξεταστεί το δένδρο οπαδών της φωτογραφίας που αντιστοιχεί στο στοιχείο: αν το δένδρο οπαδών της φωτογραφίας αυτής περιέχει το αναγνωριστικό <aid>, το στοιχείο αυτό θα πρέπει να διαγράφεται. Τέλος θα πρέπει να αφαιρείται ο κόμβος που κρατάει τα στοιχεία για αυτόν το λογαριασμό από τον πίνακα κατακερματισμού λογαριασμών. Μετά το πέρας της εκτέλεσης ενός τέτοιου γεγονότος το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: D <aid> MYPHOTOS = <pid 1, pid 2,... pid n> TAGS = <tpid 1, tpid 2,... tpid k> LIKES = <lpid 1, lpid 2,... lpid m> DONE όπου n είναι το πλήθος των φωτογραφιών που ανήκουν στον λογαριασμό με αναγνωριστικό <aid>, k είναι το πλήθος των φωτογραφιών στις οποίες ο λογαριασμός είχε επισημανθεί (είχε γίνει tag), m είναι το πλήθος των φωτογραφιών των οποίων ο προς διαγραφή λογαριασμός είναι οπαδός και: για κάθε j, 1 j n, <pid j> είναι τo αναγνωριστικό της j-οστής φωτογραφίας που ανήκει στον προς διαγραφή λογαριασμό. για κάθε j, 1 j k, <tpid j> είναι τo αναγνωριστικό της j-οστής φωτογραφίας που περιείχε επισήμανση (tag) προς τον προς διαγραφή λογαριασμό. Σημειώνεται ότι από τις εγγραφές στο 6
7 δένδρο φωτογραφιών που αντιστοιχούσαν στις φωτογραφίες αυτές αφαιρέθηκαν οι εν λόγω επισημάνσεις (tags). για κάθε j, 1 j m, <lpid j> είναι το αναγνωριστικό της j-οστής φωτογραφίας που είχε οπαδό τον προς διαγραφή λογαριασμό. Σημειώνεται ότι από τις εγγραφές στο δένδρο φωτογραφιών που αντιστοιχούσαν στις φωτογραφίες αυτές αφαιρέθηκαν τα εν λόγω likes. U <pid> <aid> <location> <date>: Γεγονός τύπου Upload photo το οποίο σηματοδοτεί την ανάρτηση (upload) μίας νέας φωτογραφίας στο σύστημα. Η νέα αυτή φωτογραφία θα έχει αναγνωριστικό <pid>. Το αναγνωριστικό του λογαριασμού που έκανε την ανάρτηση θα είναι <aid>, η τοποθεσία <location>, η ημερομηνία λήψης <date>, το δένδρο οπαδών της φωτογραφίας (likes) θα είναι κενό και ο πίνακας επισημάνσεων άδειος. Η νέα φωτογραφία πρέπει να τοποθετηθεί στη σωστή θέση του δένδρου φωτογραφιών. Μετά το πέρας της εκτέλεσης ενός τέτοιου γεγονότος το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: U <pid> <aid> <location> <date> DONE PG = <pidg> LG = <lidg> RG = <ridg> PL = <pidl> LL = <lidl> RL = <ridl> όπου: <pidg>, <lidg> και <ridg> είναι το αναγνωριστικό της φωτογραφίας στον κόμβο πατέρα, έστω v, στον κόμβο που αντιστοιχεί στο αριστερό παιδί του v και στον κόμβο που αντιστοιχεί στο δεξιό παιδί του v, αντίστοιχα, της νέο-εισαχθείσας φωτογραφίας στο δένδρο φωτογραφιών. Είναι αξιοσημείωτο πως ένα από αυτά τα παιδιά του v θα είναι ο ίδιος ο νεο-εισαχθής κόμβος. <pidl>, <lidl> και <ridl> είναι το αναγνωριστικό της φωτογραφίας στον κόμβο πατέρα, έστω v, στον κόμβο που αντιστοιχεί στο αριστερό παιδί του v και στον κόμβο που αντιστοιχεί στο δεξιό παιδί του v, αντίστοιχα, της νέο-εισαχθείσας φωτογραφίας στο δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid>. B <pid>: Γεγονός τύπου Burn photo το οποίο σηματοδοτεί την αφαίρεση της φωτογραφίας με αναγνωριστικό <pid> από το σύστημα. Κατά την αφαίρεση μίας φωτογραφίας από το σύστημα πρέπει να διαγράφονται και όλες οι πληροφορίες σχετικά με αυτήν και επομένως και όλα τα στοιχεία του δένδρου οπαδών της φωτογραφίας αυτής. Ακόμη θα πρέπει να διαγράφεται ο αντίστοιχος κόμβος από το δένδρο προσωπικών φωτογραφιών του λογαριασμού που ανέβασε την προς διαγραφή φωτογραφία. Επίσης, για ευκολότερη αποσφαλμάτωση του κώδικα που θα δημιουργήσετε συνίσταται ισχυρά να αναθέτετε την τιμή NULL σε κάθε στοιχείο του πίνακα επισημάνσεων της εγγραφής που αντιστοιχεί στην προς-διαγραφή φωτογραφία. Μετά το πέρας της εκτέλεσης ενός τέτοιου γεγονότος το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: B <pid> <aid> LIKES = <aid 1, aid 2,... aid n> PG = <pidg> LG = <lidg> RG = <ridg> PL = <pidl> LL = <lidl> RL = <ridl> DONE όπου n είναι το μέγεθος του δένδρου οπαδών της φωτογραφίας με αναγνωριστικό <pid>: <aid> είναι το αναγνωριστικό του λογαριασμού στον οποίο ανήκει η προς διαγραφή φωτογραφία, 7
8 για κάθε j, 1 j n, <aid j> είναι τo αναγνωριστικό του λογαριασμού στον οποίο δείχνει το j- οστό στοιχείο του δένδρου οπαδών της προς διαγραφή φωτογραφίας. <pidg>, <lidg> και <ridg> είναι το αναγνωριστικό της φωτογραφίας στον κόμβο πατέρα, έστω v, στον κόμβο που αντιστοιχεί στο αριστερό παιδί του v και στον κόμβο που αντιστοιχεί στο δεξιό παιδί του v, αντίστοιχα, της προς διαγραφή φωτογραφίας στο δένδρο φωτογραφιών. <pidl>, <lidl> και <ridl> είναι το αναγνωριστικό της φωτογραφίας στον κόμβο πατέρα, έστω v, στον κόμβο που αντιστοιχεί στο αριστερό παιδί του v και στον κόμβο που αντιστοιχεί στο δεξιό παιδί του v, αντίστοιχα, της προς διαγραφή φωτογραφίας στο δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid>. L <aid> <pid>: Γεγονός τύπου Like photo το οποίο σηματοδοτεί την προσθήκη ενός κόμβου στο δένδρο οπαδών της φωτογραφίας με αναγνωριστικό <pid>. Σε αντίθεση με την πρώτο μέρος της προγραμματιστικής εργασίας, ο κόμβος αυτός αντί να αποθηκεύει έναν δείκτη προς το στοιχείο με αναγνωριστικό <aid> του πίνακα κατακερματισμού λογαριασμών, θα αποθηκεύει απλά το <aid> του λογαριασμού. Μετά το πέρας της εκτέλεσης ενός τέτοιου γεγονότος το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: L <aid> <pid> DONE T <aid> <pid>: Γεγονός τύπου Tag το οποίο σηματοδοτεί την προσθήκη στον πίνακα επισημάνσεων της φωτογραφίας με αναγνωριστικό <pid> ενός δείκτη στο στοιχείο του πίνακα κατακερματισμού λογαριασμών με αναγνωριστικό <aid>. Μετά το πέρας της εκτέλεσης ενός τέτοιου γεγονότος το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: T <aid> <pid> DONE M <aid1> <aid2> <aid3>: Γεγονός τύπου Merge accounts το οποίο σηματοδοτεί τη συνένωση των λογαριασμών με αναγνωριστικά <aid1> και <aid2> σε ένα νέο λογαριασμό με αναγνωριστικό <aid3>. Κατά τη συνένωση θα πρέπει: να συνενωθούν τα δύο δένδρα προσωπικών φωτογραφιών σε ένα νέο ταξινομημένο, διπλά συνδεδεμένο δένδρο το οποίο θα αποτελέσει το δένδρο προσωπικών φωτογραφιών για το νέο λογαριασμό να αντικατασταθούν οποιεσδήποτε αναφορές προς τους λογαριασμούς με αναγνωριστικά <aid1> και <aid2> με αναφορές στον λογαριασμό με αναγνωριστικό <aid3>. Αναφορές μπορεί να υπάρχουν στα δένδρα οπαδών και στους πίνακες επισημάνσεων των διαφόρων φωτογραφιών. Στην περίπτωση όπου και οι δύο λογαριασμοί έχουν επισημανθεί ή/και έχουν δηλώσει την αρέσκεια τους (like) για μία φωτογραφία, καλό θα ήταν να αντικαθίσταται η πρώτη αναφορά με μία αναφορά στον λογαριασμό με αναγνωριστικό <aid3> και η δεύτερη να διαγράφεται. Επομένως, αν μία φωτογραφία είχε οπαδούς και τους δύο λογαριασμούς (με αναγνωριστικά <aid1> και <aid2>), μετά το πέρας της εκτέλεσης του γεγονότος θα πρέπει να έχει ως οπαδό το λογαριασμό με αναγνωριστικό <aid3> να διαγραφούν οι λογαριασμοί με αναγνωριστικά <aid1> και <aid2> από τον πίνακα κατακερματισμού λογαριασμών Μετά το πέρας της εκτέλεσης ενός τέτοιου γεγονότος το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη 8
9 πληροφορία: Μ <aid1> <aid2> <aid3> MYPHOTOS1 = <m1pid 1, m1pid 2,, m1pid m> MYPHOTOS2 = <m2pid 1, m2pid 2,, m2pid n> MYPHOTOS3 = <m3pid 1, m3pid 2,, m3pid k> UPDATED = <upid 1, upid 2, upid r> DONE όπου: m είναι το μέγεθος του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid1>, n είναι το μέγεθος του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid2>, k είναι το μέγεθος του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid3> και r είναι το πλήθος των φωτογραφιών για τις οποίες ισχύει πως κάποιο στοιχείο του πίνακα επισημάνσεων τους ή κάποιο στοιχείο του δένδρου οπαδών τους ενημερώθηκε μετά τη συνένωση και: για κάθε j, 1 j m, <m1pid j> είναι τo αναγνωριστικό του λογαριασμού στον οποίο δείχνει το j-οστό στοιχείο του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid1> (βάσει της ενδοδιατεγμένης διάσχισης), για κάθε j, 1 j n, <m2pid j> είναι τo αναγνωριστικό του λογαριασμού στον οποίο δείχνει το j-οστό στοιχείο του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid2> (βάσει της ενδοδιατεγμένης διάσχισης), για κάθε j, 1 j k, <m3pid j> είναι τo αναγνωριστικό του λογαριασμού στον οποίο δείχνει το j-οστό στοιχείο του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid3> (βάσει της ενδοδιατεγμένης διάσχισης), για κάθε j, 1 j r, <upid j> είναι τo αναγνωριστικό της φωτογραφίας της οποίας ανανεώθηκε το δένδρο οπαδών της ή/και ο πίνακας επισημάνσεων της λόγω της συνένωσης των λογαριασμών. S <aid1> <aid2> <aid3> <pid>: Γεγονός τύπου Split account το οποίο σηματοδοτεί το διαχωρισμό του λογαριασμού με αναγνωριστικό <aid1> σε δύο νέους λογαριασμούς με αναγνωριστικά <aid2> (για τον πρώτο από αυτούς) και <aid3> (για το δεύτερο). Σε αντίθεση με το πρώτο μέρος της προγραμματιστικής σας εργασίας, ο διαχωρισμός δεν γίνεται βάσει κάποιας τοποθεσίας, αλλά βάσει κάποιου αναγνωριστικού. Συγκεκριμένα, όσες φωτογραφίες έχουν μικρότερο αναγνωριστικό από το <pid> θα πρέπει να εισαχθούν (ταξινομημένες βάσει του πεδίου pid) στο δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid2> και όλες οι υπόλοιπες στο δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid3>. Η πολυπλοκότητα της υλοποίησης αυτής της λειτουργίας πρέπει να είναι O(h), όπου h είναι το ύψος του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid1>. Ακόμη θα πρέπει να ενημερώνεται κατάλληλα και το πεδίο <aid> των στοιχείων του δένδρου φωτογραφιών που αντιστοιχούν σε κάθε φωτογραφία που περιέχεται στα δένδρα αυτά. Τυχόν αναφορές στον λογαριασμό με αναγνωριστικό <aid1> αντικαθίστανται με αναφορές στον λογαριασμό με αναγνωριστικό <aid2>. Αναφορές μπορεί να υπάρχουν στα δένδρα οπαδών των στοιχείων του δένδρου φωτογραφιών και στους πίνακες επισημάνσεων των στοιχείων αυτών. Μετά το πέρας της εκτέλεσης ενός τέτοιου γεγονότος το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: 9
10 S <aid1> <aid2> <aid3> <pid> DONE MYPHOTOS1 = <m1pid 1, m1pid 2,, m1pid m> MYPHOTOS2 = <m2pid 1, m2pid 2,, m2pid n> MYPHOTOS3 = <m3pid 1, m3pid 2,, m3pid k> UPDATED = <upid 1, upid 2, upid r> όπου: m είναι το μέγεθος του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid1>, n είναι το μέγεθος του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid2>, k είναι το μέγεθος του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid3> και r είναι το πλήθος των φωτογραφιών για τις οποίες ισχύει πως κάποιο στοιχείο του πίνακα επισημάνσεων τους ή κάποιο στοιχείο του δένδρου οπαδών τους ενημερώθηκε μετά τη συνένωση και: για κάθε j, 1 j m, <m1pid j> είναι τo αναγνωριστικό του λογαριασμού στον οποίο δείχνει το j-οστό στοιχείο του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid1> (βάσει της ενδοδιατεγμένης διάσχισης), για κάθε j, 1 j n, <m2pid j> είναι τo αναγνωριστικό του λογαριασμού στον οποίο δείχνει το j-οστό στοιχείο του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid2> (βάσει της ενδοδιατεγμένης διάσχισης), για κάθε j, 1 j k, <m3pid j> είναι τo αναγνωριστικό του λογαριασμού στον οποίο δείχνει το j-οστό στοιχείο του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid3> (βάσει της ενδοδιατεγμένης διάσχισης), για κάθε j, 1 j r, > <upid j> είναι τo αναγνωριστικό της φωτογραφίας της οποίας ανανεώθηκε το δένδρο οπαδών ή/και ο πίνακας επισημάνσεων της λόγω του διαχωρισμού του λογαριασμού με αναγνωριστικό <aid1>. F <YYYYMMDD>: Γεγονός τύπου Find το οποίο σηματοδοτεί την αναζήτηση όλων των φωτογραφιών φωτογραφιών που έχουν ληφθεί την ημερομηνία <YYYYMMDD>. Μετά το πέρας του γεγονότος θα πρέπει να τυπώνεται η παρακάτω πληροφορία: F <YYYYMMDD> <pid 1> TAGS: <a1_id 1> <a1_id 2> <a1_id 3> <a1_id 4> <a1_id 5> LIKES: <l1_aid 1> <l1_aid 2> <l1_aid m1> LOCATION: <location 1> TIMESTAMP: <YYYYMMDD> <pid 2> TAGS: <a2_id 1> <a2_id 2> <a2_id 3> <a2_id 4> <a2_id 5> LIKES: <l2_aid 1> <l2_aid 2> <l2_aid m2> LOCATION: <location 2> TIMESTAMP: <YYYYMMDD> <pid n> TAGS: <an_id 1> <an_id 2> <an_id 3> <an_id 4> <an_id 5> LIKES: <ln_aid 1> <ln_aid 2> <ln_aid mn> LOCATION: <location n> TIMESTAMP: <YYYYMMDD> DONE όπου n είναι το πλήθος των φωτογραφιών που έχουν ληφθεί την ημερομηνία <YYYMMDD> και για κάθε i, 1 i n: 10
11 για κάθε j, 1 j 5, > <a<i>_id j> είναι τo αναγνωριστικό του λογαριασμού ο οποίος έχει επισημανθεί στην φωτογραφία με αναγνωριστικό <pid i> (δηλαδή υπάρχει δείκτης προς τον λογαριασμό αυτό στον πίνακα επισημάνσεων του στοιχείου που αντιστοιχεί στη φωτογραφία στο δένδρο φωτογραφιών) m i είναι το μέγεθος του δένδρου οπαδών της φωτογραφίας με αναγνωριστικό <pid i> και για κάθε j, 1 j m i, > <l<i>_aid j> είναι τo αναγνωριστικό του j-οστού στοιχείου του δένδρου οπαδών της φωτογραφίας με αναγνωριστικό <pidi> (βάσει της ενδοδιατεγμένης διάσχισης) <location i> είναι η τοποθεσία στην οποία ελήφθη η φωτογραφία με αναγνωριστικό <pid i>. 11
12 P <aid>: Γεγονός τύπου Print το οποίο σηματοδοτεί το τύπωμα των στοιχείων του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid>. Για κάθε τέτοια φωτογραφία θα πρέπει επιπρόσθετα να τυπώνονται και οι πληροφορίες που αφορούν τη φωτογραφία, όπως οι επισημάνσεις της, η τοποθεσία και η ημερομηνία που ελήφθη η φωτογραφία, καθώς και τα στοιχεία του δένδρου οπαδών της. Σε αυτό το γεγονός το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: P <aid> <pid 1> TAGS: <a1_id 1> <a1_id 2> <a1_id 3> <a1_id 4> <a1_id 5> LIKES: <l1_aid 1> <l1_aid 2> <l1_aaid m1> LOCATION: <location 1> TIMESTAMP: <YYYYMMDD 1> <pid 2> TAGS: <a2_id 1> <a2_id 2> <a2_id 3> <a2_id 4> <a2_id 5> LIKES: <l2_aid 1> <l2_aid 2> <l2_aid m2> LOCATION: <location 2> TIMESTAMP: <YYYYMMDD 2> <pid n> TAGS: <an_id 1> <an_id 2> <an_id 3> <an_id 4> <an_id 5> LIKES: <ln_aid 1> <ln_aid 2> <ln_aid mn> LOCATION: <location n> TIMESTAMP: <YYYYMMDD n> DONE όπου n είναι το πλήθος των στοιχείων στο δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid>και για κάθε i, 1 i n: για κάθε j, 1 j 5, > <a<i>_id j> είναι τo αναγνωριστικό του λογαριασμού ο οποίος έχει επισημανθεί στην φωτογραφία με αναγνωριστικό <pid i> m i είναι το μέγεθος του δένδρου οπαδών της φωτογραφίας με αναγνωριστικό <pid i> και για κάθε j, 1 j m n, > <l<i>_aid j> είναι τo αναγνωριστικό του j-οστού στοιχείου του δένδρου οπαδών της φωτογραφίας με αναγνωριστικό <pid i> (βάσει της ενδοδιατεγμένης διάσχισης), <location i> είναι η τοποθεσία στην οποία ελήφθη η φωτογραφία με αναγνωριστικό <pid i> και <YYYYMMDD i> είναι η ημερομηνία στην οποία ελήφθη η φωτογραφία με αναγνωριστικό <pid i> (στη μορφή που περιγράφεται παραπάνω). 12
13 Α: Γεγονός τύπου Αcounts print το οποίο σηματοδοτεί το τύπωμα των στοιχείων του πίνακα κατακερματισμού λογαριασμών και του δένδρου προσωπικών φωτογραφιών που περιέχεται σε κάθε στοιχείο του. Σε αυτό το γεγονός το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: A <aid 1> MYPHOTOS: <p1_id 1> <p1_id 2>... <p1_id m1> <aid 2> MYPHOTOS: <p2_id 1> <p2_id 2>... <p2_id m2>... <aid n> MYPHOTOS: <pn_id 1> <pn_id 2>... <pn_id mn> DONE όπου n είναι το πλήθος των στοιχείων στον πίνακα κατακερματισμού λογαριασμών και για κάθε i, 1 i n: <aid i> είναι τo αναγνωριστικό του i-οστού λογαριασμού στον πίνακα κατακερματισμού λογαριασμών, m i είναι το μέγεθος του δένδρου προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid i> και για κάθε j, 1 j m i, > <p<i>_id j> είναι τo αναγνωριστικό της j- οστής φωτογραφίας στο δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid i> (βάσει της ενδοδιατεγμένης διάσχισης). Ε: Γεγονός τύπου Εxpose photos το οποίο σηματοδοτεί το τύπωμα των στοιχείων του δένδρου φωτογραφιών. Για κάθε φωτογραφία θα πρέπει να τυπώνονται και οι πληροφορίες που αφορούν τη φωτογραφία, όπως οι επισημάνσεις της, η τοποθεσία και η ημερομηνία που ελήφθη η φωτογραφία, καθώς και τα στοιχεία του δένδρου οπαδών της. Σε αυτό το γεγονός το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: E <pid 1> TAGS: <a1_id 1> <a1_id 2> <a1_id 3> <a1_id 4> <a1_id 5> LIKES: <l1_aid 1> <l1_aid 2> <l1_aaid m1> LOCATION: <location 1> TIMESTAMP: <YYYYMMDD 1> <pid 2> TAGS: <a2_id 1> <a2_id 2> <a2_id 3> <a2_id 4> <a2_id 5> LIKES: <l2_aid 1> <l2_aid 2> <l2_aid m2> LOCATION: <location 2> TIMESTAMP: <YYYYMMDD 2> <pid n> TAGS: <an_id 1> <an_id 2> <an_id 3> <an_id 4> <an_id 5> LIKES: <ln_aid 1> <ln_aid 2> <ln_aid mn> LOCATION: <location n> TIMESTAMP: <YYYYMMDD n> DONE όπου n είναι το πλήθος των στοιχείων στο δένδρο φωτογραφιών και για κάθε i, 1 i n: για κάθε j, 1 j 5, > <a<i>_id j> είναι τo αναγνωριστικό του λογαριασμού ο οποίος έχει επισημανθεί στην φωτογραφία με αναγνωριστικό <pid i> 13
14 m i είναι το μέγεθος του δένδρου οπαδών της φωτογραφίας με αναγνωριστικό <pid i> και για κάθε j, 1 j m n, > <l<i>_aid j> είναι τo αναγνωριστικό του j-οστού στοιχείου του δένδρου οπαδών της φωτογραφίας με αναγνωριστικό <pid i> (βάσει της ενδοδιατεγμένης διάσχισης), <location i> είναι η τοποθεσία στην οποία ελήφθη η φωτογραφία με αναγνωριστικό <pid i>, <YYYYMMDD i> είναι η ημερομηνία στην οποία ελήφθη η φωτογραφία με αναγνωριστικό <pid i> (στην μορφή που περιγράφεται παραπάνω). W: Γεγονός τύπου World Print το οποίο σηματοδοτεί το τύπωμα όλων των δομών δεδομένων που υπάρχουν υπάρχουν στο σύστημα. Σε αυτό το γεγονός το πρόγραμμα θα πρέπει να τυπώνει την ακόλουθη πληροφορία: W ACCOUNTS: <aid 1> MYPHOTOS: <p1_id 1> <p1_id 2>... <p1_id m1> <aid 2> MYPHOTOS: <p2_id 1> <p2_id 2>... <p2_id m2>... <aid n> MYPHOTOS: <pn_id 1> <pn_id 2>... <pn_id mn> PHOTOS: <pid 1> TAGS: <a1_id 1> <a1_id 2> <a1_id 3> <a1_id 4> <a1_id 5> LIKES: <l1_aid 1> <l1_aid 2>... <l1_aid k1> LOCATION: <location 1> TIMESTAMP: <YYYYMMDD 1> <pid 2> TAGS: <a2_id 1> <a2_id 2> <a2_id 3> <a2_id 4> <a2_id 5> LIKES: <l2_aid 1> <l2_aid 2>... <l2_aid k2> LOCATION: <location 2> TIMESTAMP: <YYYYMMDD 2> <pid r> TAGS: <an_id 1> <an_id 2> <an_id 3> <an_id 4> <an_id 5> LIKES: <ln_aid 1> <ln_aid 2>... <ln_aid kr> LOCATION: <location r> TIMESTAMP: <YYYYMMDD r> DONE όπου n είναι το πλήθος των στοιχείων στον πίνακα κατακερματισμού λογαριασμών και r είναι το πλήθος των στοιχείων στο δένδρο φωτογραφιών και: για κάθε i, 1 i n, > <aid i> είναι τo αναγνωριστικό του i-οστού λογαριασμού στον πίνακα κατακερματισμού λογαριασμών, m i είναι το πλήθος των στοιχείων στο δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid i> και για κάθε j, 1 j m i, > <p<i>_id j> είναι τo αναγνωριστικό της j-οστής φωτογραφίας στο δένδρο προσωπικών φωτογραφιών του λογαριασμού με αναγνωριστικό <aid i> (βάσει της ενδοδιατεγμένης διάσχισης), για κάθε i, 1 i r, > (1) <pid i> είναι τo αναγνωριστικό της i-οστής φωτογραφίας στο δένδρο φωτογραφιών, (2) για κάθε j, 1 j 5, > <a<i>_id j> είναι τo αναγνωριστικό του λογαριασμού ο οποίος δεικτοδοτείται από τη j-οστή θέση του πίνακα επισημάνσεων της φωτογραφίας με αναγνωριστικό <pid i>, (3) m i είναι το μέγεθος του δένδρου οπαδών της φωτογραφίας με 14
15 αναγνωριστικό <pid i>, (4) για κάθε c, 1 c m i, > <l<i>_aid c> είναι τo αναγνωριστικό του λογαριασμού που είναι αποθηκευμένο στο j-οστό στοιχείο του δένδρου οπαδών της φωτογραφίας με αναγνωριστικό <pid i> (βάσει της ενδοδιατεγμένης διάσχισης), (5) <location i> είναι η τοποθεσία στην οποία ελήφθη η φωτογραφία με αναγνωριστικό <pid i> και (6) <YYYYMMDD i> είναι η ημερομηνία στην οποία ελήφθη η φωτογραφία με αναγνωριστικό <pid i> (στην μορφή που περιγράφεται παραπάνω). BONUS 1) [+30%] Υλοποιήστε τον πίνακα κατακερματισμού λογαριασμών ως ένα AVL δένδρο, το οποίο θα είναι ταξινομημένο ως προς το πεδίο aid,. Αυτή η δομή ονομάζεται AVL δένδρο λογαριασμών (aavltree_a) και παρουσιάζεται στο Σχήμα 6: Node 1 Node 2 Node 3 Node 5 Node 4 Node 6 Node 5 pid < Node 2 pid < Node 4 pid < Node 1 pid < Node 3 pid < Node 6 pid Σχημα 6 Το struct account_t παραμένει το ίδιο. Η υλοποίηση του bonus αυτού δεν απαιτεί την υλοποίηση του γεγονότος Delete Account (D) (και άρα δεν χρειάζεται να υλοποιηθούν διαγραφές στο AVL δένδρο). 2) [+20%] Υλοποιήστε τον πίνακα κατακερματισμού λογαριασμών ως έναν πίνακα ταξινομημένου (βάσει του πεδίου aid) διπλού κατακερματισμού. Ο πίνακας θα πρέπει να περιέχει τόσα στοιχεία όσοι και οι λογαριασμοί στο σύστημα. Αυτή η δομή ονομάζεται πίνακας διπλού κατακερματισμού λογαριασμών (adoublehashtable_p) και παρουσιάζεται στο Σχήμα 7. Στην υλοποίηση αυτής της δομής καλείστε να υλοποιήσετε και να χρησιμοποιήσετε καθολικό κατακερματισμό (και για τις δύο συναρτήσεις κατακερματισμού). Προσοχή στην υλοποίηση της διαγραφής στον ταξινομημένο πίνακα κατακερματισμού (η οποία χρειάζεται για την υλοποίηση του γεγονότος D). 0 K2 H(K2, 0) K3 H(K1,0), H(K3,0), H(K5,0) K4 H(K4,0) K1 Η(K1,1) Η(K5,1) K1 > K3 m-1 K5 Σχήμα 7 Η(K5,2) K1 < K5 && K3 < K5 3) [+10%] Την λειτουργία επέκτασης του πίνακα κατακερματισμού λογαριασμών. Το μέγεθος του πίνακα κατακερματισμού θα πρέπει να αυξάνει ή να μειώνεται κατά τη διάρκεια εκτέλεσης του προγράμματος 15
16 ανάλογα με το πλήθος των κόμβων που υπάρχουν σε αυτόν. Η αύξηση του μεγέθους του πίνακα θα γίνεται ως εξής. Στο myinstagram.h θα υπάρχει ένας πίνακας primes_g[] από πρώτους αριθμούς, τα στοιχεία του οποίου θα έχουν αρχικοποιηθεί από τη main. Την i-οστή φορά που πρέπει να αυξηθεί το μέγεθος του πίνακα κατακερματισμού, θα πρέπει, μετά την αύξηση, αυτός να έχει μέγεθος όσο ο πρώτος που είναι αποθηκεύμενος στο στοιχείο primes_g[i]. Στο παρακάτω σχήμα (Σχημα 9) φαίνεται πως θα γίνεται η διαδικασία αυτή. Node 5 Node 3 Node 8 Node 5 Node 31 Node 32 Node 7 Node 831 Node 7 Node 8 Node 29 Node 15 Node 29 Node 15 Node 23 Node 23 Node 2 Node 8 Node 29 Node 8 Node 31 Node 8 Node 2 Node 3 Node 3 Σχήμα 9 Όταν το πλήθος των κόμβων κάποιας λίστας γίνει ίσο με ένα πάνω φράγμα ht_lower_g, τότε το μέγεθος του πίνακα κατακερματισμού πρέπει να αυξηθεί (με τη διαδικασία που περιεγράφηκε παραπάνω) και να υπολογιστεί ξανά η θέση του κάθε κλειδιού χρησιμοποιώντας τη συνάρτηση κατακερματισμού. Αν το πλήθος των κόμβων σε κάθε λίστα γίνει μικρότερο από κάποιο κάτω φράγμα, ht_lower_g, θα πρέπει το μέγεθος του πίνακα κατακερματισμού να μειώνεται ακολουθώντας την αντίστροφη διαδικασία. Συγκεκριμένα, αν το τρέχον μέγεθος του πίνακα είναι ίσο με primes_g[i], μετά τη μείωση, το μέγεθος θα πρέπει να είναι ίσο με primes_g[i-1]. Οι μεταβλητές ht_upper_g και ht_lower_g είναι global και έχουν δηλωθεί στο myinstagram.h. Αρχικοποιούνται στη main βάσει τιμών που αναγράφονται στις πρώτες γραμμές του test_file. ΠΡΟΣΟΧΗ Κάθε υλοποίηση κάποιου bonus πρέπει να γίνει σε διαφορετικό αρχείο/α και ΟΧΙ στο βασικό/ά αρχείο/ά του project σας και θα πρέπει να κάνετε submit το βασικό project και όσα αρχεία αντιστοιχούν σε κάθε ένα από τα bonus που θα υλοποιήσετε. 16
17 Δομές Δεδομένων Στη συνέχεια παρουσιάζονται οι δομές σε C που πρέπει να χρησιμοποιηθούν για την υλοποίηση της παρούσας εργασίας. //////////////////////////////////////////////////////////////////////////////// // Defining the needed structures //////////////////////////////////////////////////////////////////////////////// /** Enum and array doing the location to integer mapping */ typedef enum { attica = 1, central_greece = 2, central_macedonia = 3, crete = 4, east_macedonia_and_thrace = 5, epirus = 6, ionian_islands = 7, north_aegean = 8, peloponnese = 9, south_aegean = 10, thessaly = 11, west_greece = 12, west_macedonia = 13 } location_e; /* This array is defined in main.c */ extern char* locations_g[14]; /** * Structure defining a node of the myphotos double linked binary tree * (dendro prosopikwn fwtografiwn) */ typedef struct myphoto { unsigned int pid; /**< The photo identifier. >0 */ struct myphoto *p; /**< Pointer to the node's parent */ struct myphoto *lc; /**< Pointer to the node's left child */ struct myphoto *rc; /**< Pointer to the node's right child */ } myphoto_t; /** * Structure defining a node of the accounts' hashtable (pinakas * katakermatismou logariasmwn) */ typedef struct account { unsigned int aid; /**< The account's identifier */ myphoto_t *myphotos;/**< A binary tree with the photos * uploaded by this account */ struct account *next; /**< Pointer to the next node of the * chain */ } account_t; /** 17
18 * Structure defining a node of the likes tree (dendro opadwn) */ typedef struct like { unsigned int aid; /**< The account's identifier that liked * the photo. >0 */ struct like *lc; /**< Pointer to the left child */ struct like *rc; /**< Pointer to the right child */ } like_t; /** * Structure defining a node of the photos binary search tree (dendro * fwtografiwn) */ typedef struct photo { unsigned int pid; /**< The photo identifier. >0 */ unsigned int aid; /**< The uploader's account identifier */ location_e location; /**< The location where this photo * was captured */ unsigned int date; /**< The date the photo was * captured. (YYYYMMDD) */ account_t *tags[max_tags];/**< An array with pointers to the * tagged accounts in this * photo */ like_t *likes; /**< A tree with the accounts that * like the photo */ struct photo *lc; /**< Pointer to the left child of * the photos tree */ struct photo *rc; /**< Pointer to the previous node * of the photos tree */ } photo_t; // For simplicity we define the two major data structures as global variables extern account_t** ahashtable_p; /**< The accounts hashtable * (pinakas katakermatismou * logariasmwn). This is an * array of lists (chains) */ extern int ahashtable_size_g; /**< The size of the accounts * hashtable, parsed from the * command line (>0) */ extern unsigned int max_regs_g; /**< The maximum number of * registrations (accounts) */ extern unsigned int max_id_g; /**< The maximum account ID */ extern photo_t* pbinarytree_p; /**< The photos binary search * tree (dendro fwtografiwn) */ //////////////////////////////////////////////////////////////////////////////// Συμβουλές Για λόγους ευκολότερης αποσφαλμάτωσης του κώδικα που θα δημιουργήσετε, συνίσταται ισχυρά κατά την διαγραφή κόμβων να αναθέτετε την τιμή NULL στους δείκτες του προς διαγραφή στοιχείου. Ακόμη συνίσταται να αναθέτεται την τιμή 0 στα υπόλοιπα πεδία που είναι τύπου (unsigned int). 18
Προγραµµατιστική Εργασία 1 ο Μέρος
ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2013-14 ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία 1 ο Μέρος Ηµεροµηνία Παράδοσης: Παρασκευή, 29 Νοεµβρίου 2013, ώρα 23:59. Τρόπος Παράδοσης:
Διαβάστε περισσότεραMy Instagram Παρουσίαση Α Μέρους Προγραμματιστικής Εργασίας
My Instagram Παρουσίαση Α Μέρους Προγραμματιστικής Εργασίας ΗΥ-240 Χειμερινό Εξάμηνο 2013 Διδάσκουσα: Παναγιώτα Φατούρου This presentation by Foivos S. Zakkak is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος
ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος Ημερομηνία Παράδοσης: Δευτέρα, 15 Μαΐου 2017, ώρα 23:59. Τρόπος Παράδοσης:
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος
ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος Ημερομηνία Παράδοσης: Δευτέρα, 14 Μαΐου 2018, ώρα 23:59 Τρόπος Παράδοσης: Χρησιμοποιώντας
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος
ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος 2014-15 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος Ημερομηνία Παράδοσης: Παρασκευή, 19 Δεκεμβρίου 2014, ώρα 23:59. Τρόπος
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 2 ο Μέρος
ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία 2 ο Μέρος Ημερομηνία Παράδοσης: Κυριακή, 15 Μαίου 2016, ώρα 23:59. Τρόπος Παράδοσης: Χρησιμοποιώντας
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος
ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος Ημερομηνία Παράδοσης: Κυριακή, 1 Απριλίου 2018, ώρα 23:59 Τρόπος Παράδοσης:
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος
Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών, 4 Μαρτίου 2019 ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018-2019 Προγραμματιστική Εργασία - 2o Μέρος Ημερομηνία Παράδοσης: Δευτέρα, 13 Μαϊου
Διαβάστε περισσότεραΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος
ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος Ηµεροµηνία Παράδοσης: Δευτέρα, 3 Απριλίου 2017, ώρα 23:59. Τρόπος Παράδοσης:
Διαβάστε περισσότεραΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 2 ο Μέρος
ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2014-15 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 2 ο Μέρος Ηµεροµηνία Παράδοσης: Κυριακή, 18 Μαΐου 2015, ώρα 23:59. Τρόπος Παράδοσης:
Διαβάστε περισσότεραΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος
ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος Ηµεροµηνία Παράδοσης: Κυριακή, 3 Απριλίου 2016, ώρα 23:59. Τρόπος Παράδοσης:
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος
ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018-2019 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος Ημερομηνία Παράδοσης: Δευτέρα, 1 Απριλίου 2019, ώρα 23:59 Τρόπος Παράδοσης:
Διαβάστε περισσότεραΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος
ΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2016-2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος Ηµεροµηνία Παράδοσης: Δευτέρα, 14 Νοεµβρίου 2016, ώρα 23:59. Τρόπος
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος
ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος 2018-2019 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος Ημερομηνία Παράδοσης: Παρασκευή, 21 Δεκεμβρίου 2018, ώρα 23:59 Τρόπος
Διαβάστε περισσότεραΠρογραµµατιστική Εργασία 2 ο Μέρος
Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών 20 Νοεµβρίου 2012 ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2011-12 ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία 2 ο Μέρος Ηµεροµηνία
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος
ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος 2016-2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος Ημερομηνία Παράδοσης: Δευτέρα, 19 Δεκεμβρίου 2016, ώρα 23:59. Τρόπος
Διαβάστε περισσότεραΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος
Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών 6 εκεµβρίου 2008 ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2008-09 Παναγιώτα Φατούρου Προγραµµατιστική Εργασία 3 ο Μέρος Ηµεροµηνία Παράδοσης:
Διαβάστε περισσότεραΠρογραμματιστική Εργασία Μέρος Β. Δρακωνάκης Κώστας Παπαϊωάννου Αντώνης
Προγραμματιστική Εργασία Μέρος Β Δρακωνάκης Κώστας Παπαϊωάννου Αντώνης Διαδικαστικά Παράδοση: Σάββατο, 19 Δεκεμβρίου 2016, ώρα 23:59 Compile & run σε μηχανήματα της σχολής Μέρος της βαθμολογίας Τρόπος
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος
ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος 2017-2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος Ημερομηνία Παράδοσης: Παρασκευή, 22 Δεκεμβρίου 2017, ώρα 23:59. Τρόπος
Διαβάστε περισσότεραHY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος
HY240 : Δομές Δεδομένων Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος Εισαγωγή Στο 2 ο μέρος της εργασίας θα πρέπει να γίνουν τροποποιήσεις στο πρόγραμμα που προέκυψε κατά την υλοποίηση του
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος 2009-10 Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 2 ο και 3 ο Μέρος
ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος 09- Παναγιώτα Φατούρου Προγραμματιστική Εργασία 2 ο και ο Μέρος Ημερομηνία Παράδοσης: Παρασκευή, 18 Δεκεμβρίου 09, ώρα 08:00 (το πρωί) Τρόπος Παράδοσης:
Διαβάστε περισσότεραΠρογραµµατιστική Εργασία - 2 ο Μέρος
Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών 1 εκεµβρίου 2011 ΗΥ240: οµές εδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2011-12 ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 2 ο Μέρος Ηµεροµηνία
Διαβάστε περισσότεραhttps://csd.uoc.gr/~hy240b/current/submit.php
Project HY240b - 1η Φάση Διδάσκουσα: Παναγιώτα Φατούρου Βοηθός: Νικόλαος Μπατσαράς Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Ηράκλειο, 09 Μαρτίου 2018 Εισαγωγή Διαδικαστικά Θεματολογία Δομές Χρηστών
Διαβάστε περισσότεραΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 1 ο Μέρος
Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών 15 Οκτωβρίου 2008 ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2008-09 Παναγιώτα Φατούρου Προγραµµατιστική Εργασία 1 ο Μέρος Ηµεροµηνία Παράδοσης:
Διαβάστε περισσότεραΔιάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 22: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης - Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου
Διαβάστε περισσότεραΔιάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 7: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου Διδάσκων:
Διαβάστε περισσότεραΠρογραµµατιστική Εργασία 1 ο Μέρος
Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών 4 Νοεµβρίου 2011 ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2011-12 ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία 1 ο Μέρος Ηµεροµηνία
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 1 ο Μέρος
Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών 12 Οκτωβρίου 2012 ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος 2011-12 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία 1 ο Μέρος Ημερομηνία
Διαβάστε περισσότεραΕνότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις
Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε μία αναδρομική συνάρτηση που θα παίρνει ως παράμετρο ένα δείκτη στη ρίζα ενός δυαδικού δένδρου και θα επιστρέφει το βαθμό του
Διαβάστε περισσότεραΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Άσκηση αυτοαξιολόγησης 3-4 Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητες 3 & 4: ένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε
Διαβάστε περισσότεραHY-486 Αρχές Κατανεμημένου Υπολογισμού
HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο 2016-2017 Πρώτη Προγραμματιστική Εργασία Προθεσμία παράδοσης: Τρίτη 2/5 στις 23:59. 1. Γενική Περιγραφή Στην πρώτη προγραμματιστική εργασία καλείστε
Διαβάστε περισσότεραΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 1 ο Μέρος
Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών 12 Οκτωβρίου 2009 ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος 2009-10 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία 1 ο Μέρος Ημερομηνία
Διαβάστε περισσότεραHY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο
HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο 2017-2018 Πρώτη Προγραμματιστική Εργασία Προθεσμία παράδοσης: Δευτέρα 30/4 στις 23:59. 1. Γενική Περιγραφή Στην πρώτη προγραμματιστική εργασία καλείστε
Διαβάστε περισσότεραΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος
ΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2017-2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος Ηµεροµηνία Παράδοσης: Δευτέρα, 20 Νοεµβρίου 2017, ώρα 23:59. Τρόπος
Διαβάστε περισσότεραΔιδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 21: Εισαγωγή σε Δενδρικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Εισαγωγή σε δενδρικές δομές δεδομένων, -Ορισμοί και πράξεις - Αναπαράσταση δενδρικών δομών δεδομένων
Διαβάστε περισσότεραΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία
ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο 2015-2016 Δεύτερη Προγραμματιστική Εργασία Γενική περιγραφή Στη δεύτερη προγραμματιστική εργασία καλείστε να υλοποιήσετε ένα διομότιμο σύστημα (Peer-to-
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 10: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Διαβάστε περισσότεραΔιδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 12: Δέντρα ΙΙ -Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης(ΔΔΑ) - Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου - Εισαγωγή
Διαβάστε περισσότεραΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ
ΠΝΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΣ ΔΔΟΜΝΩΝ ΚΙ ΛΓΟΡΙΘΜΟΙ ΗΜΡΟΜΗΝΙ: 14/11/2018 ΔΙΓΝΩΣΤΙΚΟ ΠΝΩ Σ ΔΝΔΡΙΚΣ ΔΟΜΣ ΚΙ ΓΡΦΟΥΣ Διάρκεια: 45 λεπτά Ονοματεπώνυμο:. ρ. Ταυτότητας:. ΒΘΜΟΛΟΓΙ ΣΚΗΣΗ ΒΘΜΟΣ
Διαβάστε περισσότεραΔομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης
ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης 1. Στόχος του εργαστηρίου Στόχος του δέκατου εργαστηρίου
Διαβάστε περισσότεραΕνότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)
Ενότητα 9 (Union-Find) ΗΥ240 - Παναγιώτα Φατούρου 1 Έστω ότι S 1,, S k είναι ξένα υποσύνολα ενός συνόλου U, δηλαδή ισχύει ότι S i S j =, για κάθε i,j µε i j και S 1 S k = U. Λειτουργίες q MakeSet(X): επιστρέφει
Διαβάστε περισσότεραΔομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητα 8 Ξένα Σύνολα
Διαβάστε περισσότεραΚατ οίκον Εργασία 3 Σκελετοί Λύσεων
Κατ οίκον Εργασία 3 Σκελετοί Λύσεων Άσκηση 1 (α) Έστω Α(n) και Κ(n) ο αριθμός των ακμών και ο αριθμός των κόμβων ενός αυστηρά δυαδικού δένδρου με n φύλλα. Θέλουμε να αποδείξουμε για κάθε n 1 την πρόταση
Διαβάστε περισσότεραΔομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη
Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative
Διαβάστε περισσότεραΕνότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)
Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη (Union-Find) ΗΥ240 - Παναγιώτα Φατούρου 1 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης Έστω ότι S 1,, S k είναι ξένα υποσύνολα ενός συνόλου U, δηλαδή
Διαβάστε περισσότεραΔιάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα
Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου Εισαγωγή στοιχείου
Διαβάστε περισσότεραΔομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής
Ενότητα 5: Δείκτες και Δυναμική Δέσμευση- Αποδέσμευση Μνήμης στη C/ Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με δείκτες /Ένα πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν
Διαβάστε περισσότεραΔομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής
Ενότητα 8: Γραμμική Αναζήτηση και Δυαδική Αναζήτηση-Εισαγωγή στα Δέντρα και Δυαδικά Δέντρα-Δυαδικά Δέντρα Αναζήτησης & Υλοποίηση ΔΔΑ με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΗΥ360 Αρχεία και Βάσεις εδοµένων
ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων:. Πλεξουσάκης Tutorial B-Trees, B+Trees Μπαριτάκης Παύλος 2018-2019 Ιδιότητες B-trees Χρήση για μείωση των προσπελάσεων στον δίσκο Επέκταση των Binary Search Trees
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα
Διάλεξη Ε7: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Hashing, Final Exam Διδάσκων: Κωνσταντίνος Κώστα ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. Ε7-1
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα
Διάλεξη Ε4: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, Δυαδικά Δένδρα Αναζήτησης Ισοζυγισμένα Δένδρα & 2-3 Δένδρα Διδάσκων: Κωνσταντίνος
Διαβάστε περισσότεραHY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο
HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο 2016-2017 Δέυτερη Προγραμματιστική Εργασία Προθεσμία παράδοσης: 19/6/2017 1. Γενική Περιγραφή Στην δεύτερη προγραμματιστική εργασία καλείστε να υλοποιήσετε
Διαβάστε περισσότεραΔυαδικά Δένδρα Αναζήτησης, Δένδρα AVL
Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Υλικό από τις σηµειώσεις Ν. Παπασπύρου, 2006 Δέντρα δυαδικής αναζήτησης Δενδρικές δοµές δεδοµένων στις οποίες Όλα τα στοιχεία στο αριστερό υποδέντρο της ρίζας είναι
Διαβάστε περισσότεραΠρογραμματισμός Δομές Δεδομένων
Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων (Data Structures) Καινούργιοι τύποι δεδομένων που αποτελούνται από την ομαδοποίηση υπαρχόντων τύπων δεδομένων Ομαδοποίηση πληροφορίας που
Διαβάστε περισσότεραAVL-trees C++ implementation
Τ Μ Η Μ Α Μ Η Χ Α Ν Ι Κ Ω Ν Η / Υ Κ Α Ι Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ AVL-trees C++ implementation Δομές Δεδομένων Μάριος Κενδέα 31 Μαρτίου 2015 kendea@ceid.upatras.gr Εισαγωγή (1/3) Δυαδικά Δένδρα Αναζήτησης:
Διαβάστε περισσότεραΕνότητα 6: Κατακερματισμός Ασκήσεις και Λύσεις
ΗΥ2, Ενότητα : Ασκήσεις και Λύσεις Ενότητα : Κατακερματισμός Ασκήσεις και Λύσεις Άσκηση 1 Χρησιμοποιήστε τη συνάρτηση κατακερματισμού της διαίρεσης ως πρωτεύουσα συνάρτηση κατακερματισμού και τη συνάρτηση
Διαβάστε περισσότεραένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.
ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ ΗΥ240 - Παναγιώτα Φατούρου 1 ένδρα Κόµβοι (nodes) Ακµές (edges) Ουρά και κεφαλή ακµής (tail, head) Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) Μονοπάτι (path) Πρόγονος απόγονος
Διαβάστε περισσότεραΠανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 6. Δυαδικά Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 18/11/2016 Εισαγωγή Τα
Διαβάστε περισσότεραΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 4η: Σύνολα - Λεξικά Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Ενότητα 4η: Σύνολα - Λεξικά Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ ΗΥ240 - Παναγιώτα Φατούρου 2 Σύνολα (Sets) Τα
Διαβάστε περισσότεραΔομές δεδομένων. Ενότητα 5η: Υλοποίηση Λεξικών με Ισοζυγισμένα Δένδρα Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Ενότητα 5η: Υλοποίηση Λεξικών με Ισοζυγισμένα Δένδρα Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών ΕΝΟΤΗΤΑ 5 ΥΛΟΠΟΙΗΣΗ ΛΕΞΙΚΩΝ ΜΕ ΙΣΟΖΥΓΙΣΜΕΝΑ ΔΕΝΔΡΑ
Διαβάστε περισσότεραΔιάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) - Σύγκριση Συνδεδεμένων Λιστών με Πίνακες
Διαβάστε περισσότεραΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 23: οµές εδοµένων και Αλγόριθµοι Ενδιάµεση Εξέταση Ηµεροµηνία : ευτέρα, 3 Νοεµβρίου 2008 ιάρκεια : 2.00-4.00 ιδάσκουσα : Άννα Φιλίππου Ονοµατεπώνυµο: ΣΚΕΛΕΤΟΙ
Διαβάστε περισσότεραProject HY240a - 1η Φάση Διδάσκουσα: Παναγιώτα Φατούρου Βοηθός: Νικόλαος Μπατσαράς Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Ηράκλειο, 24 Οκτωβρίου 2018 Διαδικαστικά Θεματολογία Δομές Μεγάλου Αλεξάνδρου
Διαβάστε περισσότεραΘεωρητικό Μέρος. 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); } }
Πανεπιστήµιο Ιωαννίνων, Τµήµα Πληροφορικής 2 Νοεµβρίου 2005 Η/Υ 432: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκού Έτους 2005-2006 Παναγιώτα Φατούρου Ηµεροµηνία Παράδοσης 1 ο Σετ Ασκήσεων Θεωρητικό Μέρος:
Διαβάστε περισσότεραΔομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα
Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό
Διαβάστε περισσότεραΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητα 7 Ουρές Προτεραιότητας ΗΥ240 - Παναγιώτα Φατούρου 2 Ουρές
Διαβάστε περισσότεραΔιάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 26: Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας -Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι
Διαβάστε περισσότεραΟντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές
Διαβάστε περισσότεραΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ
ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ ΗΥ240 - Παναγιώτα Φατούρου Σύνολα (Sets) Τα µέλη ενός συνόλου προέρχονται από κάποιο χώρο U αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών αποτελούµενων από έναν
Διαβάστε περισσότεραInsert(K,I,S) Delete(K,S)
ΕΝΟΤΗΤΑ 5 ΣΥΝΟΛΑ & ΛΕΞΙΚΑ Φατούρου Παναγιώτα 1 Σύνολα (Sets) Τα µέλη ενός συνόλου προέρχονται από κάποιο χώρο αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών αποτελούµενα από έναν αριθµό και
Διαβάστε περισσότεραΔομές Δεδομένων. Ενότητα 13: B-Δέντρα/AVL-Δέντρα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων
Ενότητα 13: B-Δέντρα/AVL-Δέντρα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε
Διαβάστε περισσότεραΣτοίβες με Δυναμική Δέσμευση Μνήμης
ΕΠΛ 231 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ 10/02/10 Παύλος Αντωνίου Στοίβες με Δυναμική Δέσμευση Μνήμης Στοίβα: Στοίβα είναι μια λίστα που έχει ένα επιπλέον περιορισμό. Ο περιορισμός είναι ότι οι εισαγωγές
Διαβάστε περισσότεραΔιάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ισοζυγισμένα Δέντρα Υλοποίηση AVL δέντρων Εισαγωγή Κόμβων και Περιστροφές σε AVL δέντρα
Διαβάστε περισσότεραΔιαχρονικές δομές δεδομένων
Διαχρονικές δομές δεδομένων Μια τυπική δομή δεδομένων μεταβάλλεται με πράξεις εισαγωγής ή διαγραφής Π.χ. κοκκινόμαυρο δένδρο εισαγωγή 0 18 0 5 39 73 1 46 6 80 Αποκατάσταση ισορροπίας 5 39 73 0 46 6 80
Διαβάστε περισσότεραΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών Ακαδηµαϊκό έτος 2010 2011, Χειµερινό εξάµηνο Ασκήσεις Επανάληψης Ενδιάµεσης
Διαβάστε περισσότεραΠληροφορική 2. Δομές δεδομένων και αρχείων
Πληροφορική 2 Δομές δεδομένων και αρχείων 1 2 Δομή Δεδομένων (data structure) Δομή δεδομένων είναι μια συλλογή δεδομένων που έχουν μεταξύ τους μια συγκεκριμένη σχέση Παραδείγματα δομών δεδομένων Πίνακες
Διαβάστε περισσότεραΚατ οίκον Εργασία 3 Σκελετοί Λύσεων
Άσκηση 1 Χρησιµοποιούµε τη δοµή Κατ οίκον Εργασία 3 Σκελετοί Λύσεων typedef struct Node int data; struct node *lchild; struct node *rbro; node; και υποθέτουµε πως ένα τυχαίο δένδρο είναι υλοποιηµένο ως
Διαβάστε περισσότεραΑλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες
Διαβάστε περισσότεραΔιασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1
Διασυνδεδεμένες Δομές Λίστες Προγραμματισμός II 1 lalis@inf.uth.gr Διασυνδεδεμένες δομές Η μνήμη ενός πίνακα δεσμεύεται συνεχόμενα η πρόσβαση στο i-οστό στοιχείο είναι άμεση καθώς η διεύθυνση του είναι
Διαβάστε περισσότεραΆσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).
Κ08 Δομές Δεδομένων και Τεχνικές Προγραμματισμού Διδάσκων: Μανόλης Κουμπαράκης Εαρινό Εξάμηνο 2016-2017. Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).
Διαβάστε περισσότεραΠΛΗ111. Ανοιξη 2005. Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης
ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 7 ο έντρο Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης έντρο Ορισµός Υλοποίηση µε Πίνακα Υλοποίηση µε είκτες υαδικό έντρο
Διαβάστε περισσότεραΕργασία 3 Σκελετοί Λύσεων
Εργασία 3 Σκελετοί Λύσεων Άσκηση 1 Χρησιμοποιούμε τη δομή typedef struct TNode{ int key; struct TNode *left; struct TNode *right; tnode; και υποθέτουμε πως ένα δυαδικό δένδρο είναι υλοποιημένο ως δείκτης
Διαβάστε περισσότεραΔένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, ορισμοί, πράξεις και αναπαράσταση στη μνήμη ΔυαδικάΔένδρακαιΔυαδικάΔένδραΑναζήτησης ΕΠΛ 231 Δομές
Διαβάστε περισσότεραΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 035: Δομές Δεδομένων και Αλγόριθμοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών Χειμερινό Εξάμηνο 2012 ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης
Διαβάστε περισσότεραΕργαστήριο 2 Δυναμικές Δομές Δεδομένων Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι
Μεταγλωττιστές Εργαστήριο 2 Δυναμικές Δομές Δεδομένων Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι 2015-1016 Δομές Δεδομένων Μια δομή δεδομένων είναι μια συλλογή δεδομένων με κάποιες ιδιότητες
Διαβάστε περισσότεραΔιδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 23: Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ισοζυγισμένα Δέντρα - Υλοποίηση AVL-δέντρων - Εισαγωγή Κόμβων και Περιστροφές σε AVL δέντρα Διδάσκων:
Διαβάστε περισσότεραΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ Μια ουρά αποτελεί μια δομή δεδομένων στη λογική του First-in
Διαβάστε περισσότεραΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων
ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Εξεταστική Ιανουαρίου 2014 Διδάσκων : Ευάγγελος Μαρκάκης 20.01.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες και
Διαβάστε περισσότεραΔιασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1
Διασυνδεδεμένες Δομές Δυαδικά Δέντρα Προγραμματισμός II 1 lalis@inf.uth.gr Δέντρα Τα δέντρα είναι κλασικές αναδρομικές δομές Ένα δέντρο αποτελείται από υποδέντρα, καθένα από τα οποία μπορεί να θεωρηθεί
Διαβάστε περισσότεραΔομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Δομές Δεδομένων Δέντρα Αναζήτησης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Το πρόβλημα Αναζήτηση Θέλουμε να διατηρήσουμε αντικείμενα με κλειδιά και να μπορούμε εκτός από
Διαβάστε περισσότεραΕνότητα 7 Ουρές Προτεραιότητας
Ενότητα Ουρές Προτεραιότητας ΗΥ4 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type). Έστω
Διαβάστε περισσότεραΔομές Δεδομένων και Αλγόριθμοι
Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 19 Hashing - Κατακερματισμός 1 / 23 Πίνακες απευθείας πρόσβασης (Direct Access Tables) Οι πίνακες απευθείας
Διαβάστε περισσότεραΟργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο
Κατακερµατισµός 1 Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο 1. Αρχεία Σωρού 2. Ταξινοµηµένα Αρχεία Φυσική διάταξη των εγγραφών
Διαβάστε περισσότεραΔιάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ισοζυγισμένα Δέντρα - Υλοποίηση AVL-δέντρων
Διαβάστε περισσότεραΕργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά
EPL231: Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά Αναδρομή Η αναδρομή εμφανίζεται όταν μία διεργασία καλεί τον εαυτό της Υπάρχουν
Διαβάστε περισσότεραΔιάλεξη 21η: Απλά Συνδεδεμένες Λίστες
Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 1 / 10 Δομές δεδομένων Ορισμός:
Διαβάστε περισσότεραSlide 6 / 43. Slide 5 / 43. Α. Σαββίδης. Α. Σαββίδης. Slide 8 / 43. Slide 7 / 43. Α. Σαββίδης. Α. Σαββίδης HY340, 2009 HY340, 2009 HY340, 2009
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 3 ο Symbol Table ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης Slide
Διαβάστε περισσότεραΟι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες
Δομές δεδομένων Πίνακες Οι πίνακες είναι το πιο απλό «μέσο» αποθήκευσης ομοειδούς πληροφορίας. Χρησιμοποιούν ακριβώς όση μνήμη χρειάζεται για την αποθήκευση της πληροφορίας Επιτρέπουν την προσπέλαση άμεσα
Διαβάστε περισσότεραΕισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων κλειδί από ολικά διατεταγμένο σύνολο όπου το κάθε στοιχείο έχει ένα Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου με
Διαβάστε περισσότεραΜάθημα 22: Δυαδικά δέντρα (Binary Trees)
Trees Page 1 Μάθημα 22: Δυαδικά δέντρα (Binary Trees) Ένα δένδρο είναι δυαδικό αν όλοι οι κόμβοι του έχουν βαθμό (degree)
Διαβάστε περισσότερα