Διαβάζεις συνεχώς αριθμούς μέχρι να δοθεί κάποια τιμή φρουρός. Δεν ξέρεις δηλαδή εξαρχής πόσοι είναι. Μάλιστα ο αλγόριθμος μπορεί και να μην σταματάει ποτέ (για το θέμα της περατότητας το συζητάμε κατά πόσο παραβιάζεται, για την ακρίβεια παραβιάζει το γράμμα του νόμου και όχι το πνεύμα του).
Τέτοιοι αλγόριθμοι είναι γνωστοί ως
online algorithms και έχουν πολύ ενδιαφέρον. Η ιδέα είναι ότι επεξεργάζεσαι πάρα πολλά δεδομένα αλλά μπορείς κάθε φορά να έχεις ταυτόχρονα στη μνήμη ένα υποσύνολό τους.
Στην συγκεκριμένη περίπτωση διαβάζεις απεριόριστο πλήθος αριθμών (άρα δεν μπορούν να μπουν όλοι σε κάποια στατική δομή δεδομένων όπως είναι ο πίνακας) και θέλεις τους 50 μεγαλύτερους.
Άρα σου χρειάζεται κάθε φορά να κρατάς 50 αριθμούς.
Για κάθε αριθμό που διαβάζεις θα πρέπει να ανανεώνεις τον πίνακα έτσι ώστε να κρατά μόνο τους 50 μεγαλύτερους μέχρι εκείνη τη στιγμή και να "πετάει" τους άλλους.
Θα πρέπει οποιαδήποτε στιγμή σου ζητηθεί να μπορείς να εμφανίσεις τους 50 μεγαλύτερους
με τη σειρά όμως που τους διάβασες.
Δεν υπάρχει έτοιμος αλγόριθμος (γνωστός εννοώ) που να λύνει αυτή την άσκηση. Θα πρέπει ο μαθητής να σχεδιάσει τον δικό του. Αυτό θα μπορούσε να θεωρηθεί ως ένα παράδειγμα σχεδίασης αλγορίθμων ή αλγοριθμικής όπως την χαρακτηρίζουν αρκετοί.