Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007



Σχετικά έγγραφα
Graph Algorithms. Παρουσίαση στα πλαίσια του μαθήματος «Παράλληλοι Αλγόριθμοι» Καούρη Γεωργία Μήτσου Βάλια

Κατανεμημένα Συστήματα Ι

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

Χρήστος Ι. Σχοινάς Αν. Καθηγητής ΔΠΘ. Συμπληρωματικές σημειώσεις για το μάθημα: «Επιχειρησιακή Έρευνα ΙΙ»

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Γραφήματα. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

3η Σειρά Γραπτών Ασκήσεων

3η Σειρά Γραπτών Ασκήσεων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Γράφοι: κατευθυνόμενοι και μη

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

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

Αλγόριθμοι και πολυπλοκότητα: 4 η σειρά ασκήσεων ΣΗΜΜΥ - Ε.Μ.Π.

Το Πρόβλημα του Περιοδεύοντος Πωλητή - The Travelling Salesman Problem

Ενότητα 5: Αλγόριθμοι γράφων και δικτύων

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

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

Εισαγωγή στην Επιστήμη των Υπολογιστών

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

Εισαγωγή στην Επιστήμη των Υπολογιστών

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

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

Outline. 6 Edit Distance

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΠΛΗ 20, 6 η ΟΣΣ: Δέντρα Εξετάσεις

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

Θεωρία Παιγνίων και Αποφάσεων. Ενότητα 5: Εύρεση σημείων ισορροπίας σε παίγνια μηδενικού αθροίσματος. Ε. Μαρκάκης. Επικ. Καθηγητής

Επίλυση προβλημάτων με αναζήτηση

Δρομολόγηση Και Πολύχρωματισμός. Γραφημάτων ΚΑΡΑΓΕΩΡΓΟΣ ΤΙΜΟΘΕΟΣ Α.Μ 1026

Ελάχιστο Γεννητικό Δένδρο. Παράδειγμα - Αλγόριθμος Prim. Γιατί δουλεύουν αυτοί οι αλγόριθμοι;

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

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

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

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

Graph Algorithms. Παρουσίαση στα πλαίσια του μαθήματος «Παράλληλοι Αλγόριθμοι» Καούρη Γεωργία Μήτσου Βασιλική

4. ΔΙΚΤΥΑ

Τεχνητή Νοημοσύνη. 6η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

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

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

max 17x x 2 υπό 10x 1 + 7x 2 40 x 1 + x 2 5 x 1, x 2 0.

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

Δυναμικός προγραμματισμός για δέντρα

Δυναµικός Προγραµµατισµός (ΔΠ)

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

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

Ελάχιστα Γεννητορικά ένδρα

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 9: Άπληστοι Αλγόριθμοι. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

Διαχείριση Εφοδιαστικής Αλυσίδας ΙΙ

Αλγόριθμοι και πολυπλοκότητα Περιήγηση Πανεπιστημίων

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

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Θέμα 1: Robbie και Αναζήτηση

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e

Συνδυαστική Βελτιστοποίηση Εισαγωγή στον γραμμικό προγραμματισμό (ΓΠ)

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

Υπάρχουν πολλά είδη Ηλιακών Ρολογιών. Τα σημαντικότερα και συχνότερα απαντόμενα είναι:

1 Διάσχιση κατευθυνόμενων γραφημάτων

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΜΗΜΑ: Γ2-Γ3

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

I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 10 I 11

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

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

Στοιχεία Θεωρίας Γράφων (Graph Theory)

Μέθοδοι πολυδιάστατης ελαχιστοποίησης

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

Ασκήσεις μελέτης της 6 ης διάλεξης

Τεχνητή Νοημοσύνη. 3η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

Δομές Δεδομένων. Τι είναι η δομή δεδομένων; Έστω η ακολουθία αριθμών: 8, 10,17,19,22,5,12 Λογικό Επίπεδο. Φυσικό Επίπεδο RAM. Ταξινομημένος.

max & min Μεθοδολογία - 1 Τα βήματα που συνήθως ακολουθούμε στις τεχνικές εύρεσης max & min είναι τα εξής:

Κατανεμημένα Συστήματα Ι

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

Κατανεμημένα Συστήματα Ι

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ 2 ΠΡΟΒΛΗΜΑΤΑ ΔΙΚΤΥΩΝ ΚΑΙ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΙ

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Αλγόριθµοι Τύπου Μείωσης Προβλήµατος

