Γηάιεμε : Παξαδείγκαηα Αλάιπζεο Πνιππινθόηεηαο / Αλάιπζε Αλαδξνκηθώλ Αιγόξηζκσλ Σηελ ελόηεηα απηή ζα κειεηεζνύλ ηα εμήο επηκέξνπο ζέκαηα: Παραδείγμαηα Ανάλσζης Πολσπλοκόηηηας : Μέθοδοι, 6 παραδείγμαηα Γραμμική και Δσαδική Αναζήηηζη, Ανάλσζη Αναδρομικών Αλγορίθμων ηδάζθσλ: εµήηξεο Εετλαιηπνύξ -
Υπνινγηζκόο Φξόλνπ Δθηέιεζεο κε θσιηαζκέλνπο βξόρνπο θαη ζπλζήθεο if Σε έλα βξόρν (for loop) o ζπλνιηθόο ρξόλνο πνπ απαηηείηαη είλαη : Βαζηθή Πξάμε x Αξηζκό Δπαλαιήςεσλ Φσιηαζκέλνη Βξόρνη: ε αλάιπζε γίλεηαη από ηα κέζα πξνο ηα έμσ for (i=0; i<; i++) for (j=0; j<; j++) k++; Φσιηαζκέλνο Βξόρνο Σπλερόκελεο Δληνιέο: Ο ρξόλνο εθηέιεζεο ηεο εληνιήο S και μεηά S παίξλεη ρξόλν ίζν ηνπ αζξνίζκαηνο ησλ ρξόλσλ εθηέιεζεο ησλ S + S. Σπλζήθεο if: Ο ρξόλνο εθηέιεζεο ηεο εληνιήο if b the S else S παίξλεη ρξόλν ίζν κε max(t(b)+t(s), T(b)+T(S )) -3
Παξάδεηγκα : Υπνινγηζκόο Φξόλνπ Δθηέιεζεο. it i, j, sum=0; for (i=0; i<; i++) for (j=0; j<; j++) sum++; Ανάλςζη Εζωηεπικόρ βπόσορ: Εξωηεπικόρ βπόσορ: j i Σςνολικά: * ( ) i j -4
Παξάδεηγκα 3: Υπνινγηζκόο Φξόλνπ Δθηέιεζεο 3. it i, j, sum=0; for (i=0; i<; i++) for (j=0; j<i*i; j++) sum++; Ανάλςζη B i Εζωηεπικόρ βπόσορ: ji i 0 3 Γηα i, δείρλεη πόζεο θνξέο εθηειείηαη ην j. - j 0 4 9 (-) Σπλνιηθά; i i Εξωηεπικόρ βπόσορ: Εκηελείηαι θοπέρ Σςνολικά: i i ( 6 ( 3 i B )( 6 ) δηλ., ) ( )( 6 6 6 ( 3 i i 3 6 )( ) 6 ( ) 3 ) -5
Παξάδεηγκα 4: Υπνινγηζκόο Φξόλνπ Δθηέιεζεο it i, j, k, sum=0; for (i=0; i<; i++) for (j=0; j<; j++) for (k=0; k<; k++) sum++ Ανάλςζη Βπόσορ (Β): Βπόσορ (B): Εξωηεπικόρ βπόσορ: k j B * j Σςνολικά: i B 3 * i ε Θ ( 3 ) -6
Παξάδεηγκα 5: Υπνινγηζκόο Φξόλνπ Δθηέιεζεο. it i, j, sum=0; for (i=; i<=; i = *i) for (j=0; j<; j++) sum++ Ανάλςζη Εζωηεπικόρ βπόσορ: j Σπλνιηθά log βήκαηα Γηα i, δείρλεη πόζεο θνξέο εθηειείηαη ην j { i 4 8. j Εξωηεπικόρ βπόσορ:,, 4, 8,, i Σςνολικά: i i log log i log Δπνκέλσο ην i εθηειείηαη ηνπιαρηζην log θνξέο (Θα ππνζέηνπκε όηη είλαη δύλακε ηνπ ) Θ(*log ) log i -7
Παξάδεηγκα 6: Υπνινγηζκόο Φξόλνπ Δθηέιεζεο (Με ζπλζήθε if) it i, j, sum=0; for (i=0; i<; i++) if (( % ) == 0) else for (j=0; j<; j++) sum++ sum--; // άπηιορ // πεπιηηόρ Ανάλςζη (Βαζική ππάξη ππόζθεζη/αθαίπεζη) α) N πεπιηηόρ: i β) N άπηιορ: i ( ) ( ) Παξαηεξνύκε όηη δελ θαηαιήγνπκε ζην MAX(odd, eve), εθόζνλ πάληα ζα εθηειείηαη κόλν έλα από ηα δπν ζθέιε ηεο ζπλζήθεο. Δάλ ε ζπλζήθε ήηαλ ((i % ) == 0)ηόηε ζα κπνξνύζακε λα πνύκε όηη έρνπκε O() ρξόλν. -8
Παξάδεηγκα 7: Φξόλνο Δθηέιεζεο Bubblesort void bubblesort( it X[], it ){ it i,j,temp; it swapped = 0; for (i=0;i<-;i++) { swapped = 0; for (j=0;j<-i-;j++) { if (X[j]>X[j+]) { temp = X[j]; X[j] = X[j+]; X[j+] = temp; swapped = ; if (swapped==0) retur; Αλάιπζε Δζσηεξηθόο βξόρνο: Σπλνιηθά: i i( ) i( i) i ( ) i( ) i( ) i ( )( ) i( ) ( ) ( )( ) ( ) ( )( ) ΕΠΛ 035 Δομές ( Δεδομένων )( και Αλγόριθμοι ) ( )( για Ηλ. ) Μηχ. και Μηχ. Υπολ. ( ) i i i ( ) -9
Γξακκηθή Vs Γπαδηθή Γηεξεύλεζε (Αλάιπζε) Δεδομένα Ειζόδοσ: Πίλαθαο Φ κε ζηνηρεία, ηαμηλνκεκέλνο από ην κηθξόηεξν ζην κεγαιύηεξν, θαη αθέξαηνο k. Σηότος: Να εμαθξηβώζνπκε αλ ην k είλαη ζηνηρείν ηνπ Φ. Γραμμική Διερεύνηζη: εμεξεπλνύκε ηνλ πίλαθα από ηα αξηζηεξά ζηα δεμηά. it liear( it X[], it, it k){ it i=0; while ( i < ) { if (X[i] == k) retur i; if (X[i] > k) retur -; i++; retur -; Xείριζηη περίπηωζη: Ο() (ν βξόρνο εθηειείηαη θνξέο) X 8 5 7 8 30 33-0
Αλαδξνκηθή Γξακκηθή Γηεξεύλεζε it rliear( it X[], it, it k, it pos){ if (pos == ) retur -; // ot foud if (X[pos] == k) retur pos; // foud else if (X[pos] > k) retur -; // larger foud - skip rest retur rliear(x,, k, pos+); X 8 5 7 8 30 33 Xείριζηη περίπηωζη: Ο() (εθηεινύληαη αλαδξνκηθέο θιήζεηο ηεο rliear) -
Γπαδηθή Γηεξεύλεζε Δυαδική Διερεύνηζη: βξίζθνπκε ην κέζν ηνπ πίλαθα θαη απνθαζίδνπκε αλ ην k αλήθεη ζην δεμηό ή ην αξηζηεξό κηζό. Δπαλαιακβάλνπκε ηελ ίδηα δηαδηθαζία ζην "κηζό" πνπ καο ελδηαθέξεη. it biary( it X[],it,it k){ it low = 0, high = -; it mid; while ( low <= high ){ mid =low+(high-low)/; if (X[mid] == k) retur mid; else if (X[mid] < k) low = mid + ; else if (X[mid] > k) retur -; high = mid-; X K=5? 8 5 7 8 30 33 0 3 4 5 6 low mid high mid mid3 Ίδην κε (low+high)/. Ωζηόζν ε έθδνζε απηή κπνξεί λα ππνθέξεη από ππεξρείιηζε αθεξαίνπ. -
Αλαδξνκηθή Γπαδηθή Γηεξεύλεζε it BS_aux(it list[],it low,it high,it k) { it mid; K=5? if (low<=high) { mid=low+(high-low)/; if (list[mid]==k) X 8 5 8 retur mid; low mid else if (k<list[mid]) mid3 mid retur BS_aux(list,low,mid-,k); else retur BS_aux(list,mid+,high,k); retur -; BiarySearch(it A[], it, it k) { it low = 0, high = -; retur BS_aux(A, low, high, k); Τα όξηα δίδνληαη ζαλ παξάκεηξν 7 30 33 0 3 4 5 6 high -3
Γπαδηθή Γηεξεύλεζε Φξόλνο Δθηέιεζεο Ζ βαζηθή πξάμε (ζύγθξηζε) εθηειείηαη Ο(log ) θνξέο δειαδή: Εκηέλεζη -> Μαρ απομένει* / ηος πίνακα, Εκηέλεζη -> Μαρ απομένει /4 ηος πίνακα, Εκηέλεζη 3 -> Μαρ απομένει /8 ηος πίνακα, Εκηέλεζη Χ -> Μαρ απομένει ζηοισείο ηος πίνακα, Σηην εκηέλεζη Χ είηε βπήκαμε ηο ζηοισείο είηε όσι δηλ.έσοςμε ηην ακολοςθία, /, /4, /8,, 4,,, <==> 0,,, 3,, x Το x εκθπάζει πόζερ θοπέρ εκηελούμε ηο while loop x x log log x log Biary Search ε Ο(log ) * Φσξίο βιάβε ηεο γεληθόηεηαο, ζεσξήζηε όηη είλαη δπγόο -4
Πνιππινθόηεηα Αλαδξνκηθώλ Γηαδηθαζηώλ Μέρξη ηώξα ζπδεηήζακε ηερληθέο γηα ηελ αλάιπζε επαλαιεπηηθώλ αιγνξίζκσλ (κε while, for, θηι.) Ωζηόζν, πνιινί αιγόξηζκνη νξίδνληαη αλαδξνκηθά (π.ρ. biary search, Fiboacci, etc) Θέινπκε θάπνηα κεζνδνινγία γηα λα αλαιύνπκε ηελ πνιππινθόηεηα ηέηνησλ αλαδξνκηθώλ εμηζώζεσλ. π.ρ. Τ() = T(/) +000 Τ()=*T(-), >0 θηι. Σεκεηώζηε όηη ππάξρνπλ δηάθνξνη ηύπνη αλαδξνκηθώλ εμηζώζεσλ. Πνιινί ηύπνη ρξεηάδνληαη εηδηθά εξγαιεία ηα νπνία δελ ζα δνύκε ζε απηό ην κάζεκα. Έλα ηύπν πνπ ζα κειεηήζνπκε ζα είλαη νη Αλαδξνκηθέο Δμηζώζεηο ηύπνπ «Γηαίξεη θαη Βαζίιεπε» Θα ηηο επηιύζνπκε κε ηελ Μέζνδν ηεο Αληηθαηάζηαζεο θαη ζα ΕΠΛ ηηο 035 επαιεζεύνπκε Δομές Δεδομένων κε και ην Αλγόριθμοι Θεώξεκα για Ηλ. Μηχ. Master και Μηχ. Υπολ. -5
Αλάιπζε Αλαδξνκηθήο Γπαδηθήο Γηεξεύλεζεο Αο μαλαδνύκε ηελ αλαδξνκηθή έθδνζε ηεο δπαδηθήο αλαδήηεζεο it BS_aux(it list[],it low,it high,it k) { it mid; if (low<=high) { mid=low+(high-low)/; if (list[mid]==a) retur mid; else if (k<list[mid]) retur BS_aux(list,low,mid-,k); else retur BS_aux(list,mid+,high,k); retur -; X K=5? 8 5 7 8 30 33 0 3 4 5 6 low mid high mid mid3 Από όηη βιέπνπκε ζε θάζε εθηέιεζε ην biary_search κνηξάδεη κηα αθνινπζία ζηνηρείσλ ζε / ζηνηρεία (εάλ είλαη δπγόο). Δπνκέλσο ην πξόβιεκα κεγέζνπο έγηλε ηώξα /. Σε θάζε βήκα ρξεηαδόκαζηε θαη δπν ζπγθξίζεηο (ηα δπν if statemets) O ρξόλνο εθηέιεζεο ηεο biary_search εθθξάδεηαη κε ηελ αλαδξνκηθή ζπλάξηεζε: f() = f(/) + // αλαδξνκηθό βήκα f() = // ζπλζήθε ηεξκαηηζκνύ -6
Αλάιπζε Αλαδξνκηθήο Γπαδηθήο Γηεξεύλεζεο Μέζνδνο ηεο Αληηθαηάζηαζεο Μέζνδνο ηεο Αληηθαηάζηαζεο Φξεζηκνπνηνύκε ην βήκα ηεο αλαδξνκήο επαλαιεπηηθά, κέρξη λα εθθξάζνπκε ην Τ() σο ζπλάξηεζε ηεο βαζηθήο πεξίπησζεο, δπλάκεηο ηνπ θαη ζηαζεξέο ηηκέο. Εφαρμογή Έρνπκε ηελ αλαδξνκηθή εμίζσζε ηεο δπαδηθήο δηεξεύλεζεο (Τύπνπ Γηαίξεη θαη Βαζίιεπε) Τ() = T(/) +, T() = γηα θάζε Τόηε, αληηθαζηζηώληαο ην Τ(/) κε ηελ ηηκή ηνπ παίξλνπκε Τ() = T(/) + = T(/4) + + = T(/8) + + + = (Μπνξνύκε ηώξα λα καληέςνπκε όηη ) =... log θνξέο Δπνκέλσο ε δπαδηθή αλαδήηεζε εθηειείηαη log βήκαηα Biary Search ε Ο(log ) -7
Αλάιπζε Αλαδξνκηθήο Γπαδηθήο Γηεξεύλεζεο Σηελ δπαδηθή δηεξεύλεζε ε αθνινπζία κνηξάδεηαη σο εμήο:, /, /4,,,. Πξνζνρή: Γελ ζεκαίλεη όηη έρνπκε +/+ /4+ + + =- εθηειέζεηο. Έρνπκε κνλάρα log εθηειέζεηο Αλάινγα κε ην ζε πόζα θνκκάηηα «δηαηξείηαη» ην πξόβιεκα θάζε θνξά, αιιάδεη θαη ε βάζε ηνπ ινγάξηζκνπ. log log 3 0 = = 3 = 4 5 6 7 3 = 8 9 0 9 = 5 0 = 04 = 048 30 =,073,74,84 0.5849650.398095.5849650.8073549 3 3.699500 3.398095 9 0 30 0 0.63099754.6859507.4649735.63099754.7743749.897896.09590374 5.67836778 6.30997536 6.940789 8.97896 Αξηζκόο πξάμεσλ,/,/4,,, ί:log,/3,/9,, 3, ί:log3 Όζν κεγαιύηεξε ε βάζε ηνπ ινγάξηζκνπ ηόζν πην ιίγεο εθηειέζεηο ηνπ αιγόξηζκνπ έρνπκε! Ωζηόζν, απμάλνληαη νη ζπγθξίζεηο ζε θάζε εθηέιεζε! Πρ δπαδηθή δηεξεύλεζε: lg εθηειέζεηο, έιεγρν ζε θάζε βήκα. -8
Αλάιπζε Αλαδξνκηθήο Γπαδηθήο Γηεξεύλεζεο Master Theorem To Master Theorem καο επηηξέπεη λα βξίζθνπκε ή λα επαιεζεύνπκε ηελ ρξνληθή πνιππινθόηεηα αλαδξνκηθώλ εμηζώζεσλ ηύπνπ δηαίξεη θαη βαζίιεπε. Γηαίξεη θαη Βαζίιεπε: πρ. Τ() = T(/) + αιιά όρη Τ()=*T(-) Απηό ην ζεώξεκα δελ ρξεηάδεηαη λα ηνλ απνκλεκνλεύζεηε αιιά κπνξείηε λα ηνλ ρξεζηκνπνηήζεηε γηα ηελ επαιήζεπζε αζθήζεσλ. -9
Αλάιπζε Αλαδξνκηθήο Γπαδηθήο Γηεξεύλεζεο Master Theorem - Δθαξκνγή Αλαδξνκηθή Γπαδηθή Αλαδήηεζε Τ() = T(/) + γηα θάζε T() = a=, b=, c=, d=0 (δεο ηύπν Master) a= θαη b d = 0 = T() is O( d log) T() is O( 0 log) T() is O(log) -0
Παξάδεηγκα - Μέζνδνο ηεο αληηθαηάζηαζεο Έρνπκε ηελ αλαδξνκηθή εμίζσζε Τ() = 4T(/) +, T() = γηα θάζε Τόηε, αληηθαζηζηώληαο ην Τ(/) κε ηελ ηηκή ηνπ παίξλνπκε Τ() = 4T(/) + // Δθηέιεζε = 4(4T(/4) + /) + // Δθηέιεζε = 4²Τ(/4) + + // Πξάμεηο = 4³Τ(/8) + ² + + // Δθηέιεζε 3 =... Μπνξνύκε ηώξα λα καληέςνπκε όηη = 4 k Τ() + k- + +² + + // k=log 4 log log i log log * *( i0 ( ) O( ) ) // i0 i -
Παξάδεηγκα 3 - Μέζνδνο ηεο αληηθαηάζηαζεο Άζθεζε Να ιύζεηε ηελ πην θάησ αλαδξνκηθή εμίζσζε κε ηελ κέζνδν ηεο αληηθαηάζηαζεο (πξνζνρή δελ είλαη ηύπνπ δηαίξεη & βαζίιεπε) Τ(0)= Τ()=*T(-), >0 Λύζε Τ() = **T(-) = * *(-)*T(-) = 3* *(-)*(-)*T(-3).(Μπνξνύκε ηώξα λα καληέςνπκε όηη ) = **(-)*(-)*...***T(0) = *! ε Ο(!) -