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.
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.
Risposte:
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 )è anche -completo sotto le riduzioni , questo limite di complessità può davvero essere dichiarato solo per un problema (ma ha implicazioni algoritmiche).
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.