Class Hub
Greedy·Διάλεξη 11·~42 min

L11 · Άπληστοι Αλγόριθμοι I — Χρονοπρογραμματισμός Διαστημάτων

Τι θα δούμε

Ξεκινά μια νέα οικογένεια αλγορίθμων: οι άπληστοι (greedy). Τους συναντήσαμε ήδη στο L09 — Dijkstra, Prim, Kruskal — αλλά εκεί η απληστία ήταν «κρυμμένη» μέσα στο γράφημα. Εδώ τη βλέπουμε γυμνή, σε δύο προβλήματα χρονοπρογραμματισμού:

  1. Χρονοπρογραμματισμός διαστημάτων — διάλεξε όσο το δυνατόν περισσότερες μη-επικαλυπτόμενες εργασίες.
  2. Διαμέριση διαστημάτων — μοίρασε όλες τις εργασίες σε όσο το δυνατόν λιγότερες μηχανές.

Η ιδέα του άπληστου αλγορίθμου

Δες την παγίδα να συμβαίνει. Ο πεζοπόρος παρακάτω ακολουθεί έναν και μόνο κανόνα — «κάνε πάντα το βήμα προς τα πάνω» — και δεν βλέπει τίποτα πέρα από τα δύο σημεία δίπλα στα πόδια του. Άλλαξε την αφετηρία και δες πού καταλήγει:

Ο άπληστος πεζοπόρος — τοπικά πάντα ψηλότερα

Ίδιος κανόνας («κάνε το βήμα προς τα πάνω»), διαφορετική αφετηρία. Διάλεξε αφετηρία και πάτα «Επόμενο».

κορυφήαφετηρία
Ύψος18/ κορυφή: 95
Θέση 0 · ύψος 18. Ο πεζοπόρος βλέπει ΜΟΝΟ τα δύο διπλανά σημεία — αριστερά —, δεξιά 30. Το ψηλότερο είναι δεξιά (30), οπότε ανεβαίνει εκεί.
Βήμα 0 / 4

Ίδιος κανόνας, διαφορετική κατάληξη: άλλοτε η κορυφή, άλλοτε ένας λοφίσκος. Κι ο πεζοπόρος δεν μαθαίνει ποτέ τη διαφορά — από εκεί που στέκεται, ο λοφίσκος μοιάζει με κορυφή. Αυτός είναι ο άπληστος αλγόριθμος σε μία εικόνα. Γι' αυτό δεν αρκεί να βρεις έναν κανόνα που «δείχνει λογικός»· πρέπει να τον αποδείξεις. Θα ξεκινήσουμε δείχνοντας ότι οι περισσότεροι λογικοφανείς κανόνες απλώς δεν δουλεύουν.

Χρονοπρογραμματισμός διαστημάτων

Διατύπωση

Είσοδος: εργασίες· η εργασία ξεκινά τη στιγμή και τελειώνει τη στιγμή .

Δύο εργασίες είναι συμβατές αν δεν επικαλύπτονται χρονικά.

Στόχος: βρες το μεγαλύτερο σε πλήθος υποσύνολο εργασιών που είναι ανά δύο συμβατές.

Το άπληστο πρότυπο — και ποια σειρά

Όλοι οι υποψήφιοι άπληστοι αλγόριθμοι έχουν την ίδια σκελετική μορφή:

Θεώρησε τις εργασίες σε κάποια σειρά. Διάλεξε κάθε εργασία εφόσον είναι συμβατή με όσες έχεις ήδη επιλέξει.

Όλο το παιχνίδι είναι ποια σειρά. Τέσσερις λογικοφανείς υποψήφιες:

ΚριτήριοΣειρά εξέτασης
Μικρότερος χρόνος έναρξηςαύξουσα ως προς
Μικρότερος χρόνος λήξηςαύξουσα ως προς
Μικρότερο διάστημααύξουσα ως προς
Λιγότερες διενέξειςαύξουσα ως προς το πλήθος μη-συμβατών

