O (mn) è considerata una crescita “lineare” o “quadratica”?


24

Se avessi qualche funzione la cui complessità temporale è O ( mn ), dove m e n sono le dimensioni dei suoi due ingressi, la chiameremo complessità temporale "lineare" (poiché è lineare sia in m che in n ) o "quadratica" ( dal momento che è un prodotto di due dimensioni)? O qualcos'altro?

Sento che chiamarlo "lineare" è confuso perché O (m + n) è anche lineare ma molto più veloce, ma sento che chiamarlo "quadratico" è anche strano perché è lineare in ogni variabile separatamente.


7
È importante dire lineare in cosa . Se, ad esempio, abbiamo un grafico con bordi e vertici, è lineare nel numero di bordi, ma (potenzialmente) quadratico nel numero di vertici. n O ( m + n )mnO(m+n)
Raffaello

3
Penso che il commento di Raffaello sia perfetto. "Lineare" deve essere usato in relazione a qualcosa, spesso alla dimensione dell'input. Se stai trasponendo una matrice è "lineare" poiché l'input ha dimensione . Se stai cercando occorrenze di una stringa di caratteri in una stringa di caratteri , non è lineare --- sarebbe. O ( m n ) O ( m n ) n m O ( m n ) O ( m + n )m×nO(mn)O(mn)nmO(mn)O(m+n)
SamM,

3
Concordo anche con il commento di @ Raphael, ma allo stesso tempo non è raro sentire la gente dire che una particolare complessità temporale è "lineare" senza menzionare ciò che. E in alcuni casi non importa, ad esempio O (m + n) è lineare rispetto a tutti gli input, quindi non ci penserei due volte a chiamarlo lineare come ha fatto anche SamM sopra. Ma ciò pone la domanda: cosa, se non altro, rende O (mn) non lineare?
Mehrdad,

3
@Mehrdad: Penso che la linea di base sia "nella dimensione dell'input, supponendo che l'input sia codificato come stringa binaria (su un nastro di Turing machine)". Questa dimensione di input è quindi una funzione di e stessa. SamM fornisce buoni esempi. mnm
Raffaello

1
Vedi anche people.cis.ksu.edu/~rhowell/asymptotic.pdf sulla notazione landau in più variabili.
Jonas Kölker,

Risposte:


18

In matematica, funzioni come questa sono chiamate funzioni multilineari . Ma gli informatici probabilmente non conosceranno generalmente questa terminologia. Questa funzione dovrebbe assolutamente non essere chiamato lineare, sia in matematica o informatica, a meno che non si può ragionevolmente considerare uno dei e una costante.nmn


Cosa rende ragionevole considerare uno di e ? nmn
user2768

11

Per chiarire la discussione nei commenti, è importante ciò a cui stai misurando la crescita.

Come menzionato da @Kaveh, non è lineare in entrambi allo stesso tempo, ma è lineare se uno è una costante e l'altro cresce.O(mn)

D'altra parte, sarebbe probabilmente considerato lineare. Intuitivamente, se m raddoppia, o se raddoppia, o anche se e raddoppiano, non può più del doppio. Questo non è vero per ; se e entrambi double aumentano di 4. Ecco perché in molti contesti questo tempo di esecuzione sarebbe considerato quadratico. Ne faccio un esempio con la corrispondenza delle stringhe in un paio di paragrafi.O(m+n)mm n m + n m n m n m nnmnm+nmnmnmn

Ma di solito quando usi la notazione Big- , la usi in riferimento a qualcosa in particolare. Dato che siamo principalmente teorici, è generalmente la dimensione dell'input al problema.O

Prendiamo Matrix Addition, per esempio. L'aggiunta di due matrici richiede tempo O ( m n ) . Ma ogni elemento del nostro input viene toccato solo una volta, quindi questo di solito sarebbe chiamato lineare. In altre parole, il nostro input è di dimensione O ( m n ) , quindi un tempo di esecuzione di O ( m n ) è lineare nella dimensione dell'input.m×nO(mn)O(mn)O(mn)

Ora diamo un'occhiata alla corrispondenza delle stringhe - vale a dire, ci viene data una stringa di dimensione e una stringa di dimensione n e vogliamo vedere se c'è una ricorrenza della stringa più piccola all'interno della stringa più grande. Possiamo verificarlo ingenuamente in O ( m n ) tempo; questo sarebbe generalmente considerato quadratico. Perché? Se m e n possono essere qualsiasi cosa, impostare m = n . Quindi il nostro tempo di esecuzione è O ( m 2 ) e il nostro input è di dimensioni 2 m .mnO(mn)mnm=nO(m2)2m

D'altra parte, se utilizziamo l' algoritmo Rabin-Karp , otteniamo (in media) tempo . Il nostro input consisteva in entrambe le stringhe, quindi anche il nostro input era di dimensione O ( m + n ) . Pertanto, questo sarebbe generalmente indicato come lineare.O(m+n)O(m+n)

Per riassumere: è generalmente chiamato lineare per cose come la moltiplicazione di matrici perché è lineare nella dimensione dell'input, ma generalmente è chiamato quadratico per cose come la corrispondenza delle stringhe a causa dell'input più piccolo. Il termine appropriato dipende dal contesto in cui lo si utilizza.O(mn)


8

Se si sta misurando il tempo di esecuzione in allora O ( m n ) non è una funzione lineare in ( m , n ) . Se non vi è alcuna relazione tra m e n questa funzione può crescere quadraticamente in generale.(m,n)O(mn)(m,n)mn

Tuttavia è una funzione lineare in ciascuna di esse separatamente, cioè se si corregge una di esse e si osserva la crescita nell'altra variabile, allora è una funzione lineare in un'altra.


3

Per misurare la complessità dei problemi con più input , un modo è trovare la variabile dominante e quindi associare altri input in base a quella variabile. Con questo approccio potresti avere la funzione di complessità basata su una singola variabile .


2
Potrebbe non esserci una variabile dominante, ad esempio se si hanno i numeri di nodi e bordi.
Raffaello

0

Data la lingua e una funzione f tale che min { | w 1 | , | w 2 | } f ( | w | ) per ogni w = w 1 # w 2LL={w1#w2|wio(Σ{#})*,...}fmin{|w1|,|w2|}f(|w|)w=w1#w2Lpuoi stimare il tempo di esecuzione di un algoritmo che riconosce L come O ( f ( | w | ) ( | w | - f ( | w | ) ) = O ( f ( | w | ) | w | - f ( | w | )O(|w1||w2|)L .O(f(|w|)(|w|-f(|w|))=O(f(|w|)|w|-f(|w|)2)=O(f(|w|)|w|)

Ciò significa che ottieni tempo lineare, se la parte più piccola del tuo input è costante (rispetto all'intero input), qualcosa nel mezzo (come ) se è runtime sublineare e quadratico se è lineare.O(nlogn)

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.