Θέμα: Συναρτήσεις Άθροιση υπό όρους

Εμφάνιση ενός μόνο μηνύματος
  #10  
Παλιά 18-12-10, 21:41
officeandi Ο χρήστης officeandi δεν είναι συνδεδεμένος
Όνομα: Ανδρέας
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 06-12-2010
Περιοχή: Θεσσαλονίκη
Μηνύματα: 17
Προεπιλογή

Καλησπέρα σε όλους,

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

Θα ήθελα όμως να το σχολιάσω και λίγο.

Παράθεση:
1) Από το 6ο ποστ του θέματος έχω ανεβάσει το from_cuts2sums.xls που λύνει το πρόβλημα με 12 αριθμούς και auto-calculation. Δείτε το εδώ
2) Η ΜΟΝΗ πλήρης και έγκυρη λύση για το πρόβλημα με 100 αριθμούς είναι η δημιουργία και ο έλεγχος των 2^100 συνδυασμών.
3) Η πρόταση του φίλου Γιώργου (kapetang) για χρήση της Επίλυσης (solver) δεν μας δίνει καμιά απολύτως εγγύηση όταν οι αριθμοί είναι περισσότεροι από 32
Καταρχήν, συμφωνώ απολύτως με το Θανάση και στα τρία σημεία που επισημαίνει.

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

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

Θα σου ήμουν ευγνώμων, αν μου(μας) εξηγούσες λίγο τη στρατηγική που ακολουθείς.

Στη συνέχεια (κάτι άσχετο με το πρόβλημα) παρατήρησα ότι χρησιμοποιείς το DoEvents, και θυμήθηκα τον πονοκέφαλο που μου έχει προξενήσει αυτή η εντολή. Με την εντολή αυτή καταφέρνει το παράθυρο του Excel (και συνεπώς το UI-thread) να επεξεργαστεί τυχόν μηνύματα που στέλνει το λειτουργικό (message-pump). Έτσι μπορεί το παράθυρο να αντιδρά σε εντολές του χρήστη. Αυτό όμως επιτρέπει στο χρήστη παράλληλα, να ξεκινήσει δεύτερη αναζήτηση, ενώ τρέχει η πρώτη!



Φιλικά
Ανδρέας
Απάντηση με παράθεση