Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Soluzioni più efficienti esercizio 3

v
val9 (9770 points)
6 30 53
in Es3 by (9.8k points)
closed by

Buongiorno, 

mi chiedevo se ci fossero dei metodi più efficienti per risolvere l'es3 senza dover scorrere tutto il testo, parola per parola, e senza dover utilizzare count() o find()  (che a mio avviso possono essere delle funzioni rischiose).

Grazie smiley

968 views
closed with the note: answered

2 Answers

Best answer
Xriuk (13590 points)
6 24 116
by (13.6k points)
selected by

Non puoi fare affidamento su count o find perchè rischi di conteggiare parole sbagliate (caso: "lucenavelanavelanaveelica" con lista ['ala','cena','elica','nave','luce','lana','vela'], la parola cena evidenziata sta a metà di due parole e non è valida).

L'unica soluzione (a mio avviso) è scorrere tutto il testo, ma per farlo c'è modo e modo, ad esempio potresti saltare alcune iterazioni in base alla lunghezza delle parole.

Poi dipende anche come fai il controllo sul testo con la lista delle parole.

v
val9 (9770 points)
6 30 53
by (9.8k points)
Io scorro il testo, confrontando parola per parola con la porzione di testo che prendo  fino alla lunghezza della parola. Il problema è che risulta fin troppo lento.
Xriuk (13590 points)
6 24 116
by (13.6k points)
E se controlli direttamente se la porzione di testo che prendi è nella lista? Così dovrebbe essere più veloce
v
val9 (9770 points)
6 30 53
by (9.8k points)
Teoricamente non impiegherei meno tempo a confrontare ogni parola della lista con la porzione di testo avente stessa lunghezza della parola?
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Quanto ci mette il tuo programma a finire tutti i test usando questo metodo?
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Dipende da come utilizzi lo slicing. Se fai in modo di non controllare mai due volte la stessa slice non c'è problema
v
val9 (9770 points)
6 30 53
by (9.8k points)
Cosa intendi per controllare due volte? Dopo aver confrontato in base alla lunghezza, e trovata la parola, io passo a cercare quella che si trova nella porzione successiva. :|
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Anche io faccio così, stesso identico modo
v
val9 (9770 points)
6 30 53
by (9.8k points)
allora non capisco proprio dove sia il problema :(
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Eh bisognerebbe vedere il tuo codice ma non posso ovviamente, magari hai fatto qualche operazione inutile da qualche parte, o cicli poco ottimizzati