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

Σχετικά έγγραφα
Εργαστήριο 2: Πίνακες

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

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

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

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

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

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

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

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

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

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

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

Πολυπλοκότητα Αλγορίθµων

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

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

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

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

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

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

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

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διάλεξη 17: Επανάληψη για την ενδιάμεση εξέταση. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

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

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

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

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

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

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

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

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

Μεθόδων Επίλυσης Προβλημάτων

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Κεφάλαιο 8.6. Πίνακες ΙI (Διάλεξη 17)

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

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

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

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

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

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

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

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

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

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

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

Εισαγωγή στους Αλγορίθμους

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

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

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

Λύσεις για τις ασκήσεις του lab5

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

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

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Διάλεξη 17: Επανάληψη για την ενδιάμεση εξέταση. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

είκτες και Πίνακες (2)

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

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

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

Transcript:

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αναζήτηση με linearsearch, binarysearch, ternarysearch - Ανάλυση Πολυπλοκότητας ternarysearch - Επαλήθευση Πολυπλοκότητας με master theorem ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1

Γραμμική vs. Δυαδική Διερεύνηση Δεδομένα Εισόδου: Πίνακας Χ με n στοιχεία, ταξινομημένος από το μικρότερο στο μεγαλύτερο, και ακέραιος k. Στόχος: Να εξακριβώσουμε αν το k είναι στοιχείο του Χ. Γραμμική Διερεύνηση: εξερευνούμε τον πίνακα από τα αριστερά στα δεξιά. int linear( int X[], int n, int k){ int i=0; while ( i < n ) { if (X[i] == k) return i; if (X[i] > k) return -1; i++; return -1; 1 2 3 4 5 Xείριστη περίπτωση: Ο(n) (ο βρόχος εκτελείται n φορές) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2

Δυαδική Διερεύνηση Δυαδική Διερεύνηση: βρίσκουμε το μέσο του πίνακα και αποφασίζουμε αν το k ανήκει στο δεξιό ή αριστερό μισό. Επαναλαμβάνουμε την ίδια διαδικασία στο μισό που μας ενδιαφέρει: int binary (int X[], int n, int key) { int low=0; int high = n - 1; int mid; while( low >= high) { mid = (low + high) / 2; if( key < X[mid]) high = mid-1; else if (key > X[mid]) low = mid+1; else { return mid; break; return -1; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Υλοποίηση Υλοποιήστε τις ακόλουθες συναρτήσεις: int linearsearch(int x[], int length, int key) Εκτελεί γραμμικήδυαδική αναζήτηση για εύρεση του κλειδιού key σε ένα πίνακα x με μέγεθος length (αντιγραφή από διάλεξη 16) int binarysearch(int x[], int length, int key) Εκτελεί δυαδική αναζήτηση για εύρεση του κλειδιού keyσε ένα πίνακα x με μέγεθος length (αντιγραφή από διάλεξη 16) int ternarysearch(int x[], int length, int key) Εκτελεί τριαδική αναζήτηση για εύρεση του κλειδιού keyσε ένα πίνακα x με μέγεθος length Προσθέστε μία παράμετρο (intsteps)για καταμέτρησητων βημάτων στην κάθε μία συνάρτηση. Επίσης καταμετρήστε τον χρόνο με την βιβλιοθήκη time.h ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

Έλεγχος Για έλεγχο του προγράμματός σας υλοποιήστε την μέθοδο main ακριβώς όπως φαίνεται πιο κάτω: //Πειραματιστείτε με διάφορα SIZE #define SIZE 64000 int main(int argc, char* argv[]) { int input[size]; for(int i=0; i<size; i++){ input[i]=i; srand(time(null)); int random=rand(); linearsearch(input, SIZE, random); binarysearch(input, SIZE, random); ternarysearch(input, SIZE, random); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

Λύσεις int linearsearch(int X[], int length, int key){ for(int steps=0, i=0; i<length; i++,steps++){ if(x[i]==key) { printf("linearsearch steps:%d\n", steps); return i; printf("linearsearch steps:%d", length+1); return -1; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6

Λύσεις (συν.) int binarysearch(int X[], int length, int key) { int low=0; int high = length - 1; int mid; int steps=0; while( high >= low) { mid = low + (high-low) / 2; if( key < X[mid]) high = mid-1; else if (key > X[mid]) low = mid+1; else { printf("binarysearch steps:%d\n", steps); return mid; steps++; printf("binarysearch steps:%d\n", steps); return -1; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7

Λύσεις (συν.) int ternarysearch(int X[], int length, int key) { int low=0; int high=length-1; int mid_low; int mid_high; int steps=0; while( high >= low) { mid_low = low + (high-low)/3; mid_high = low + (high-low)/3 *2; if (key == X[mid_low]){ printf("ternarysearch steps:%d\n", steps); return mid_low; else if (key == X[mid_high]) { printf("ternarysearch steps:%d\n", steps); return mid_high; else if (key == X[high]) { printf("ternarysearch steps:%d\n", steps); return high; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

Λύσεις (συν.) else if (key == X[low]) { printf("ternarysearch steps:%d\n", steps); return low; else if( key < X[mid_low]) high = mid_low-1; else if( key > X[mid_high]) low = mid_high+1; else { low = mid_low + 1; high = mid_high - 1; steps++; printf("ternarysearch steps:%d\n", steps); return -1; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9

Ανάλυση Πολυπλοκότητας ternarysearch Έχουμε την αναδρομική εξίσωση Τ(n) = T(n/3) + 4, για κάθε n>1 T(1) = 1 Τότε, αντικαθιστώντας το Τ(n/3) με τηντιμή του παίρνουμε Τ(n) = T(n/3) + 4 // Εκτέλεση 1 = (T(n/9) + 4) + 4 // Εκτέλεση 2 = Τ(n/9) + 2x4 // Πράξεις = Τ(n/27) + 3x4 // Εκτέλεση 3 = Τ(n/3 k ) + k.4 // k=log 3 n 3 k =n = Τ(1) + (log 3 n).4 // n=3 k,τ(n/3 k )=T(1)=1 = 4log 3 n //Πράξεις Θ(log 3 n) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10

Παράδειγμα: Αντικατάσταση T(n) = T(n/3) + 4 Master Theorem: Έστω ότι η είναι μία αύξουσα που ικανοποιεί τη λειτουργία της επανάληψης: / όταν το, όπου είναι ένας θετικόςακέραιος, 1, b 1, και,d είναι πραγματικοί αριθμοί, 0, 0.Τότε ισχύει: Ο Ο Ο a=1, b=3, c=4, d=0 b d =3 0 =1 a=b d T(n) O(n 0 log 3 (n)) T(n) O(log 3 (n)) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11