






Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
its a document about the algorithmic computation of some algorithms
Typology: Exercises
1 / 10
This page cannot be seen from the preview
Don't miss anything!







Ε
(iv) 𝑇
𝑛
3
) + √𝑛 + log 𝑛
𝑛 + log 𝑛
1
2
) και για 𝜀 =
1
2
0 έχουμε ότι 𝑓
log
𝑏
𝑎−𝜀
log
3
3 −
1
2
= 𝑛
1
2
= √𝑛), άρα
είμαστε στην 1
η
περίπτωση του Master Theorem:
Αν 𝑓(𝑛) = 𝑂(𝑛
log
𝑏
𝑎−𝜀
) για κάποια σταθερά 𝜀 > 0 , τότε 𝑇(𝑛) = 𝛩(𝑛
log
𝑏
𝑎
Επομένως 𝑇(𝑛) = 𝛩(𝑛)
(v) 𝑇(𝑛) = 𝑇 (
4 𝑛
5
) + 𝑛 log 𝑛 + √
a = 1
μπορούμε να τροποποιήσουμε το 𝑏 =
5
4
𝑓(𝑛) = 𝑛 log 𝑛 + √
Η 𝑓(𝑛) = 𝑂(𝑛 log 𝑛) και 𝑛
log
𝑏
𝑎
log
𝑏
1
= 1 , άμα υπάρχει ε> 1 τέτοιο ώστε ο όρος 𝑛 log 𝑛 να είναι
σίγουρα μεγαλύτερος από το 𝑛
𝜀
για να μπορέσουμε να ισχυριστούμε ότι 𝑓
log 𝑏
𝑎+𝜀
𝜀
Για να μπορέσουμε όμως να πούμε ότι ισχύει η 3
η
περίπτωση του Master Theorem πρέπει να
αποδείξουμε ότι ισχυέι η ανισότητα 𝑎𝑓 (
𝑛
𝑏
4 𝑛
5
) log
≤ 𝑐(log 𝑛 + √
4 𝑛
5
) log
4 𝑛
5
≤ 𝑐 log 𝑛
Αν παραβλέψουμε τοιυς μικρούς όρους το n, η παραπάνω ανίσωση ισχυεί για 𝑐 < 1 , διότι ο όρος
log
4 𝑛
5
είναι όντως μικρότερος του log 𝑛 και το
4 𝑛
5
μικραίνει περισσότερο τον όρο.
Επομένως μπορούμε να πούμε ότι ισχύει η 3
η
περίπτωση του Master theorem:
Αν 𝑓
log 𝑏
𝑎+𝜀
) για κάποια σταθερά 𝜀 > 0 , και αν 𝑎𝑓 (
𝑛
𝑏
) ≤ 𝑐𝑓(𝑛) για κάποια σταθερά 𝑐 < 1
και για όλα τα επαρκώς μεγάλα 𝑛 τότε 𝑇(𝑛) = 𝛩(𝑓(𝑛)).
Άρα 𝑇(𝑛) = 𝛩(𝑛 log 𝑛).
(vi) 𝑇(𝑛) = 2 𝑇 (
𝑛
3
2 𝑛
3
Εδώ δεν μπορούμε να χρηαιμοποιήσουμε το Master Theorem λόγω των δύο όρων 𝑇(𝑛).
Για να βρούμε ένα στοιχείο που είναι "κορυφή" (δηλαδή δεν είναι μικρότερο από τα γειτονικά του
στοιχεία), μπορούμε να χρησιμοποιήσουμε την τεχνική διαίρει και βασίλευε. Η βασική ιδέα εδώ
είναι να βρούμε το μεσσαίο στοιχείο του πίνακα και να ελέγξουμε αν είναι «κορυφή» και αν δεν
είναι μπορούμε να αποφασίσουμε από ποια μεριά του πίνακα θα συνεχίσουμε την αναζήτηση.
Χωρίζουμε 4 περιπτώσεις επιτυχίας για το πρόβλημά μας:
βρίσκεται στην αριστερή μεριά του πίνακα
Στις περιπτώσεις 2 και 3 ο αλγόριθμος θα υποδιπλασιάζει τον πίνακα και θα κάνει συγκρίσεις με
το mid του υποδιπλασιμένου πίνακα μέχρι να βρει το peak.
low= 0
high=n- 1
όσο low<=high επανάλαβε
Mid=low+(high-low)/2 #το low είναι η πρώτη θέση του πίνακα A[0] και το high είναι η
τελευταία A[n]
αν (mid==0 ή (arr[mid- 1 ] <=arr[mid] και arr[mid+1]<=arr[mid])) τότε
εμφάνισε mid
αλλιώς αν (arr[mid-1]>arr[mid]) τότε
high=mid- 1 #θέλουμε να χωρίσουμε τον πίνακα προς τα αριστερά, άρα το νέο δεξί
άκρο του νέου υποδιπλασιασμένου πίνακα είναι το αριστερό άκρο
του mid
αλλιώς
low=mid+1#θέλουμε να χωρίσουμε τον πίνακα προς τα δεξιά, άρα το νέο αριστερό
άκρο του νέου υποδιπλασιασμένου πίνακα είναι το αριστερό στοιχείο
του mid
τέλος αν
new_sum= 0
numbers=
flag=
i=
όσο (flag==0 ή i<=n-1) επανάλαβε
new_sum=new_sum+arr[i]
numbers++
i++
αν new_sum>=S τότε
flag=
τελος αν
τέλος επανάληψης
εμφάνισε numbers
Για να βρούμε ένα ελάχιστο συνδετικό δένδρο (MST) που περιέχει την ακμή e, μπορούμε να
χρησιμοποιήσουμε τον αλγόριθμο του Kruskal για την εύρεση του MST και να προσαρμόσουμε τον
αλγόριθμο ώστε να συμπεριλάβει υποχρεωτικά την ακμή e.
Χρησιμοποιούμε την ένωση-εύρεση για την διαχείρης των συνόλων των κορυφών και στη
συνέχεια θα προσθέσουμε την ακμή στο MST και έπειτα θα ενημερώσουμε το σύνολο των
κορυφών. Έπειτα ταξινομούμε όλες τις ακμές του γράφου σε αύξουσα σειρά ανάλογα με το βάρος
τους και τέλος κατασκευάζουμε το MST, εξετάζοτνας κάθε ακμή από την ταξινομημένη λίστα και
την προσθέτουμε (εφόσον δεν δημιουργεί κύκλο), χρησιμοποιώντας ένωση-εύρεση.
(θα χρησιμοποιήσουμε πάλι την ίδια ταξινόμηση απλά σε αύξουσα σειρά αντί για φθίνουσα όπως
στην άσκηση 4 οπότε για εξοικονόμηση χρόνου δε θα ξαναγράψω την λειτουργία της, αντί αυτού
θα την θεωρήσω ως συνάρτηση και θα την καλέσω)
δεδομένα: G γράφος με E ακμές, ακμή e
#ξεκινώντας αρχικοποιούμε τη ένωση-εύρεση
για κάθε κορυφή x στο V
κατασκευή συνόλου(x)
τέλος επανάληψης
#αρικοποίηση MST και προσθήκη της ακμής e
MST={e}
συνένωση(x,y)
#ταξινόμηση με τον τρόπο που προαναφέρθηκε
Ταξινόμηση(Ε, βάρος σε αύξουσα σειρά)
#κατασκευάζουμε το MST
για κάθε ακμή (x,y) στο Ε
αν εύρεση-συνόλου(x)!=εύρεση-συνόλου(y) τότε
MST = MST U {(x,y)} #ένωση
συνένωση(x,y)
τέλος αν
τέλος επανάληψης
εμφάνισε MST
καταφέραμε λοιπόν με την χρήση του αλγορίθμου του Kruskal
𝛽𝜄𝛽𝜆ί𝜊 𝜎𝜀𝜆ί𝛿𝛼 627
να
κατασκευάσουμε έναν αλγόριθμο πολυπλοκότητας 𝑂(E log 𝐸), όπου E το σύνολο των ακμών του
κόμβου σύμφωνα με τον Kruskal, για την εύρεση ενός MST δέντρο το οποίο περιέχει την ακμή e.
Ξεκινάμε με την δημιουργία του ενός πίνακα διαστάσεων n x n εν ονόματι path ο οποίος θα
χρησιμοποιηθεί για την αποθήκευση τουπλήθος των μονοπατιών από την θέση (1,1) στη θέση (i,j).
Και σε αυτό το πρόβλημα μπορούμε να διακρίνουμε 2 περιπτώσεις
path[i][j- 1 ]
για i από 0 μέχρι n
Καταφέραμε και φτιάξαμε έναν αλγόριθμο του οποίου η πολυπλοκότητα είναι 𝛰
2
λόγω του
διπλού βρόχου που διατρέχει κάθε θέση του πίνακα.