Download - Δομές Δεδομένων
![Page 1: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/1.jpg)
Δομές Δεδομένων 1
Δομές Δεδομένων
- Ουρές (queues)- Ουρές Προτεραιότητας (priority queues)
![Page 2: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/2.jpg)
Δομές Δεδομένων 2
Ουρά (queue)
Δομή τύπου FIFO: First In - First Out (πρώτη εισαγωγή – πρώτη εξαγωγή)
Περιορισμένος τύπος γραμμικής λίστας: Εισαγωγή στο ένα άκρο (στο τέλος) και διαγραφή από το άλλο (την αρχή)
AbstractDataType Queue { instances ordered list of elements; one end is called the front; the other is the rear; operations Create (): create an empty queue;
IsEmpty (): return true if queue is empty, return false otherwise; First (): return first (front) element of queue; Last (): return last (rear) element of queue; Add (x): add element x to the queue; Delete (x): delete front element from queue and put it in x;}
![Page 3: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/3.jpg)
Δομές Δεδομένων 3
Υλοποίηση ουράς με πίνακα
Ερωτήσεις: Γιατί να μη ξεκινά η ουρά πάντα από την αρχή του πίνακα; Τι πρόβλημα δημιουργείται με την ‘ολίσθηση’ της ουράς
προς τα δεξιά;
location(i)=front+i-1
![Page 4: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/4.jpg)
Δομές Δεδομένων 4
Υλοποίηση κυκλικής ουράς (με πίνακα)
Ερωτήσεις: Πού δείχνουν οι δείκτες front και rear; Πώς διακρίνουμε μεταξύ μιας άδειας και μιας γεμάτης ουράς;
location(i)=(front+i)%MaxSize
![Page 5: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/5.jpg)
Δομές Δεδομένων 5
Συνδεδεμένη ουρά
class LinkedQueue {// FIFO objects public: LinkedQueue()
{front = rear = 0;}; // constructor ~LinkedQueue(); // destructor int IsEmpty() {return ((front) ? 0 : 1);} int IsFull(); int First(type& x); // return first element of queue
int Last(type& x); // return last element of queue int operator +(type x); // add x to queue int operator -(type& x); // delete x from queue
// First,+,- return 0 on failure, 1 on success private: Node<type> *front, *rear;}
![Page 6: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/6.jpg)
Δομές Δεδομένων 6
Προσθήκη (ως τελευταίο στοιχείο) σε συνδεδεμένη ουρά
int LinkedQueue<type>::operator+(type x)//add x to queue{Node<type> *i;i = new Node<type>;if (i) { i->data = x; i->link = 0; if (front) rear->link = i; else front = i; rear = i; return 1; };return 0; // add fails }
![Page 7: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/7.jpg)
Δομές Δεδομένων 7
Διαγραφή (του πρώτου στοιχείου) από συνδεδεμένη ουρά
int LinkedQueue<type>::operator-(type& x)//delete first element and return in x{if (IsEmpty()) return 0; //delete failsx = front->data;Node<type> *i = front;front = front->link;delete i;return 1;}
![Page 8: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/8.jpg)
Δομές Δεδομένων 8
Ποιο από τα παρακάτω είναι σωρός;
![Page 9: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/9.jpg)
Δομές Δεδομένων 9
Παράδειγμα Ι
Αυτό είναι σωρός
24
1516
10 3 12
4
11
2 1
![Page 10: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/10.jpg)
Δομές Δεδομένων 10
Παράδειγμα ΙΙ
Δεν είναι σωρός, γιατί δεν ικανοποιείται η ιδιότητα του σωρού
(17 > 15)
24
1516
10 3 12
4
17
2 1
![Page 11: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/11.jpg)
Δομές Δεδομένων 11
Παράδειγμα ΙΙΙ
Δεν είναι σωρός, γιατί ο κόμβος με το 1 δεν είναι σε σωστή θέση.
24
1516
10 3 12
4
11
21
![Page 12: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/12.jpg)
Δομές Δεδομένων 12
Αναπαράσταση
-Με πίνακα-Με δυναμική δέσμευση μνήμης
![Page 13: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/13.jpg)
Δομές Δεδομένων 13
1
4 3
15 7 10 9
17 19 8
1 4 3 15 7 10 9 17 19 8
Αναπαράσταση με Πίνακα
![Page 14: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/14.jpg)
Δομές Δεδομένων 14
Για τον κόμβο που είναι στη θέση A[i], – Αριστερό παιδί στη θέση A[2i]– Δεξιό παιδί στη θέση A[2i+1]– Γονέας στη θέση A[i/2]
Και τα τρία τα βρίσκουμε σε χρόνο O(1)
Αναπαράσταση με Πίνακα
![Page 15: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/15.jpg)
Δομές Δεδομένων 15
Εισαγωγή
• Έστω ότι έχουμε ένα σωρό και θέλουμε να εισάγουμε ένα νέο στοιχείο.
• Μέθοδος– Βάζουμε το νέο στοιχείο στο τέλος του σωρού.– Πρέπει να βεβαιωθούμε ότι ικανοποιείται η ιδιότητα
του σωρού.
![Page 16: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/16.jpg)
Δομές Δεδομένων 16
Εισάγουμε το 0
1
5 3
7 6 9 8
0
![Page 17: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/17.jpg)
Δομές Δεδομένων 17
Τοποθετούμε το 0 στην τελευταία θέση του σωρού
1
5 3
7 6 9 8
0
![Page 18: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/18.jpg)
Δομές Δεδομένων 18
Ανταλλαγή 7 0
1
5 3
0 6 9 8
7
![Page 19: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/19.jpg)
Δομές Δεδομένων 19
Ανταλλαγή 5 0
1
0 3
5 6 9 8
7
![Page 20: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/20.jpg)
Δομές Δεδομένων 20
Ανταλλαγή 1 0
0
1 3
5 6 9 8
7
![Page 21: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/21.jpg)
Δομές Δεδομένων 21
Για την αναδιάρθρωση του σωρού δεν απαιτείται πάντα να φτάσουμε μέχρι τη ρίζα.
Απαιτούμενο κόστος: O(log n) αφού το ύψος του σωρού που έχει n στοιχεία είναι O(log n)
Κόστος Εισαγωγής
![Page 22: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/22.jpg)
Δομές Δεδομένων 22
Διαγραφή της Κορυφής
Ακολουθούμε την ακόλουθη μέθοδο:
Διαγράφουμε το στοιχείο στην κορυφή και το αντικαθιστούμε με το τελευταίο στοιχείο του σωρού.
Ακολουθεί αναδιάρθρωση του σωρού εάν απαιτείται.
![Page 23: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/23.jpg)
Δομές Δεδομένων 23
Διαγραφή του 0
0
1 3
6 5 9 8
![Page 24: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/24.jpg)
Δομές Δεδομένων 24
Διαγραφή του 0
1 3
6 5 9 8
![Page 25: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/25.jpg)
Δομές Δεδομένων 25
Αντικατάσταση με το τελευταίο στοιχείο (8)
1 3
6 5 9
8
![Page 26: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/26.jpg)
Δομές Δεδομένων 26
Διαγραφή του τελευταίου κόμβου που είναι άδειος
1 3
6 5 9
8
![Page 27: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/27.jpg)
Δομές Δεδομένων 27
Ανταλλαγή 81
8 3
6 5 9
1
![Page 28: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/28.jpg)
Δομές Δεδομένων 28
Ανταλλαγή 85
5 3
6 8 9
1
Είναι σωρός ;;;
![Page 29: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/29.jpg)
Δομές Δεδομένων 29
Πόσο Κοστίζει η Διαγραφή
Ο(logn) ?
O(loglogn) ?
O(n logn) ?
![Page 30: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/30.jpg)
Δομές Δεδομένων 30
Κατασκευή Σωρού
Πολλές φορές έχουμε ένα σύνολο στοιχείων τα οποία ικανοποιούν τις δομικές απαιτήσεις του σωρού (έχουμε δηλαδή ένα σχεδόν πλήρες δυαδικό δένδρο).
Πως θα κατασκευάσουμε σωρό ;
![Page 31: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/31.jpg)
Δομές Δεδομένων 31
20
1 9
10 317 8
4 15 7
![Page 32: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/32.jpg)
Δομές Δεδομένων 32
20
1 9
10 317 8
4 15 7
![Page 33: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/33.jpg)
Δομές Δεδομένων 33
20
1 9
10 317 7
4 15 8
![Page 34: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/34.jpg)
Δομές Δεδομένων 34
20
1 9
10 317 7
4 15 8
![Page 35: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/35.jpg)
Δομές Δεδομένων 35
20
1 9
10 34 7
17 15 8
![Page 36: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/36.jpg)
Δομές Δεδομένων 36
20
1 9
10 34 7
17 15 8
![Page 37: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/37.jpg)
Δομές Δεδομένων 37
20
1 3
10 94 7
17 15 8
![Page 38: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/38.jpg)
Δομές Δεδομένων 38
20
1 3
10 94 7
17 15 8
![Page 39: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/39.jpg)
Δομές Δεδομένων 39
20
1 3
10 94 7
17 15 8
![Page 40: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/40.jpg)
Δομές Δεδομένων 40
20
1 3
10 94 7
17 15 8
![Page 41: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/41.jpg)
Δομές Δεδομένων 41
1
4 3
10 915 7
17 20 8
![Page 42: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/42.jpg)
Δομές Δεδομένων 42
Κόστος Κατασκευής
Απλή εκτίμηση:
Αφού στη χειρότερη περίπτωση θα φτάσουμε μέχρι τη ρίζα και τα μισά στοιχεία πρέπει να μετακινηθούν, το συνολικό κόστος είναι
n/2 * C * logn = O(n logn)
![Page 43: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/43.jpg)
Δομές Δεδομένων 43
Κόστος Κατασκευής
Καλύτερη εκτίμησηΚατά την κατασκευή έχουμε το πολύ
– n/22 στοιχεία που μετακινούνται 1 θέση κάτω– n/23 στοιχεία που μετακινούνται 2 θέσεις κάτω– n/24 στοιχεία που μετακινούνται 3 θέσεις κάτω– … …
t(n) = O(1*n/22 + 2*n/23 + 3*n/24 + …)=O((n/2)(1/2 + 2/22 + 3/23 + 4/24 + …)=O(n)
![Page 44: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/44.jpg)
Δομές Δεδομένων 44
Εφαρμογές Σωρού
Ταξινόμηση με σωρό (HeapSort)Εκτέλεση εργασιών με προτεραιότητεςΚωδικοποίηση Huffman
![Page 45: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/45.jpg)
Δομές Δεδομένων 45
Heapsort
Heapsort(A){
BuildHeap(A);for (i = length(A) downto 2){
Swap(A[1], A[i]);heap_size(A) -= 1;Heapify(A, 1);
}}
![Page 46: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/46.jpg)
Δομές Δεδομένων 46
Ανάλυση Heapsort
BuildHeap() απαιτεί O(n) κόστος Κάθε μία από τις n-1 κλήσεις της Heapify()
απαιτεί O(log n) χρόνοΣυνολικά έχουμε για την HeapSort()
= O(n) + (n - 1) O(log n)= O(n) + O(n log n)= O(n log n)
![Page 47: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/47.jpg)
Δομές Δεδομένων 47
Κωδικοποίηση Huffman
Βασικά Σημεία:
Ο κύριος στόχος ενός κωδικοποιητή είναι η αντιστοίχιση μικρών κωδικών σε συχνά εμφανιζόμενα σύμβολα και μεγάλων κωδικών σε σπάνια εμφανιζόμενα σύμβολα.
Ο χρόνος κωδικοποίησης και αποκωδικοποίησης είναι σημαντικός. Μερικές φορές προτιμούμε να έχουμε μικρότερο λόγο συμπίεσης προκειμένου να κερδίσουμε σε χρόνο (π.χ. WinZIP).
![Page 48: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/48.jpg)
Δομές Δεδομένων 48
Έστω τα σύμβολα A,B,C,D με τους εξής κωδικούς:
Code(‘A’) = 0Code(‘B’) = 000Code(‘C’) = 11Code(‘D’) = 1
Ο κωδικός 111000 σε ποια σειρά χαρακτήρων αντιστοιχεί;
DDDAAA
DCB
CDAAA
DDDB
Κωδικοποίηση Huffman
![Page 49: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/49.jpg)
Δομές Δεδομένων 49
Βασική προϋπόθεση:
Μετά τη φάση της κωδικοποίησης κανένας κωδικός δεν πρέπει να αποτελεί prefix άλλου κωδικού.
Κωδικοποίηση Huffman
![Page 50: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/50.jpg)
Δομές Δεδομένων 50
Έστω το ακόλουθο κείμενο:A B C A B A A A B C D E
A: 5/12B: 3/12C: 2/12D: 1/12E: 1/12
Συχνότητες εμφάνισης
Κωδικοποίηση Huffman
![Page 51: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/51.jpg)
Δομές Δεδομένων 51
Ε 1/12 D 1/12 C 2/12 B 3/12 A 5/12
2/122/12
4/124/12
7/127/12
12/1212/12
0 1
01
0
1
0
1
Δένδρο Huffman
Κωδικοποίηση Huffman
![Page 52: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/52.jpg)
Δομές Δεδομένων 52
E: 0000D: 0001C: 001B: 01A: 1
Μετά την κωδικοποίηση προκύπτουν οι εξής κωδικοί:
Τι παρατηρούμε;
Κωδικοποίηση Huffman
![Page 53: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/53.jpg)
Δομές Δεδομένων 53
Τι συμπίεση επιτυγχάνουμε για το παράδειγμα;
Απαιτούνται 12*8 = 96 bits για το αρχικό κείμενο (χωρίς τους κενούς χαρακτήρες)
Απαιτούνται 25 bits για το συμπιεσμένο κείμενο
Κωδικοποίηση Huffman
![Page 54: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/54.jpg)
Δομές Δεδομένων 54
Έστω το ακόλουθο κείμενο
ABRACADABRA
A 5/11B 2/11C 1/11D 1/11R 2/11
Κωδικοποίηση Huffman
![Page 55: Δομές Δεδομένων](https://reader036.vdocuments.pub/reader036/viewer/2022062423/56814722550346895db456ef/html5/thumbnails/55.jpg)
Δομές Δεδομένων 55
C 1/11C 1/11 D 1/11D 1/11 B 2/11B 2/11 R 2/11R 2/11 A 5/11A 5/11
2/112/11 4/114/11
6/116/11
11/1111/11
0 1
0 1
0 1
0
1
000 001 010 011 1
Δένδρο Huffman
Κωδικοποίηση Huffman