Τρεις από τις τέσσερις είναι λάθος. Στο εργαλείο παρακάτω, κάθε κριτήριο έρχεται με το δικό του στιγμιότυπο: για τα τρία λανθασμένα κριτήρια είναι ένα αντιπαράδειγμα — μια είσοδος όπου ο κανόνας αποδεδειγμένα αποτυγχάνει· για το σωστό, μια είσοδος που τη λύνει τέλεια. Διάλεξε κριτήριο και σάρωσε βήμα-βήμα:

Χρονοπρογραμματισμός — τέσσερα άπληστα κριτήρια

Εξέταση με σειρά: αύξουσα σειρά χρόνου έναρξης. Ο αριθμός αριστερά από κάθε γραμμή είναι η σειρά εξέτασης.

1.12.23.34.45.50123456789101112131415161718192021
Επιλεγμένες0/ βέλτιστο: 4
Κανόνας «πρώτη έναρξη»: εξέτασε τις εργασίες κατά αύξοντα χρόνο έναρξης. Η εργασία 1 ξεκινά πρώτη — δες τι κάνει αυτό. Πάτα «Επόμενο».
Βήμα 0 / 5

Γιατί τα τρία κριτήρια αποτυγχάνουν

Κάθε ένα από τα τρία λανθασμένα κριτήρια έχει ένα μικρό, καθαρό αντιπαράδειγμα — κι αυτό ακριβώς δείχνει η αντίστοιχη καρτέλα του εργαλείου παραπάνω.

Μικρότερος χρόνος έναρξης. Στην καρτέλα «Πρώτη έναρξη», μία εργασία ξεκινά πρώτη απ' όλες και απλώνεται σχεδόν σε ολόκληρο τον άξονα. Επειδή ξεκινά πρώτη, ο κανόνας τη διαλέγει αμέσως — και τότε αυτή επικαλύπτεται με καθεμία από τις τέσσερις σύντομες εργασίες, που από μόνες τους θα χωρούσαν άνετα όλες μαζί. Λύση: 1 αντί για 4. Το πότε ξεκινά μια εργασία δεν λέει τίποτα για το πόσο χώρο αφήνει στις επόμενες.

Μικρότερο διάστημα. Στην καρτέλα «Μικρότερο διάστημα», η συντομότερη εργασία «κάθεται» ακριβώς πάνω στο σημείο όπου δύο μεγαλύτερες εργασίες σχεδόν αγγίζονται. Οι δύο μεγάλες είναι μεταξύ τους συμβατές — αλλά η σύντομη επικαλύπτεται και με τις δύο, οπότε διαλέγοντάς τη τις χάνεις αμφότερες. Λύση: 1 αντί για 2. Μικρή διάρκεια δεν σημαίνει «μικρό εμπόδιο».

Λιγότερες διενέξεις. Το πιο ύπουλο από τα τρία. Στην καρτέλα «Λιγότερες διενέξεις», η βέλτιστη λύση είναι οι τέσσερις εργασίες της πάνω σειράς. Όμως οι δύο μεσαίες της σειράς συγκρούονται με πολλές γειτονικές, άρα ο κανόνας τις αφήνει για το τέλος. Διαλέγει πρώτα τις εργασίες με τις «λίγες» συγκρούσεις — κι ανάμεσά τους μία εργασία που, ενώ μετράει λίγες διενέξεις, στέκεται σ' ένα σταυροδρόμι και μπλοκάρει ταυτόχρονα δύο εργασίες της βέλτιστης λύσης. Λύση: 3 αντί για 4. Το να συγκρούεσαι με λίγες εργασίες δεν σημαίνει ότι δεν είσαι εσύ το κρίσιμο εμπόδιο.

Το κριτήριο που δουλεύει: μικρότερος χρόνος λήξης

