Cosa significa Θ (1) memoria?


13

Ho la definizione di un algoritmo in situ del professore, ma non lo capisco.

Gli algoritmi in situ si riferiscono ad algoritmi che funzionano con Θ (1) memoria.

Cosa significa?



4
"Si dice che un algoritmo è un algoritmo in situ, o algoritmo sul posto, se la quantità aggiuntiva di memoria necessaria per eseguire l'algoritmo è O (1), cioè [memoria] non supera una costante, non importa quanto sia grande l'input . Ad esempio, heapsort è un algoritmo di ordinamento in situ. " en.wikipedia.org/wiki/In_situ#Computer_science
Auberon

@Auberon, va aggiunto che impone un requisito ulteriore rispetto a O ( 1 ) : che la memoria totale utilizzata in una particolare chiamata non scende al di sotto di una costante, indipendentemente dalle dimensioni dell'input. Θ(1)O(1)
Olathe,

1
@Olathe Devo ancora vedere un algoritmo che utilizza più di zero ma meno di una costante di qualsiasi risorsa
adrianN

@adrianN, la crittografia AES dei file viene eseguita con l'utilizzo della RAM con un limite superiore costante. Elaborate un blocco alla volta, ogni blocco necessita della stessa quantità di RAM per essere elaborato e la RAM può essere riutilizzata da un blocco al successivo. Un esempio più semplice è convertire tutte le lettere in un file con codifica ASCII in maiuscolo. Puoi leggere in un blocco, diciamo 4096 byte, del file, elaborare quei 4096 byte, scrivere i risultati di quel blocco e riutilizzare la stessa RAM per il blocco successivo.
Olathe,

Risposte:


13

Innanzitutto, scompattiamo il significato di .Θ(1)

Big e big Θ sono classi di funzioni. C'è una definizione formale qui , ma per gli scopi di questa domanda, diciamo che una funzione f è O ( 1 ) se c'è una costante c in cui, per tutti x , f ( x ) C . Cioè, f cresce al più velocemente di una funzione costante.OΘfO(1)cxf(x)Cf

Big- non significa molto per le funzioni costanti, perché quando si descrive il tempo dell'algoritmo o l'utilizzo dello spazio, non c'è molto sotto la costante. Ma per spiegare cosa significa, f Θ ( 1 ) se ci sono alcune costanti c , d tali che, per tutte x , d f ( x ) c . Cioè, f cresce almeno altrettanto velocemente, e al massimo altrettanto velocemente, come una funzione costante.ΘfΘ(1)c,dxdf(x)cf

Cosa c'entra questo con l'uso della memoria? Consideriamo alcuni algoritmo . Esiste una funzione (matematica) che, dato un input n , fornisce il massimo utilizzo di memoria dell'algoritmo A su qualsiasi input di dimensione n . Chiamiamo questa funzione m e m .AnAnmem

Quindi, ora uniamo i nostri due concetti. Se un algoritmo utilizza la memoria , la sua funzione di utilizzo della memoria è in Θ ( 1 ) , il che significa che esiste qualche d , c tale che, per qualsiasi input, la memoria utilizzata è compresa tra d e c .Θ(1)Θ(1)d,cdc

In breve, ciò significa che l'utilizzo della memoria dell'algoritmo è in un intervallo costante, indipendentemente dall'input.

Di solito, la funzione di memoria non tiene conto della memoria utilizzata per memorizzare l'input nell'algoritmo, poiché altrimenti l'utilizzo della memoria sarebbe sempre almeno .Θ(n)


"non dipende efficacemente dal suo input." - per quale definizione di "efficacemente"?
Raffaello

Come in, la memoria utilizzata può cambiare a seconda dell'ingresso, ma solo entro un intervallo fisso. Sentiti libero di modificarlo se riesci a pensare a una formulazione migliore.
jmite,

Non credo che esista una formulazione migliore di "la memoria utilizzata è tra e c per qualsiasi input". Né ce n'è bisogno. dc
Raffaello

semplici esempi illustrativi sarebbero utili
vzn

8

Costante complessità spaziale dell'algoritmo

La quantità di memoria utilizzata dall'algoritmo è indipendente dall'input.

Si dice che un algoritmo abbia una complessità spaziale costante se utilizza una quantità fissa di spazio. Può essere variabili o un array di esattamente 10 elementi.1010

Tuttavia, gli algoritmi in situ svolgono la funzione prevista sull'input stesso e quindi richiedono pochissimo spazio o niente spazio aggiuntivo. L'input viene in genere sovrascritto dall'output durante l'esecuzione dell'algoritmo. ( rif )

Gli algoritmi in situ non considerano lo spazio occupato dall'input e tengono conto solo dello spazio extra, nel calcolo della complessità dello spazio.


3
Questo non è corretto Ad esempio, può darsi che, per un particolare algoritmo, input con meno di tre caratteri utilizzino 5 byte di memoria mentre tutti gli input più grandi utilizzano un milione di byte di memoria. L'uso della memoria di quell'algoritmo non sarebbe sicuramente indipendente dall'input, ma utilizzerebbe sicuramente lo spazio . Per correggere l'affermazione, ci sono limiti superiori e inferiori costanti all'uso della memoria che sono indipendenti dall'input. Θ(1)
Olathe,

@Olathe Lo spazio occupato da ciascun input in termini di byte e il numero di input in termini di conteggio non sono due concetti diversi?
Prateek,

0

Ciò significa che la quantità di memoria aggiuntiva richiesta per l'algoritmo non è maggiore di una quantità costante che non dipende dalla dimensione dell'input per input sufficientemente grandi.


2
ΘOΩO(x2)f(x)=3x2 f(x)=xΘ(x2)f(x)=3x2 but disallowing those of lesser complexity like f(x)=x.
Olathe
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.