Θέματα Εφαρμογών Βάσεων Δεδομένων: Ιδιωτικότητα Δεδομένων

Αλγόριθμοι και πολυπλοκότητα Διαίρει και Κυρίευε

Αλγόριθμοι και πολυπλοκότητα Δυναμικός Προγραμματισμός

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

2η Σειρά Γραπτών Ασκήσεων

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

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Προβλήματα Μεταφορών (Transportation)

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

Σειρά Προβλημάτων 5 Λύσεις

Μεθοδολογία Επίλυσης Προβλημάτων ============================================================================ Π. Κυράνας - Κ.

Transcript:

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007 Πρόβλημα 1 Το πρώτο πρόβλημα λύνεται με τη μέθοδο του Δυναμικού Προγραμματισμού. Για να το λύσουμε με Δυναμικό Προγραμματισμό πρέπει να βρούμε τα επόμενα δύο βήματα: 1. Βέλτιστη λύση για μικρότερα κομμάτια (μέρη) του προβλήματος (optimal substructure) 2. Αναδρομική φόρμουλα που να τα ενώνει και να παράγει την βέλτιστη λύση για το αρχικό πρόβλημα (recurrence formula). Ξεκινούμε με το πρώτο. Υπάρχει; Ναι. Έστω μια πυραμίδα που ξεκινά από το σημείο (2,1) [γραμμή 2, στήλη 1]. Μπορούμε να υπολογίσουμε το βέλτιστο άθροισμα γι' αυτή την πυραμίδα. Γενικεύοντας, για οποιοδήποτε κόμβο μπορούμε να σχηματίσουμε μια πυραμίδα από κάτω του και να υπολογίσουμε το μέγιστο άθροισμά της. Εξασφαλίσαμε τη βέλτιστη λύση για μικρότερα κομμάτια του προβλήματος. Μπορούμε να βρούμε μια αναδρομική συνάρτηση που να χρησιμοποεί τις λύσεις για μικρότερα κομμάτια του προβλήματος και να παράγει το τελικό αποτέλεσμα; Ναι. f i, j = { min f i 1, j, f i 1, j 1 A[i, j],if i N A[i, j],if i=n } Όπου f(i,j) το μέγιστο άθροισμα ξεκινώντας από τον κόμβο (i,j) [i αντιστοιχεί στη γραμμή και j αντιστοιχεί στη στήλη] μέχρι το τέλος της πυραμίδας και A[i,j] η τιμή του κόμβου στη θέση (i,j). Με απλά λόγια, η πιο πάνω φόρμουλα μας λέει ότι το μέγιστο άθροισμα ισούται με το μεγαλύτερο από τα δύο μέγιστα αθροίσματα των από κάτω κόμβων (αριστερά και δεξιά) + την τιμή στη θέση αυτή. Στην περίπτωση της τελευταίας γραμμής το μέγιστο άθροισμα ισούται με την τιμή του κόμβου. Πως υλοποιείται αυτό; Πολύ απλά, ξεκινόντας από το τελευταίο επίπεδο της πυραμίδας και πηγαίνοντας προς τα πάνω μπορούμε να υπολογίσουμε το f(i,j) για όλους τους κόμβους. Η τελική απάντηση θα είναι το f(1,1). 1/5

Πρόβλημα 2 Το πρόβλημα 2 χωρίζεται σε δύο μέρη. Στο πρώτο το ζητούμενο είναι να υπολογίσετε τον αριθμό των αντικειμένων στο διάγραμμα. Υπάρχουν πολλές λύσεις γι' αυτό το πρόβλημα. Θα δοθεί η λύση με γράφο (θεωρία γράφων) η οποία είναι πολύ γενική και μπορεί να χρησιμοποιηθεί σε πολλά προβλήματα. Έστω το παράδειγμα: Κατασκευάζουμε ένα μη κατευθυνόμενο, μη ζυγισμένο γράφο με κόμβους τα μαύρα κουτιά και ακμές μεταξύ δύο γειτονικών κουτιών, όπως παρακάτω: Για τη λύση του πρώτου μέρους, τρέχουμε τον αλγόριθμο προσπέλασης γράφου DFS (Depth First Search) ή τον BFS (Breath First Search) για όλους τους κόμβους που δεν έχουμε ήδη επισκεφτεί (από προηγούμενες προσπελάσεις). Κάθε νέα φορά που καλούμε την συνάρτηση του αλγορίθμου, έχουμε και ένα καινούριο αντικείμενο (object). Δεύτερο Μέρος του προβλήματος. Στο δεύτερο μέρος, δίνονται σκόπιμα μονάδες για μη βέλτιστες λύσεις, με αποτέλεσμα πολλοί αλγόριθμοι να μπορούν να πάρουν αρκετές μονάδες χωρίς να είναι και οι καλύτεροι. Εμείς όμως θα περιγράψουμε τον καλύτερο (γρηγορότερο) αλγόριθμο για τη λύση αυτού του προβλήματος. Ο αλγόριθμός αυτός είναι βασισμένος στον αλγόριθμο του Kruskal για εύρεση του Minimum Spanning Tree (δέντρου με το μικρότερο βάρος/κόστος, που ενώνει όλους τους κόμβους σε ένα γράφο). Ο αλγόριθμος του Kruskal είναι ο εξής: Kruskal-MST(G) sort όλες τις ακμές του γράφου με βάση το βάρος τους count = 0 while (count < V-1) do (v,w) = η επόμενη πιο μικρή ακμή if ( component(v) <> component(w) ) then (v,w) είναι ανοίκει στο MST που ψάχνουμε merge component(v) και component(w) count = count + 1 2/5

