#2. Templates, η βιβλιοθήκη STL, μέτρηση χρόνου εκτέλεσης κώδικα, αλγόριθμοι ταξινόμησης, αλγόριθμοι αναζήτησης

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

Download "#2. Templates, η βιβλιοθήκη STL, μέτρηση χρόνου εκτέλεσης κώδικα, αλγόριθμοι ταξινόμησης, αλγόριθμοι αναζήτησης"

Transcript

1 Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος ΤΕΙ Ηπείρου - Άρτα Δομές Δεδομένων και Αλγόριθμοι (εργαστήριο) Γκόγκος Χρήστος #2. Templates, η βιβλιοθήκη STL, μέτρηση χρόνου εκτέλεσης κώδικα, αλγόριθμοι ταξινόμησης, αλγόριθμοι αναζήτησης 1. Templates Τα templates είναι ένας μηχανισμός της C++ ο οποίος μπορεί να διευκολύνει τον προγραμματισμό. Η γλώσσα C++ είναι strongly typed και αυτό μπορεί να οδηγήσει στην ανάγκη υλοποίησης διαφορετικών εκδόσεων μιας συνάρτησης έτσι ώστε να υποστηριχθεί η ίδια λογική για διαφορετικούς τύπους δεδομένων. Για παράδειγμα, η εύρεση του μεγίστου ανάμεσα σε τρεις τιμές θα έπρεπε να υλοποιηθεί με δύο συναρτήσεις έτσι ώστε να υποστηρίζει τόσο τους ακέραιους όσο και τους πραγματικούς αριθμούς, όπως φαίνεται στον κώδικα που ακολουθεί. int min(int a, int b, int c){ int m = a; if (b<m) m=b; if (c<m) m=c; return m; double min(double a, double b, double c){ double m = a; if (b<m) m=b; if (c<m) m=c; return m; int main(int argc, char* argv[]){ cout << min(5,10, 7) << endl; cout << min(3.1, 2.5, 5.2) << endl; Κώδικας 1. Παράδειγμα με επανάληψη λογικής κώδικα Με τη χρήση των templates μπορεί να γραφεί κώδικας που να υποστηρίζει ταυτόχρονα πολλούς τύπους δεδομένων. Ειδικότερα, χρησιμοποιείται, η δεσμευμένη λέξη template και εντός των συμβόλων < και > τοποθετείται η λίστα των παραμέτρων του template. Ο μεταγλωττιστής αναλαμβάνει να δημιουργήσει όλες τις απαιτούμενες παραλλαγές των συναρτήσεων που θα χρειαστούν στον κώδικα που μεταγλωττίζει. [1]

