Project Phase II - csd.uoc.grhy240a/old_websites/hy240b-2017-2018/material/...Anaz€thsh,...

Post on 13-Oct-2019

7 views 0 download

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 kolokasis@csd.uoc.gr

Εισαγωγή

Πληροφορίες

• Ιστοσελίδα Μαθήματος: http://www.csd.uoc.gr/∼hy240b

• Τρόπος Παράδοσης: Με το πρόγραμμα turnin

• Ημερομηνία Παράδοση: Δευτέρα 14 Μαϊου 2018, ώρα 23:59• Διαθέσιμες Υλοποιήσεις: C/C++ / JAVA

• Ερωτήσεις/Διευκρινήσεις: hy240b-list@csd.uoc.gr

• ΠΡΟΣΟΧΗ: Compile / Run στα μηχανήματα της σχολής

ΗΥ-240 – Δομές Δεδομένων 2 of 69 kolokasis@csd.uoc.gr

Θεματολογία

Αντίστοιχα με την 1η Φάση έχουμε:

• Χρήστες που στέλνουν και διαβάζουν σύντομα μηνύματα,τα οποία ονομάζονται τουίτς (tweets)

• Ο κάθε χρήστης μπορεί να ακολουθεί (follow) άλλους

χρήστες με σκοπό να εμφανίζονται τα tweets τους στην

περιοχή του (Wall)

ΗΥ-240 – Δομές Δεδομένων 3 of 69 kolokasis@csd.uoc.gr

Θεματολογία

΄Εχουμε λοιπόν δύο βασικές οντότητες:

1. Χρήστες

2. Tweets

ΗΥ-240 – Δομές Δεδομένων 4 of 69 kolokasis@csd.uoc.gr

Περιγραφή Δομών

Γνωστικό Αντικείμενο

Οι γνώσεις που θα χρειαστούν για την υλοποίηση της 2ης φάσης

της εργασίας, μεταξύ άλλων, είναι οι εξής:

• Δυαδικά Δέντρα Αναζήτησης (Δ.Δ.Α)• Αναζήτηση, Εισαγωγή, Διαγραφή• Διάσχιση ταξινομημένου Δ.Δ.Α• Κόμβοι φρουροί

• Εμπλουτισμένα Φυλλοπροσανατολισμένα Δ.Δ.Α• Αναζήτηση, Εισαγωγή, Διαγραφή, Διάσχιση

• Πίνακες Κατακερματισμού• Τεχνική Διπλού κατακερματισμού με ανοικτήδιευθυνσιοδότηση (double hashing) (για την επίληση

συγκρούσεων)

ΗΥ-240 – Δομές Δεδομένων 5 of 69 kolokasis@csd.uoc.gr

Ιδέα

Η εργασία αποτελείται από 2 ομάδες δομών:

1. Δομές που αφορούν τους χρήστες

2. Δομές που αφορούν τα tweets

ΗΥ-240 – Δομές Δεδομένων 6 of 69 kolokasis@csd.uoc.gr

Δομές Χρηστών

Γενικά

Οι δομές χρηστών οργανώνονται ως εξής:

• Οι χρήστες αποθηκεύονται σε ένα διπλά συνδεδεμένοδυαδικό δένδρο αναζήτησης, με κόμβο φρουρό ταξινομημένο

με βάση το αναγνωριστίκό του χρήστη

• Ο κάθε χρήστης είναι ένα αντικείμενο τύπου struct Tree user

ΗΥ-240 – Δομές Δεδομένων 7 of 69 kolokasis@csd.uoc.gr

Γενικά

• Κάθε χρήστης περιέχει ένα δείκτη που δείχνει στον κόμβορίζα ενός απλού δυαδικού δένδρου αναζήτησης, που

ονομάζεται δένδρο οπαδών (followers)

• Κάθε χρήστης περιέχει ένα δείκτη που δείχνει στον κόμβορίζα ενός εμπλουτισμένου φυλλοπροσανατολισμένου

δένδρου δυαδικής αναζήτησης, που ονομάζεται δένδρο των

tweets (Wall)

ΗΥ-240 – Δομές Δεδομένων 8 of 69 kolokasis@csd.uoc.gr

Δομή Χρηστών

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 kolokasis@csd.uoc.gr

Δομή Οπαδών – Followers

uid Αναγνωριστικό χρήστη / οπαδού (int)

lc Δείκτης στο αριστερό θυγατρικό κόμβο (struct follower*)

rc Δείκτης στο δεξί θυγατρικό κόμβο (struct follower*)

ΗΥ-240 – Δομές Δεδομένων 10 of 69 kolokasis@csd.uoc.gr

Δομή 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 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 12 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 13 of 69 kolokasis@csd.uoc.gr

Πίνακας Κατακερματισμού

Tweets

Γενικά

Ο πίνακας κατακερματισμού των tweets οργανώνεται ως εξής:

• Αποθηκεύει όλα τα tweets που υπάρχουν στο σύστημα

• Η επίλυση των συγκρούσεων γίνεται βάσει της τεχνικής τουδιπλού κατακερματισμού με ανοικτή διευθυνσιοδότηση