(όπου V είναι ο αριθμός των κόμβων - vertices) Το MST που ψάχνουμε αποτελείται από ακριβώς V-1 ακμές (αν πιάσουμε λιγότερες δεν θα ενώνει τον γράφο, αν πιάσουμε περισσότερες θα περιέχει κύκλους δεν θα είναι MST). Ο πιο πάνω αλγόριθμός τρέχει πιάνοντας τις V-1 πιο μικρές ακμές που ενώνουν ξεχωριστά components (σύνολο κόμβων που συνδέονται μαζί) και κάθε φορά που πιάνει μια ακμή, ενώνει τα components στα άκρα της ακμής. Ο αλγόριθμος αυτός δουλεύει. Έστω ότι τρέχαμε αυτό τον αλγόριθμο και δεν μας παρήγαγε το σωστό αποτέλεσμα. Αυτό σημαίνει ότι σε κάποια φάση ο αλγόριθμος διάλεξε μια λάθος ακμή (μη βέλτιστη) και δύο components δεν ενώθηκαν με τον πιο βέλτιστο τρόπο. Αυτό σημαίνει ότι θα πρέπει να υπάρχει μια ακμή η οποία να ενώνει τα δύο αυτά components με καλύτερο τρόπο (μικρότερη ακμή). Αν υπήρχε τέτοια ακμή όμως θα την επεξεργαζόταν πιο πριν ο αλγόριθος μας (επειδή είναι πιο μικρή) και θα την επέλεγε. Έτσι, δεν μπορεί να υπάρχει αυτή η πιο μικρή ακμή, με αποτέλεσμα ο αλγόριθμος να είναι πάντα σωστός. Στο πρόβλημά μας τώρα, θα χρησιμοποιήσουμε τον πιο πάνω αλγόριθμο (την ιδέα) για να υπολογίσουμε ποια αντικείμενα να ενώσουμε μαζί και σε ποια κουτιά ώστε να ενωθούν όλα τα αντικείμενα μετατρέποντας όσα λιγότερα άσπρα κουτιά γίνεται. Με βάση τον αλγόριθμο του Kruskal θα υπολογίζαμε τις αποστάσεις μεταξύ των αντικειμένων και θα τρέχαμε τον ίδιο αλγόριθμο. Δεν είναι όμως τόσο εύκολα τα πράγματα επειδή μπορεί περισσότερα από 2 αντικείμενα (ας πούμε 3) να ενώνονται σε ένα κοινό κουτί και να δίνουν καλύτερη λύση απ' ότι αν ενώναμε το ένα με το άλλο. Γι' αυτό, παρά να παίρνουμε τις αποστάσεις των αντικειμένων και να επιλέγουμε την μικρότερη (για χρήση στον αλγόριθμο του Kruskal) παίρνουμε τις αποστάσεις (το κόστος) αν ενώναμε 1 ή περισσότερα αντικείμενα σε κάποιο κουτί και επιλέγουμε το κουτί με το μικρότερο κόστος. Πως το υλοποιούμε εύκολα αυτό; Για κάθε αντικείμενο του διαγράμματος που ξεχωρίσαμε με τον αλγόριθμο του πρώτου μέρους παράγουμε τον πίνακα αποστάσεών του. Δηλαδή ένα πίνακα που να μας λέει πόση απόσταση απέχει το κάθε κουτί του διαγράμματος από το αντικείμενο. Για παράδειγμα, για το σκιαμμογραφημένο αντικείμενο δίνεται ο πίνακας αποστάσεών του. 2 1 1 2 3 4 1 1 2 3 1 1 2 3 4 2 1 2 3 4 5 3 2 3 4 5 6 4 3 4 5 6 7 Ο πίνακας αυτός μπορεί να ευρεθεί εύκολα και αποτελεσματικά (γρήγορα) με τον αλγόριθμο προσπέλασης γράφου BFS (Breath First Search), σημαδεύοντας στη αντίστοιχη θέση του πίνακα αποστάσεων το βάθος της αναζήτησης που βρίσκεσαι για κάθε κουτί. Έχοντας αυτό τον πίνακα για κάθε αντικείμενο του διαγράμματος μπορούμε να υπολογίσουμε εύκολα για κάθε κουτί πόσο θα είναι το κόστος αν θα ενώναμε όλα τα αντικείμενα στο συγγεκριμένο κουτι. Όλα καλά ως εδώ, αλλά για κάθε κουτί που ξέρουμε ότι μας συμφέρει να ενώσουμε όλα τα 3/5

