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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Migliorare tempi per aggiungere elemento a Lista

aa91 (3450 points)
6 14 46
in Programmare in Python by (3.5k points)
closed by

Buongiorno, 

ho creato una funzione non ricorsiva per cercare in modo binario dove aggiungere un elemento in una lista ordinata, per poi aggiungerlo mantenendola ordinata.

Il problema della funzione è che quando vado ad aggiungere l'elemento ad una lista maggiore di 1000 elementi, il comando per aggiungere l'elemento alla lista tramite le slice impiega moltissimo tempo.

In caso di aggiunta all'inizio della lista (tramite le slice) o alla fine (tramite il metodo append), i tempi di esecuzione si mantengono bassi.

Esiste un metodo più efficiente per aggiungere un elemento "in mezzo" alla lista?

313 views
closed

2 Answers

Best answer
d
davide.avolio (2170 points)
1 2 10
by (2.2k points)
selected by
Se non si può organizzare diversamente il codice il metodo miaLista.insert(posizione, elemento) è sicuramente più veloce dello slice perché è la funzione nativa delle liste per questa operazione
aa91 (3450 points)
6 14 46
by (3.5k points)
Grazie, non so perché ma avevo rimosso che esisteva questa funzione.

Ora con 1'000'000'000 elementi impiega circa 1.7 secondi la funzione di inserimento!
m
mmolinari (1040 points)
1 4 9
by (1.0k points)

Ciao,

provo a risponderti ed eventualmente a fornirti un mio punto di vista.

Andrebbe verificata ulteriormente la condizione in quanto, una lista di 1000 elementi non mi sembra cosi onerosa da gestire in termini di performance pertanto andrebbe approfondito il contesto del tuo algoritmo. Detto questo personalmente valuterei se è proprio così vincolante inserire elementi in una lista già ordinata optando invece per un ordinamento a valle di tutte le manipolazioni necessarie, mi sembra più ordinato.

Ovviamente come ti ho scritto non ho lo scope globale del tuo codice per cui potrei non essere tanto d'aiuto.
Se ti è possibile magari fornire dei dettagli in più proviamo a capire meglio.

Grazie!