• Οι συναρτήσεις κατακερματισμού που θα χρησιμοποιήσετεείναι:

Hash Functions

h1(x) = x % size of hashTable

h2(x) = x2 % size of hashTable

• Ο μέγιστος πλήθος tweets που μπορεί να υπάρξουν στο

σύστημα είναι 1000

ΗΥ-240 – Δομές Δεδομένων 14 of 69 kolokasis@csd.uoc.gr

Πίνακας Κατακερματισμού Tweets

tid Αναγνωριστικό tweet (int)

uid Αναγνωριστικό χρήστη που δημοσίευσε το tweet

(int)

timestamp Ακέραιος που αντιστοιχεί στην ημερομηνία δημο-

σίευσης του tweet (int)

remove ΄Ενα bit το οποίο υποδηλώνει αν το tweet έχει δια-

γραφεί ή όχι (char)

ΗΥ-240 – Δομές Δεδομένων 15 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 16 of 69 kolokasis@csd.uoc.gr

Γεγονότα

Ιδέα

΄Ενα γεγονός αποτελεί μία ενέργεια που εκτελείται μέσα στο

σύστημά μας. Για παράδειγμα :

• Εισαγωγή ενός χρήστη• Ανάρτηση ενός τωεετ• κ.τ.λ.

ΗΥ-240 – Δομές Δεδομένων 17 of 69 kolokasis@csd.uoc.gr

Αρχεία Γεγονότων

• Τα γεγονότα αυτά είναι καταχωρημένα σε κάποια αρχεία(test files)

• Τα αρχεία υπάρχουν στη σελίδα του μαθήματος• Το πρόγραμμα κάνει parse αυτά τα αρχεία και εκτελεί τη

συνάρτηση που αντιστοιχεί στο εκάστοτε γεγονός

• Δεν χρειάζεται να γραφτεί επιπλέον κώδικας για τοχειρισμό των γεγονότων

• Το μόνο που απουσιάζει είναι η υλοποίηση τωνσυναρτήσεων

ΗΥ-240 – Δομές Δεδομένων 18 of 69 kolokasis@csd.uoc.gr

Μορφή Γεγονότος

΄Ενα γεγονός έχει την εξής μορφή:

event id [arithmetic arguments [...]]

ΗΥ-240 – Δομές Δεδομένων 19 of 69 kolokasis@csd.uoc.gr

Είδη Γεγονότων

Register

Εισαγωγή ενός νέου χρήστη στο σύστημα

R uid

Ορίσματα:

uid Αναγνωριστικό του νέου χρήστη

ΗΥ-240 – Δομές Δεδομένων 20 of 69 kolokasis@csd.uoc.gr

Register

Κατά το γεγονός αυτό:

1. Θα γίνει εισαγωγή ενός νέου χρήστη με αναγνωριστικό

[uid ] στο δένδρο χρηστών

2. Προσοχή: Μετά από κάθε εισαγωγή, το δένδρο χρηστών

πρέπει να παραμένει ταξινομημένο

ΗΥ-240 – Δομές Δεδομένων 21 of 69 kolokasis@csd.uoc.gr

Subscribe

Εγγραφή του χρήστη με αναγνωριστικό [uid2] στο δένδρο των

followers του χρήστη με αναγνωριστικό [uid1]

Subscribe

S uid1 uid2

Ορίσματα :

uid1 Αναγνωριστικό του χρήστη που έλα-

βε ένα νέο follower

uid2 Αναγνωριστικό χρήστη που κάνει fol-

low

ΗΥ-240 – Δομές Δεδομένων 22 of 69 kolokasis@csd.uoc.gr

Subscribe

Κατά το γεγονός αυτό:

1. Αναζητούμε στο δένδρο χρηστών, το χρήστη με

αναγνωριστικό uid1

2. Εισάγουμε στο δένδρο των followers ένα νέο κόμβο με

αναγνωριστικό uid2

3. Προσοχή: Μετά από κάθε εισαγωγή, το δένδρο των

followers θα πρέπει να παραμένει ταξινομημένο

ΗΥ-240 – Δομές Δεδομένων 23 of 69 kolokasis@csd.uoc.gr

Tweet

Δημοσίευση ενός tweet με αναγνωριστικό tid από τον χρήστη με

αναγνωριστικό uid

Tweet

T uid tid timestamp

Ορίσματα :

uid Αναγνωριστικό του χρήστη που δημοσίευσε

το tweet

tid Αναγνωριστικό του tweet

timestamp Χρονική στιγμή στην οποία δημοσιεύτηκε το

tweet

ΗΥ-240 – Δομές Δεδομένων 24 of 69 kolokasis@csd.uoc.gr

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 kolokasis@csd.uoc.gr

Παράδειγμα

Tweet

T 30 300 20180420

ΗΥ-240 – Δομές Δεδομένων 26 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 27 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 28 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 29 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 30 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 31 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 32 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 33 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 34 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 35 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 36 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 37 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 38 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 39 of 69 kolokasis@csd.uoc.gr

