Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Σχετικά έγγραφα
Βασικές Έννοιες Δοµών Δεδοµένων

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java

Συλλογές, Στοίβες και Ουρές

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Ευσταθές ταίριασμα. (υλικό βασισμένο στο βιβλίο. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

Δομές Δεδομένων (Data Structures)

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ιαφάνειες παρουσίασης #11

Δομές δεδομένων (2) Αλγόριθμοι

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

Στοιχειώδεις Δομές Δεδομένων

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

1.1 Ένα πρώτο πρόβληµα: Ευσταθές Ταίριασµα

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

Στοίβες με Δυναμική Δέσμευση Μνήμης

Αντικειμενοστρεφής Προγραμματισμός

Δομές Δεδομένων (Data Structures)

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Mεταβλητές (variables) και Σταθερές (constants)

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

4. Συνδεδεμένες Λίστες

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Τύποι δεδομένων, τελεστές, μεταβλητές

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

ιαφάνειες παρουσίασης #5 (β)

Αντικειµενοστρεφής Προγραµµατισµός

Ανάπτυξη και Σχεδίαση Λογισμικού

Κεφάλαιο 3. Γραφήµατα v1.0 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Κεφάλαιο 2. Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.1, 12/05/2010

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

Δομές Δεδομένων & Αλγόριθμοι

Οντοκεντρικός Προγραμματισμός

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Δομές Δεδομένων & Αλγόριθμοι

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Φροντιστήριο 4 Σκελετοί Λύσεων

Ενότητα 2 Στοίβες Ουρές - Λίστες. ΗΥ240 - Παναγιώτα Φατούρου 1

Στοίβες Ουρές - Λίστες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 2η: Στοίβες Ουρές - Λίστες Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

ιαφάνειες παρουσίασης #6 (α)

POINTERS, AGGREGATION, COMPOSITION

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

IsEmptyList(L): επιστρέφει true αν L = < >, false

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Κλάσεις και Αντικείµενα

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

ΕΠΛ 012. JavaScripts

Δοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

υναµικές οµές εδοµένων

Διαδικασιακός Προγραμματισμός

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Transcript:

Απλές Δοµές Δεδοµένων

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος

Βασικές Έννοιες Δοµών Δεδοµένων 3

Βασικές Έννοιες Δοµών Δεδοµένων Πρωτογενείς Τύποι Δεδοµένων Αντικείµενα Πίνακες (Arrays) και Λίστες (Lists) Στοίβες (stacks) ή ουρές LIFO Ουρές FIFO

Πρωτογενείς Τύποι Δεδοµένων Λογική µεταβλητή: boolean µε τιµή αληθής (true) ή ψευδής (false) Ακέραια µεταβλητή: int Μεταβλητή κινητής υποδιαστολής: float, double Μεταβλητή Χαρακτήρας: char 5

Πρωτογενείς Τύποι Δεδοµένων της Java Λέξη Κλειδί Περιγραφή Μέγεθος/Μορφή (Ακέραιοι) byte ακέραιος µεγέθους ενός byte 8-bit two's complement short µικρός (short) ακέραιος 16-bit two's complement int ακέραιος 32-bit two's complement long µεγάλος (long) ακέραιος 64-bit two's complement (Πραγµατικοί) float Απλής ακρίβειας αριθ. κιν. υποδιαστ. 32-bit IEEE 754 double ιπλής ακρίβειας αριθ. κιν. υποδιαστ. 64-bit IEEE 754 (Άλλοι Τύποι) char Ένας χαρακτήρας 16-bit Unicode character boolean Μια boolean τιµή (true ή false) true ή false 6

Αντικείµενα 7

Ένα αντικείµενο µιας υποτιθέµενης κλάσης Point Η δυναµική δηµιουργία αντικειµένων γίνεται µε τον τελεστή new Point origin_one = new Point( 23, 94); Ο τελεστής new δεσµεύει την απαιτούµενη µνήµη για τη δηµιουργία του αντικειµένου και καλεί τον CONSTRUCTOR. Ο τελεστής new επιστρέφει την αναφορά στο νέο αντικείµενο. Το αποτέλεσµα: Μία µεταβλητή αναφορά µε όνοµα origin_one σε αντικείµενο τύπου Point. Ένα αντικείµενο τύπου Point µε τιµές 23 και 94 για τις δύο πρωτογενείς µεταβλητές που περιέχει. 8

Αλφαριθµητικά και Πίνακες Στη Java για αλφαριθµητικές τιµές (strings) χρησιµοποιείται η κλάση. Στη Java τα String είναι αντικείµενα (και όχι πρωτογενείς τύποι). Εποµένως, ποιο θα είναι το αποτέλεσµα της εντολής: String hello = new String( Hello World! ); Επίσης, οι πίνακες είναι αντικείµενα στη Java. Εποµένως, στη Java τα αλφαριθµητικά και οι πίνακες είναι αντικείµενα. 9

Πίνακας (Array) Μια ακολουθία αντικειµένων του ιδίου τύπου Συνήθως περιλαµβάνει ένα προκαθορισµένο πλήθος στοιχείων Είναι µια στοιχειώδης Δοµή Δεδοµένων 10

Παραδείγµατα Πινάκων Πίνακας Διαστάσεων 1x6 µε αριθµούς κινητής υποδιαστολής: 2,45 0,15 3,20 15,85 6,33 2,67 Πίνακας Διαστάσεων 3x4 µε χαρακτήρες: a f e u b r d s k w r t 11

Πράξεις σε Πίνακες Προσπέλαση στοιχείου: Σε σταθερό χρόνο Ο(1) µπορούµε να διαβάσουµε το περιεχόµενο οποιασδήποτε θέσης του πίνακα (εφόσον µας δίνεται ο αύξων αριθµός του στοιχείου, πχ. το 12ο στοιχείο) Τροποποίηση στοιχείου: Σε Ο(1) όπως και η προσπέλαση Εισαγωγή/Διαγραφή στοιχείου: Μπορεί να απαιτήσει χρόνο έως και Ο(Ν) εάν πρέπει να µετακινηθούν στοιχεία του πίνακα ή να τροποποιηθεί το µέγεθος του πίνακα 12

Πίνακες στην Java // ορισµός µιας αναφοράς σε πίνακα ακεραίων int [] A; // ηµιουργία ενός αντικειµένου-πίνακα ακεραίων // µε 10 ακέραιους και καταχώρηση της διεύθυνσής // του πίνακα στην αναφορά A A = new int[10]; // Η παραπάνω διαδικασία σε µία γραµµή int [] B = new int[15]; 13

Λίστα (List) Με τη δοµή δεδοµένων λίστα εννοούµε γραµµικές ακολουθίες οποιονδήποτε αντικειµένων Κάθε στοιχείο της λίστας έχει ένα δείκτη (ή µια αναφορά) στο επόµενο στοιχείο της λίστας (διασυνδεδεµένη λίστα) ή έχει ένα δείκτη προς το επόµενο και ένα δείκτη προς το προηγούµενο στοιχείο (διπλά διασυνδεδεµένη λίστα) Δεν υποστηρίζεται η κατευθείαν προσπέλαση τυχαίων θέσεων της λίστας Οι θέσεις µνήµης στις οποίες αποθηκεύονται τα στοιχεία της λίστας δεν αντιστοιχούν απαραίτητα στη σειρά που έχουν τα στοιχεία µέσα στη λίστα 14

Παράδειγµα Λίστας Μια λίστα µε 4 στοιχεία: 8 5 12 9 Μια πιθανή υλοποίηση της παραπάνω λίστας µέσα σε ένα πίνακα: 8 9 12 5 Δοµές Δεδοµένων 15

Πράξεις σε Λίστα Εύρεση ενός στοιχείου: Εάν µας δίνεται ο αύξων αριθµός του στοιχείου, πχ. το 12ο στοιχείο, τότε απαιτείται να διατρέξουµε τη λίστα µέχρι να φτάσουµε στο στοιχείο: χρόνος Ο(Ν) Προσπέλαση/τροποποίηση στοιχείου: Σε σταθερό χρόνο Ο(1) εάν έχουµε αναφορά προς το στοιχείο Εισαγωγή/διαγραφή στοιχείου: Σε χρόνο Ο(1) εάν γίνει στην αρχή της λίστας στο τέλος της λίστας (διπλή λίστα) σε σηµείο της λίστας για το οποίο µας δίνεται αναφορά σε γειτονικό στοιχείο 16

κώδικας Java για µια λίστα ακεραίων Οι κλάσεις: µια κλάση ListNode για τους κόµβους της λίστας µια κλάση LinkedList για την ίδια τη λίστα public class ListNode { public ListNode next; public ListNode prev; public int data; } public ListNode(int pardata) { } data = pardata; 17

κλάση LinkedList public class LinkedList { private ListNode head; private ListNode tail; } public LinkedList() { head = null; tail = null; } public boolean isempty() { //... return true; } public void add(int index, int data) { //... } public void addfirst(int data) { //... } public void addlast(int data) { //... } public int countnodes() { int num = 0; //... return num; } public int remove(int index) { //... return -1; } public int removefirst() { //... return -1; } 18

παράδειγµα χρήσης της λίστας public class ListDemo { } public static void main(string[] args) { } LinkedList list = new LinkedList(); System.out.println("List empty? : " + list.isempty()); list.addfirst(10); list.addfirst(2); list.addfirst(8); System.out.println("List empty? : " + list.isempty()); 19

Ουρές 20

Στοίβα (Stack) Στοίβα: Είναι µια ουρά LIFO (Last In First Out) Βασικές Πράξεις: push: εισαγωγή στοιχείου στην κορυφή της λίστας σε χρόνο Ο(1) pop: αφαίρεση του κορυφαίου στοιχείου από τη στοίβα σε χρόνο Ο(1) 21

Παράδειγµα Στοίβας 2 9 4 22

Ουρά FIFO Ουρά FIFO (First In First Out) Βασικές Πράξεις: Εισαγωγή στοιχείου στο τέλος της ουράς Αφαίρεση στοιχείου από την αρχή της ουράς Και οι δύο πράξεις µπορούν να υλοποιηθούν σε Ο(1) χρόνο 23

Παράδειγµα Ουράς 3 9 4 24

Γραφήµατα 25

Γράφηµα (Graph) Γράφηµα ή Γράφος : Αποτελείται από ένα σύνολο από κόµβους ένα σύνολο από ακµές µεταξύ ζευγών κορυφών Θα εξετάσουµε τα γραφήµατα και αλγόριθµους γραφηµάτων πιο αναλυτικά παρακάτω στην ύλη 26

Παράδειγµα Γραφήµατος 27

Ένα µη-κατευθυνόµενο γράφηµα Μη-κατευθυνόµενο γράφηµα. G = (V, E) V = κόµβοι. E = ακµές µεταξύ ζευγών κόµβων. Κάθε ακµή αναπαριστά τη διµερή σχέση µεταξύ αντικειµένων. Παράµετροι µεγέθους του γραφήµατος: n = V, m = E. V = { 1, 2, 3, 4, 5, 6, 7, 8 } E = { 1-2, 1-3, 2-3, 2-4, 2-5, 3-5, 3-7, 3-8, 4-5, 5-6 } n = 8 m = 11 28

Δέντρο Δέντρο: Απλό συνδεδεµένο άκυκλο γράφηµα 29

Παράδειγµα Δυαδικού Δέντρου 9 5 12 2 7 10 15 30

Εγγραφές (Records) 31

Εγγραφές (record ή struct) Κώστας Παπαδόπουλος ιεύθυνση Πραξιτέλους 25, Ξάνθη Ονοµατεπώνυµο Ηλικία Τηλέφωνο 28 25410-12345 Παράδειγµα (Java) class Employee { String Name; String Address; int Age; String Telephone; } Δοµές Δεδοµένων 32

Υλοποίηση αλγορίθµου Gale-Shapley 33

Αλγόριθµος Propose-And-Reject Ο αλγόριθµος των Gale-Shapley για το ευσταθές ταίριασµα που είδαµε σε προηγούµενο µάθηµα. Αλγόριθµος Propose-and-Reject. [Gale-Shapley 1962] Μια µέθοδος που βρίσκει ένα ευσταθές ταίριασµα. Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to whom m has not yet proposed if (w is free) assign m and w to be engaged else if (w prefers m to her fiancé m') assign m and w to be engaged, and m' to be free else w rejects m } 34

Πλήθος επαναλήψεων του αλγορίθµου Gale-Shapley Ο αλγόριθµος των Gale-Shapley εκτελεί συνεχώς την ακόλουθη ενέργεια: Επιλέγεται ένας µη-δεσµευµένος άντρας (εάν όλοι οι άντρες είναι δεσµευµένοι ο αλγόριθµος τερµατίζει) Από τις γυναίκες στις οποίες δεν έχει προτείνει ακόµα ο άντρας αυτός, επιλέγει και προτείνει σε αυτή µε την υψηλότερη προτίµηση Μπορούµε να υπολογίσουµε ένα άνω όριο στο πλήθος των επαναλήψεων που εκτελεί ο αλγόριθµος στη χειρότερη περίπτωση; Πόσο χρόνο απαιτεί η εκτέλεση κάθε επανάληψης στη χειρότερη περίπτωση και πόσο χρόνο χρειάζεται συνολικά η εκτέλεση του αλγορίθµου στη χειρότερη περίπτωση; 35

Υλοποίηση αλγορίθµου Gale-Shapley Πλήθος επαναλήψεων που εκτελεί ο αλγόριθµος Gale- Shapley Τι δοµές δεδοµένων να χρησιµοποιήσουµε για την αποθήκευση των προτιµήσεων των αντρών; Τι δοµές δεδοµένων να χρησιµοποιήσουµε για την αποθήκευση των προτιµήσεων των γυναικών; Ποια η πολυπλοκότητα χρόνου κάθε επανάληψης;

πηγές/αναφορές Κεφάλαιο 2, Σχεδίαση Αλγορίθµων, J. Kleinberg and E. Tardos, Ελληνική έκδοση από τις Εκδ. Κλειδάριθµος Κεφάλαιο 3, Εισαγωγή στους αλγόριθµους, T. Cormen, C. Leiserson, R. Rivest and C. Stein, Ελληνική έκδοση από τις Πανεπιστηµιακές Εκδ. Κρήτης 37