αντικείμενα; Δεν θα πρέπει να ελέγξουμε για κάθε πιθανό συνδιασμό αντικειμένων σε κάθε κουτί; Ναι αυτό είναι σωστό. Υπολογίζοντας μόνο την περίπτωση όλων των αντικειμένων να συναντιούνται σε ένα κουτί δεν δίνει τη σωστή λύση. Παίρνοντας όλους τους πιθανούς συνδιασμούς, με κάποιες μαθηματικές πράξεις βρίσκουμε ότι ειναι πολύ μεγάλο ποσό συνδιασμών, άρα πολύ αργό πρόγραμμα. Γι' αυτό, συνεχίζουμε να βρούμε κάτι άλλο που θα μας βοηθήσει. Και αυτό το άλλο είναι μια παρατήρηση που προέρχεται από το ζητούμενό μας (το MST). Έστω ότι έχουμε τα εξής αντικείμενα: 1 2 3 x και ελέγχουμε αν στο κουτί (x) μπορούν να ενωθούν τα πιο πάνω 3 αντικείμενα και αν συμφέρει. Παρατηρούμε ότι δεν υπάρχει λόγος να ελέγξουμε το κουτί (x) για τα 3 αντικείμενα επειδή δεν γίνεται να είναι βέλτιστη λύση, γιατί το αντικείμενο 3 απέχει από το κοντινότερό του αντικείμενο 2 κουτιά ενώ από το (x) 3 κουτιά. Ενώνοντας το αντικείμενο 3 με το κοντινότερό του (αντικείμενο 1) έχουμε πιο μικρή λύση και πάλι τα 3 θα είναι ενωμένα. Με βάση αυτή την παρατήρηση μπορούμε να περιορίσουμε τον πίνακα αποστάσεων και να υπολογίζουμε αποστάσεις μέχρι μέγιστο βάθος όσο είναι η απόσταση του κοντινότερου αντικειμένου. Για παράδειγμα το πιο κάτω αντικείμενο απέχει 2 κουτιά από το κοντινότερό του. 2 1 1 2 1 1 2 1 1 2 2 1 2 2 Έτσι τώρα, οι συγκρίσεις είναι πολύ πιο λίγες και αν σε κάποιο κουτί συναντιώνται 2 ή περισσότερα αντικείμενα, σίγουρα θα είναι συμφέρουσα τιμή. Το μόνο που μένει τώρα είναι να υπολογίσουμε πόσα αντικείμενα συναντιώνται σε κάθε κουτί και πόσο είναι το κόστος τους. Ανάμεσα στα κουτιά που συναντιώνται τα περισσότερα αντικείμενα (πρώτο κριτήριο επιλογής) επιλέγουμε εκείνο με το μικρότερο κόστος (δεύτερο κριτήριο επιλογής). Τώρα που έχουμε έτοιμο τον αλγόριθμο για επιλογή του καλύτερου κουτιού μπορούμε να καθορίσουμε τον τελικό αλγόριθμο: 4/5

Task2Β-Solver(A) do k = αριθμός αντικειμένων if (k > 1) then βρες το κουτί με το χαμηλότερο κόστος ένωσε τα αντικείμενα που συμφέρει να ενωθούν στο κουτί αυτό while (k > 1) 5/5