ΑλγόριθμοςΧρονοπρογραμματισμός διαστημάτων (earliest finish time)
O(n log n)
Θεώρησε τις εργασίες κατά αύξοντα χρόνο λήξης· κράτα κάθε μία που είναι συμβατή με τις ήδη επιλεγμένες.
Είσοδος:
n εργασίες, η καθεμία με χρόνο έναρξης sⱼ και λήξης fⱼ
Έξοδος:
το μεγαλύτερο σε πλήθος σύνολο ανά δύο συμβατών εργασιών

Με λόγια. Ταξινόμησε τις εργασίες ώστε ο χρόνος λήξης να αυξάνει. Σάρωσέ τες με τη σειρά: κράτα την επόμενη εργασία αν δεν συγκρούεται με ό,τι έχεις ήδη επιλέξει. Επειδή σαρώνεις κατά χρόνο λήξης, αρκεί να θυμάσαι μόνο την τελευταία εργασία που μπήκε — η νέα είναι συμβατή με όλες τις προηγούμενες ακριβώς όταν ξεκινά μετά τη λήξη της τελευταίας.

Πολυπλοκότητα. Η ταξινόμηση κοστίζει · η σάρωση είναι με ανά εργασία. Σύνολο .

Ορθότητα — «ο άπληστος προηγείται»

Απόδειξη (εις άτοπον). Έστω οι εργασίες που επιλέγει ο άπληστος, σε σειρά. Έστω μια βέλτιστη λύση — και μάλιστα διαλεγμένη έτσι ώστε να συμφωνεί με τον άπληστο για όσο το δυνατόν περισσότερες αρχικές εργασίες: για τη μέγιστη δυνατή τιμή του .

Αν ο άπληστος δεν είναι βέλτιστος, τότε . Θα φτάσουμε σε άτοπο.

Βήμα 1 — ο άπληστος «προηγείται». Ισχυρισμός: . Γιατί; Αφού , η εργασία είναι συμβατή με την — άρα ήταν υποψήφια τη στιγμή που ο άπληστος διάλεγε την . Και ο άπληστος επιλέγει πάντα την υποψήφια με τον μικρότερο χρόνο λήξης. Άρα η δεν τελειώνει αργότερα από την .

Βήμα 2 — η ανταλλαγή. Φτιάχνουμε νέα λύση αντικαθιστώντας στη βέλτιστη την με την :

Είναι έγκυρη: η είναι συμβατή με τις (αυτές είναι οι , και ο άπληστος την επέλεξε δίπλα τους)· και επειδή , η τελειώνει όχι αργότερα από την , οπότε δεν συγκρούεται ούτε με την . Το έχει εργασίες — άρα είναι κι αυτό βέλτιστο — αλλά συμφωνεί με τον άπληστο για εργασίες. Αντίφαση με τη μεγιστότητα του .

Μένει η περίπτωση : τότε υπάρχει η , συμβατή με την — και ο άπληστος δεν θα είχε σταματήσει, θα την είχε εξετάσει. Άτοπο. Άρα .

Η ανταλλαγή είναι η καρδιά της απόδειξης — και γίνεται πολύ πιο καθαρή όταν τη δεις να εκτελείται. Πάνω η λύση του άπληστου, κάτω μια βέλτιστη· σε κάθε θέση πρόσεξε την ανισότητα — «ο άπληστος δεν τελειώνει ποτέ αργότερα» — και μετά την ανταλλαγή που ξαναγράφει τη βέλτιστη μία εργασία πιο κοντά στον άπληστο, ώσπου οι δύο λύσεις να ταυτιστούν:

Ο άπληστος προηγείται — η απόδειξη βήμα-βήμα
Δύο λύσεις

Πάνω: ο άπληστος. Κάτω: μια βέλτιστη λύση. Μπλε = θέσεις όπου ήδη συμφωνούν.

