Cosa significa tempo di esecuzione previsto e tempo di esecuzione medio di un algoritmo?


17

Diciamo che vogliamo analizzare il tempo di esecuzione degli algoritmi. A volte diciamo che vogliamo trovare il tempo di esecuzione di un algoritmo quando la dimensione di input è n e nel caso peggiore lo denota con O (n). A volte però vedo libri / documenti che dicono che dobbiamo trovare il tempo previsto di un algoritmo. Inoltre a volte viene utilizzato il tempo di esecuzione medio .

Che cos'è il "tempo previsto"? In quali casi è utile trovare il tempo previsto anziché il caso peggiore?

Modifica : penso che ci sia una sottile differenza tra il tempo di esecuzione previsto e il tempo di esecuzione medio, ma non ne sono sicuro. Attraverso questo post voglio sapere se c'è la differenza esatta.


1
Presumibilmente significano il caso medio ...
Martijn Pieters

4
Il valore atteso di una funzione di distribuzione di probabilità è descritto come l'integrale di x * f (x) da infinito negativo a positivo. Il tempo previsto sarebbe derivato determinando la distribuzione di probabilità di tutti i tempi possibili e quindi prendendo il valore atteso. Questa operazione è più comunemente nota come il calcolo della media o il calcolo della media .
Joel Cornett,

1
@JoelCornett: Sarebbe una bella risposta se la pubblicassi ..
Martijn Pieters

@MartijnPieters: No, il caso medio fa un'ipotesi sulla distribuzione di probabilità degli input, il caso previsto no.
Jörg W Mittag,

@ JörgWMittag: giusto, se conosci la distribuzione di probabilità reale dei tuoi input, puoi ignorare il caso medio. In altre parole, il caso previsto è il tempo impiegato dall'algoritmo per la distribuzione della probabilità dei set di input previsti.
Martijn Pieters,

Risposte:


15

Il tempo previsto è solo il tempo medio, previsto , di esecuzione dell'algoritmo che utilizza l' input previsto .

Supponiamo che tu abbia alcuni milioni di record utente e desideri ordinarli, potresti voler utilizzare un algoritmo che è il più adatto al tuo input e come tale offre il miglior tempo di esecuzione previsto , al contrario di un algoritmo che ha tempo di esecuzione peggiore, ma tempo di esecuzione previsto peggiore .

A volte, ad esempio, i fattori costanti per la complessità temporale di un algoritmo sono così alti che ha senso usare algoritmi con complessità temporale peggiore ma fattori costanti più piccoli, poiché ti dà un tempo di esecuzione migliore previsto con un piccolo input, anche se sarebbe ottenere orribilmente sovraperformato con un input maggiore.

Forse un esempio migliore sarebbe il classico algoritmo quicksort, che ha il tempo di esecuzione peggiore di O (n²) ma il tempo di esecuzione medio previsto di O (n log n), indipendentemente dall'input . Questo perché l'algoritmo utilizza (o meglio, può usare , a seconda dell'implementazione) la randomizzazione. Quindi è un cosiddetto algoritmo randomizzato . Funziona in modo leggermente diverso con ogni invocazione anche con lo stesso input. Pertanto, non esiste alcun input nel caso peggiore universale per l'implementazione, poiché l'input nel caso peggiore dipende dal modo in cui l'algoritmo sceglie il perno per dividere l'input specificato. E come tale, non si può semplicemente fornire alcuni input predefiniti che causano il tempo di esecuzione nel caso peggiore. Questo è spesso il caso degli algoritmi randomizzati, che mirano a una durata media prevista migliore, indipendentemente dall'input.

Si tratta solo di usare l'algoritmo giusto per l'input a portata di mano.


Risposta eccellente. Grazie . Penso che la differenza tra atteso e medio sia che quando conosciamo la distribuzione degli input ed eseguiamo l'algoritmo, questo viene chiamato "medio" e quando usiamo un generatore di numeri casuali per permutare gli input a portata di mano, si chiama tempo di esecuzione previsto. Sei d'accordo con questa premessa?
Geek

4

Il tempo di esecuzione previsto di un algoritmo randomizzato è un concetto ben definito, proprio come il tempo di esecuzione peggiore. Se un algoritmo è randomizzato, anche il suo tempo di esecuzione è casuale, il che significa che possiamo definire il valore atteso del suo tempo di esecuzione.

Un esempio ben noto è Quicksort: se selezioniamo i perni in modo casuale, possiamo dimostrare che il suo tempo di esecuzione previsto diventa O (n log n), anche se il tempo di esecuzione peggiore rimane O (n ^ 2). Un esempio in cui la randomizzazione è molto potente è il più piccolo problema del cerchio racchiuso: esiste un semplice algoritmo il cui tempo di esecuzione nel caso peggiore è O (n ^ 3), ma in previsione, il suo tempo di esecuzione è solo O (n).

Il tempo di esecuzione medio viene generalmente utilizzato quando si parla del comportamento di un algoritmo "per la maggior parte degli input". Definiamo un modo di generare in modo casuale un input, ad esempio, riempiamo un array di numeri casuali, o consentiamo casualmente i numeri da 1 a n (quindi nessun duplicato), oppure lanciamo una moneta e otteniamo un set discendente o crescente di numeri. Il tempo di esecuzione medio di un algoritmo per quella distribuzione casuale di input è quindi il tempo di esecuzione previsto dell'algoritmo (nel qual caso l'algoritmo potrebbe non essere randomizzato, ma l'input è).

Ad esempio: ci sono problemi geometrici per i quali esistono algoritmi che sembrano funzionare bene a prima vista, fino a quando non scopri un modo molto strano di distribuire, diciamo, le linee di input. Se supponi che le linee siano distribuite casualmente, è possibile che si verifichino questi strani scenari, quindi il tuo algoritmo finisce per essere buono.

Contrasto: il tempo di esecuzione previsto riguarda le prestazioni di un algoritmo "a meno che tu non abbia sfortuna": riprovare lo stesso algoritmo sullo stesso input ma con scelte casuali diverse può portare alla sua risoluzione molto più veloce. Il tempo medio di esecuzione parla di come un algoritmo si comporta "per la maggior parte degli input" - riprovare lo stesso algoritmo sullo stesso input non ti aiuterà (tranne forse se l'algoritmo è anche randomizzato).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.