Πολυπλοκότητα - Εισαγωγή στους Αλγόριθμους Αναζήτησης

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Πολυπλοκότητα - Εισαγωγή στους Αλγόριθμους Αναζήτησης"

Transcript

1 (Object Oriented Programming) Πολυπλοκότητα - Εισαγωγή στους Αλγόριθμους Αναζήτησης (Complexity Analysis Searching Algorithms) PhD sfetsos@it.teithe.gr

2 Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν οι παρακάτω αλγόριθμοι ταξινόμησης: Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Σειριακή ή γραμμική αναζήτηση (Sequential Search) Δυαδική αναζήτηση (Binary Search) Kατακερματισμός Java και Κατακερματισμός 2

3 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Πρόβλημα Αλγόριθμος1 υλοποίηση1 (instance1) Αλγόριθμος2 υλοποίηση2 (instance2) : : : : Ο όρος αλγόριθμος (algorithm) χρησιμοποιείται για να περιγράψει μία βήμα-προς-βήμα, πεπερασμένη (finite), αποτελεσματική (affective) και κατάλληλη για υλοποίηση (implementation) διαδικασία επίλυσης του προβλήματος. Για κάθε (επιλύσιμο) πρόβλημα Π υπάρχει ένα σύνολο αλγορίθμων {Α 1, Α 2, Α k } που το επιλύουν. Με άλλα λόγια, για το πρόβλημα Π υπάρχει αλγόριθμος, A i, 1 <= i <= k, τέτοιος ώστε κάθε στιγμιότυπο i του Π ή ισοδύναμα, για κάθε είσοδο i ο αλγόριθμος A i δίδει σωστό αποτέλεσμα. 3

4 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Ένας αλγόριθμος πρέπει να είναι: σωστός, για οποιοδήποτε σύνολο δεδομένων εισόδου, δηλ. για κάθε υλοποίηση του πεδίου ορισμού του προβλήματος που λύνει. αποδοτικός, δηλ. (α) εκτελείται γρήγορα (λιγότερα βήματα εκτέλεσης) και (β) εκμεταλλεύεται αποτελεσματικά τους πόρους του συστήματος. Συχνά οι δύο στόχοι είναι αντικρουόμενοι. Στόχος: (1) η ανάλυση και ο υπολογισμός της πολυπλοκότητας χρόνου και χώρου (time and space complexity) των αλγορίθμων και (2) ο έλεγχος αν και πότε ένας αλγόριθμος είναι άριστος (optimal), δηλαδή ο πιο αποδοτικός για το πρόβλημα για το οποίο σχεδιάστηκε. 4

5 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Μέτρηση της επίδοσης ενός αλγορίθμου: Εμπειρική Πολυπλοκότητα: ο αλγόριθμος υλοποιείται σε μια γλώσσα προγραμματισμού και εφαρμόζεται σε ένα σύνολο δεδομένων (διάφορα μεγέθη εισόδων), για να υπολογισθεί ο απαιτούμενος χρόνος επεξεργασίας (processing time) και η χωρητικότητα μνήμης (memory space). Μειονεκτήματα: Διαφορετικές συμπεριφορές του αλγορίθμου για άλλο σύνολο δεδομένων Η εξάρτηση του χρόνου επεξεργασίας από το υλικό, τη γλώσσα προγραμματισμού και τον μεταφραστή. Λανθασμένες εκτιμήσεις 5

6 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Είναι δύσκολο να συγκρίνουμε αλγόριθμους.μετρώντας τον χρόνο εκτέλεσης. Έστω δύο διαφορετικοί αλγόριθμοι που εκτελούν την ίδια εργασία, π.χ. αναζήτηση στοιχείου σε πίνακα (σειριακή και δυαδική αναζήτηση). Ποιος είναι καλύτερος; Μπορούμε να εκτελέσουμε και τους δύο αλγορίθμους και να χρονομετρήσουμε. Όμως: Πολλές εργασίες τρέχουν παράλληλα στον υπολογιστή, άρα η ταχύτητα εξαρτάται και από τον φόρτο του συστήματος, Ο χρόνος εκτέλεσης εξαρτάται και από την συγκεκριμένη είσοδο. Αν στην σειριακή αναζήτηση το ζητούμενο στοιχείο είναι πρώτο στην λίστα, τότε είναι γρηγορότερη από την δυαδική. Για αυτό προέκυψε μια θεωρητική προσέγγιση ανάλυσης αλγορίθμων ανεξάρτητα από τους υπολογιστές και την συγκεκριμένη είσοδο. 6

7 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Θεωρητική προσέγγιση της Πολυπλοκότητας: καθορίζεται μαθηματικά ο χρόνος εκτέλεσης του αλγορίθμου, ως συνάρτηση του μεγέθους της εισόδου του. Τα πλεονεκτήματα της θεωρητικής προσέγγισης του υπολογισμού της πολυπλοκότητας ενός αλγόριθμου είναι ότι: δεν εξαρτάται από τη μηχανή, δεν εξαρτάται από τη γλώσσα προγραμματισμού, και δεν εξαρτάται από τις ικανότητες του προγραμματιστή. Χρησιμοποιείται μία μεταβλητή n, που εκφράζει το μέγεθος του προβλήματος, και η συνάρτηση του τύπου f(n) που μας βοηθά να εκτιμήσουμε τον χρόνο επεξεργασίας και τον απαιτούμενο χώρο μνήμης - χρονική πολυπλοκότητα (time complexity) και πολυπλοκότητα χώρου (space complexity). 7

8 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Δεν μας ενδιαφέρουν οι επακριβείς τιμές, αλλά μόνο η γενική συμπεριφορά των αλγορίθμων, δηλαδή η τάξη του αλγορίθμου Μονάδα έκφρασης της θεωρητικής πολυπλοκότητας χρόνου ενός αλγόριθμου είναι η βασική πράξη. Για την εκτίμηση της πολυπλοκότητας θα χρειαστούμε μόνο το πλήθος των βασικών πράξεων που εκτελούνται από έναν αλγόριθμο και όχι τον ακριβή χρόνο που απαιτούν κάθε μία από τις πράξεις αυτές. Βασικές πράξεις: Ανάθεση μιας τιμής σε κάποια μεταβλητή Σύγκριση δύο τιμών Αύξηση κάποια τιμής μεταβλητής Βασικές αριθμητικές πράξεις (π.χ. πρόσθεση, πολλαπλασιασμός, κλπ.) Εύρεση της τιμής ενός συγκεκριμένου στοιχείου σ' ένα πίνακα 8

9 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Παράδειγμα υπολογισμού (εύρεση του max-στοιχείου σε πίνακα): (1) int max = Array[0]; (2) for (int i=0; i<n; ++i){ (3) if (Array[i] >= max){ (4) max=array[i]; } } (1) δύο εντολές (εύρεση του Array[0] και ανάθεση τιμής στη max). (2) δύο εντολές την 1 η φορά (ανάθεση i=0, σύγκριση i<n) και άλλες δύο για κάθε επανάληψη (αύξηση του i και σύγκριση i<n). Άρα χωρίς το σώμα της for έχουμε: 4+2n εντολές (n-επαναλήψεις). Άρα μπορούμε να ορίσουμε μια συνάρτηση f(n), δοθέντος του n: f(n) = 4 + 2n 9