ΆπληστοςΒέλτιστοABCAB′D01234567891011121314
Πάνω η λύση του άπληστου: {A, B, C}. Κάτω μια βέλτιστη λύση: {A, B′, D}. Και οι δύο έγκυρες. Διαλέγουμε τη βέλτιστη ώστε να συμφωνεί με τον άπληστο σε ΟΣΟ ΤΟ ΔΥΝΑΤΟΝ περισσότερες αρχικές εργασίες — και θα δείξουμε ότι μπορούμε πάντα να επεκτείνουμε αυτή τη συμφωνία.
Βήμα 0 / 8
Κάρτα μνήμηςΧρονοπρογραμματισμός διαστημάτων
Λέξεις-κλειδιά
μέγιστο πλήθος συμβατώνκριτήριο: πρώτη λήξηταξινόμηση κατά fⱼO(1) έλεγχος ανά εργασία«ο άπληστος προηγείται»
Τα βήματα στο μυαλό σου
1Ταξινόμησε τις εργασίες κατά αύξοντα χρόνο λήξης.
2Σάρωσέ τες με τη σειρά· κράτα κάθε εργασία που ξεκινά μετά τη λήξη της τελευταίας επιλεγμένης.
3Θυμάσαι μόνο τη λήξη της τελευταίας επιλεγμένης — ο έλεγχος συμβατότητας είναι O(1).
Πολυπλοκότητα
O(n log n) — κυριαρχεί η ταξινόμηση
Κλασική παγίδα
Τα κριτήρια «πρώτη έναρξη», «μικρότερο διάστημα» και «λιγότερες διενέξεις» δείχνουν λογικά αλλά είναι ΛΑΘΟΣ. Δουλεύει μόνο ο μικρότερος χρόνος λήξης — κι αυτό θέλει απόδειξη («ο άπληστος προηγείται»).

Διαμέριση διαστημάτων

Διατύπωση

Αλλάζουμε ριζικά το ερώτημα. Τώρα πρέπει να προγραμματίσουμε όλες τις εργασίες — αλλά έχουμε πολλές μηχανές.

Στόχος: βρες το ελάχιστο πλήθος μηχανών ώστε κάθε εργασία να ανατεθεί σε μία μηχανή, με δύο εργασίες που τρέχουν ταυτόχρονα ποτέ στην ίδια μηχανή.

Το κάτω φράγμα — το βάθος

Αν σε κάποια στιγμή τρέχουν ταυτόχρονα εργασίες, αυτές χρειάζονται διαφορετικές μηχανές — αναγκαστικά. Άρα κάθε λύση, όσο έξυπνη κι αν είναι, χρειάζεται:

Το βάθος είναι πιο εύκολο να το δεις παρά να το ορίσεις: πέρνα μια κατακόρυφη γραμμή σάρωσης πάνω από τον χρόνο και μέτρα πόσες εργασίες κόβει σε κάθε στιγμή — η μεγαλύτερη τιμή που θα συναντήσει είναι το βάθος. Ξεκίνα με τη λειτουργία «Βάθος» του εργαλείου· κράτησέ το ανοιχτό, θα το χρειαστούμε ξανά αμέσως μετά:

Διαμέριση διαστημάτων3 μηχανές, βάθος 3

Κόκκινο = εργασία που τρέχει τη στιγμή της σάρωσης.

1abcdefghij0123456789101112131415
Βάθος ως τώρα1= ελάχιστες μηχανές που χρειάζεται ΚΑΘΕ λύση
Η γραμμή σάρωσης διασχίζει τον χρόνο. Σε κάθε στιγμή μετράμε πόσα εργασίες «τρέχουν» — το μέγιστο αυτού του πλήθους είναι το ΒΑΘΟΣ. Πάτα «Επόμενο».
Βήμα 0 / 15

Το ερώτημα τώρα: μπορούμε πάντα να πετύχουμε ακριβώς το βάθος — ή μήπως υπάρχουν στιγμιότυπα που απαιτούν περισσότερες μηχανές απ' όσο το βάθος τους;

