Project Phase II - csd.uoc.grhy240a/old_websites/hy240b-2017-2018/material/...Anaz€thsh,...
Transcript of Project Phase II - csd.uoc.grhy240a/old_websites/hy240b-2017-2018/material/...Anaz€thsh,...
Project Phase II
ΗΥ-240 – Δομές Δεδομένων
Διδάσκουσα: Παναγιώτα Φατούρου
Ιάκωβος Γ. Κολοκάσης
21 Απριλίου 2018
Τμήμα Επιστήμης Υπολογιστών
Πανεπιστήμιο Κρήτης
Περιεχόμενα
1. Εισαγωγή
2. Περιγραφή Δομών
3. Δομές Χρηστών
4. Πίνακας Κατακερματισμού Tweets
5. Γεγονότα
6. Είδη Γεγονότων
ΗΥ-240 – Δομές Δεδομένων 1 of 69 [email protected]
Εισαγωγή
Πληροφορίες
• Ιστοσελίδα Μαθήματος: http://www.csd.uoc.gr/∼hy240b
• Τρόπος Παράδοσης: Με το πρόγραμμα turnin
• Ημερομηνία Παράδοση: Δευτέρα 14 Μαϊου 2018, ώρα 23:59• Διαθέσιμες Υλοποιήσεις: C/C++ / JAVA
• Ερωτήσεις/Διευκρινήσεις: [email protected]
• ΠΡΟΣΟΧΗ: Compile / Run στα μηχανήματα της σχολής
ΗΥ-240 – Δομές Δεδομένων 2 of 69 [email protected]
Θεματολογία
Αντίστοιχα με την 1η Φάση έχουμε:
• Χρήστες που στέλνουν και διαβάζουν σύντομα μηνύματα,τα οποία ονομάζονται τουίτς (tweets)
• Ο κάθε χρήστης μπορεί να ακολουθεί (follow) άλλους
χρήστες με σκοπό να εμφανίζονται τα tweets τους στην
περιοχή του (Wall)
ΗΥ-240 – Δομές Δεδομένων 3 of 69 [email protected]
Θεματολογία
΄Εχουμε λοιπόν δύο βασικές οντότητες:
1. Χρήστες
2. Tweets
ΗΥ-240 – Δομές Δεδομένων 4 of 69 [email protected]
Περιγραφή Δομών
Γνωστικό Αντικείμενο
Οι γνώσεις που θα χρειαστούν για την υλοποίηση της 2ης φάσης
της εργασίας, μεταξύ άλλων, είναι οι εξής:
• Δυαδικά Δέντρα Αναζήτησης (Δ.Δ.Α)• Αναζήτηση, Εισαγωγή, Διαγραφή• Διάσχιση ταξινομημένου Δ.Δ.Α• Κόμβοι φρουροί
• Εμπλουτισμένα Φυλλοπροσανατολισμένα Δ.Δ.Α• Αναζήτηση, Εισαγωγή, Διαγραφή, Διάσχιση
• Πίνακες Κατακερματισμού• Τεχνική Διπλού κατακερματισμού με ανοικτήδιευθυνσιοδότηση (double hashing) (για την επίληση
συγκρούσεων)
ΗΥ-240 – Δομές Δεδομένων 5 of 69 [email protected]
Ιδέα
Η εργασία αποτελείται από 2 ομάδες δομών:
1. Δομές που αφορούν τους χρήστες
2. Δομές που αφορούν τα tweets
ΗΥ-240 – Δομές Δεδομένων 6 of 69 [email protected]
Δομές Χρηστών
Γενικά
Οι δομές χρηστών οργανώνονται ως εξής:
• Οι χρήστες αποθηκεύονται σε ένα διπλά συνδεδεμένοδυαδικό δένδρο αναζήτησης, με κόμβο φρουρό ταξινομημένο
με βάση το αναγνωριστίκό του χρήστη
• Ο κάθε χρήστης είναι ένα αντικείμενο τύπου struct Tree user
ΗΥ-240 – Δομές Δεδομένων 7 of 69 [email protected]
Γενικά
• Κάθε χρήστης περιέχει ένα δείκτη που δείχνει στον κόμβορίζα ενός απλού δυαδικού δένδρου αναζήτησης, που
ονομάζεται δένδρο οπαδών (followers)
• Κάθε χρήστης περιέχει ένα δείκτη που δείχνει στον κόμβορίζα ενός εμπλουτισμένου φυλλοπροσανατολισμένου
δένδρου δυαδικής αναζήτησης, που ονομάζεται δένδρο των
tweets (Wall)
ΗΥ-240 – Δομές Δεδομένων 8 of 69 [email protected]
Δομή Χρηστών
uid Αναγνωριστικό χρήστη (int)
followers R Δείκτης που δείχνει στον κόμβο ρίζα ενός απλού
δυαδικού δένδρου αναζήτης (struct follower *)
wall R Δείκτης που δείχνει στον κόμβο ρίζα ενός εμπλου-
τισμένου φυλλοπροσανατολισμένου δένδρου δυα-
δικής αναζήτης (struct tweet *)
p node Δείκτης προς τον γονικό κόμβο (struct user*)
lc Δείκτης στο αριστερό θυγατρικό κόμβο (struct u-
ser*)
rc Δείκτης στο δεξί θυγατρικό κόμβο (struct user*)
ΗΥ-240 – Δομές Δεδομένων 9 of 69 [email protected]
Δομή Οπαδών – Followers
uid Αναγνωριστικό χρήστη / οπαδού (int)
lc Δείκτης στο αριστερό θυγατρικό κόμβο (struct follower*)
rc Δείκτης στο δεξί θυγατρικό κόμβο (struct follower*)
ΗΥ-240 – Δομές Δεδομένων 10 of 69 [email protected]
Δομή Tweets – Wall
tid Αναγνωριστικό tweet (int)
uid Αναγνωριστικό χρήστη που δημοσίευσε το tweet
(int)
timestamp Ακέραιος που αντιστοιχεί στην ημερομηνία δημο-
σίευσης του tweet (int)
lc Δείκτης στο αριστερό θυγατρικό κόμβο (struct tw-
eet*)
rc Δείκτης στο δεξί θυγατρικό κόμβο (struct tweet*)
next Δείκτης προς το επόμενο φύλλο (struct tweet*)
ΗΥ-240 – Δομές Δεδομένων 11 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 12 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 13 of 69 [email protected]
Πίνακας Κατακερματισμού
Tweets
Γενικά
Ο πίνακας κατακερματισμού των tweets οργανώνεται ως εξής:
• Αποθηκεύει όλα τα tweets που υπάρχουν στο σύστημα
• Η επίλυση των συγκρούσεων γίνεται βάσει της τεχνικής τουδιπλού κατακερματισμού με ανοικτή διευθυνσιοδότηση
• Οι συναρτήσεις κατακερματισμού που θα χρησιμοποιήσετεείναι:
Hash Functions
h1(x) = x % size of hashTable
h2(x) = x2 % size of hashTable
• Ο μέγιστος πλήθος tweets που μπορεί να υπάρξουν στο
σύστημα είναι 1000
ΗΥ-240 – Δομές Δεδομένων 14 of 69 [email protected]
Πίνακας Κατακερματισμού Tweets
tid Αναγνωριστικό tweet (int)
uid Αναγνωριστικό χρήστη που δημοσίευσε το tweet
(int)
timestamp Ακέραιος που αντιστοιχεί στην ημερομηνία δημο-
σίευσης του tweet (int)
remove ΄Ενα bit το οποίο υποδηλώνει αν το tweet έχει δια-
γραφεί ή όχι (char)
ΗΥ-240 – Δομές Δεδομένων 15 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 16 of 69 [email protected]
Γεγονότα
Ιδέα
΄Ενα γεγονός αποτελεί μία ενέργεια που εκτελείται μέσα στο
σύστημά μας. Για παράδειγμα :
• Εισαγωγή ενός χρήστη• Ανάρτηση ενός τωεετ• κ.τ.λ.
ΗΥ-240 – Δομές Δεδομένων 17 of 69 [email protected]
Αρχεία Γεγονότων
• Τα γεγονότα αυτά είναι καταχωρημένα σε κάποια αρχεία(test files)
• Τα αρχεία υπάρχουν στη σελίδα του μαθήματος• Το πρόγραμμα κάνει parse αυτά τα αρχεία και εκτελεί τη
συνάρτηση που αντιστοιχεί στο εκάστοτε γεγονός
• Δεν χρειάζεται να γραφτεί επιπλέον κώδικας για τοχειρισμό των γεγονότων
• Το μόνο που απουσιάζει είναι η υλοποίηση τωνσυναρτήσεων
ΗΥ-240 – Δομές Δεδομένων 18 of 69 [email protected]
Μορφή Γεγονότος
΄Ενα γεγονός έχει την εξής μορφή:
event id [arithmetic arguments [...]]
ΗΥ-240 – Δομές Δεδομένων 19 of 69 [email protected]
Είδη Γεγονότων
Register
Εισαγωγή ενός νέου χρήστη στο σύστημα
R uid
Ορίσματα:
uid Αναγνωριστικό του νέου χρήστη
ΗΥ-240 – Δομές Δεδομένων 20 of 69 [email protected]
Register
Κατά το γεγονός αυτό:
1. Θα γίνει εισαγωγή ενός νέου χρήστη με αναγνωριστικό
[uid ] στο δένδρο χρηστών
2. Προσοχή: Μετά από κάθε εισαγωγή, το δένδρο χρηστών
πρέπει να παραμένει ταξινομημένο
ΗΥ-240 – Δομές Δεδομένων 21 of 69 [email protected]
Subscribe
Εγγραφή του χρήστη με αναγνωριστικό [uid2] στο δένδρο των
followers του χρήστη με αναγνωριστικό [uid1]
Subscribe
S uid1 uid2
Ορίσματα :
uid1 Αναγνωριστικό του χρήστη που έλα-
βε ένα νέο follower
uid2 Αναγνωριστικό χρήστη που κάνει fol-
low
ΗΥ-240 – Δομές Δεδομένων 22 of 69 [email protected]
Subscribe
Κατά το γεγονός αυτό:
1. Αναζητούμε στο δένδρο χρηστών, το χρήστη με
αναγνωριστικό uid1
2. Εισάγουμε στο δένδρο των followers ένα νέο κόμβο με
αναγνωριστικό uid2
3. Προσοχή: Μετά από κάθε εισαγωγή, το δένδρο των
followers θα πρέπει να παραμένει ταξινομημένο
ΗΥ-240 – Δομές Δεδομένων 23 of 69 [email protected]
Tweet
Δημοσίευση ενός tweet με αναγνωριστικό tid από τον χρήστη με
αναγνωριστικό uid
Tweet
T uid tid timestamp
Ορίσματα :
uid Αναγνωριστικό του χρήστη που δημοσίευσε
το tweet
tid Αναγνωριστικό του tweet
timestamp Χρονική στιγμή στην οποία δημοσιεύτηκε το
tweet
ΗΥ-240 – Δομές Δεδομένων 24 of 69 [email protected]
Tweet
Κατά το γεγονός αυτό:
1. Αναζητάμε στο δένδρο χρηστών το χρήστη με
αναγνωριστικό uid
2. Εισάγουμε στο δένδρο των tweets του, ένα νέο κόμβο με
αναγνωριστικό tid
3. Διατρέχουμε το δένδρο των followers του χρήστη αυτού και
για κάθε κόμβο στο δένδρο:
3.1 Αναζητούμε το χρήστη με το τρέχον uid στο δένδρο χρηστών
3.2 Αφού τον εντοπίσουμε, εισάγουμε στη δένδρο των tweets
του, ένα νέο κόμβο με αναγνωριστικό tid
3.3 Προσοχή: Η διαδικασία αυτή θα πρέπει να ολοκληρώνεται
σε χρόνο O(n), όπου n το πλήθος των κόμβων στο δένδρο
χρηστών
4. Τέλος, εισάγουμε και μια νέα εγγραφή στον πίνακα
κατακερματισμού των tweetsΗΥ-240 – Δομές Δεδομένων 25 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 27 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 28 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 29 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 30 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 31 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 32 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 33 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 34 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 35 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 36 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 37 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 38 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 39 of 69 [email protected]
Unsubscribe
Διαγραφή του χρήστη με αναγνωριστικό uid2 από τη λίστα των
followers του χρήστη με αναγνωριστικό uid1
Unsubsribe
U uid1 uid2
Ορίσματα :
uid1 Αναγνωριστικό του χρήστη που έχασε ένα follower
uid2 Αναγνωριστικό του χρήστη που κάνει unsubscribe
ΗΥ-240 – Δομές Δεδομένων 40 of 69 [email protected]
Unsubscribe
Κατά το γεγονός αυτό:
1. Αναζητούμε στο δένδρο χρηστών το χρήστη με
αναγνωριστικό uid1
2. Αφαιρούμε από το δένδρο των followers τον κόμβο με
αναγνωριστικό uid2
3. Αναζητούμε στο δένδρο χρηστών το χρήστη με
αναγνωριστικό uid2
4. Διατρέχουμε το δένδρο των tweets του χρήστη με
αναγνωριστικό uid2
5. Αφαιρούμε από αυτή τους κόμβους που έχουν το πεδίο uid
ίσο με uid1
ΗΥ-240 – Δομές Δεδομένων 41 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 43 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 44 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 45 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 46 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 47 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 48 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 49 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 50 of 69 [email protected]
Delete
Διαγραφή του χρήστη με αναγνωριστικό uid από το σύστημα
Delete
D uid
Ορίσματα:
uid Αναγνωριστικό του χρήστη προς δια-
γραφή
ΗΥ-240 – Δομές Δεδομένων 51 of 69 [email protected]
Delete
Κατά το γεγονός αυτό:
1. Αναζητούμε στο δένδρο χρηστών το χρήστη με
αναγνωριστικό uid
2. Διαγράφουμε όλα τα στοιχεία του δένδρου των tweets
αυτού του χρήστη
3. Διατρέχουμε το δένδρο των οπαδών και για κάθε κόμβο:
3.1 Καλούμε κατάλληλα τη συνάρτηση που υλοποιεί το γεγονός
unsubscribe
4. Διαγράφουμε από το δένδρο χρηστών το χρήστη με
αναγνωριστικό uid
5. Τέλος διαγράφουμε όλα τα tweets του χρήστη με
αναγνωριστικό uid από τον πίνακα κατακερματισμού των
tweets θέτοντας το πεδίο remove = true
ΗΥ-240 – Δομές Δεδομένων 52 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 54 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 55 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 56 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 57 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 58 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 59 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 60 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 61 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 62 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 63 of 69 [email protected]
ΗΥ-240 – Δομές Δεδομένων 64 of 69 [email protected]
History
Αναζήτηση των tweets που έχει δημοσιεύσει ο χρήστης με
αναγνωριστικό uid μεταξύ των ημερομηνιών date1 date2
History
H uid date1 date2
Ορίσματα:
uid Αναγνωριστικό του χρήστη
date1 Αρχική ημερομηνία
date2 Τελική ημερομηνία
ΗΥ-240 – Δομές Δεδομένων 65 of 69 [email protected]
History
Κατά το γεγονός αυτό:
• Αναζητούμε στο δένδρο χρηστών το χρήστη μεαναγνωριστικό uid
• Αναζητούμε στο δένδρο των tweets του χρήστη το tweet που
έχει ημερομηνία ίση ή ακριβώς μεγαλύτερη από date1
• Διατρέχουμε και εκτυπώνουμε όλα τα tweets που είναι
μεταξύ του διαστήματος date1 και date2 μέσω των next
δεικτών
ΗΥ-240 – Δομές Δεδομένων 66 of 69 [email protected]
Look Up
Αναζήτηση ενός tweet με αναγνωριστικό tid στον πίνακα
κατακερματισμού των tweets
Look Up
L tid
Ορίσματα:
tid Αναγνωριστικό του tweet
ΗΥ-240 – Δομές Δεδομένων 67 of 69 [email protected]
Print Users
Εκτύπωση όλων των χρηστών από το δέντρο χρηστών
Print all Users
X
ΗΥ-240 – Δομές Δεδομένων 68 of 69 [email protected]
Print Tweets
Εκτύπωση όλων των tweets από τον πίνακα κατακερματισμού
Tweets
Print all Tweets
Y
ΗΥ-240 – Δομές Δεδομένων 69 of 69 [email protected]
Thanks!
ΗΥ-240 – Δομές Δεδομένων 69 of 69 [email protected]