2 template <class T> T min(t a, T b, T c){ T m = a; if (b<m) m=b; if (c<m) m=c; return m; int main(int argc, char* argv[]){ cout << min(5,10, 7) << endl; cout << min(3.1, 2.5, 5.2) << endl; Κώδικας 2. Παράδειγμα με χρήση template 2. Η βιβλιοθήκη STL Η βιβλιοθήκη STL (Standard Template Library) της C++ προσφέρει έτοιμη λειτουργικότητα για πολλά θέματα τα οποία ανακύπτουν συχνά στον προγραμματισμό εφαρμογών. Πρόκειται για μια generic βιβλιοθήκη, δηλαδή κάνει εκτεταμένη χρήση των templates. Βασικά τμήματα της STL είναι οι containers, οι αλγόριθμοι και οι iterators. 2.1 Containers H STL υποστηρίζει έναν αριθμό από containers στους οποίους μπορούν να αποθηκευτούν δεδομένα. Ένα από τα containers είναι το vector. Στο ακόλουθο παράδειγμα φαίνεται πως η χρήση του vector διευκολύνει τον προγραμματισμό καθώς δεν απαιτούνται εντολές διαχείρισης μνήμης ενώ η δομή είναι δυναμική, δηλαδή το μέγεθος της μπορεί να μεταβάλλεται κατά τη διάρκεια εκτέλεσης του προγράμματος. #include <vector> int main(int argc, char* argv[]){ int x; cout << "Enter size of vector: "; cin >> x; vector<int> v(x); for(int i=0;i<x;i++) v[i]=i; v.push_back(99); for(int i=0;i<v.size();i++) cout << v[i] << " "; Enter size of vector: Κώδικας 3. Παράδειγμα με χρήση του container, vector 2.2 Αλγόριθμοι H STL διαθέτει πληθώρα αλγορίθμων που μπορούν να εφαρμοστούν σε διάφορα προβλήματα. Για παράδειγμα, προκειμένου να ταξινομηθούν δεδομένα μπορεί να χρησιμοποιηθεί η συνάρτηση sort της STL η οποία υλοποιεί τον αλγόριθμο Introspective Sort. #include <algorithm> [2]

3 int a[]={45,32,16,11,7,18,21,16,11,15; cout << "BEFORE: "; for (int i = 0; i < 10; i++) cout << a[i] << " "; cout << endl; sort(a, a + 10); cout << "AFTER: "; for (int i = 0; i < 10; i++) cout << a[i] << " "; cout << endl; return 0; BEFORE: AFTER: Κώδικας 4. Ταξινόμηση πίνακα με τη συνάρτηση sort της STL Αντίστοιχα, για να γίνει αναζήτηση ενός στοιχείου σε έναν ταξινομημένο πίνακα μπορεί να χρησιμοποιηθεί η συνάρτηση binary_search, όπως φαίνεται στον ακόλουθο κώδικα. #include <algorithm> int a[] = { 45, 32, 16, 11, 7, 18, 21, 16, 11, 15 ; int key; sort(a, a + 10); cout << "Enter a value "; cin >> key; if (binary_search(a, a + 10, key)) cout << "found" << endl; else cout << "not found" << endl; Enter a value 7 found Enter a value 8 not found Κώδικας 5. Αναζήτηση στοιχείου σε ταξινομημένο πίνακα με τη συνάρτηση binary_search της STL 2.3 Iterators Οι iterators αποτελούν γενικεύσεις των δεικτών και επιτρέπουν την πλοήγηση στα στοιχεία ενός container με τέτοιο τρόπο έτσι ώστε να μπορούν να χρησιμοποιηθούν οι ίδιοι αλγόριθμοι σε περισσότερα του ενός containers. Στον ακόλουθο κώδικα παρουσιάζεται το πέρασμα από τα στοιχεία ενός vector με 3 τρόπους. Καθώς το container είναι τύπου vector παρουσιάζεται αρχικά το πέρασμα από τις τιμές του με τη χρήση δεικτοδότησης τύπου πίνακα. Στη συνέχεια χρησιμοποιείται ένας iterator για πέρασμα από την αρχή προς το τέλος και μετά ένας reverse_iterator για πέρασμα από το τέλος προς την αρχή. #include <vector> #include <algorithm> // vector<int> v = {23,13,31,17; // c++11 feature vector<int> v; v.push_back(23); v.push_back(13); [3]

4 v.push_back(31); v.push_back(17); cout << "iteration with index: "; for(int i=0;i<v.size();i++) cout << v[i] << " "; sort(v.begin(), v.end()); cout << endl << "forward iteration with iterator: "; vector<int>::iterator iter; for(iter=v.begin();iter!=v.end();iter++) cout << *iter << " "; cout << endl << "backward iteration with iterator: "; vector<int>::reverse_iterator riter; for(riter=v.rbegin();riter!=v.rend();riter++) cout << *riter << " "; iteration with index: forward iteration with iterator: backward iteration with iterator: Κώδικας 6. Διάσχιση στοιχείων ενός vector με τη χρήση iterator 3. Μέτρηση χρόνου εκτέλεσης κώδικα Ο ακόλουθος κώδικας μετράει το χρόνο που απαιτεί ο υπολογισμός του αθροίσματος των τετραγωνικών ριζών δέκα εκατομμυρίου τυχαίων ακέραιων αριθμών με τιμές στο διάστημα από 0 έως Η μέτρηση του χρόνου πραγματοποιείται με τη συνάρτηση clock() η οποία επιστρέφει τον αριθμό από clock ticks που έχουν περάσει από τη στιγμή που το πρόγραμμα ξεκίνησε την εκτέλεση του. Ο αριθμός των δευτερολέπτων που έχουν περάσει προκύπτει διαιρώντας τον αριθμό των clock ticks με τη σταθερά CLOCKS_PER_SEC. #include <ctime> #include <random> #include <cmath> clock_t t1, t2; t1 = clock(); int seed = 1729; int lower = 0; int upper = 10000; mt19937 mt(seed); uniform_int_distribution<int> dist(lower, upper); double sum = 0.0; for (int i=1;i<= ;i++){ int x = dist(mt); sum += sqrt(x); cout << sum << endl; t2 = clock(); double elapsed_time = (double) (t2-t1)/clocks_per_sec; cout << "Elapsed time " << elapsed_time << endl; e+008 Elapsed time Κώδικας 7. Μέτρηση χρόνου με την clock() Ένας άλλος τρόπος με τον οποίο μπορεί να μετρηθεί ο χρόνος εκτέλεσης ενός κώδικα είναι με τη χρήση των time_points, όπως στο παράδειγμα που ακολουθεί. #include <random> #include <cmath> [4]

5 #include <chrono> using namespace std::chrono; high_resolution_clock::time_point t1 = high_resolution_clock::now(); int seed = 1729; int lower = 0; int upper = 10000; mt19937 mt(seed); uniform_int_distribution<int> dist(lower, upper); double sum = 0.0; for (int i=1;i<= ;i++){ int x = dist(mt); sum += sqrt(x); cout << sum << endl; high_resolution_clock::time_point t2 = high_resolution_clock::now(); auto duration = duration_cast<microseconds>( t2 - t1).count(); cout << "Time elapsed: " << duration << " microseconds " << duration / << " seconds" << endl; e+008 Time elapsed: microseconds seconds Κώδικας 8. Μέτρηση χρόνου εκτέλεσης με time_point (c++11) 4. Αλγόριθμοι ταξινόμησης 4.1 Ταξινόμηση με εισαγωγή (insertion-sort) Ο κώδικας ταξινόμησης με εισαγωγή καθώς και η κλήση του από κύριο πρόγραμμα για την αύξουσα ταξινόμηση ενός πίνακα 10 θέσεων παρουσιάζεται στον κώδικα που ακολουθεί. Η ταξινόμηση με εισαγωγή 1 λειτουργεί δημιουργώντας μια ταξινομημένη λίστα στο αριστερό άκρο των δεδομένων και επαναληπτικά τοποθετεί το στοιχείο το οποίο βρίσκεται δεξιά της ταξινομημένης λίστας στη σωστή θέση σε σχέση με τα ήδη ταξινομημένα στοιχεία. void insertion_sort(t a[], int n) { for (int i = 1; i < n; i++) { T key = a[i]; int j = i - 1; while ((j >= 0) && (key < a[j])) { a[j + 1] = a[j]; j--; a[j + 1] = key; int a[]={45,32,16,11,7,18,21,16,11,15; insertion_sort(a, 10); for(int i=0;i<10;i++) cout << a[i] << " "; Κώδικας 9. Ταξινόμηση με εισαγωγή 1 [5]

6 4.2 Ταξινόμηση με συγχώνευση (merge-sort) Ο κώδικας ταξινόμησης με συγχώνευση παρουσιάζεται στη συνέχεια. Η ταξινόμηση με συγχώνευση 2 είναι αναδρομικός αλγόριθμος και στηρίζεται στη συγχώνευση ταξινομημένων υποακολουθιών έτσι ώστε να δημιουργούνται νέες ταξινομημένες υποακολουθίες. void merge(t a[], int l, int m, int r) { T la[m - l + 1]; T ra[r - m]; for (int i = 0; i < m - l + 1; i++) la[i] = a[l + i]; for (int i = 0; i < r - m; i++) ra[i] = a[m i]; int i = 0, j = 0, k = l; while ((i < m - l + 1) && (j < r - m)) { if (la[i] < ra[j]) { a[k] = la[i]; i++; else { a[k] = ra[j]; j++; k++; if (i == m - l + 1) { while (j < r - m) { a[k] = ra[j]; j++; k++; else { while (i < m - l + 1) { a[k] = la[i]; i++; k++; void merge_sort(t a[], int l, int r) { if (l < r) { int m = (l + r) / 2; merge_sort(a, l, m); merge_sort(a, m + 1, r); merge(a, l, m, r); void merge_sort(t a[], int N) { merge_sort(a, 0, N - 1); int a[]={45,32,16,11,7,18,21,16,11,15; merge_sort(a, 10); for(int i=0;i<10;i++) 2 [6]

7 cout << a[i] << " "; Κώδικας 10. Ταξινόμηση με συγχώνευση 4.3 Γρήγορη ταξινόμηση (quick-sort) Ο κώδικας της γρήγορης ταξινόμησης 3 παρουσιάζεται στη συνέχεια. Πρόκειται για κώδικα ο οποίος καλείται αναδρομικά σε υποακολουθίες των δεδομένων και σε κάθε κλήση επιλέγει ένα στοιχείο (pivot) και διαχωρίζει τα υπόλοιπα στοιχεία έτσι ώστε αριστερά να είναι τα στοιχεία που είναι μικρότερα του pivot και δεξιά αυτά τα οποία είναι μεγαλύτερα. int partition(t a[], int l, int r) { int p = l; int i = l + 1; for (int j = l + 1; j <= r; j++) { if (a[j] < a[p]) { swap(a[j], a[i]); i++; swap(a[p], a[i - 1]); return i - 1; void quick_sort(t a[], int l, int r) { if (l >= r) return; else { int p = partition(a, l, r); quick_sort(a, l, p - 1); quick_sort(a, p + 1, r); void quick_sort(t a[], int N) { quick_sort(a, 0, N - 1); int a[]={45,32,16,11,7,18,21,16,11,15; quick_sort(a, 10); for(int i=0;i<10;i++) cout << a[i] << " "; Κώδικας 11.Γρήγορη ταξινόμηση 4.4 Σύγκριση χρόνου εκτέλεσης αλγορίθμων ταξινόμησης Στη συνέχεια παρουσιάζεται μια σύγκριση των χρόνων εκτέλεσης για τους «γρήγορους» αλγορίθμους ταξινόμησης merge-sort, quick-sort καθώς και για τον αλγόριθμο ταξινόμησης της βιβλιοθήκης STL (συνάρτηση sort). Η σύγκριση αφορά τυχαία ακέραια δεδομένα με τιμές στο διάστημα από 0 έως 10 6 επιλεγμένα από ομοιόμορφη κατανομή. Τα 3 [7]

8 μεγέθη των πινάκων εισόδου είναι: 5.000, , , , , και Τα αποτελέσματα της σύγκρισης παρουσιάζονται στον Πίνακα 1 και στην Εικόνα 1. Μέγεθος εισόδου Merge Sort Quick Sort C++ std::sort Πίνακας 1 Εικόνα 1 Ο κώδικας με τον οποίο επιτυγχάνεται η εμπειρική σύγκριση των αλγορίθμων ταξινόμησης ακολουθεί στη συνέχεια. #include <random> #include <iomanip> #include <algorithm> #include <ctime> #include <cmath> void merge(t a[], int l, int m, int r) { T la[m - l + 1]; T ra[r - m]; for (int i = 0; i < m - l + 1; i++) la[i] = a[l + i]; for (int i = 0; i < r - m; i++) ra[i] = a[m i]; int i = 0, j = 0, k = l; while ((i < m - l + 1) && (j < r - m)) { if (la[i] < ra[j]) { a[k] = la[i]; i++; [8]

9 else { a[k] = ra[j]; j++; k++; if (i == m - l + 1) { while (j < r - m) { a[k] = ra[j]; j++; k++; else { while (i < m - l + 1) { a[k] = la[i]; i++; k++; void merge_sort(t a[], int l, int r) { if (l < r) { int m = (l + r) / 2; merge_sort(a, l, m); merge_sort(a, m + 1, r); merge(a, l, m, r); void merge_sort(t a[], int N) { merge_sort(a, 0, N - 1); int partition(t a[], int l, int r) { int p = l; int i = l + 1; for (int j = l + 1; j <= r; j++) { if (a[j] < a[p]) { swap(a[j], a[i]); i++; swap(a[p], a[i - 1]); return i - 1; void quick_sort(t a[], int l, int r) { if (l >= r) return; else { int p = partition(a, l, r); quick_sort(a, l, p - 1); quick_sort(a, p + 1, r); void quick_sort(t a[], int N) { quick_sort(a, 0, N - 1); void benchmark_sort_algorithm(string alg) { clock_t t1, t2; mt19937 mt(1729); uniform_int_distribution<int> dist(0, ); [9]

10 int sizes[] = { 5000, 10000, 20000, 40000, 80000, , ; for (int i = 0; i < 7; i++) { int N = sizes[i]; int *a = new int[n]; for (int i = 0; i < N; i++) a[i] = dist(mt); t1 = clock(); if (alg.compare("merge-sort") == 0) merge_sort(a, N); else if (alg.compare("quick-sort") == 0) quick_sort(a, N); else if (alg.compare("stl-sort") == 0) sort(a, a + N); t2 = clock(); double elapsed_time = (double) (t2 - t1) / CLOCKS_PER_SEC; cout << fixed << setprecision(3); cout << "Elapsed time " << alg << "\t" << sizes[i] << "\t" << elapsed_time << endl; delete [] a; benchmark_sort_algorithm("merge-sort"); benchmark_sort_algorithm("quick-sort"); benchmark_sort_algorithm("stl-sort"); Κώδικας 12. Σύγκριση χρόνου εκτέλεσης αλγορίθμων ταξινόμησης 4.5 Ένας ακόμη αλγόριθμος ταξινόμησης Υπάρχουν πολλοί άλλοι αλγόριθμοι ταξινόμησης. Ένας από αυτούς είναι ο αλγόριθμος κατάταξης (rank-sort) o οποίος λειτουργεί ως εξής: Για κάθε στοιχείο του δεδομένου πίνακα a που επιθυμούμε να ταξινομήσουμε υπολογίζεται μια τιμή κατάταξης (rank). Η τιμή κατάταξης ενός στοιχείου του πίνακα είναι το πλήθος των μικρότερων από αυτό στοιχείων συν το πλήθος των ίσων με αυτό στοιχείων που έχουν μικρότερο δείκτη σε σχέση με αυτό το στοιχείο (δηλαδή βρίσκονται αριστερά του). Δηλαδή ισχύει ότι η τιμή κατάταξης ενός στοιχείου x του πίνακα είναι ίση με το άθροισμα 2 όρων: του πλήθους των μικρότερων στοιχείων του x από όλο τον πίνακα και του πλήθους των ίσων με το x στοιχείων που έχουν μικρότερο δείκτη σε σχέση με το x. Για παράδειγμα στην ακολουθία τιμών a=[44, 21, 78, 16, 56, 21] θα πρέπει να δημιουργηθεί ένας νέος πίνακας r = [3, 1, 5, 0, 4, 2]. Έχοντας υπολογίσει τον πίνακα r θα πρέπει τα στοιχεία του a να αντιγραφούν σε ένα νέο βοηθητικό πίνακα temp έτσι ώστε κάθε τιμή που υπάρχει στον πίνακα r να λειτουργεί ως δείκτης για το που πρέπει να τοποθετηθεί το αντίστοιχο στοιχείο του a στον πίνακα temp. Τέλος θα πρέπει να αντιγραφεί ο πίνακας temp στον πίνακα a. Στη συνέχεια παρουσιάζεται ο κώδικας του αλγορίθμου rank-sort. Παρουσιάζονται δύο υλοποιήσεις. Η πρώτη υλοποίηση (rank_sort) αφορά τον αλγόριθμο όπως έχει περιγραφεί παραπάνω ενώ η δεύτερη (rank_sort_in_place) είναι από το βιβλίο «Δομές Δεδομένων, Αλγόριθμοι και Εφαρμογές στη C++ του Sartaj Sahnii, Εκδόσεις Τζιόλα, 2004» στη σελίδα 63 (πρόγραμμα 2.11) και δεν απαιτεί τη χρήση του βοηθητικού πίνακα temp, συνεπώς είναι αποδοτικότερος. #include <algorithm> void rank_sort(t a[], int n) { int r[n]={0; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) [10]

11 if (a[j] < a[i] (a[j] == a[i] && j < i)) r[i]++; int temp[n]; for (int i = 0; i < n; i++) temp[r[i]] = a[i]; for (int i = 0; i < n; i++) a[i] = temp[i]; void rank_sort_in_place(t a[], int n){ int r[n] = {0; for (int i=0;i<n;i++) for(int j=0;j<i;j++) if (a[j]<=a[i]) r[i]++; else r[j]++; for (int i=0;i<n;i++) while(r[i]!=i){ int t = r[i]; swap(a[i], a[t]); swap(r[i], r[t]); int a[]={45,32,16,11,7,18,21,16,11,15; cout << "RANK SORT: "; rank_sort(a,10); for(int i=0;i<10;i++) cout << a[i] << " "; cout << endl << "RANK SORT (IN PLACE): "; int b[]={45,32,16,11,7,18,21,16,11,15; rank_sort_in_place(b,10); for(int i=0;i<10;i++) cout << b[i] << " "; RANK SORT: RANK SORT (IN PLACE): Κώδικας 13. Ταξινόμηση κατάταξης 5. Αλγόριθμοι αναζήτησης 5.1 Σειριακή αναζήτηση (sequential-search) Η σειριακή αναζήτηση είναι ο απλούστερος αλγόριθμος αναζήτησης. Εξετάζει τα στοιχεία ένα προς ένα στη σειρά μέχρι να βρει το στοιχείο που αναζητείται. Το πλεονέκτημα του αλγορίθμου είναι ότι μπορεί να εφαρμοστεί σε μη ταξινομημένους πίνακες. int sequential_search(t a[], int n, T key) { for (int i = 0; i < n; i++) { if (a[i] == key) return i; return -1; int main(int argc, char** argv){ int a[]={5,11,45,23,10,17,32,8,9,4; [11]

12 int key; cout << "Search for: "; cin >> key; int pos = sequential_search(a, 10, key); if (pos==-1) cout << "Not found" << endl; else cout << "Found at position " << pos << endl; Search for: 45 Found at position 2 Search for: 99 Not found Κώδικας 14. Σειριακή αναζήτηση 5.2 Δυαδική αναζήτηση (binary-search) Η δυαδική αναζήτηση μπορεί να εφαρμοστεί μόνο σε ταξινομημένα δεδομένα. Διαιρεί επαναληπτικά την ακολουθία σε 2 υποακολουθίες και απορρίπτει την ακολουθία στην οποία συμπεραίνει ότι δεν μπορεί να βρεθεί το στοιχείο. int binary_search(t a[], int l, int r, T key) { int m = (l + r) / 2; if (l > r) { return -1; else if (a[m] == key) { return m; else if (key < a[m]) { return binary_search(a, l, m - 1, key); else { return binary_search(a, m + 1, r, key); int binary_search(t a[], int n, T key) { return binary_search(a, 0, n-1, key); int main(int argc, char** argv){ int a[]={11,45,53,60,67,72,88,91,94,98; int key; cout << "Search for: "; cin >> key; int pos = binary_search(a, 10, key); if (pos==-1) cout << "Not found" << endl; else cout << "Found at position " << pos << endl; Search for: 60 Found at position 3 Search for: 51 Not found Κώδικας 15. Δυαδική αναζήτηση [12]

13 5.3 Αναζήτηση με παρεμβολή (interpolation-search) Η αναζήτηση με παρεμβολή (interpolation-search) είναι μια παραλλαγή της δυαδικής αναζήτησης και μπορεί να εφαρμοστεί μόνο σε ταξινομημένα δεδομένα. Αντί να χρησιμοποιηθεί η τιμή 50% για να διαχωριστούν τα δεδομένα σε 2 ισομεγέθεις λίστες (όπως συμβαίνει στη δυαδική αναζήτηση) υπολογίζεται μια τιμή η οποία εκτιμάται ότι θα οδηγήσει πλησιέστερα στο στοιχείο που αναζητείται. Αν l είναι ο δείκτης του αριστερότερου στοιχείου της ακολουθίας και r o δείκτης του δεξιότερου στοιχείου της ακολουθίας τότε υπολογίζεται ο συντελεστής c = (key a[l])/(a[r] a[l]) όπου key είναι το στοιχείο προς αναζήτηση και a είναι η ακολουθία τιμών στην οποία αναζητείται το key. Η ακολουθία των δεδομένων διαχωρίζεται με βάση τον συντελεστή c σε δύο υποακολουθίες. Η διαδικασία επαναλαμβάνεται ανάλογα με τη δυαδική αναζήτηση. Στη συνέχεια παρουσιάζεται ο κώδικας της αναζήτησης με παρεμβολή. int interpolation_search(t a[], int l, int r, T key) { int m; if (l > r) { return -1; else if (l == r) { m = l; else { double c = (double) (key - a[l]) / (double) (a[r] - a[l]); if ((c < 0) (c > 1)) return -1; m = (int) (l + (r - l) * c); if (a[m] == key) { return m; else if (key < a[m]) { return interpolation_search(a, l, m - 1, key); else { return interpolation_search(a, m + 1, r, key); int interpolation_search(t a[], int n, T key) { return interpolation_search(a, 0, n-1, key); int main(int argc, char** argv){ int a[]={11,45,53,60,67,72,88,91,94,98; int key; cout << "Search for: "; cin >> key; int pos = interpolation_search(a, 10, key); if (pos==-1) cout << "Not found" << endl; else cout << "Found at position " << pos << endl; Search for: 60 Found at position 3 Search for: 51 Not found Κώδικας 16. Αναζήτηση με παρεμβολή [13]

14 5.4 Σύγκριση χρόνου εκτέλεσης αλγορίθμων αναζήτησης Στη συνέχεια παρουσιάζεται μια σύγκριση των χρόνων εκτέλεσης των αλγορίθμων αναζήτησης binary-search, interpolation-search και του αλγορίθμου αναζήτησης της βιβλιοθήκης STL (συνάρτηση binary_search) για ταξινομημένα ακέραια δεδομένα με τιμές στο διάστημα από 0 έως Η σύγκριση εξετάζει τα ακόλουθα μεγέθη πινάκων: 5.000, , , , , και Οι χρόνοι εκτέλεσης αφορούν τους συνολικούς χρόνους που απαιτούνται έτσι ώστε να αναζητηθούν τυχαίες τιμές με καθένα από τους αλγορίθμους. Τα αποτελέσματα της σύγκρισης παρουσιάζονται στον Πίνακα 2 και στην Εικόνα 2. Μέγεθος εισόδου Binary Search Interpolation Search C++ std::binary_search Πίνακας 2 Εικόνα 2 Ο κώδικας με τον οποίο επιτυγχάνεται η εμπειρική σύγκριση των αλγορίθμων αναζήτησης ακολουθεί στη συνέχεια. #include <random> #include <iomanip> #include <algorithm> #include <ctime> #include <cmath> int binary_search(t a[], int l, int r, T key) { int m = (l + r) / 2; if (l > r) { return -1; else if (a[m] == key) { return m; else if (key < a[m]) { return binary_search(a, l, m - 1, key); else { return binary_search(a, m + 1, r, key); [14]

15 int interpolation_search(t a[], int l, int r, T key) { int m; if (l > r) { return -1; else if (l == r) { m = l; else { double c = (double) (key - a[l]) / (double) (a[r] - a[l]); if ((c < 0) (c > 1)) return -1; m = (int) (l + (r - l) * c); if (a[m] == key) { return m; else if (key < a[m]) { return interpolation_search(a, l, m - 1, key); else { return interpolation_search(a, m + 1, r, key); void benchmark_search_algorithm(string alg) { clock_t t1, t2; mt19937 mt(1729); uniform_int_distribution<int> dist(0, ); int M = ; int keys[m]; for (int i = 0; i < M; i++) { keys[i] = dist(mt); int sizes[] = { 5000, 10000, 20000, 40000, 80000, , ; for (int i = 0; i < 7; i++) { int N = sizes[i]; int *a = new int[n]; for (int i = 0; i < N; i++) a[i] = dist(mt); sort(a, a + N); t1 = clock(); int c = 0; if (alg.compare("binary-search") == 0) { for (int j = 0; j < M; j++) if (binary_search(a, 0, N - 1, keys[j])!= -1) c++; else if (alg.compare("interpolation-search") == 0) { for (int j = 0; j < M; j++) if (interpolation_search(a, 0, N - 1, keys[j])!= -1) c++; else if (alg.compare("stl-binary-search") == 0) for (int j = 0; j < M; j++) if (binary_search(a, a + N, keys[j])) c++; t2 = clock(); double elapsed_time = (double) (t2 - t1) / CLOCKS_PER_SEC; cout << fixed << setprecision(3); cout << "Values found " << c << " Elapsed time " << alg << "\t" << sizes[i] << "\t" << elapsed_time << endl; delete [] a; benchmark_search_algorithm("binary-search"); benchmark_search_algorithm("interpolation-search"); benchmark_search_algorithm("stl-binary-search"); [15]

16 Κώδικας 17. Σύγκριση χρόνου εκτέλεσης αλγορίθμων αναζήτησης Χρήσιμοι σύνδεσμοι [16]

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα: #2 Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Δομές Δεδομένων και Αλγόριθμοι (εργαστήριο) Γκόγκος Χρήστος Ερώτημα Α 1. Να γράψετε τις εντολές

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

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 8 Quick Sort 1 / 11 Ο αλγόριθμος QuickSort 1 Προτάθηκε από τον CAR (Tony) Hoare το 1961 2 Ο αλγόριθμος

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

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Δομές Δεδομένων και Αλγόριθμοι (εργαστήριο) Γκόγκος Χρήστος #4. Heaps (σωροί), η ταξινόμηση HeapSort,

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

Αλγόριθμοι Ταξινόμησης Μέρος 2

Αλγόριθμοι Ταξινόμησης Μέρος 2 Αλγόριθμοι Ταξινόμησης Μέρος 2 Μανόλης Κουμπαράκης 1 Προχωρημένοι Αλγόριθμοι Ταξινόμησης Στη συνέχεια θα παρουσιάσουμε τρείς προχωρημένους αλγόριθμους ταξινόμησης: treesort, quicksort και mergesort. 2

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

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

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

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

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

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

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

Προχωρημένες έννοιες προγραμματισμού σε C

Προχωρημένες έννοιες προγραμματισμού σε C Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr)

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

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

ΠΛΗ111. Ανοιξη Μάθηµα 9 ο. Ταξινόµηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 9 ο Ταξινόµηση Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ταξινόµηση Εισαγωγή Selection sort Insertion sort Bubble sort

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

Standard Template Library (STL)

Standard Template Library (STL) Standard Template Library (STL) Η χαρά του προγραμματιστή δαίμων - τεύχος 6 Μορφονιός Κωνσταντίνος http://www.di.uoa.gr/~kmorfo K.Morfonios@di.uoa.gr Περιεχόμενα Τι είναι; Containers Algorithms Iterators

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

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

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

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

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

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

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

Εργαστήριο 2: Πίνακες

Εργαστήριο 2: Πίνακες Εργαστήριο 2: Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Επεξεργασία Πινάκων - Υλοποίηση της Δυαδικής Αναζήτησης σε πίνακες - Υλοποίηση της Ταξινόμησης με Επιλογής σε πίνακες ΕΠΛ035

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

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου, Τμήμα Μηχανικών Πληροφορικής ΤΕ Χειμερινό Εξάμηνο 2014-2015 (Παρουσίαση 5) 1 / 17 Απόδοση προγραμμάτων Συχνά χρειάζεται να εκτιμηθεί η απόδοση

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

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

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

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

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1 Ταξινόμηση Παύλος Εφραιμίδης Δομές Δεδομένων Ταξινόμηση 1 Το πρόβλημα της ταξινόμησης Δομές Δεδομένων Ταξινόμηση 2 Ταξινόμηση Δίνεται πολυ-σύνολο Σ με στοιχεία από κάποιο σύμπαν U (πχ. U = το σύνολο των

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 14: Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης 3) Mergesort Ταξινόμηση με Συγχώνευση 4) BucketSort Ταξινόμηση με Κάδους Διδάσκων:

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

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 20: Αλγόριθμοι ΤαξινόμησηςIII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Ε. QuickSort Γρήγορη Ταξινόμηση - Έμμεση Ταξινόμηση - Εξωτερική Ταξινόμηση Διδάσκων:

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

Ταξινόμηση με συγχώνευση Merge Sort

Ταξινόμηση με συγχώνευση Merge Sort Ταξινόμηση με συγχώνευση Merge Sort 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 Πληροφορικής 1 Διαίρει και Βασίλευε Η μέθοδος του «Διαίρει και Βασίλευε» είναι μια γενική αρχή σχεδιασμού αλγορίθμων

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η σειρά ασκήσεων (μέρος 2). Κοζάνη, 14 Δεκεμβρίου 2007. Κάθε πρόγραμμα εξαρτάται από αλγόριθμους και δομές δεδομένων, αλλά μόνο λίγα απαιτούν

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

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

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

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης Δοµές Δεδοµένων 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης Περίληψη Quicksort Χαρακτηριστικά επιδόσεων Μη αναδροµική υλοποίηση Δέντρα Μαθηµατικές ιδιότητες Δοµές Δεδοµένων 11-2

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

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

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

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

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

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

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

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 22 Counting sort, bucket sort και radix sort 1 / 16 Ιδιότητες αλγορίθμων ταξινόμησης ευστάθεια (stable

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

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

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

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

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

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

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.

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

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1 Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1 Quicksort [Hoare, 62] Στοιχείο διαχωρισµού (pivot), π.χ. πρώτο, τυχαίο, Αναδιάταξη και διαίρεση εισόδου σε δύο υπο-ακολουθίες:

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

Αναδρομικοί Αλγόριθμοι

Αναδρομικοί Αλγόριθμοι Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας ένα ή περισσότερα στιγμιότυπα του ίδιου προβλήματος. Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας

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

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

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

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

a 1 a 2 a n. 3. i = j 1 5. A[i + 1] = A[i] 6. i = i 1

a 1 a 2 a n. 3. i = j 1 5. A[i + 1] = A[i] 6. i = i 1 Εισαγωγη στον Σχεδιασμο και Αναλυση αλγοριθμων Αλγοριθμοι Ταξινομησης Η ταξινόμηση μιας ακολουθίας αριθμών είναι από τα βασικά αποτελέσματα της θεωρίας αλγορίθμων. Μια ευρεία γκάμα τέτοιων αλγορίθμων έχουν

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

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Γ. MergeSort Ταξινόμηση με Συγχώνευση Δ. BucketSort Ταξινόμηση με Κάδους Διδάσκων:

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

242 -ΕισαγωγήστουςΗ/Υ

242 -ΕισαγωγήστουςΗ/Υ 1 242 -ΕισαγωγήστουςΗ/Υ ΤµήµαΜαθηµατικών, Πανεπιστήµιο Ιωαννίνων Άρτια Α.Μ. (0-2-4-6-8) 2 ήλωση: Πίνακες στην ΕΑΓ δηλωση ( [1 : 1, 1 : 2,..., 1: ν ] ) παραταξη ; Π.χ.: δηλωση

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

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;.. Επιλογή - Επανάληψη Η εντολή if-else Ο τελεστής παράστασης συνθήκης H εντολή switch Η εντολές for και while Η εντολή do-while Η εντολές break - continue - goto Μαθηματικές συναρτήσεις Λέξεις κλειδιά στη

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

Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

Μάθημα 22: Δυαδικά δέντρα (Binary Trees) Trees Page 1 Μάθημα 22: Δυαδικά δέντρα (Binary Trees) Ένα δένδρο είναι δυαδικό αν όλοι οι κόμβοι του έχουν βαθμό (degree)

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

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

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

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

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

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

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Πέρασμα μεταβλητών, Templates, Συσχετίσεις μεταξύ κλάσεων ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) Τι θα συζητήσουμε σήμερα Πέρασμα με τιμή και με αναφορά Template functions και classes

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

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

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Quicksort Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Quicksort [Hoare, 6] Στοιχείο διαχωρισμού (pivot),

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

Συναρτήσεις και Πίνακες

Συναρτήσεις και Πίνακες Συναρτήσεις και Πίνακες Συναρτήσεις καθιερωμένης βιβλιοθήκης της C++ Συναρτήσεις οριζόμενες από τον χρήστη Μεταβίβαση κατ αξία Συναρτήσεις void και λογικές συναρτήσεις Μεταβίβαση κατ αναφορά Επιστροφή

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

Εκφωνήσεις ασκήσεων εργαστηρίου 1

Εκφωνήσεις ασκήσεων εργαστηρίου 1 Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου

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

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

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

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

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

Quicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο Quicksort ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Quicksort [Hoare, 62] Στοιχείο διαχωρισμού (pivot), π.χ. πρώτο, τυχαίο, Αναδιάταξη και διαίρεση

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

Εργαστήριο 3 Εντολή for while, do while

Εργαστήριο 3 Εντολή for while, do while Εργαστήριο 3 Εντολή for while, do while Άσκηση 3.1 Εύρεση αθροίσματος ακεραίων με χρήση της εντολής for #include int main(int argc, char *argv[]) int num,sum; coutnum;

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 14 Στοίβες 1 / 14 Στοίβες Η στοίβα είναι μια ειδική περίπτωση γραμμικής λίστας στην οποία οι εισαγωγές

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

ιαφάνειες παρουσίασης #4 ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

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

Ταξινόµηση. Παύλος Εφραιµίδης. οµές εδοµένων και

Ταξινόµηση. Παύλος Εφραιµίδης. οµές εδοµένων και Παύλος Εφραιµίδης 1 Το πρόβληµα της ταξινόµησης 2 3 ίνεται πολυ-σύνολο Σ µε στοιχεία από κάποιο σύµπαν U (πχ. U = το σύνολο των ακεραίων αριθµών). του Σ είναι η επιβολή µιας διάταξης στα στοιχεία του συνόλου

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

p

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

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

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

Quicksort. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 10: Ταξινόμηση Πίνακα Αναζήτηση σε Ταξινομημένο Πίνακα Πρόβλημα Δίνεται πίνακας t από Ν ακεραίους. Ζητούμενο: να ταξινομηθούν τα περιεχόμενα του πίνακα σε αύξουσα αριθμητική

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

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ mpompotas@ceid.upatras.gr Εισαγωγή - STL Η Standard Βιβλιοθήκη προτύπων (STL) είναι μια βιβλιοθήκη λογισμικού για την C++ Δημιουργήθηκε

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

ΗΥ-150. Ταξινόµηση και Αναζήτηση

ΗΥ-150. Ταξινόµηση και Αναζήτηση ΗΥ-150 Ταξινόµηση και Αναζήτηση To πρόβληµα της Αναζήτησης οθέντος δεδοµένων, λ.χ. σε Πίνακα (P) Ψάχνω να βρω κάποιο συγκεκριµένο στοιχείο (key) Αν ο πίνακας δεν είναι ταξινοµηµένος Γραµµική Αναζήτηση

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

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή 3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ 3.1 ΑΝΑ ΡΟΜΗ 3.1.1 Εισαγωγή ΕΦΑΡΜΟΣΜΕΝΗ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Αναδροµή είναι η µέθοδος κατά την οποία, σε µία γλώσσα προγραµµατισµού, µία διαδικασία ή συνάρτηση έχει την δυνατότητα

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

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

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

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Πληροφορική II Ενότητα 2 : Αλγόριθμοι Δρ. Γκόγκος Χρήστος 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου Τμήμα Χρηματοοικονομικής & Ελεγκτικής

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

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

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

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

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

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

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

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1 Ο αλγόριθμος Quick-Sort 7 4 9 6 2 2 4 6 7 9 4 2 2 4 7 9 7 9 2 2 9 9 6/14/2007 3:42 AM Quick-Sort 1 Κύρια σημεία για μελέτη Quick-sort ( 4.3) Αλγόριθμος Partition step Δέντρο Quick-sort Παράδειγμα εκτέλεσης

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

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

Σχεδίαση και Ανάλυση Αλγορίθμων Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα.0 Σταύρος Δ. Νικολόπουλος 06-7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Ταξινόμηση Selection-Sort Bubble-Sort και

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 Εισαγωγή Η τακτοποίηση των δεδομένων με ιδιαίτερη σειρά είναι πολύ σημαντική λειτουργία που ονομάζεται

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

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016 ΜΥΥ105: Εισαγωγή στον Προγραμματισμό Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016 Αναζήτηση και Ταξινόμηση Βασικές λειτουργίες σε προγράμματα Αναζήτηση (searching): Βρες ένα ζητούμενο στοιχείο σε μια

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Α Β Γ static; printf(%c\n, putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf(*); ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2016 (1/2/2016) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

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

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

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

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

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

Δομές Δεδομένων. Λουκάς Γεωργιάδης. Δομές Δεδομένων http://www.cs.uoi.gr/~loukas/courses/data_structures/ Λουκάς Γεωργιάδης email: loukas@cs.uoi.gr Αλγόριθμος: Μέθοδος για την επίλυση ενός προβλήματος Δομή Δεδομένων: Μέθοδος αποθήκευσης

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 8η σειρά ασκήσεων. Κοζάνη, 7 Δεκεμβρίου 2007. Κάθε πρόγραμμα εξαρτάται από αλγόριθμους και δομές δεδομένων, αλλά μόνο λίγα απαιτούν κάποια καινοτομία

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

Standard Template Library (STL) C++ library

Standard Template Library (STL) C++ library Τ Μ Η Μ Α Μ Η Χ Α Ν Ι Κ Ω Ν Η / Υ Κ Α Ι Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Standard Template Library (STL) C++ library Δομές Δεδομένων Μάριος Κενδέα kendea@ceid.upatras.gr Εισαγωγή Η Standard Βιβλιοθήκη προτύπων

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

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

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Δ. QuickSort Γρήγορη Ταξινόμηση Ε. BucketSort

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

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

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

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

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

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

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

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης Δοµές Δεδοµένων 10η Διάλεξη Ταξινόµηση E. Μαρκάκης Περίληψη Ταξινόµηση µε αριθµοδείκτη κλειδιού Ταξινόµηση µε συγχώνευση Αλγόριθµος Mergesort Διµερής συγχώνευση Αφηρηµένη επιτόπου συγχώνευση Αναλυτική

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

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

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

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

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

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

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

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (pthreads)

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (pthreads) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου

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

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp Γκόγκος Χρήστος Παράδειγμα

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

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014 ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014 Αναζήτηση και Ταξινόµηση Βασικές λειτουργίες σε προγράµµατα Αναζήτηση (searching): Βρες ένα ζητούµενο στοιχείο σε µια

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

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης) Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου Γκόγκος Χρήστος 04/12/2014 Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης) Στην εργασία αυτή παρουσιάζεται

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Έλεγχος ισότητας για Strings: Διαβάζουμε το String option και θέλουμε ένα loop να συνεχίσει

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

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

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

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

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 4η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Δείκτες και πίνακες. Δείκτες σε σταθερές και σταθεροί δείκτες. Μεταβίβαση

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

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

Αντικειμενοστραφής Προγραμματισμός 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Αντικειμενοστραφής Προγραμματισμός Ενότητα 9 : Τα πρότυπα (templates) Ιωάννης Τσούλος 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο Τμήμα Μηχανικών Πληροφορικής

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

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort) ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort) Ιωάννης Τόλλης Τμήμα Επιστήμης Υπολογιστών Ταχυταξινόμηση (Quick-Sort) 7 4 9 6 2 2 4 6 7 9 4 2 2 4 7 9 7

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 10η εβδομάδα. Κοζάνη, 14 Ιανουαρίου 2009. Τα προγράμματα 1 έως 4 αφορούν την ταξινόμηση και αναζήτηση δεδομένων. Το πρόγραμμα 5 υλοποιεί μια στοίβα

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

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1 Merge Sort (Ταξινόμηση με συγχώνευση) 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 6/14/2007 3:04 AM Merge Sort 1 Κύρια σημεία για μελέτη Το παράδειγμα του «διαίρει και βασίλευε» ( 4.1.1) Merge-sort

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

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

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

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

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2 Version 1.5 (16/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

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

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

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

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

Δομές Επανάληψης. Εισαγωγή στη C++

Δομές Επανάληψης. Εισαγωγή στη C++ Δομές Επανάληψης Εισαγωγή στη C++ Επαναληπτικές δηλώσεις Οι βρόγχοι (loops) αναγκάζουν ένα τμήμα κώδικα να επαναλαμβάνεται. Η επανάληψη συνεχίζεται για όσο μία λογική συνθήκη είναι αληθής. Όταν η συνθήκη

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

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

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

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

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

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

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

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

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: είκτες στη C++ Οι τελεστές new και delete Destructors Ορισµός τελεστών κλάσεων Ο δείκτης this ΕΠΛ 132 Αρχές Προγραµµατισµού

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

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure). Πίνακες Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure). Οι απλοί τύποι δεδοµένων (οι τιµές τους δεν µπορούν να διασπασθούν

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