Ο άπληστος αλγόριθμος

ΑλγόριθμοςΔιαμέριση διαστημάτων
O(n log n)
Θεώρησε τις εργασίες κατά αύξοντα χρόνο έναρξης· βάλε καθεμία σε όποια μηχανή είναι ελεύθερη — αλλιώς άνοιξε νέα.
Είσοδος:
n εργασίες με χρόνους έναρξης και λήξης
Έξοδος:
το ελάχιστο πλήθος μηχανών, και η ανάθεση εργασιών σε μηχανές

Με λόγια. Ταξινόμησε τις εργασίες κατά αύξοντα χρόνο έναρξης. Πάρε τες με τη σειρά: αν υπάρχει ήδη ανοιγμένη μηχανή που είναι ελεύθερη τη στιγμή που η εργασία ξεκινά, ανάθεσέ τη εκεί· αν όχι, άνοιξε μια νέα μηχανή.

Γύρνα τώρα τον διακόπτη του εργαλείου παραπάνω στη λειτουργία «Άπληστος» και δες τον αλγόριθμο να τρέχει σ' αυτό ακριβώς το στιγμιότυπο — εργασία την εργασία, μηχανή τη μηχανή. Πρόσεξε ιδιαίτερα τη στιγμή που ανοίγει η τρίτη μηχανή.

Ορθότητα — το επιχείρημα του βάθους

Πρώτα, ο αλγόριθμος δίνει έγκυρη λύση: αναθέτει εργασία σε μηχανή μόνο όταν είναι συμβατή με ό,τι υπάρχει ήδη εκεί, άρα ποτέ δύο συγκρουόμενες εργασίες μαζί. Μένει να δείξουμε ότι χρησιμοποιεί ελάχιστες μηχανές.

Απόδειξη. Έστω το πλήθος μηχανών που άνοιξε ο αλγόριθμος. Η τελευταία μηχανή, η -οστή, άνοιξε επειδή κάποια εργασία — έστω η δεν ήταν συμβατή με καμία από τις μηχανές που ήδη υπήρχαν.

Άρα, τη στιγμή που εξετάστηκε η , καθεμία από τις μηχανές είχε τουλάχιστον μία εργασία σε σύγκρουση με την . Επειδή ο αλγόριθμος εξετάζει τις εργασίες κατά αύξοντα χρόνο έναρξης, όλες αυτές οι εργασίες ξεκίνησαν πριν την — και αφού συγκρούονται με την , καμία τους δεν έχει τελειώσει μέχρι την .

Συνεπώς, τη χρονική στιγμή λίγο μετά την τρέχουν ταυτόχρονα εργασίες — οι συν την . Άρα το βάθος είναι .

Αλλά κάθε λύση χρειάζεται μηχανές, και ο άπληστος χρησιμοποιεί ακριβώς . Άρα είναι βέλτιστος.

Αυτό ακριβώς ανάβει κόκκινο στο εργαλείο τη στιγμή που ανοίγει η τρίτη μηχανή: η κατακόρυφη γραμμή δείχνει τρεις εργασίες να τρέχουν μαζί. Το βάθος «αποκαλύφθηκε» μέσα από την ίδια την εκτέλεση του αλγορίθμου — δεν χρειάστηκε καν ξεχωριστή σάρωση για να το βρούμε.

Κάρτα μνήμηςΔιαμέριση διαστημάτων
Λέξεις-κλειδιά
ελάχιστο πλήθος μηχανώνκριτήριο: πρώτη έναρξηβάθος = κάτω φράγμανέα μηχανή μόνο αν αναγκαστείςμηχανές = βάθος
Τα βήματα στο μυαλό σου
1Ταξινόμησε τις εργασίες κατά αύξοντα χρόνο έναρξης.
2Πάρε κάθε εργασία και βάλε τη σε όποια μηχανή είναι ήδη ελεύθερη.
3Αν καμία μηχανή δεν είναι ελεύθερη, άνοιξε καινούργια.
Πολυπλοκότητα
O(n log n) — κυριαρχεί η ταξινόμηση
Κλασική παγίδα
Εδώ το σωστό κριτήριο είναι ο χρόνος ΕΝΑΡΞΗΣ — όχι λήξης (αυτό ήταν το άλλο πρόβλημα). Η βελτιστότητα βγαίνει επειδή το πλήθος μηχανών ισούται με το βάθος, που είναι κάτω φράγμα για ΚΑΘΕ λύση.

