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

Do you need help?

Consigli su come ottimizzare HW4?

Savio (420 points)
2 4 7
in HW4 by (420 points)
Runnando i test ho visto che i test che non supero failano perché superano il timeout, rileggendo e provando ad ottimizzare il codice mi sono reso conto che effettivamente la parte in cui controllo l'occorrenza delle lettere nelle varie posizioni non è proprio il massimo, non riesco però a trovare nessun altro modo di fare ciò che ho fatto, qualcuno potrebbe darmi qualche consiglio su come migliorare quella parte? (sto usando un dizionario {str, int} che varia ogni volta che cambio la posizione che voglio esaminare).
896 views

7 Answers

James_F (6070 points)
10 14 47
by (6.1k points)
il dizionario è l'idea vincente basically, quello che devi cercare di capire è come scorrere gli indici delle parole e come e quando fermarti
a
alessi092 (110 points)
0 0 1
by (110 points)
domanda....in questo caso un set al posto del dictionary non dovrebbe essere meglio?
A
Andrea Lugini (550 points)
0 2 7
by (550 points)
Il set serve solamente ad avere un insieme di tutti i valori senza ripetizioni, il dictionary ti permette di creare associazioni chiave-valore
Alegau (6770 points)
1 2 43
by (6.8k points)
Prova a ridurre il numero di cicli annidati che usi, potrebbe alleggerire il tuo codice
aa91 (3450 points)
6 14 46
by (3.5k points)

@Savio sicuramente occorre usare i dizionari per estrarre in modo efficiente le occorrenze di una determinata lettera.

Un' altra cosa da analizzare è: 'Come leggi i file?' 'Dopo aver estratto il testo cicli anche sulle righe vuote' ?

Savio (420 points)
2 4 7
by (420 points)

@aa91 il file lo leggo per intero, mentre subito dopo la lettura del file ho messo uno split.

a
andreannn (2720 points)
5 14 34
by (2.7k points)
Prova ad usare più dizionari direttamemente, senza farne variare uno solo (penso con un ciclo for). Inoltre, dividi tutto in micro funzioni, infatti con spyder è possibile vedere quale delle funzioni occupa la mggior parte del tempo (così ti renderai conto di cosa dover snellire).

Ti spiego come si usa:

da anconda installa: conda install spyder-line-profiler -c spyder-ide

qui una guida all'uso: https://docs.spyder-ide.org/current/plugins/lineprofiler.html
k
kcavallara (470 points)
9 14 16
by (470 points)
credo che forse stiamo usando versioni standAlone e non è possibile utilizzare questo plugin ... perche ho seguito tutta la procedura e una volta riavviato spyder non mi ritrovo il plugin
Savio (420 points)
2 4 7
by (420 points)
Strano, a me è andato
a
andreannn (2720 points)
5 14 34
by (2.7k points)
è strano, io lo uso attualmente e funziona normalmente. Lo hai installato in f22 da anaconda powershell prompt?
k
kcavallara (470 points)
9 14 16
by (470 points)
si ho solamente profiler e non line profiler e penso siano due cose diverse
a
alessi092 (110 points)
0 0 1
by (110 points)
nemmeno io dopo averlo installato riesco a trovare line profiler su panes (mac OS)
2
2045982 (680 points)
0 4 7
by (680 points)

Anche a me la stessa cosa. Ho provato anche ad aggiornare tutte le librerie, su ananconda esce:

conda install spyder-line-profiler -c spyder-ide
Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.

Retrieving notices: ...working... done

ma su spyder non me lo trova. 

F
Frasca (320 points)
0 0 2
by (320 points)
usa il dizionario, che è di sicuro la carta vincente. Poi se ordini la lista di verrà più facile trovare il più grande se alcune lettere hanno la stessa frequenza
L
Larenzz03 (5990 points)
3 14 65
by (6.0k points)
Penso che il dizionario sia la strada base da dover prendere. Ottimizzalo provando a ridurre i vari cicli annidati con list comprehension.

list comprehension: https://www.programmareinpython.it/video-corso-python-intermedio/01-list-comprehensions/
Shangry_ (9930 points)
7 25 76
by (9.9k points)
di consiglio ti utilizzare una lista di dizionari con [{lettera:frequenza},{lettera:frequenza}] anziché un dizionario che ogni volta cambia