Unsubscribe

Διαγραφή του χρήστη με αναγνωριστικό uid2 από τη λίστα των

followers του χρήστη με αναγνωριστικό uid1

Unsubsribe

U uid1 uid2

Ορίσματα :

uid1 Αναγνωριστικό του χρήστη που έχασε ένα follower

uid2 Αναγνωριστικό του χρήστη που κάνει unsubscribe

ΗΥ-240 – Δομές Δεδομένων 40 of 69 kolokasis@csd.uoc.gr

Unsubscribe

Κατά το γεγονός αυτό:

1. Αναζητούμε στο δένδρο χρηστών το χρήστη με

αναγνωριστικό uid1

2. Αφαιρούμε από το δένδρο των followers τον κόμβο με

αναγνωριστικό uid2

3. Αναζητούμε στο δένδρο χρηστών το χρήστη με

αναγνωριστικό uid2

4. Διατρέχουμε το δένδρο των tweets του χρήστη με

αναγνωριστικό uid2

5. Αφαιρούμε από αυτή τους κόμβους που έχουν το πεδίο uid

ίσο με uid1

ΗΥ-240 – Δομές Δεδομένων 41 of 69 kolokasis@csd.uoc.gr

Παράδειγμα

Unsubscribe

U 50 60

ΗΥ-240 – Δομές Δεδομένων 42 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 43 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 44 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 45 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 46 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 47 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 48 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 49 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 50 of 69 kolokasis@csd.uoc.gr

Delete

Διαγραφή του χρήστη με αναγνωριστικό uid από το σύστημα

Delete

D uid

Ορίσματα:

uid Αναγνωριστικό του χρήστη προς δια-

γραφή

ΗΥ-240 – Δομές Δεδομένων 51 of 69 kolokasis@csd.uoc.gr

Delete

Κατά το γεγονός αυτό:

1. Αναζητούμε στο δένδρο χρηστών το χρήστη με

αναγνωριστικό uid

2. Διαγράφουμε όλα τα στοιχεία του δένδρου των tweets

αυτού του χρήστη

3. Διατρέχουμε το δένδρο των οπαδών και για κάθε κόμβο:

3.1 Καλούμε κατάλληλα τη συνάρτηση που υλοποιεί το γεγονός

unsubscribe

4. Διαγράφουμε από το δένδρο χρηστών το χρήστη με

αναγνωριστικό uid

5. Τέλος διαγράφουμε όλα τα tweets του χρήστη με

αναγνωριστικό uid από τον πίνακα κατακερματισμού των

tweets θέτοντας το πεδίο remove = true

ΗΥ-240 – Δομές Δεδομένων 52 of 69 kolokasis@csd.uoc.gr

Παράδειγμα

Delete

D 30

ΗΥ-240 – Δομές Δεδομένων 53 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 54 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 55 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 56 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 57 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 58 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 59 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 60 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 61 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 62 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 63 of 69 kolokasis@csd.uoc.gr

ΗΥ-240 – Δομές Δεδομένων 64 of 69 kolokasis@csd.uoc.gr

History

Αναζήτηση των tweets που έχει δημοσιεύσει ο χρήστης με

αναγνωριστικό uid μεταξύ των ημερομηνιών date1 date2

History

H uid date1 date2

Ορίσματα:

uid Αναγνωριστικό του χρήστη

date1 Αρχική ημερομηνία

date2 Τελική ημερομηνία

ΗΥ-240 – Δομές Δεδομένων 65 of 69 kolokasis@csd.uoc.gr

History

Κατά το γεγονός αυτό:

• Αναζητούμε στο δένδρο χρηστών το χρήστη μεαναγνωριστικό uid

• Αναζητούμε στο δένδρο των tweets του χρήστη το tweet που

έχει ημερομηνία ίση ή ακριβώς μεγαλύτερη από date1

• Διατρέχουμε και εκτυπώνουμε όλα τα tweets που είναι

μεταξύ του διαστήματος date1 και date2 μέσω των next

δεικτών

ΗΥ-240 – Δομές Δεδομένων 66 of 69 kolokasis@csd.uoc.gr

Look Up

Αναζήτηση ενός tweet με αναγνωριστικό tid στον πίνακα

κατακερματισμού των tweets

Look Up

L tid

Ορίσματα:

tid Αναγνωριστικό του tweet

ΗΥ-240 – Δομές Δεδομένων 67 of 69 kolokasis@csd.uoc.gr

Print Users

Εκτύπωση όλων των χρηστών από το δέντρο χρηστών

Print all Users

X

ΗΥ-240 – Δομές Δεδομένων 68 of 69 kolokasis@csd.uoc.gr

Print Tweets

Εκτύπωση όλων των tweets από τον πίνακα κατακερματισμού

Tweets

Print all Tweets

Y

ΗΥ-240 – Δομές Δεδομένων 69 of 69 kolokasis@csd.uoc.gr

Thanks!

ΗΥ-240 – Δομές Δεδομένων 69 of 69 kolokasis@csd.uoc.gr