Κλείδωσε τη γνώση

Βάλε στη σειρά τα βήματα του χρονοπρογραμματισμού διαστημάτων:

Βάλε τα βήματα στη σειρά
Ο άπληστος χρονοπρογραμματισμός διαστημάτων, από την πρώτη ενέργεια στην τελευταία.
Σύρε τις γραμμές για αναδιάταξη — ή χρησιμοποίησε τα βελάκια.
1.Όταν εξεταστούν όλες οι εργασίες, επίστρεψε το A.
2.Αλλιώς προσπέρασέ τη — συγκρούεται.
3.Πάρε την επόμενη εργασία στη σειρά.
4.Ταξινόμησε τις εργασίες σε αύξουσα σειρά χρόνου λήξης.
5.Αν ξεκινά μετά τη λήξη της τελευταίας επιλεγμένης, πρόσθεσέ τη στο A.
6.Ξεκίνα με κενό σύνολο επιλεγμένων A.

Και συμπλήρωσε τα κενά:

Συμπλήρωσε τα κενά
Τα δύο προβλήματα και οι δύο τεχνικές απόδειξης.
Στον χρονοπρογραμματισμό διαστημάτων, το σωστό άπληστο κριτήριο είναι ο μικρότερος χρόνος , γιατί αφήνει όσο το δυνατόν περισσότερο χρόνο για τις επόμενες εργασίες. Η απόδειξη ορθότητας λέγεται «ο άπληστος ». Στη διαμέριση διαστημάτων, το ελάχιστο πλήθος μηχανών ισούται πάντα με το — το μέγιστο πλήθος εργασιών που τρέχουν .

Μοτίβο σκέψης

Τι μάθαμε

Τι κρατάμε από αυτή τη διάλεξη

  1. Άπληστος αλγόριθμος — χτίζει λύση σταδιακά, κάθε βήμα τοπικά βέλτιστο. Το δύσκολο δεν είναι ο κανόνας, είναι η απόδειξη.
  2. Χρονοπρογραμματισμός διαστημάτων — μέγιστο πλήθος συμβατών εργασιών. Σωστό κριτήριο: μικρότερος χρόνος λήξης. .
  3. Τα κριτήρια «μικρότερη έναρξη», «μικρότερο διάστημα», «λιγότερες διενέξεις» αποτυγχάνουν — πάντα ζήτα αντιπαράδειγμα πριν εμπιστευτείς έναν greedy κανόνα.
  4. «Ο άπληστος προηγείται» — απόδειξη ότι η μερική λύση του άπληστου είναι σε κάθε βήμα τουλάχιστον τόσο καλή όσο κάθε άλλης.
  5. Διαμέριση διαστημάτων — ελάχιστο πλήθος μηχανών. Κριτήριο: μικρότερος χρόνος έναρξης. Το αποτέλεσμα ισούται πάντα με το βάθος.
  6. Δομικό κάτω φράγμα — βρες ένα εμπόδιο μέσα στο πρόβλημα (το βάθος) και δείξε ότι ο αλγόριθμος το πετυχαίνει ακριβώς.
Επόμενο
L12 · Άπληστοι II — Huffman, κωδικοποίηση

Ασκήσεις από εξετάσεις

Από τη θεωρία στην εξεταστική

9 άσκησεις που χρησιμοποιούν ως τελευταίο εργαλείο αυτή τη διάλεξη. Οι πρόσφατες εξεταστικές (2024/2025) φέρουν badge προτεραιότητας.

