Differenza tra complessità temporale e complessità computazionale


14

Per misurare la complessità di un algoritmo, è la complessità temporale o computazionale? Qual'è la differenza tra loro?

Ho usato per calcolare il conteggio massimo (peggiore) delle operazioni di base (più costose) nell'algoritmo.


2
Non una risposta alla tua domanda, ma dato il tuo interesse per questo genere di cose, potresti anche essere interessato a cs.stackexchange.com/q/13669/755
DW

1
"complessità di un algoritmo" quando si fa riferimento al runime asintotico è un termine improprio (usato frequentemente). Vuoi dire "runtime asintotico".
Raffaello

Risposte:


9

La complessità computazionale è solo un termine più generale, poiché il tempo non è l'unica risorsa che potremmo voler considerare. Il prossimo più ovvio è lo spazio che utilizza un algoritmo, e quindi possiamo parlare della complessità dello spazio , anche come parte della complessità computazionale. In effetti possiamo farlo per qualsiasi misura che ti interessa, ovviamente alcune misure sono più utili di altre.

Quindi, contare il numero di passaggi che un algoritmo compie nel peggiore dei casi dà un limite di complessità temporale per il problema che risolve, contando quanta memoria / quante celle a nastro utilizza dà un limite di complessità spaziale ecc. Ecc.

Ricorda anche che se vuoi essere rigoroso, la complessità si riferisce al problema, non all'algoritmo, quindi un problema ha limiti di complessità, un algoritmo ha limiti di risorse (tempo di esecuzione, uso dello spazio ...). È solo una questione di formalità definitiva, la teoria della complessità affronta i problemi. Sì, gli algoritmi sono uno strumento chiave per problemi di analisi e la complessità e algoritmi sono strettamente legati tra loro, ma formalmente non diremmo Merge-Sort (un algoritmo) è in , è il problema che è in . Merge-Sort utilizza determinate risorse ( ad esempio passaggi ). Il limite di risorse e la correttezza dell'algoritmo implicano la complessità (superiore) legata al problema, ma sono cose diverse. S o r t i n g P O ( n log n )PSortingPO(nlogn)Sortingè anche -completo sotto le riduzioni , questo limite di complessità può davvero essere dichiarato solo per un problema (ma ha implicazioni algoritmiche).TC0AC0


@shekharsuman Per problema intendo la nozione formale di un problema computazionale (ad esempio k-Vertex Cover), non il significato generale. La complessità computazionale è la classificazione dei problemi computazionali, quindi in senso formale, la complessità si riferisce a ciò che possiamo dire sul problema. I risultati sugli algoritmi ci dicono cose sulla complessità dei problemi, ma non sono risultati di complessità in sé (ma informalmente parliamo della complessità di un algoritmo).
Luke Mathieson,

1
@shekharsuman il paragrafo iniziale della pagina di Wikipedia è un riassunto abbastanza buono.
Luke Mathieson,

@Luke Grazie, questo chiarisce le cose. Tuttavia, se posso usare il linguaggio "il tipo di complessità più usato per valutare formalmente gli algoritmi" (anche se so che questo non è preciso). Quale sarebbe il tempo rispetto al calcolo? Quello che penso è che, in generale, la cosa più importante è il tempo, poiché le risorse sono più estensibili in un certo senso!
Median Hilal,

1
Il tempo di @MedianHilal è in effetti la misura più comunemente considerata per la complessità di un problema. Lo spazio non è troppo indietro (almeno dai teorici della complessità e le persone che hanno a che fare con set di dati molto grandi, meno quotidianamente).
Luke Mathieson,

-2

La complessità ciclomatica viene spesso utilizzata come misura della complessità computazionale un esempio utile è fornito in /programming/9097987/calculation-of-cyclomatic-complexity

Potrebbero esserci molti percorsi diversi (possibilmente nidificati) attraverso un algoritmo che gli conferisce un'elevata complessità ciclomatica, ma nessun loop che gli dia una bassa complessità temporale. Un programma con un singolo loop avrebbe una bassa complessità ciclomatica ma probabilmente una elevata complessità temporale.

La complessità ciclomatica viene spesso utilizzata come misura della manutenzione richiesta per il codice. Una discussione più dettagliata è disponibile in http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Ciò è diverso dalla complessità temporale che è la misurazione del tempo di esecuzione del codice e può essere utilizzata per valutare la percezione degli utenti dell'efficacia del sistema.


La domanda riguarda la complessità computazionale, non la complessità ciclomatica!
Am_I_Helpful

Potresti voler leggere l'OP - sta chiedendo della complessità di un algoritmo - La complessità ciclomatica fornisce una misura statica della complessità computazionale di un algoritmo - prova ad aggiungere un feedback positivo la prossima volta
velvetytoast

2
La complessità ciclomatica non misura la complessità computazionale. La complessità computazionale si riferisce al tempo di esecuzione, non alla complessità della struttura del codice sorgente.
DW

@DW Più precisamente, la complessità computazionale si riferisce alle risorse necessarie per risolvere un problema (che potrebbe includere spazio, alternanza, chiamate oracolari e così via, nonché tempo).
David Richerby,

@DavidRicherby Non sono un esperto di questo, quindi correggilo se sbagli. Misure di complessità statica, come la dimensione del programma, svolgono un ruolo in alcune situazioni. Ho ragione che è più legato alla complessità di Kolmogorov. Questo sarebbe anche il caso della complessità ciclomatica? Un tipo di complessità per scrivere programmi o problemi, e l'altro per risolverli o eseguirli ... forse una breve approssimazione della situazione. Non sono sicuro che scriverei una domanda ragionevole al riguardo.
babou,
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.