Allora prima di tutto ci tengo a precisare che ho replicato solo per far discussione formativa e con nessun intento d'affronto, chiarito questo, un pensiero d'impulso, senza fare molti calcoli, che mi ha portato a pensare che ti sbagli (su come calcoli la complissità) è questo:
- Nei risultati che esponi i tuoi 3 algoritmi la proporzione tra quello "vecchio" e quello chiamato "KinderBueno" e circa 1,22, quindi, dato che il tuo vecchio algoritmo faceva 1700 sulla VM, quello che chiami "Kinder_Bueno" gira a circa 1700/1.22= 1310 più o meno. Dal momento che il mio algoritmo (che non conta le freq) ha stessi tempi, fa più o meno le stesse operazioni.
- L'algoritmo che ho implementato che conta le frequenze ha tempi sulla VM di circa 986, quindi anche questo, più o meno stesse operazioni del tuo (non faccio uso nemmeno io di set{} come funzione).
- Il test_12 con l'algoritmo che non conta le frequenze sul mio pc impiega 815ms
- Il test_12 con l'algoritmo che conta impiega circa 1000ms
Quindi è un aumento di più del 20% (che non è per niente in linea con lo 0,0005% di cui parli, e non è nemmeno il caso peggiore perchè il test ha circa il 50% delle parole che si ripetono), il risparmio si ha nei 3 test precedenti, e questo nel totale ha un'efficienza di circa 300ms.
Ora la domanda che voglio farti è: quanto tempo impiega "Kinder_Bueno" e quanto "Ferrero" solo nel test_12 ? Penso, senza sapere la risposta, che la differenza è maggiore dello 0,0005%.
Ora o abbiamo implementato entrambi due algoritmi (1300 e 986) che per pura casualità hanno stessi tempi e fanno un numero differente di operazioni oppure il tuo calcolo della complessità è sbagliato. Fatto sta che sulla base del test_12 dai due miei algoritmi noto chiaramente una differenza di circa il 20% e non 0,0005%.
Potresti mostrare solo i risultati del test_12 e mostrami che il tuo 0,0005% ha effettivamente senso?
Ps: ripeto mi piace la discussione formativa, spero non prendi questo con aria di sfida perchè non è mio intento; anzi vorrei capire che mi sto sbagliando e quindi ricarico quello da 986 che ero pure primo nella leaderboard ;)