Παλαιό θέμαΣεπτέμβριος 2025Θέμα Εξετάσεων 2025Θέμα 2.310%Άπληστοι αλγόριθμοιΜέτριο

Σεπτέμβριος 2025 · Θέμα 2.3 — Άπληστα ρέστα (αποτυγχάνει)

Εργαζόμαστε ως ταμίες σε κατάστημα. Τα χαρτονομίσματα/κέρματα που μπορούμε να επιστρέψουμε ως ρέστα έχουν αξία ευρώ (απεριόριστα). Στόχος: όταν δίνουμε ρέστα, να χρησιμοποιούμε το μικρότερο πλήθος κερμάτων.

Μπορούμε να πετύχουμε τον στόχο επιλέγοντας πάντα το κέρμα με τη μεγαλύτερη αξία που δεν ξεπερνά το υπόλοιπο ποσό; (i) ΝΑΙ · (ii) ΟΧΙ. Αιτιολόγησε την απάντηση.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 3Άπληστοι αλγόριθμοιΜέτριο

Φροντιστηριακό Σετ #6 · Άσκηση 3 — Μέγιστη εναλλασσόμενη υπακολουθία σε O(n)

Δίνεται ένας πίνακας με αριθμούς και ζητείται να βρεθεί, σε χρόνο , η υπακολουθία μέγιστου μήκους με την ιδιότητα:

(εναλλάξ «πάνω-κάτω»). Η υπακολουθία δε χρειάζεται να βρίσκεται σε συνεχόμενες θέσεις.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 5Άπληστοι αλγόριθμοιΜέτριο

Φροντιστηριακό Σετ #6 · Άσκηση 5 — Ρέστα με τον ελάχιστο αριθμό νομισμάτων

Θέλουμε να δώσουμε ρέστα cents χρησιμοποιώντας τον ελάχιστο αριθμό νομισμάτων, από νομίσματα αξίας cents. Υπάρχει άπληστος αλγόριθμος που οδηγεί σε βέλτιστη λύση;

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 6Άπληστοι αλγόριθμοιΜέτριο

Φροντιστηριακό Σετ #6 · Άσκηση 6 — Ελάχιστες στάσεις για ανεφοδιασμό

Ο καθηγητής Μίδας οδηγεί με αυτοκίνητο από μια αφετηρία προς έναν προορισμό. Η δεξαμενή καυσίμων του αυτοκινήτου, όταν είναι γεμάτη, έχει αρκετά καύσιμα ώστε να οδηγεί για χιλιόμετρα, και ο χάρτης του δείχνει τις αποστάσεις μεταξύ των σταθμών καυσίμων στον δρόμο του. Ο καθηγητής θέλει να κάνει όσες λιγότερες στάσεις γίνεται. Δώστε έναν αποδοτικό (άπληστο) αλγόριθμο με τον οποίο ο καθηγητής Μίδας θα προσδιορίζει σε ποιούς σταθμούς πρέπει να κάνει στάση, και αποδείξτε ότι ο αλγόριθμός σας δίνει βέλτιστη λύση.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 8Άπληστοι αλγόριθμοιΜέτριο

Φροντιστηριακό Σετ #6 · Άσκηση 8 — Άπληστος χρωματισμός & ελάχιστα ταξί

Δώστε έναν άπληστο αλγόριθμο χρωματισμού των κορυφών ενός γράφου με τον ελάχιστο δυνατό αριθμό χρωμάτων, ώστε γειτονικές κορυφές να μην έχουν το ίδιο χρώμα. Στη συνέχεια, δοθέντος ενός συνόλου ραντεβού (καθένα με χρόνο έναρξης και λήξης), βρείτε τον μικρότερο αριθμό ταξί που χρειάζονται ώστε να εξυπηρετηθούν όλα — κάθε ταξί δεν μπορεί να εξυπηρετεί επικαλυπτόμενα ραντεβού.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 4Άπληστοι αλγόριθμοιΜέτριο