10 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Ανάλυση χειρότερης περίπτωσης (worst-case analysis) (3) if (Array[i] >= max){ (2 εντολές εύρεση στοιχείου και σύγκριση). Αν ο πίνακας έχει π.χ. 4 στοιχεία τότε η χειρότερη περίπτωση είναι η διάταξη {1, 2, 3, 4}. Δηλ., σε αυτή την περίπτωση θα έχουμε: f(n)=4 + 2n + 4n =6n + 4. Ασυμπτωτική συμπεριφορά και χρονική πολυπλοκότητα Στη f(n)=6n + 4, θα διαγράψουμε όλους τους όρους και σταθερές που δεν μεγαλώνουν ή μεγαλώνουν αργά και θα κρατήσουμε τους όρους που μεγαλώνουν γρήγορα όσο το (n) μεγαλώνει (διαφορετικές γλώσσες, διαφορετικοί χρόνοι εκτέλεσης, αρχικοποίησης, κλπ.). Άρα: f(n)=6n, διαγράφουμε και τον πολ/τή 6 (διαφορετικοί compilers) και έχουμε τελικά: f(n) = n Άρα: η ασυμπτωτική συμπεριφορά της f( n ) = 6n + 4 περιγράφεται από τη συνάρτηση f( n ) = n (όσο το n μεγαλώνει). Όταν έχουμε βρει την f ασυμπτωτικά, τότε θα λέμε ότι ο αλγόριθμος μας έχει χρονική πολυπλοκότητα Θ( f(n)) ή απλούστερα ο αλγόριθμός μας με Θ(n) έχει πολυπλοκότητα n. 10

11 Εισαγωγή στην Πολυπλοκότητα των Αλγορίθμων Στους δύσκολους αλγόριθμους δεν μπορούμε να κάνουμε τέτοιους υπολογισμούς εντολή-προς-εντολή, για αυτό ψάχνουμε να βρούμε ένα άνω όριο (χειρότερη περίπτωση) τέτοιο ώστε ο δικός μας αλγόριθμος να μην το ξεπερνά (συνήθως προσθέτουμε εντολές, ακόμη και άχρηστες). Έτσι για την έκφραση της πολυπλοκότητας, εισάγεται ο λεγόμενος συμβολισμός Ο (O notation ή big-o), από την αγγλική λέξη order. Για παράδειγμα, αν ο αλγόριθμος μας είναι Θ(n), τότε λέμε ότι η πολυπλοκότητα του είναι O(n). Δηλαδή, ο αλγόριθμος μας, ασυυμπτωτικά, δεν θα είναι χειρότερος από n (αλλά καλύτερος ή ίδιος με αυτό). Είναι ευκολότερο να βρούμε την Ο πολυπλοκότητα ενός αλγορίθμου από την Θ πολυπλοκότητα, για αυτό και χρησιμοποιείται περισσότερο. Με τον συμβολισμό - Ο εκφράζουμε ένα άνω όριο (χειρότερης περίπτωσης πολλαπλάσιο της f(n) ), ειδικά για μεγάλες εισόδους τιμών, που ο αλγόριθμος μας δεν ξεπερνά. 11

12 Υπολογισμός της χρονικής Πολυπλοκότητας (1/7) Θα επιχειρήσουμε να κατατάξουμε τους αλγορίθμους ανάλογα με τη χρονική τους πολυπλοκότητα, π.χ. της τάξης Ο(1), O(n), ή O(n2), κλπ. Παράδειγμα η σειριακή αναζήτηση: Η αναζήτηση στοιχείου σε πίνακα εξαρτάται από το πλήθος των στοιχείων του πίνακα. Έτσι αν ο πίνακας έχει 20 στοιχεία, η εκτέλεση απαιτεί 20 βήματα, αν έχει 2000, η εκτέλεση απαιτεί 2000 βήματα. Άρα η σειριακή ή γραμμική αναζήτηση εκτελείται σε χρόνο Ο(n) ή γραμμικό χρόνο, όπου n ο αριθμός των στοιχείων του πίνακα. Διαφορετικά: η σειριακή αναζήτηση είναι πολυπλοκότητας O(n). Ο(n) - σειριακή ή γραμμική πολυπλοκότητα: public void printall(int[] Pinakas) { for (int i: Pinakas) { System.out.println(i); }} 12

13 Υπολογισμός της χρονικής Πολυπλοκότητας (2/7) Παράδειγμα αναζήτησης μεγίστης τιμής (max) σε πίνακα Μια άλλη ματιά στην πολυπλοκότητα του αλγορίθμου: Tα στοιχεία του πίνακα είναι n και ανάλογα έχουμε συγκρίσεις και τοποθετήσεις τιμών. Αν το n=2, τότε έχουμε 1 σύγκριση, αν n=3, τότε έχουμε 2 συγκρίσεις. Δηλ. θέλουμε n-1 συγκρίσεις για να βρούμε τον max. Όμως το σημαντικό είναι να υπολογίσουμε την πολυπλοκότητα ενός αλγορίθμου σε μεγάλο πλήθος στοιχείων, δηλ. για μεγάλα n, δηλ. το -1 στην έκφραση n-1 δεν παίζει σημαντικό ρόλο, όταν το n είναι πολύ μεγάλο. Για αυτό λέμε ότι και σε αυτή την περίπτωση η πολυπλοκότητα του αλγορίθμου είναι της τάξης O(n). Ο(1) σταθερή πολυπλοκότητα: public void printonce(int[] array) { System.out.println(array[0]); } Η μέθοδος εκτελείται σε χρόνο Ο(1) ή σταθερό χρόνο σε σχέση με την είσοδο. To array μπορεί να έχει 1, 200, στοιχεία, η εκτέλεση όμως απαιτεί ένα βήμα. 13

14 Υπολογισμός της χρονικής Πολυπλοκότητας (3/7) Ο(n2) τετραγωνική πολυπλοκότητα: import java.util.*; class Test_O_notation { public static void main(string args[]){ int[] ar={1,2,3,4,5,6,7,8}; printall(ar); } Διπλό loop συνήθως δίνει πολυπλοκότητα O(n2) public static void printall(int[] array) { for (int i: array) { for (int j: array) { int[] y = new int[]{i,j}; System.out.println(Arrays.toString(y));}}}} Εδώ έχουμε εστιασμένα loops. Αν ο πίνακας έχει n στοιχεία, το εξωτερικό loop εκτελείται n-φορές, και το εσωτερικό n-φορές για κάθε επανάληψη του εξωτερικού, έτσι θα έχουμε n2 εκτυπώσεις. Έτσι η μέθοδος εκτελείται σε O(n2) χρόνο ( τετραγωνικό χρόνο τετραγωνική πολυπλοκότητα ). Παραδείγματα οι ταξινομήσεις φυσαλίδας (bubble sort), με εισαγωγή (insertion sort) και με επιλογή (selection sort). 14

15 Υπολογισμός της χρονικής Πολυπλοκότητας (4/7) Ο(log n) - λογαριθμική πολυπλοκότητα : while ( low <= high ) { mid = ( low + high ) / 2; if ( target < list[mid] ) high = mid - 1; else if ( target > list[mid] ) low = mid + 1; else break;} Ο χρόνος εκτέλεσης του αλγορίθμου εξαρτάται από το πλήθος των διαιρέσεων του n δια του 2. Και αυτό γιατί ο αλγόριθμος διαιρεί τον χώρο στο μισό σε κάθε επανάληψη. Η βάση του λογαρίθμου είναι το 2, που δεν επιδρά στον αλγόριθμο για αυτό μπορεί να παραλειφθεί. Έτσι λέμε ότι η λειτουργία εκτελείται σε O(log n) χρόνο ( λογαριθμική πολυπλοκότητα ). Την λογαριθμική πολυπλοκότητα θα δούμε αναλυτικά στην δυαδική αναζήτηση. 15

16 Υπολογισμός της χρονικής Πολυπλοκότητας (5/7) Ο(n.log n) συνδυασμός γραμμικής και λογαριθμικής πολυπλοκότητας: void quicksort (int list[], int left, int right) { int pivot = partition ( list, left, right ); quicksort ( list, left, pivot - 1 ); quicksort ( list, pivot + 1, right ); } Ο χρόνος εκτέλεσης του αλγορίθμου υπολογίζεται από το n*log(n). Δηλ. από τα n-loops (απλά ή αναδρομικά), και το n, έτσι η πολυπλοκότητα υπολογίζεται ως συνδυασμός γραμμικής και λογαριθμικής πολυπλοκότητας. Οι αλγόριθμοι της γρήγορης ταξινόμησης (quick sort) και ταξινόμησης με συγχώνευση (merge sort) και είναι του τύπου Ο(n*log(n)). 16

17 Υπολογισμός της χρονικής Πολυπλοκότητας (6/7) Άλλοι συνδυασμοί χρονικών πολυπλοκοτήτων: Ο(n 3 ): Κυβική πολυπλοκότητα, για προβλήματα μικρού μεγέθους. Ο(2 n ): Εκθετική πολυπλοκότητα. Σπάνια χρησιμοποιείται στην πράξη. Βέλτιστος αλγόριθμος (optimal): αν αποδειχτεί ότι είναι τόσο αποτελεσματικός, ώστε να μην μπορεί να κατασκευαστεί καλύτερός του. Πολυωνυμικοί αλγόριθμοι (polynomial): λέγονται οι αλγόριθμοι με χρόνο εκτέλεσης Τ(n)=O(n k ), όπου k μια θετική σταθερά, π.χ. οι αλγόριθμοι O(n), O(n 2 ), είναι πολυωνυμικοί. Εκθετικοί ή μη πολυωνυμικοί: λέγονται οι αλγόριθμοι με χρόνο εκτέλεσης Τ(n)=O(c n ), όπου c>1, π.χ. οι αλγόριθμοι Ο(2 n ), O(n.2 n ). 17

18 Υπολογισμός της χρονικής Πολυπλοκότητας (7/7) Απόδοση αλγορίθμων αναζήτησης Για το ίδιο μέγεθος πίνακα, ο χρόνος εκτέλεσης του αλγορίθμου εξαρτάται από το στοιχείο που αναζητάμε (είσοδος). Όταν αναλύουμε αλγορίθμους αναζήτησης κοιτάμε μόνο τις συγκρίσεις, γιατί δεν έχουμε αλλαγές (μετακίνηση τιμών). Κοιτάμε: Την καλύτερη περίπτωση (best-case input): ο μικρότερος αριθμός συγκρίσεων για να βρούμε το στοιχείο. Την χειρότερη περίπτωση (worst-case input): ο μεγαλύτερος αριθμός συγκρίσεων για να βρούμε το στοιχείο. Συνήθως επιλέγεται γιατί υλοποιείται εύκολα. Την μέση περίπτωση (average-case analysis): η μέση τιμή των συγκρίσεων. Υλοποιείται δύσκολα, γιατί έχουμε ποικίλες εισόδους. 18

19 Υπολογισμός της Πολυπλοκότητας χώρου (1/2) Μερικές φορές θέλουμε να μειώσουμε τη χρήση μνήμης (χώρου) αντί της μείωσης του χρόνου ή και σε συνδυασμό τα δύο. Το κόστος σε μνήμη (πολυπλοκότητα χώρου) είναι παρόμοιο με το κόστος σε χρόνο (πολυπλοκότητα χρόνου). Απλά αναλύουμε το συνολικό μέγεθος, σε σχέση με το μέγεθος της εισόδου, κάθε μεταβλητής που ορίζουμε. Παραδείγματα: public void print(int n) { for (int x = 0; x < n; x++) { System.out.println("hello"); }} Η μέθοδος απαιτεί Ο(1) χώρο, δεν δεσμεύεται κάποια νέα μεταβλητή. 19

20 Υπολογισμός της Πολυπλοκότητας χώρου (2/2) public String[] arrayχ(int n) { String[] Array1 = new String[n]; for (int i = 0; i < n; i++) { Array1[i] = "hello"; } return Array1; } Η μέθοδος απαιτεί Ο(n) χώρο (το μέγεθος του Array1 κλιμακώνεται σύμφωνα με το μέγεθος της εισόδου). Στους διαφορετικούς τρόπους αναζήτησης αλλά και ταξινόμησης που ακολουθούν θα υπολογίζουμε την πολυπλοκότητα και θα συγκρίνουμε τις αποδώσεις των αλγορίθμων. 20

21 Σειριακή ή γραμμική αναζήτηση (Sequential Search) (1/3) Συγκρίνουμε το στοιχείο που αναζητούμε με τα διαδοχικά στοιχεία της λίστας (π.χ. πίνακα), ξεκινώντας από το πρώτο στοιχείο. Η αναζήτηση σταματά όταν βρεθεί το στοιχείο που αναζητάμε ή όταν φτάσουμε στο τέλος της λίστας. Σε ταξινομημένες λίστες σταματάμε στο στοιχείο με μεγαλύτερη τιμή από το προς αναζήτηση. Στην παρακάτω υλοποίηση αναζητάμε το στοιχείο key σε ένα μη ταξινομημένο πίνακα. public class SequentialSearch { public static int linersearch(int[] arr, int key){ int size = arr.length; for(int i=0;i<size;i++){ if(arr[i] == key){ return i; } } return -1;} 21

22 Σειριακή ή γραμμική αναζήτηση (Sequential Search) (2/3) public static void main(string a[]){ int[] arr1= {2,35,11,45,80,12,17,44}; int searchkey = 17; System.out.println("O arithmos "+searchkey+" vrethike stin thesi: "+linersearch(arr1, searchkey)); int[] arr2= {12,51,33,55,134,13,74,56}; searchkey = 33; System.out.println("O arithmos "+searchkey+" vrethike stin thesi: "+linersearch(arr2, searchkey)); } } 22

23 Σειριακή ή γραμμική αναζήτηση (Sequential Search) (3/3) Απόδοση σειριακής / γραμμικής αναζήτησης: καλύτερη περίπτωση: να βρούμε το στοιχείο στην 1 η θέση του πίνακα, άρα η μικρότερη τιμή είναι το 1. Σε αυτή την περίπτωση η χρονική πολυπλοκότητα είναι O(1). χειρότερη περίπτωση: να το βρούμε στην τελευταία θέση του πίνακα ή να μην το βρούμε. Τότε η τιμή ισούται με το πλήθος των στοιχείων του πίνακα (n). Σε αυτή την περίπτωση η χρονική πολυπλοκότητα είναι O(n). μέση περίπτωση: να το βρούμε στη μέση του πίνακα. Τότε ο αρ. των συγκρίσεων θα είναι (n/2). Άρα και σε αυτή την περίπτωση η χρονική πολυπλοκότητα θα είναι O(n). Άρα για την χειρότερη και μέση περίπτωση το πλήθος των συγκρίσεων εξαρτάται από το n (πλήθος στοιχείων). Σε αυτές τις περιπτώσεις ο αριθμός των συγκρίσεων είναι της τάξης n, άρα έχουμε Ο(n). Στην καλύτερη περίπτωση έχουμε O(1). 23

24 Δυαδική αναζήτηση (Binary Search) (1/7) Εφαρμόζεται μόνο σε ταξινομημένα στοιχεία. Η ιδέα αυτής της αναζήτησης είναι ότι κάθε φορά που κάνουμε μια σύγκριση μικραίνουμε την λίστα των τιμών στο μισό μέχρις ότου βρούμε το στοιχείο ή δεν το βρούμε στην λίστα των τιμών. Ο αλγόριθμος αναζήτησης: Βρίσκουμε το μεσαίο στοιχείο του ταξινομημένου πίνακα και το συγκρίνουμε με το αναζητούμενο στοιχείο. Αν το βρήκαμε τότε σταματάμε την αναζήτηση. Αν δεν βρέθηκε, τότε ελέγχουμε αν το αναζητούμενο στοιχείο είναι μικρότερο ή μεγαλύτερο από το μεσαίο στοιχείο. Αν είναι μικρότερο, τότε περιορίζουμε την αναζήτηση στο πρώτο μισό του πίνακα (αύξουσα τάξη τιμών), ενώ αν είναι μεγαλύτερο, περιορίζουμε την αναζήτηση στο δεύτερο μισό. Η διαδικασία αυτή συνεχίζεται για το κατάλληλο πρώτο ή δεύτερο μισό του πίνακα, το ¼ του πίνακα, κλπ., μέχρι να βρεθεί το στοιχείο ή να μην είναι δυνατόν να χωριστεί περαιτέρω ο πίνακας σε δύο μέρη. 24

25 Δυαδική αναζήτηση (Binary Search) (2/7) class MyBinarySearch1 { public static void main (String[] args) { int orderednumbers[] = {-31, -22, 1, 3, 4, 5, 9, 10, 17, 23 }; int key=17; System.out.println("O arithmos: "+ key + " vrethike stin thesi: "+ MyBinarySearch1.binarysearch(orderednumbers, key) );} public static int binarysearch(int[] A, int x) { int left = 0, right = A.length-1; int mid, found = -1; while (found == -1 && left <= right) { mid = (left + right) / 2; if (x < A[mid]) { // to x sto 1o miso right = mid-1;} else if (x > A[mid]) { // to x sto 2o miso left = mid + 1;} else found = mid; } return found; } } 25

26 Δυαδική αναζήτηση (Binary Search) (3/7) Απόδοση της Δυαδικής αναζήτησης (1/2) Ο πίνακάς σπάει στη μέση σε κάθε κλήση, έως ότου φτάσουμε στο 1 στοιχείο. Δηλ., 1η επανάληψη: n / 2 2η επανάληψη: n / 4 3η επανάληψη: n / 8... i-οστή επανάληψη: n / 2i... τελευταία επανάληψη: 1 Σε ποια επανάληψη (i) θα βρούμε το στοιχείο που ζητάμε; Πρέπει να λύσουμε την εξίσωση: 1 = n / 2i Πολ/ζουμε τα δύο σκέλη επί 2i και έχουμε: 2i = n (α), (το n είναι μια δύναμη του 2). Στους δυαδικούς λογάριθμους (βάση το 2) αν λύσουμε ως προς i την (α) θα έχουμε: i = log(n) Δηλ., ο αριθμός των επαναλήψεων που χρειάζεται για να κάνουμε δυαδική αναζήτηση είναι log(n), όπου n είναι ο αριθμός των στοιχείων του πίνακα. Π.χ. για πίνακα με n=32, θα χρειαστούμε 5-διαιρέσεις του πίνακα για να βρούμε το 1-στοιχείο (που είναι ο λογάριθμος του 32). Δηλ., 32 -> 16 -> 8 -> 4 -> 2 -> 1 Άρα η πολυπλοκότητα της δυαδικής αναζήτησης είναι Ο( log(n) ). 26

27 Δυαδική αναζήτηση (Binary Search) (4/7) Απόδοση της Δυαδικής αναζήτησης (2/2) καλύτερη περίπτωση: να βρούμε το στοιχείο με την πρώτη, δηλ. στην μέση του πίνακα, άρα η μικρότερη τιμή είναι το 1, άρα σε αυτή την περίπτωση έχουμε Ο(1). χειρότερη περίπτωση: το αναζητούμενο στοιχείο δεν βρίσκεται στην λίστα ή είναι το 1ο ή τελευταίο στοιχείο της λίστας, ή είναι μια θέση πιο μπροστά ή πίσω από το μεσαίο στοιχείο. Τότε ο αριθμός των συγκρίσεων είναι της τάξης O(log n). μέση περίπτωση: όταν το αναζητούμενο στοιχείο βρίσκεται σε οποιοδήποτε άλλη θέση στη λίστα. Ο αριθμός των συγκρίσεων είναι περίπου ο ίδιος με την χειρότερη περίπτωση, δηλ. είναι της τάξης O(log n). Σε όλες αυτές τις αναζητήσεις ο αριθμός των συγκρίσεων είναι log2n, δηλ. η χειρότερη περίπτωση της δυαδικής αναζήτησης είναι της τάξης O(log n). Γενικά, όταν ο αλγόριθμος διαιρεί στη μέση την λίστα τιμών ο αριθμός των συγκρίσεων είναι της τάξης O(log n). 27

28 Δυαδική αναζήτηση (Binary Search) (5/7) Σύγκριση σειριακού και δυαδικού αλγορίθμου αναζήτησης Οι αλγόριθμοι O(log n) εκτελούνται ταχύτερα από τους O(n). Όταν το n είναι μικρό οι είναι μικρές, ενώ όσο το n μεγαλώνει, τόσο οι διαφορές στην απόδοση μεγαλώνουν. 28

29 Αναδρομική Δυαδική Αναζήτηση (Recursive Binary Search) (6/7) Η επανάληψη της διαδικασίας των διαδοχικών διαιρέσεων του πίνακα, με κάθε αναζήτηση, καθιστά την δυαδική αναζήτηση κατάλληλη για αναδρομική υλοποίηση. Όπως και στη μη αναδρομική υλοποίηση έτσι και εδώ θα χρησιμοποιήσουμε τα left και right. class RecursiveBinarySearch { public static void main (String[] args) { int arr[] = {11, 12, 13, 14, 15, 16, 17, 18,19, 20}; int key=13; int found = recbinarysearch(arr, key, 0, arr.length - 1); if (found > -1){ System.out.println ("O arithmos: + key + " vrethike stin thesi: " + found);} else{system.out.println("o arithmos den vrethike"); } } public static int recbinarysearch(int[] arr, int key, int left, int right) { int mid; if (right < left){return -1;} mid = (left + right) / 2; if (arr[mid] < key) return recbinarysearch(arr, key, mid + 1, right); else if (arr[mid] > key) return recbinarysearch(arr, key, left, mid - 1); else return mid; } } 29

30 Εμπεριεχόμενη μέθοδος Δυαδικής Αναζήτησης στη Java (7/7) Η μέθοδος: java.util.arrays.binarysearch(int[] a, int key), αναζητά στον πίνακα των ακεραίων a[] την τιμή value, χρησιμοποιώντας τον αλγόριθμο binary search. O πίνακας πρέπει να είναι ταξινομημένος πριν την κλήση της μεθόδου, διαφορετικά τα αποτελέσματα θα είναι απροσδιόριστα. import java.util.arrays; public class ArraysBinarySearch { public static void main(string[] args) { int Array[] = {14,31,67,43,24,9,78}; // taxinomisi pinaka Arrays.sort(Array); System.out.println("O taxinomimenos pinakas einai: "); for (int i : Array) {System.out.print(" "+i);} System.out.println(); // O ar. anazitisis p.x. 24 int key = 24; int thesi = Arrays.binarySearch(Array,key); System.out.println("H thesi tou ar. 24 einai: " + thesi);}} 30

31 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (1/13) Αν οι εργασίες αναζήτησης αφορούσαν ένα πίνακα μικρών ακεραίων, τότε θα μπορούσαμε να ορίσουμε ένα πίνακα με δείκτες τους ακέραιους, δηλ. τα στοιχεία που θέλουμε να προσπελάσουμε κλειδιά. Π.χ. ένα πίνακα 1000 κελιών με δείκτες τους αρ , για τους 1000 πελάτες μιας επιχείρησης). Στην πράξη όμως έχουμε μεγάλο πλήθος στοιχείων ή τα κλειδιά δεν είναι ακέραιοι αριθμοί και επιπλέον πρέπει να αυξήσουμε την ταχύτητα αναζήτησης. Σε αυτές τις περιπτώσεις υλοποιούμε μια τεχνική αντιστοίχισης - μετατροπής των κλειδιών αναζήτησης σε μοναδικούς ακέραιους τον κατακερματισμό (hashing), με την βοήθεια μιας συνάρτησης κατακερματισμού (hash function (hf)), που αποθηκεύουμε σε ένα πίνακα κατακερματισμού (hash table). Ανάλυση πολυπλοκότητας: Αν οι τιμές του πίνακα δεν είναι ταξινομημένες θα χρειαστεί να ελέγξουμε μια προς μια όλες τις τιμές του πίνακα. Αν είναι ταξινομημένες μειώνουμε την πολυπλοκότητα στο O(log n) με την δυαδική αναζήτηση (χειρότερη προσπάθεια). Όμως θα είχαμε άμεση προσπέλαση, δηλ. Ο(1)-πολυπλοκότητα, αν γνωρίζαμε τον δείκτη προσπέλασης του στοιχείου (διεύθυνση στον πίνακα). Ο δείκτης δημιουργείται με την βοήθεια της hf και για κάθε δεδομένο κλειδί. 31

32 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (2/13) Η διαδικασία τοποθέτησης αντικειμένων με την χρήση της hf είναι η παρακάτω: Δημιουργία πίνακα μεγέθους n. Τοποθέτηση των αντικειμένων στον πίνακα κατακερματισμού με δείκτες κλειδιά (hashcodes) που υπολογίζονται με την βοήθεια της hf: δείκτης = h(object) Δηλ. ο πίνακας κατακερματισμού είναι η δομή που συσχετίζει κλειδιά με τιμές. Κατά την διαδικασία κατακερματισμού μπορεί να προκύψει σύγκρουση (collision), δηλ. δύο κλειδιά να αντιστοιχηθούν στον ίδιο δείκτη. Θα πρέπει: (1) να επιλέγουμε με προσοχή την κατάλληλη συνάρτηση κατακερματισμού, (2) να εφαρμόσουμε στρατηγική επίλυσης των συγκρούσεων (collision resolution strategy) Συναρτήσεις Κατακερματισμού (Hash Functions) Μια συνάρτηση κατακερματισμού h απεικονίζει κλειδιά ενός δεδομένου τύπου σε ακεραίους ενός σταθερού διαστήματος [0, n 1]. Μια αποτελεσματική και απλή συνάρτηση καταμερισμού είναι της μορφής: h(x) = x % n, (όπου το n = μέγεθος του πίνακα). Θεωρείται αποτελεσματική όταν το n είναι πρώτος αριθμός. Ο ακέραιος h(x) ονομάζεται τιμή κατακερματισμού (hash value) του κλειδιού. 32

33 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (3/13) Παράδειγμα απλού κατακερματισμού: έστω 10 κλειδιά στο διάστηµα Χρειαζόµαστε ένα πίνακα 10 θέσεων µε δείκτες 0 9. Μία λύση: διαιρούµε τα κλειδιά µε το 10, που είναι το µέγεθος του πίνακα και παίρνουµε το υπόλοιπο της διαίρεσης. Π.χ. η εγγραφή µε κλειδί 13 θα αποθηκευτεί στη θέση 13%10 = 3. Κατά παρόμοιο τρόπο μπορεί να βρεθεί η θέση του πίνακα για οποιοδήποτε κλειδί: Θέση πίνακα = αρχικό κλειδί % µέγεθος πίνακα Μια τέτοια συνάρτηση καταμερισμού μετασχηµατίζει ένα µεγάλο διάστηµα τιµών σε ένα µικρότερο διάστηµα. Τι θα συμβεί όμως για το κλειδί 23, ή 33, κλπ., δηλ. όταν περισσότερα κλειδιά αντιστοιχούν στην ίδια θέση; Τότε έχουμε σύγκρουση και οι τιμές που διεκδικούν την ίδια θέση συνώνυμα (synonyms). Ένας τρόπος επιλογής της hf είναι η χρήση της μεθόδου hashcode() της java που υλοποιείται στην κλάση object και κληρονομείται από κάθε άλλη κλάση. Η hashcode() παρέχει ένα αριθμό που αντιστοιχεί σε ένα αντικείμενο. 33

34 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (4/13) import java.util.*; public class HashCodeDemo { public static void main(string[] args) { Integer obj1 = new Integer(1357); System.out.println("O hashcode gia ton ar. "+obj1+ " einai= "+obj1.hashcode()); String obj2 = new String("1357"); System.out.println("\nO hashcode gia to string " +obj2+ " einai= "+obj2.hashcode()); StringBuffer obj3 = new StringBuffer("1357"); System.out.println("\nO hashcode gia to stringbuffer "+obj3+ " einai= + obj3.hashcode()); ArrayList<Integer> obj4 = new ArrayList<Integer>(); obj4.add(new Integer(1357)); System.out.println("\nO hashcode gia to arraylist " +obj4+ " einai= " + obj4.hashcode()); Iterator obj5 = obj4.iterator(); System.out.println("\nO hashcode gia ton iterator = " +obj5.hashcode()); HashCodeDemo obj6 = new HashCodeDemo(); System.out.println("\nO hashcode gia to HashCodeDemo = " + obj6.hashcode()); String obj7 = new String(" "); System.out.println("\n Ο hashcode einai arnitikos gia poli megalous arithmous " + obj7.hashcode()); } } 34

35 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (5/13) Η hascode() υλοποιείται διαφορετικά σε διαφορετικές κλάσεις, π.χ. στα Strings, υλοποιείται με την σχέση: s.charat(0) * 31 n-1 + s.charat(1) * 31 n s.charat(n-1), όπου s το String και n το μέγεθος του πίνακα. Π.χ. για το String: ABC = 'A' * 'B' * 31 + 'C' = 65 * * =

36 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (6/13) Επίλυση Συγκρούσεων (Collision Resolution) Όταν τοποθετούμε αντικείμενα στον πίνακα κατακερματισμού είναι πιθανόν δύο αντικείμενα να έχουν το ίδιο κλειδί hashcode(), οπότε έχουμε σύγκρουση π.χ. "Aa" = 'A' * 31 + 'a = 2112 "BB" = 'B' * 31 + 'B' = 2112 Πως επιλύουμε την σύγκροουση; Μία πρώτη προσέγγιση είναι η δηµιουργία ενός πίνακα που αποτελείται από συνδεδεµένες λίστες. Έτσι, όταν συµβεί σύγκρουση, το νέο στοιχείο εισάγεται στη λίστα της συγκεκριµένης θέσης του πίνακα. Αυτή η τεχνική ονοµάζεται ξεχωριστή σύνδεση (separate chaining). Μία δεύτερη λύση στο πρόβληµα είναι να εξετάσουµε τον πίνακα, να βρούµε µία άδεια θέση και να εισάγουµε εκεί το νέο στοιχείο. Αυτή η τεχνική ονοµάζεται ανοιχτή διευθυνσιοδότηση (open addressing), ή γραμμική διερεύνηση (linear probing). 36

37 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (7/13) Ξεχωριστή σύνδεση (separate chaining) Στην τεχνική αυτή ο πίνακας περιέχει ένα πλήθος από συνδεδεµένες λίστες. Παράδειγμα: Έστω τα κλειδιά 33, 41, 53, 74, 87, 127, 144, 154, 178, 199 που θέλουµε να αποθηκεύσουµε σε ένα πίνακα 10 θέσεων (0 9). Χρησιµοποιώντας την µέθοδο της διαίρεσης των κλειδιών δια του 10 και παίρνοντας το υπόλοιπο ως τη θέση στον πίνακα, προκύπτει ότι τα κλειδιά 74, 144, 154, είναι συνώνυµα. Το ίδιο ισχύει και για τα 33, 53, και 87, 127. Άρα θα χρησιμοποιήσουμε λίστες για τις θέσεις 3, 4 και 7. 37

38 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (8/13) Ανοιχτή διευθυνσιοδότηση (open addressing) H πιο απλή µέθοδος ανοιχτής διευθυνσιοδότησης είναι η γραµµική εξέταση (linear probing). Η µέθοδος ψάχνει σειριακά στον πίνακα, ξεκινώντας από την επόµενη θέση από όπου συνέβη η σύγκρουση, µέχρις ότου να βρει µια άδεια θέση, όπου και αποθηκεύει το νέο στοιχείο. Παράδειγµα: Έστω ότι έχουµε 10 κλειδιά µε τιµές 13, 28, 41, 70, 127, 131, 144, 176, 182, 199. Όταν γίνει η αποθήκευση των κλειδιών σε ένα πίνακα 10 θέσεων, θα καταλάβουν τις εξής θέσεις: Παρατηρούμε ότι το 131 έπρεπε να αποθηκευτεί στην θέση 1, όπου όμως προηγήθηκε η αποθήκευση του 41. Επομένως αποθηκεύεται στην αμέσως επόμενη κενή θέση που είναι η 2 η. Όμως το 2 είναι η φυσική θέση του κλειδιού 182, που είναι κατειλημμένη, για αυτό το τοποθετούμε στην αμέσως επόμενη κενή θέση που είναι η 5 η, κ.ό.κ. 38

39 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (9/13) Java και Κατακερματισμός Είδαμε ήδη την hashcode() που υπολογίζει μια ακέραια τιμή για κάθε τύπο δεδομένων η οποία καθορίζει την θέση του πίνακα κατακερματισμού στην οποία θα αποθηκευτεί. Το πακέτο java.util περιέχει την κλάση Hashtable που υλοποιεί τεχνικές κατά-κερματισμού αντιστοιχίζοντας κλειδιά σε τιμές. Ένα αντικείμενο Hashtable έχει 2-παραμέτρους: την αρχική χωρητικότητα (initial capacity), που ορίζει το πλήθος των στοιχείων που μπορεί να αποθηκευτεί στον πίνακα κατά την στιγμή της δημιουργίας του, και τον παράγοντα φόρτου (load factor), που ορίζει πόσο επιτρέπεται να γεμίσει ο πίνακας πριν την αυτόματη αύξηση της χωρητικότητας του. Η χωρητικότητα αυξάνει, όταν οι εισαγωγές στον πίνακα κατακερματισμού ξεπεράσουν το γινόμενο της τρέχουσας χωρητικότητας επί τον παράγοντα φόρτου, καλώντας την μέθοδο rehash(). 39

40 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (10/13) Java και Κατακερματισμός Οι δομητές της Hastable (java 1.1): public Hashtable() public Hashtable(int size) public Hashtable(int size, float load) throws IllegalArgumentException Δημιουργούν ένα πίνακα κατακερματισμού με αρχική χωρητικότητα-size ή αφήνοντας το αρχικό (default) μέγεθος που είναι 101 και τον παράγοντα φόρτου με τιμή Στην Java 2 χρησιμοποιούμε την HashMap αντί της Hastable. Η κλάση HashMap υλοποιεί έναν πίνακα αντιστοίχισης. Ένας τέτοιος πίνακας αντιστοιχίζει κλειδιά σε τιμές. Δεν επιτρέπονται διπλά κλειδιά, ενώ κάθε κλειδί αντιστοιχίζεται σε μία το πολύ τιμή. Μια τέτοια δομή επιτρέπει την αναζήτηση μιας συγκεκριμένης τιμής με βάση ένα μοναδικό κλειδί. Παράδειγμα ενός HashMap αποτελεί ένα λεξικό, όπου το λήμμα αποτελεί το κλειδί ενώ η ερμηνεία του, για παράδειγμα, η μετάφρασή του σε μία άλλη γλώσσα, αποτελεί την τιμή (value) στην οποία αντιστοιχίζεται το λήμμα. 40

41 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (11/13) Java και Κατακερματισμός Παράδειγμα: HashMap<String, String> dictionary = new HashMap<String, String>(); dictionary.put( boy, αγόρι ); String trans = dictionary.get( boy ); Η συμβολοσειρά trans του παραδείγματος παίρνει την τιμή αγόρι, με την οποία έχει αντιστοιχηθεί στο λεξικό η συμβολοσειρά boy. Δομητές: 41

42 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (12/13) Java και Κατακερματισμός Μέθοδοι: 42

43 Kατακερματισμός - Πίνακες Κατακερματισμού Συναρτήσεις Κατακερματισμού (13/13) Java και Κατακερματισμός 43

Κεφάλαιο 5 Ανάλυση Αλγορίθμων

Κεφάλαιο 5 Ανάλυση Αλγορίθμων Κεφάλαιο 5 Ανάλυση Αλγορίθμων 5.1 Επίδοση αλγορίθμων Τα πρωταρχικά ερωτήματα που προκύπτουν είναι: 1. πώς υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου; 2. πώς μπορούν να συγκριθούν μεταξύ τους οι διάφοροι

Διαβάστε περισσότερα

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου; 5.1 Επίδοση αλγορίθμων Μέχρι τώρα έχουμε γνωρίσει διάφορους αλγόριθμους (αναζήτησης, ταξινόμησης, κ.α.). Στο σημείο αυτό θα παρουσιάσουμε ένα τρόπο εκτίμησης της επίδοσης (performance) η της αποδοτικότητας

Διαβάστε περισσότερα

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

Συναρτήσεις Κατακερματισμού και Πίνακες Κατακερματισμού Μια συνάρτηση κατακερματισμού (hash function) h απεικονίζει κλειδιά ενός δοσμένου τύπου σεακεραίουςενόςσταθερούδιαστήματος [0,N 1]όπουΝτομέγεθοςτουπίνακα. Πχ: Συναρτήσεις Κατακερματισμού και Πίνακες Κατακερματισμού

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 19 Hashing - Κατακερματισμός 1 / 23 Πίνακες απευθείας πρόσβασης (Direct Access Tables) Οι πίνακες απευθείας

Διαβάστε περισσότερα

Αν ένα πρόβλημα λύνεται από δύο ή περισσότερους αλγόριθμους, ποιος θα είναι ο καλύτερος; Με ποια κριτήρια θα τους συγκρίνουμε;

Αν ένα πρόβλημα λύνεται από δύο ή περισσότερους αλγόριθμους, ποιος θα είναι ο καλύτερος; Με ποια κριτήρια θα τους συγκρίνουμε; Αν ένα πρόβλημα λύνεται από δύο ή περισσότερους αλγόριθμους, ποιος θα είναι ο καλύτερος; Με ποια κριτήρια θα τους συγκρίνουμε; Πως θα υπολογίσουμε το χρόνο εκτέλεσης ενός αλγόριθμου; Για να απαντήσουμε

Διαβάστε περισσότερα

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι - Πίνακες 1 Πίνακες Οι πίνακες έχουν σταθερό μέγεθος και τύπο δεδομένων. Βασικά πλεονεκτήματά τους είναι η απλότητα προγραμματισμού τους και η ταχύτητα. Ωστόσο δεν παρέχουν την ευελιξία η οποία απαιτείται

Διαβάστε περισσότερα

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Ενότητα 11: Τεχνικές Κατακερματισμού Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται

Διαβάστε περισσότερα

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης Γ7.5 Αλγόριθμοι Αναζήτησης Γ Λυκείου Κατεύθυνσης Εισαγωγή Αλγόριθμος αναζήτησης θεωρείται ένας αλγόριθμος, ο οποίος προσπαθεί να εντοπίσει ένα στοιχείο με συγκεκριμένες ιδιότητες, μέσα σε μία συλλογή από

Διαβάστε περισσότερα

Αλγόριθμοι και Πολυπλοκότητα

Αλγόριθμοι και Πολυπλοκότητα Αλγόριθμοι και Πολυπλοκότητα Ανάλυση Αλγορίθμων Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ανάλυση Αλγορίθμων Η ανάλυση αλγορίθμων περιλαμβάνει τη διερεύνηση του τρόπου

Διαβάστε περισσότερα

Δομές Δεδομένων Ενότητα 2

Δομές Δεδομένων Ενότητα 2 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 2: Θέματα Απόδοσης Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Εξεταστική Ιανουαρίου 2014 Διδάσκων : Ευάγγελος Μαρκάκης 20.01.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες και

Διαβάστε περισσότερα

Πίνακες (Μια παλιά άσκηση) Πίνακες Κατακερματισμού (Hash Tables) Πίνακες (Μια παλιά άσκηση) Εισαγωγή. A n

Πίνακες (Μια παλιά άσκηση) Πίνακες Κατακερματισμού (Hash Tables) Πίνακες (Μια παλιά άσκηση) Εισαγωγή. A n Πίνακες (Μια παλιά άσκηση) Πίνακες Κατακερματισμού (Hash Tables) Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς A n O(1) (στην πρώτη ελέυθερη θέση στο τέλος του πίνακα).

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1 Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση

Διαβάστε περισσότερα

Διάλεξη 04: Παραδείγματα Ανάλυσης

Διάλεξη 04: Παραδείγματα Ανάλυσης Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα

Διαβάστε περισσότερα

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2 Διαίρει-και-Βασίλευε Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2 Διαίρει-και-Βασίλευε Γενική µέθοδος σχεδιασµού αλγορίθµων: Διαίρεση σε ( 2) υποπροβλήµατα (σηµαντικά) µικρότερου µεγέθους.

Διαβάστε περισσότερα

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα

Διαβάστε περισσότερα

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα

Διαβάστε περισσότερα

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2 Ε. Μαρκάκης Επικ. Καθηγητής Περίληψη Εµπειρική ανάλυση αλγορίθµων Μαθηµατική ανάλυση αλγορίθµων Αύξηση συναρτήσεων Συµβολισµός µεγάλου όµικρον Παραδείγµατα

Διαβάστε περισσότερα

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Α. SelectionSort Ταξινόμηση με Επιλογή Β. InsertionSort Ταξινόμηση με Εισαγωγή

Διαβάστε περισσότερα

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο ιαίρει-και-βασίλευε Γενική μέθοδος σχεδιασμού αλγορίθμων: ιαίρεση σε ( 2) υποπροβλήματα

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 04: ΠαραδείγματαΑνάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα -Γραμμική

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ00 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 01-15

Διαβάστε περισσότερα

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 12 η Αναζήτηση/Ταξινόμηση Πίνακα Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 12: Κατακερματισμός: Χειρισμός Συγκρούσεων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Δομές Δεδομένων. Ενότητα 12: Κατακερματισμός: Χειρισμός Συγκρούσεων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Ενότητα 12: Κατακερματισμός: Χειρισμός Συγκρούσεων Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,

Διαβάστε περισσότερα

Εισαγωγή στους Αλγόριθμους. Παύλος Εφραιμίδης, Λέκτορας

Εισαγωγή στους Αλγόριθμους. Παύλος Εφραιμίδης, Λέκτορας Εισαγωγή στους Αλγόριθμους Παύλος Εφραιμίδης, Λέκτορας http://pericles.ee.duth.gr 1 Περιεχόμενα Μαθήματος Εισαγωγή στου Αλγόριθμους Πολυπλοκότητα Αλγορίθμων Ασυμπτωτική Ανάλυση Θεωρία Γράφων Κλάσεις Πολυπλοκότητας

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Κατακερματισμός. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Κατακερματισμός Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Λεξικό Dictionary Ένα λεξικό (dictionary) είναι ένας αφηρημένος τύπος δεδομένων (ΑΤΔ) που διατηρεί

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Πτυχιακή Εξεταστική Ιούλιος 2014 Διδάσκων : Ευάγγελος Μαρκάκης 09.07.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων Στόχοι και αντικείμενο ενότητας Πέρασμα Πίνακα σε Συνάρτηση #8.. Ειδικά Θέματα Αλγορίθμων Προβλήματα Αναζήτησης Γραμμική Αναζήτηση (Linear Search) Ενημέρωση Μέτρηση Δυαδική Αναζήτηση (Binary Search) Προβλήματα

Διαβάστε περισσότερα

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

10. Πίνακες Κατακερματισμού Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 10. Πίνακες Κατακερματισμού 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 16/12/2016 Πίνακες

Διαβάστε περισσότερα

Generics και ArrayLists

Generics και ArrayLists ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr Generics και ArrayLists Προσοχή!!! Να εκτελεστούν πρώτα όλες οι ασκήσεις τις Θεωρίας

Διαβάστε περισσότερα

Προγραμματιστικές Τεχνικές

Προγραμματιστικές Τεχνικές Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόμων Τοπογράφων Μηχανικών Προγραμματιστικές Τεχνικές Βασίλειος Βεσκούκης Δρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Ρωμύλος Κορακίτης

Διαβάστε περισσότερα

Αναδρομή Ανάλυση Αλγορίθμων

Αναδρομή Ανάλυση Αλγορίθμων Αναδρομή Ανάλυση Αλγορίθμων Παράδειγμα: Υπολογισμός του παραγοντικού Ορισμός του n! n! = n x (n - 1) x x 2 x 1 Ο παραπάνω ορισμός μπορεί να γραφεί ως n! = 1 αν n = 0 n x (n -1)! αλλιώς Παράδειγμα (συνέχ).

Διαβάστε περισσότερα

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου Ανάλυση αλγορίθμων Παράμετροι απόδοσης ενός αλγόριθμου: Χρόνος εκτέλεσης Απαιτούμενοι πόροι, π.χ. μνήμη, επικοινωνία (π.χ. σε κατανεμημένα συστήματα) Προσπάθεια υλοποίησης Ανάλυση της απόδοσης Θεωρητική

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα

Διδάσκων: Κωνσταντίνος Κώστα Διάλεξη Ε7: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Hashing, Final Exam Διδάσκων: Κωνσταντίνος Κώστα ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. Ε7-1

Διαβάστε περισσότερα

Περιεχόμενα. Περιεχόμενα

Περιεχόμενα. Περιεχόμενα Περιεχόμενα xv Περιεχόμενα 1 Αρχές της Java... 1 1.1 Προκαταρκτικά: Κλάσεις, Τύποι και Αντικείμενα... 2 1.1.1 Βασικοί Τύποι... 5 1.1.2 Αντικείμενα... 7 1.1.3 Τύποι Enum... 14 1.2 Μέθοδοι... 15 1.3 Εκφράσεις...

Διαβάστε περισσότερα

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing) Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ανασκόπηση Προβλήματος και Προκαταρκτικών Λύσεων Bit Διανύσματα Τεχνικές Κατακερματισμού & Συναρτήσεις

Διαβάστε περισσότερα

1o Φροντιστήριο ΗΥ240

1o Φροντιστήριο ΗΥ240 1o Φροντιστήριο ΗΥ240 Άσκηση 1 Αποδείξτε τη μεταβατική και τη συμμετρική ιδιότητα του Θ Μεταβατική Ιδιότητα (ορισμός): Αν f(n) = Θ(g(n)) και g(n) = Θ(h(n)) τότε f(n)=θ(h(n)) Για να ισχύει f(n)= Θ(h(n))

Διαβάστε περισσότερα

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση Διάλεξη 17η: Ταξινόμηση και Αναζήτηση Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Ταξινόμηση CS100, 2016-2017 1 / 10 Το πρόβλημα της Αναζήτησης

Διαβάστε περισσότερα

Αλγόριθµοι και Πολυπλοκότητα

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: Πρόβληµα, Στιγµιότυπο, Αλγόριθµος Εργαλεία εκτίµησης πολυπλοκότητας: οι τάξεις Ο(n), Ω(n), Θ(n) Ανάλυση Πολυπλοκότητας Αλγορίθµων

Διαβάστε περισσότερα

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Αναζήτηση. Σειριακή αναζήτηση. Δυαδική Αναζήτηση Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Παραδοχή Στη συνέχεια των διαφανειών (διαλέξεων) η ασυμπτωτική έκφραση (συμβολισμός Ο, Ω, Θ) του χρόνου

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1 Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 8α: Ταξινόμηση-Σύγκριση αλγορίθμων ταξινόμησης Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

Εργαστηριακή Άσκηση 1

Εργαστηριακή Άσκηση 1 Εργαστηριακή Άσκηση 1 Επανάληψη προγραμματισμού Βασικοί Αλγόριθμοι Είσοδος τιμών από το πληκτρολόγιο Σε όλα τα προγράμματα που θα γράψουμε στην συνέχεια του εξαμήνου θα χρειαστεί να εισάγουμε τιμές σε

Διαβάστε περισσότερα

Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3)

Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3) Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3) 3.1 Ασυμπτωτικός συμβολισμός (Ι) Οι ορισμοί που ακολουθούν μας επιτρέπουν να επιχειρηματολογούμε με ακρίβεια για την ασυμπτωτική συμπεριφορά. Οι f(n) και g(n) συμβολίζουν

Διαβάστε περισσότερα

Προγραµµατιστικές Τεχνικές

Προγραµµατιστικές Τεχνικές Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Προγραµµατιστικές Τεχνικές Βασίλειος Βεσκούκης ρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Ρωµύλος Κορακίτης

Διαβάστε περισσότερα

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις Άσκηση 1 Αποδείξτε τη µεταβατική και τη συµµετρική ιδιότητα του Θ. Λύση Μεταβατική Ιδιότητα (ορισµός): Αν f(n) = Θ(g(n)) και g(n) = Θ(h(n)) τότε f(n)=θ(h(n)). Για

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ100) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

Στοιχεία Αλγορίθµων και Πολυπλοκότητας Στοιχεία Αλγορίθµων και Πολυπλοκότητας Ορέστης Τελέλης telelis@unipi.gr Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Ο. Τελέλης Πανεπιστήµιο Πειραιώς Πολυπλοκότητα 1 / 16 «Ζέσταµα» Να γράψετε τις συναρτήσεις

Διαβάστε περισσότερα

Για τις λύσεις των προβλημάτων υπάρχει τρόπος εκτίμησης της επίδοσης (performance) και της αποδοτικότητας (efficiency). Ερωτήματα για την επίδοση

Για τις λύσεις των προβλημάτων υπάρχει τρόπος εκτίμησης της επίδοσης (performance) και της αποδοτικότητας (efficiency). Ερωτήματα για την επίδοση Επίδοση Αλγορίθμων Για τις λύσεις των προβλημάτων υπάρχει τρόπος εκτίμησης της επίδοσης (performance) και της αποδοτικότητας (efficiency). Ερωτήματα για την επίδοση πώς υπολογίζεται ο χρόνος εκτέλεσης

Διαβάστε περισσότερα

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Διαίρει-και-Βασίλευε Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Διαίρει-και-Βασίλευε Γενική

Διαβάστε περισσότερα

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη 0. Εισαγωγή Αντικείμενο μαθήματος: Η θεωρητική μελέτη ανάλυσης των αλγορίθμων. Στόχος: επιδόσεις των επαναληπτικών και αναδρομικών αλγορίθμων.

Διαβάστε περισσότερα

Διάλεξη 23: Τεχνικές Κατακερματισμού II (Hashing)

Διάλεξη 23: Τεχνικές Κατακερματισμού II (Hashing) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 23: Τεχνικές Κατακερματισμού II (Hashing) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Διαχείριση Συγκρούσεων με Ανοικτή Διεύθυνση a) Linear

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 3: Ασυμπτωτικός συμβολισμός Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

Αναζήτηση και ταξινόμηση

Αναζήτηση και ταξινόμηση Αναζήτηση και ταξινόμηση Περιεχόμενα Αναζήτηση (searching): εύρεση ενός στοιχείου σε έναν πίνακα Ταξινόμηση (sorting): αναδιάταξη των στοιχείων ενός πίνακα ώστε να είναι τοποθετημένα με μια καθορισμένη

Διαβάστε περισσότερα

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1 Κατακερματισμός 4/3/2009 Μ.Χατζόπουλος 1 H ιδέα που βρίσκεται πίσω από την τεχνική του κατακερματισμού είναι να δίνεται μια συνάρτησης h, που λέγεται συνάρτηση κατακερματισμού ή παραγωγής τυχαίων τιμών

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 1: Εισαγωγή Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

Εχουμε ήδη συναντήσει μονοδιάστατους πίνακες, οι οποίοι ορίζονται ως εξής:

Εχουμε ήδη συναντήσει μονοδιάστατους πίνακες, οι οποίοι ορίζονται ως εξής: ΠΙΝΑΚΕΣ ΣΤΗΝ ΓΛΩΣΣΑ C Ενας πίνακας είναι ένα σύνολο μεταβλητών του ίδιου τύπου. Το κάθε στοιχείο του πίνακα αναγνωρίζεται από ένα ακέραιο δείκτη (index). Στη C ο δείκτης θέσης αρχίζει από το μηδέν (0)

Διαβάστε περισσότερα

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι Πρόβλημα Ταξινόμησης Quicksort Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Είσοδος : ακολουθία n αριθμών (α 1, α 2,..., α n

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 6α: Αναζήτηση Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commos. Για εκπαιδευτικό

Διαβάστε περισσότερα

Προγραμματιστικές Τεχνικές

Προγραμματιστικές Τεχνικές Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόμων Τοπογράφων Μηχανικών Προγραμματιστικές Τεχνικές Βασίλειος Βεσκούκης Δρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ Επικ. Καθηγητής ΕΜΠ v.vescoukis@cs.ntua.gr

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι Θέματα Απόδοσης Αλγορίθμων 1 Η Ανάγκη για Δομές Δεδομένων Οι δομές δεδομένων οργανώνουν τα δεδομένα πιο αποδοτικά προγράμματα Πιο ισχυροί υπολογιστές πιο σύνθετες εφαρμογές Οι πιο σύνθετες εφαρμογές απαιτούν

Διαβάστε περισσότερα

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι Εισαγωγή στην επιστήμη των υπολογιστών Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι 1 Έννοια Ανεπίσημα, ένας αλγόριθμος είναι μια βήμα προς βήμα μέθοδος για την επίλυση ενός προβλήματος ή την διεκπεραίωση

Διαβάστε περισσότερα

Ταξινόμηση. Σαλτογιάννη Αθανασία

Ταξινόμηση. Σαλτογιάννη Αθανασία Ταξινόμηση Σαλτογιάννη Αθανασία Ταξινόμηση Ταξινόμηση Τι εννοούμε όταν λέμε ταξινόμηση; Ταξινόμηση Τι εννοούμε όταν λέμε ταξινόμηση; Ποια είδη αλγορίθμων ταξινόμησης υπάρχουν; Ταξινόμηση Τι εννοούμε όταν

Διαβάστε περισσότερα

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αναζήτηση με linearsearch, binarysearch, ternarysearch - Ανάλυση Πολυπλοκότητας ternarysearch

Διαβάστε περισσότερα

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο Κατακερµατισµός 1 Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο 1. Αρχεία Σωρού 2. Ταξινοµηµένα Αρχεία Φυσική διάταξη των εγγραφών

Διαβάστε περισσότερα

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο Σχεδίαση Αλγορίθμων Διαίρει και Βασίλευε http://delab.csd.auth.gr/courses/algorithms/ auth 1 Διαίρει και Βασίλευε Η γνωστότερη ρημέθοδος σχεδιασμού αλγορίθμων: 1. Διαιρούμε το στιγμιότυπο του προβλήματος

Διαβάστε περισσότερα

Σχεδίαση και Ανάλυση Αλγορίθμων

Σχεδίαση και Ανάλυση Αλγορίθμων Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 2.0 Πολυπλοκότητα Αλγορίθμων Ασυμπτωτική Πολυπλοκότητα Αναδρομικές Σχέσεις Σταύρος Δ. Νικολόπουλος 2016-17 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων

Διαβάστε περισσότερα

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος Εισαγωγή στους Αλγόριθµους Αλγόριθµοι Τι είναι αλγόριθµος; Τι µπορεί να υπολογίσει ένας αλγόριθµος; Πως αξιολογείται ένας αλγόριθµος; Παύλος Εφραιµίδης pefraimi@ee.duth.gr Αλγόριθµοι Εισαγωγικές Έννοιες

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

Ορθότητα Χωρική αποδοτικότητα. Βελτιστότητα. Θεωρητική ανάλυση Εμπειρική ανάλυση. Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Ορθότητα Χωρική αποδοτικότητα. Βελτιστότητα. Θεωρητική ανάλυση Εμπειρική ανάλυση. Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1 Ανάλυση Αλγορίθμων Θέματα Θέματα: Ορθότητα Χρονική αποδοτικότητα Χωρική αποδοτικότητα Βελτιστότητα Προσεγγίσεις: Θεωρητική ανάλυση Εμπειρική ανάλυση Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1 Θεωρητική

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ Κων. Κόκκινος ΠΙΝΑΚΕΣ (ARRAYS) Είναι χώροι της μνήμης για προσωρινή αποθήκευση δεδομένων του ίδιου τύπου. Οι πίνακες είναι δομές δεδομένων που τις

Διαβάστε περισσότερα

5.1. Προσδοκώμενα αποτελέσματα

5.1. Προσδοκώμενα αποτελέσματα 5.1. Προσδοκώμενα αποτελέσματα Όταν θα έχεις ολοκληρώσει τη μελέτη αυτού του κεφαλαίου θα έχεις κατανοήσει τις τεχνικές ανάλυσης των αλγορίθμων, θα μπορείς να μετράς την επίδοση των αλγορίθμων με βάση

Διαβάστε περισσότερα

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο Κατακερματισμός 1 Αποθήκευση εδομένων (σύνοψη) Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο Παραδοσιακά, μία σχέση (πίνακας/στιγμιότυπο) αποθηκεύεται σε ένα αρχείο Αρχείο δεδομένων

Διαβάστε περισσότερα

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο Πολλαπλασιασμός μεγάλων ακεραίων (1) Για να πολλαπλασιάσουμε δύο ακεραίους με n 1 και n 2 ψηφία με το χέρι, θα εκτελέσουμε n 1 n 2 πράξεις πολλαπλασιασμού Πρόβλημα ρβημ όταν έχουμε πολλά ψηφία: A = 12345678901357986429

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 6: ΠαραδείγματαΑνάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα -Γραμμική

Διαβάστε περισσότερα

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

Δομές δεδομένων (2) Αλγόριθμοι Δομές δεδομένων (2) Αλγόριθμοι Παράγωγοι τύποι (struct) σύνοψη προηγουμένων Πίνακες: πολλές μεταβλητές ίδιου τύπου Παράγωγοι τύποι ή Δομές (struct): ομαδοποίηση μεταβλητών διαφορετικού τύπου struct Student

Διαβάστε περισσότερα

Ο ΑΤΔ Λεξικό. Σύνολο στοιχείων με βασικές πράξεις: Δημιουργία Εισαγωγή Διαγραφή Μέλος. Υλοποιήσεις

Ο ΑΤΔ Λεξικό. Σύνολο στοιχείων με βασικές πράξεις: Δημιουργία Εισαγωγή Διαγραφή Μέλος. Υλοποιήσεις Ο ΑΤΔ Λεξικό Σύνολο στοιχείων με βασικές πράξεις: Δημιουργία Εισαγωγή Διαγραφή Μέλος Υλοποιήσεις Πίνακας με στοιχεία bit (0 ή 1) (bit vector) Λίστα ακολουθιακή (πίνακας) ή συνδεδεμένη Είναι γνωστό το μέγιστο

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Το if-else statement Το if-else statement δουλεύει καλά όταν στο condition θέλουμε να περιγράψουμε μια επιλογή με δύο πιθανά ενδεχόμενα.

Διαβάστε περισσότερα

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΔΕΔΟΜΕΝΑ ΑΛΓΟΡΙΘΜΟΙ -ΠΛΗΡΟΦΟΡΙΑ: Δεδομένα: Αναπαράσταση της Πραγματικότητας Μπορούν να γίνουν αντιληπτά με μια από τις αισθήσεις μας Πληροφορία: Προκύπτει από

Διαβάστε περισσότερα

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης Σύνοψη Προηγούμενου Πίνακες (Arrays Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Διαδικαστικά θέματα. Aντικείμενο Μαθήματος. Aντικείμενα, Κλάσεις, Μέθοδοι, Μεταβλητές.

Διαβάστε περισσότερα

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS. Εισαγωγή στη JAVA Σύντομο Ιστορικό Η Java και το διαδίκτυο Το πρώτο απλό πρόγραμμα σε JAVA Μεταβλητές και σταθερές Παραστάσεις και εντολές Οι βασικοί τύποι δεδομένων στη Java Οι βασικοί Τελεστές στη Java

Διαβάστε περισσότερα

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση 1 Ταξινόµηση! Δεδοµένα: Δίνεται ένας πίνακας data από N ακεραίους! Ζητούµενο: Να ταξινοµηθούν τα περιεχόµενα σε αύξουσα αριθµητική σειρά:!i : 0 data[i]

Διαβάστε περισσότερα

Αλγόριθμοι ταξινόμησης

Αλγόριθμοι ταξινόμησης Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης BuubleSort, SelectionSort, InsertionSort, Merger Sort, Quick Soft ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι

Διαβάστε περισσότερα

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1 Διαίρει-και-Βασίλευε Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Διαίρει-και-Βασίλευε Γενική μέθοδος

Διαβάστε περισσότερα

p

p ΑΝΑ ΡΟΜΙΚΗ ΤΑΞΙΝΟΜΗΣΗ- ΑΣΚΗΣΕΙΣ Οι μέθοδοι ταξινόμησης QUICK SORT και MERGE SORT κωδικοποιούνται εύκολα αναδρομικά Oι δυο αναδροµικοί µέθοδοι δέχονται 1ο όρισµα τον πίνακα, και δεν επιστρέφουν τίποτα.

Διαβάστε περισσότερα

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

οµές εδοµένων 3 ο Εξάµηνο Τµήµα Πανεπιστήµιο Πληροφορικής Ιωαννίνων ΟΜΕΣ Ε ΟΜΕΝΩΝ

οµές εδοµένων 3 ο Εξάµηνο Τµήµα Πανεπιστήµιο Πληροφορικής Ιωαννίνων ΟΜΕΣ Ε ΟΜΕΝΩΝ Τµήµα Πανεπιστήµιο Πληροφορικής Ιωαννίνων ΟΜΕΣ Ε ΟΜΕΝΩΝ ΕΝΟΤΗΤΑ 1 ΕΙΣΑΓΩΓΗ 1 εδοµένα Σύνολο από πληροφορίες που πρέπει να αποθηκευτούν σε έναν υπολογιστή Υπολογιστικό Μοντέλο ένας επεξεργαστής και µεγάλος

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15 Οι βασικές έννοιες που θα καλύψουμε Ομαδοποίηση αντικειμένων Εισαγωγή στις συλλογές Γενικές κλάσεις Iterators Συλλογές (ειδικά την ArrayList) Συνεχίζουμε την αναφορά στο θέμα της αφαίρεσης (abstraction)

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. Διάλεξη : Παραδείγματα Ανάλυσης Πολυπλοκότητας / Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, 6 παραδείγματα

Διαβάστε περισσότερα

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή ονάδα Δικτύων και Επικοινωνιών ΗΥ Τομέας Πληροφορικής, αθηματικών και Στατιστικής ΓΕΩΠΟΙΚΟ ΠΑΕΠΙΣΤΗΙΟ ΑΘΗΩ Εισαγωγή στην Επιστήμη των ΗΥ άθημα-4 url: http://openeclass.aua.gr (AOA0) Λογισμικό Υπολογιστή

Διαβάστε περισσότερα

Δομές Αναζήτησης. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση

Δομές Αναζήτησης. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση Δομές Αναζήτησης χειρότερη περίπτωση μέση περίπτωση εισαγωγή αναζήτηση επιλογή εισαγωγή αναζήτηση διατεταγμένος πίνακας διατεταγμένη λίστα μη διατεταγμένος πίνακας μη διατεταγμένη λίστα δένδρο αναζήτησης

Διαβάστε περισσότερα

Κατακερματισμός (Hashing)

Κατακερματισμός (Hashing) Κατακερματισμός (Hashing) O κατακερματισμός είναι μια τεχνική οργάνωσης ενός αρχείου. Είναι αρκετά δημοφιλής μέθοδος για την οργάνωση αρχείων Βάσεων Δεδομένων, καθώς βοηθάει σημαντικά στην γρήγορη αναζήτηση

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα