You are on page 1of 5

Σύνολα

Οι διαφάνειες είναι βασισμένες στο βιβλίο "Data Structures and Algorithms in C++" των Michael T. Goodrich, Roberto Tamassia και David M. Mount

Sets 1
Αποθηκεύοντας ένα σύνολο σε
μια λίστα
Μπορούμε να υλοποιήσουμε ένα σύνολο με μια λίστα
Τα στοιχεία τοποθετούνται ταξινομημένα σύμφωνα με
μια κανονική διάταξη
Ο χώρος που χρησιμοποιείται είναι O(n)
Κόμβοι στους οποίους αποθηκεύονται στοιχεία του συνόλου
ταξινομημένα
Λίστα 

Στοιχεία του συνόλου

Sets 2
Γενικευμένη Συνένωση
(§10.2)
Γενικευμένη αλγόριθμος genericMerge(A, B)
συνένωση 2 S  άδεια ακολουθία
ταξινομημένων while A.isEmpty() B.isEmpty()
λιστών A και B a  A.first().element(); b 
Πρότυπη μέθοδος B.first().element()
genericMerge if a < b
Βοηθητικές aIsLess(a, S); A.remove(A.first())
μέθοδοι else if b < a
 aIsLess bIsLess(b, S); B.remove(B.first())
 bIsLess else { b = a }
 bothEqual bothEqual(a, b, S)
Τρέχει σε χρόνο A.remove(A.first()); B.remove(B.first())
O(nAnB) while A.isEmpty()
δεδομένου ότι οι aIsLess(a, S); A.remove(A.first())
βοηθητικές while B.isEmpty()
μέθοδοι τρέχουν
σε χρόνο O(1) bIsLess(b, S); B.remove(B.first())
return S
Sets 3
Χρησιμοποιώντας Γενικευμένη
Συνένωση για Πράξεις Συνόλων

Κάθε μια από τις πράξεις συνόλων μπορεί να


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

στοιχεία που υπάρχουν και στις 2 λίστες


 Για την ένωση: αντιγράφουμε όλα τα

στοιχεία και από τις 2 λίστες εκτός από


αυτά που υπάρχουν 2 φορές (τα οποία
αντιγράφονται 1 φορά)
Όλες οι μέθοδοι τρέχουν σε γραμμικό χρόνο.
Sets 4
Πράξεις Συνόλων
Αναπαριστούμε ένα σύνολο με Ένωση Συνόλων:
την ταξινομημένη ακολουθία
των στοιχείων του
 aIsLess(a, S)
Με την εξειδίκευση των S.insertFirst(a)
βοηθητικών μεθόδων ο  bIsLess(b, S)
αλγόριθμος γενικευμένης S.insertLast(b)
συνένωσης μπορεί να
χρησιμοποιηθεί για να εκτελέσει  bothAreEqual(a, b, S)
βασικές πράξεις συνόλων: S. insertLast(a)
 ένωση
 τομή
Τομή Συνόλων:
 αφαίρεση  aIsLess(a, S)
ο χρόνος εκτέλεσης μιας πράξης { do nothing }
πάνω στα σύνολα A και B πρέπει  bIsLess(b, S)
να είναι το πολύ O(nAnB)
{ do nothing }
 bothAreEqual(a, b, S)
S. insertLast(a)

Sets 5

You might also like