Φροντιστηριακό Σετ #7 · Άσκηση 4 — Μηνιαίο vs ετήσιο πακέτο ίντερνετ

Θέλουμε να επιλέξουμε τον τρόπο παροχής ίντερνετ στο σπίτι, με μηνιαίο πακέτο (χωρίς δέσμευση, μεταβλητή τιμή τον μήνα ), ετήσιο συμβόλαιο (δέσμευση 12 μηνών, σταθερή τιμή ), ή κάποιον συνδυασμό τους σε ορίζοντα μηνών. Ποιος είναι ένας άπληστος αλγόριθμος για αυτό το πρόβλημα;

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 5Άπληστοι αλγόριθμοιΜέτριο

Φροντιστηριακό Σετ #7 · Άσκηση 5 — Παιχνίδι διαδρομής σε πίνακα: αποτυγχάνει ο άπληστος

Έστω ένας πίνακας ακεραίων με γραμμές και στήλες. Παιχνίδι: ξεκινώντας από οποιοδήποτε κελί της κάτω γραμμής, προσπαθούμε να φτάσουμε σε κάποιο κελί της πάνω γραμμής, περνώντας από κελιά ελαχίστου συνολικού κόστους. Κόστος ενός κελιού = ο αριθμός που αναγράφεται σε αυτό. Από ένα κελί κινούμαστε είτε ακριβώς επάνω, είτε διαγωνίως επάνω-αριστερά, είτε διαγωνίως επάνω-δεξιά.

Θεωρήστε τον εξής άπληστο αλγόριθμο: επίλεξε στην κάτω γραμμή το κελί ελαχίστου κόστους, και σε κάθε βήμα επίλεξε το κελί ελαχίστου κόστους της αμέσως πιο πάνω γραμμής στο οποίο έχεις δικαίωμα να μεταβείς. Είναι ο αλγόριθμος βέλτιστος; Αν όχι, δώστε αντιπαράδειγμα.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 7Άπληστοι αλγόριθμοιΜέτριο

Φροντιστηριακό Σετ #7 · Άσκηση 7 — Ελάχιστα μοναδιαία διαστήματα που καλύπτουν σημεία

Περιγράψτε έναν αποδοτικό αλγόριθμο ο οποίος, δεδομένου ενός συνόλου σημείων στον άξονα των πραγματικών αριθμών, καθορίζει το μικρότερο σύνολο κλειστών διαστημάτων μοναδιαίου μήκους που εμπεριέχει όλα τα δοθέντα σημεία.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 8Άπληστοι αλγόριθμοιΜέτριο

Φροντιστηριακό Σετ #7 · Άσκηση 8 — Κατανομή μαθημάτων σε αίθουσες

Το Τμήμα Πληροφορικής ενός Πανεπιστημίου θέλει να κατανείμει ένα σύνολο μαθημάτων στις διαθέσιμες αίθουσες (που είναι το πλήθος, με το αρκετά μεγάλο). Οποιοδήποτε μάθημα μπορεί να γίνει σε οποιαδήποτε αίθουσα, αρκεί να μην υπάρχουν χρονικές επικαλύψεις μεταξύ μαθημάτων της ίδιας αίθουσας. Θέλουμε να προγραμματίσουμε όλα τα μαθήματα χρησιμοποιώντας όσο το δυνατόν λιγότερες αίθουσες. Δώστε αποδοτικό άπληστο αλγόριθμο που αποφασίζει ποια αίθουσα θα φιλοξενήσει ποιο μάθημα. Δίνει ο αλγόριθμός σας βέλτιστο αποτέλεσμα;

Φόρτωση σχολίων…
L11 · Άπληστοι Αλγόριθμοι I — Χρονοπρογραμματισμός Διαστημάτων · Algorithms Class Hub