Καλημέρα στα μέλη του θέματος, καλημέρα Μάρω,
Σκέφτηκα λίγο το θέμα αυτό και πιστεύω πως ο μόνος τρόπος είναι να γίνει η πρόσθεση για όλους τους δυνατούς συνδυασμούς
για να κρατήσεις τους ας πούμε 10 ή 20 καλύτερους και στον καθένα από ποιον συνδυασμό παράχθηκε (τετράδα, πεντάδα, κλπ.).
Ο τρόπος αυτός είναι γνωστός ως brute force αλγόριθμος και στην περίπτωση αυτή ο μόνος δυνατός.
Κατά τη γνώμη μου θα έπρεπε όλες οι τιμές να εισαχθούν σε ένα array
Στη συνέχεια ξεκινούμε ένα for loop από το j=1 έως το 100, όπου το κάθε j το μεταφράζουμε κάθε φορά στο δυαδικό σύστημα (bitmask).
Αν μια ορισμένη θέση του bitmask έχει τιμή 1(true), τότε επιλέγουμε την αντίστοιχη τιμή από το array για πρόσθεση, διαφορετικά την παραλείπουμε.
Όλο αυτό θα μπορούσε να το αναλάβει ένα
VBA-module.
Τώρα στην πράξη: Έστω ότι δεν έχουμε 100 διαφορετικές τιμές, αλλά:
- 8 => πλήθος συνδυασμών 2^8 = 256
- 16 => πλήθος συνδυασμών 2^16 = 65536
- 32 => πλήθος συνδυασμών 2^32 = 4 294 967 296
- 64 => πλήθος συνδυασμών 2^64 = 18 446 744 073 709 551 616
- 100 => πλήθος συνδυασμών 2^100 = 1 267 650 600 228 229 401 496 703 205 376
Μπορείς να μου διαβάσεις τον τελευταίο αριθμό; :)
Για τον κάθε συνδυασμό λοιπόν πρέπει να γίνει μια πρόσθεση.
Επειδή δεν είμαι απόλυτα σίγουρος για τα παραπάνω, παρακαλώ ας σχολιάσουν οι υπόλοιποι.
Αν όμως έχω δίκιο, καταλαβαίνεις ότι για τέτοιους υπολογισμούς τα PC μας δεν είναι έτοιμα ακόμη.
Φιλικά
Ανδρέας