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

Do you need help?

velocizzare codice hw4

s
simone.lioy (1420 points)
28 30 39
in HW4 obbligatorio by (1.4k points)
finalmente sono riuscito ad unire le parole e a completare l'esercizio. la parola nascosta l'ho trovata tramite il max di count per questo procedimento mi manda in timeout tutti i test. un modo per velocizzare?
805 views
closed

3 Answers

Best answer
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
edited by
Da come l'hai descritto l'approccio che utilizzi non credo possa essere velocizzato, devi ripensarlo da capo.

Dopo aver composto tutte le parole presenti nel file, il modo più immediato di iniziare credo sia quello di generare tutte le possibili sottostringhe della lunghezza data presenti nella prima parola per poi procedere sapendo che sicuramente la parola segreta è una tra queste sottostringhe (dato che deve essere presente una volta in ogni parola).

Comunque come ti ha consigliato Christian, prima di porre una domanda controlla quelle simili già presenti su Q2A perché, per esempio, questa stessa risposta che ti ho dato l'avevo già scritta uguale in un altro post ;)
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
ho fatto come hai detto tu, ho velocizzato molto anche se alcune liste me le ritorna sbagliate. ora vedo un pò come risolvere
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
ricordati di controllare che la parola segreta sia presente una sola volta in ogni parola e di non considerare le sottostringhe che non rispettano questa condizione

inoltre per velocizzare prova ad evitare di analizzare nuovamente una parola se l'hai già analizzata all'interazione precedente
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
per esempio nel file ft2 il programma mi rileva che la parola nascosta è la w invece è la e. perche guardando il file anche la w c'è sempre
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
esattamente questo non ho tenuto in conto 'e si ripete una sola volta'

grazie davvero ora ci rifletto sopra e vedo come posso integrare questa cosa
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
La parola segreta deve trovarsi esattamente UNA SOLA VOLTA in ogni parola. 'w' non rispetta questa condizione, mentre 'e' sì
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
quindi in questo caso bisogna usare un dizionario e come valore mettere il numero di volte che viene ripetuta?
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
ci sono vari modi per implementare questo controllo, ma è necessario farlo visto che è specificato nella traccia, altrimenti ti troveresti "più di una parola segreta" in svariati test
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
e si infatti come è successo a me
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
no non riesco a fare questo controllo
Antares (7770 points)
5 6 41
by (7.8k points)
SI può fare anche senza l'utilizzo dei dizionari utilizzando la funzione count() che credo già conosci ;)
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
che si può utilizzare anche con l'implementazione che sfrutta i dizionari ovviamente
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
si però è molto lenta
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
io faccio 115 ms
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
con count fai cosi poco?
Christian (15220 points)
3 4 77
by (15.2k points)

Ciao, 

innanzitutto vedi se nella fase di Peer Assessment ricevi qualche consiglio utile da chi ha letto il tuo algoritmo devil

Per caso hai già dato un'occhiata a queste altre domande?

T
Trasciatti (1400 points)
13 20 34
by (1.4k points)
Innanzitutto ti consiglio di capire perché va piano. Cosa fai? Dividi in sotto parole lunghe M (lunghezza della parola magica) e poi conti quante di queste sono tante quanto le parole? Pensa, se fai questo o qualcosa di simile, quando fermeresti questa conta? Abbiamo degli indizi importanti, ovvero che la parola magica c'è esattamente una volta in ogni parola.  Se non sfrutti questo sarà difficile avere un programma ottimizzato, devi pensare  1) dov'è che il tuo programma fa cose superflue 2) dov'è che impiega troppo tempo per un'operazione che potresti fare in meno. Ad esempio, se conti quante sottostringhe ci sono e mentre lo fai hanno già superato il numero di parole, dovresti fermarti; detto questo, ti consiglio un approccio più basato sugli indizi che abbiamo che una cosa super generica