Η εκφώνηση θέλει να πει "το πλήθος των διαφορετικών αριθμών συνολικά".
Τώρα μια πιο αποδοτική λύση μπορεί να γίνει με το εξής σκεπτικό:
Αντιγράφουμε τα στοιχεία σε έναν πίνακα Γ ας πούμε (δεν είναι απαραίτητο, μπορεί να γίνει και απευθείας στους 2 πίνακες αλλά θα είναι πιο δυσνόητο)
και στη συνέχεια
για κάθε στοιχείο Γ[ι]
κοιτάμε αν υπάρχει από τη θέση ι+1 και κάτω
Αν υπάρχει τότε δεν κάνουμε τίποτα και συνεχίζουμε
Αλλιώς αν δεν υπάρχει τότε αυξάνουμε τον μετρητή και σταματάμε την μέσα επανάληψη (με κάποια λογική μεταβλητή)
και προχωράμε στο Γ[ι+1]
Το παραπάνω νομίζω είναι και το πιο γρήγορο που μπορεί να γίνει (δεν βάζω και το χέρι μου στην φωτιά), στην χειρότερη περίπτωση έχει την ίδια πολυπλοκότητα με τις ταξινομήσεις αλλά έχει καλύτερη πολυπλοκότητα μέσης περίπτωσης
Η ιδέα είναι πως προσμετράς ένα στοιχείο όταν το συναντάς για τελευταία φορά
Δεν το προσμετράς όταν βλέπεις ότι υπάρχει και παρακάτω γιατί ξέρεις ότι θα το προσμετρήσεις όταν φτάσεις εκεί.
ελπίζω τα παραπάνω να είναι κατανοητά
Ωραίος τρόπος, υπάρχει και άλλος ένας ψιλοπερίεργος τώρα μου ήρθε και είπα να τον μοιραστώ.
Αρχικά τα βάζω όλα τα στοιχεία σε έναν πίνακα Γ μεγέθους Ν.
διαφορετικά<--0
Σαρώνεις τον πίνακα και βρίσκεις το μέγιστο και το ελαχιστο στοιχείο του.
Για ι απο ελάχιστο μέχρι μέγιστο
Σειριακή αναζήτηση στον πίνκα Γ για το κλειδί ι
Αν βρέθηκε τοτε διαφορετικά<--διαφορετικά+1
Είναι ακόμα πιο γρήγορος απο τον παραπάνω αν το μέγεθος
μεγιστο-ελάχιστο είναι μικρότερο από το logN.
Απλά είπα να τον αναφέρω.
Ένας άλλος τρόπος πιο εύκολος για τον μαθητή με την ίδια πολυπλοκότητα Ευριπίδη είναι
Ταξινόμηση πίνακα Α με αύξουσα σειρά
διαφορετικα<--1
Για ι από 1 μέχρι Ν-1
Αν Α[Ν]<>Α[Ν+1] τότε
διαφορετικά<--διαφορετικά +1
Τέλος_αν
Τέλος_επανάληψης
Δηλαδή ταξινομείς τα στοιχεία και ελέγχεις πόσες εναλλάγες θα βρείς μέσα στον πίνακα +1, άρα τόσα και τα διαφορετικά στοιχεία... με ίδια πολυπλοκότητα.