Perché input di dimensioni maggiori implicano istanze più difficili?


12

Di seguito, supponiamo che stiamo lavorando con una macchina Turing a nastro infinito.

Quando ho spiegato la nozione di complessità temporale a qualcuno e perché è misurata in relazione alla dimensione di input di un'istanza, mi sono imbattuto nella seguente affermazione:

[..] Ad esempio, è naturale che avresti bisogno di più passaggi per moltiplicare due numeri interi con 100000 bit, quindi, per esempio, moltiplicando due numeri interi con 3 bit.

L'affermazione è convincente, ma in qualche modo agitando la mano. In tutti gli algoritmi che ho riscontrato, maggiore è la dimensione dell'input, più passaggi sono necessari. In parole più precise, la complessità temporale è una funzione monotonicamente crescente della dimensione dell'input.

È il caso che la complessità temporale sia sempre una funzione crescente nella dimensione dell'input? Se è così, perché è così? Esiste una prova al di là di agitare la mano?


"Direttamente proporzionale" ha un significato matematico specifico che significa essenzialmente tempo lineare. In altre parole, se il tuo input ha dimensione , se il tempo è direttamente proporzionale, l'algoritmo viene eseguito nel tempo . Immagino che non sia quello che vuoi dire, dal momento che molti algoritmi non funzionano in tempo lineare, cioè l'ordinamento. Puoi spiegare ulteriormente? c nncn
SamM,

Quindi stai chiedendo di un algoritmo che gira in tempo? significa che l'algoritmo viene eseguito nello stesso momento indipendentemente dalla dimensione dell'input, significa che funziona più velocemente quando l'input diventa più grande. Non riesco a pensare a uno che corre in quel momento dalla cima della mia testa, ma la notazione è abbastanza comune perché un algoritmo verrà spesso eseguito in qualcosa come tempo - in altri parole, ci vuole tempo, e ci sono altri termini che diventano più piccoli man mano che l'input aumenta. O ( 1 ) o ( 1 ) O ( n 2 ) + o ( 1 ) O ( n 2 )o(1)O(1)o(1)O(n2)+o(1)O(n2)
SamM,

Buona domanda. Che dire del contro esempio di calcolo dei fattori primi di per alcuni grandi (questa è solo una funzione crescente per )? @Sam Nota che una funzione crescente dice che il tempo deve diminuire in qualche punto lungo la linea reale (cioè ). c n c f ( b ) < f ( a ) , a < bc/ncncf(b)<f(a),a<b
Casey Kuball,

@Darthfett Temo di non seguire. Non tutte le funzioni crescenti stanno diminuendo ad un certo punto lungo la linea reale.
SamM,

@Jennifer Sì, ho capito, ha senso. Consiglio di usare il termine in quanto ha il significato che stai cercando. E vorrei ribadire che la proporzionalità diretta implica linearità; Vedo a cosa stai arrivando, ma potrebbe essere fonte di confusione per coloro che stanno leggendo la domanda per la prima volta. o(1)
SamM,

Risposte:


12

È il caso che la complessità temporale sia sempre una funzione crescente nella dimensione dell'input? Se è così, perché è così?

No. Considera una macchina di Turing che si ferma dopo passaggi quando la dimensione di input è pari e si ferma dopo passaggi quando è dispari.n n 2 nnnn2n

Se intendi la complessità di un problema , la risposta è ancora no. La complessità del test di primalità è molto più piccola per i numeri pari che per i numeri dispari.


4

È il caso che la complessità temporale sia sempre una funzione crescente nella dimensione dell'input? Se è così, perché è così? Esiste una prova al di là di agitare la mano?

Let denota la dimensione di input. Per leggere l'intero input, una turing machine ha già bisogno di passaggi. Quindi se supponi che un algoritmo debba leggere l'intero input (o per una costante ), finirai sempre con un tempo di esecuzione almeno lineare.n n / c cnnn/cc


Il problema con la definizione di algoritmi con una "funzione di runtime monotonicamente decrescente" è che in qualche modo è necessario definire il runtime per . Devi impostarlo su un valore finito . Ma ci sono infiniti valori possibili per , quindi si finisce con una funzione che è costante per infiniti molti valori.n > 1n=1n>1


Probabilmente gli algoritmi sublineari sono di tuo interesse, che non leggono l'intero input. Vedi ad esempio http://www.dcs.warwick.ac.uk/~czumaj/PUBLICATIONS/DRAFTS/Sublinear-time-Survey-BEATCS.pdf .


Esistono algoritmi sublineari. Ad esempio, vedi people.csail.mit.edu/ronitt/sublinear.html . È un campo abbastanza nuovo ma è molto interessante. Ci sono altri controesempi a questo. La ricerca di un elemento in un elenco ordinato richiede tempo nel modello RAM. Sono d'accordo con l'idea alla base del tuo post. Non ha senso avere un algoritmo che impiega meno tempo man mano che l'input diventa più grande perché non ha il tempo di leggere tutto l'input (come fa a sapere che impiega meno tempo?). Ma non so come dimostrare che non esistono e che un trucco non potrebbe farcela . o ( 1 )O(logn)o(1)
SamM,

@ Sam: Scusa, non ho visto il tuo commento prima della mia modifica (aggiungendo algoritmi sublineari).
Christopher,

piuttosto il contrario; Non ho visto la tua modifica prima di aggiungere il mio commento. Lo eliminerei, ma la seconda metà si applica ancora e un link aggiuntivo non può danneggiare l'OP
SamM

1
un controesempio: una funzione costante come . Quello che descrivi funziona per le funzioni che devono leggere il loro input. f(x)=0
Kaveh,

1

La relazione è fondata , cioè non ci sono infinite sequenze discendenti nei numeri naturali. Poiché le funzioni di runtime (nel peggiore dei casi) sono associate ai naturali, tutte le funzioni di runtime devono quindi essere in , ovvero tutte le funzioni di runtime sono (nel limite) non decrescenti.Ω ( 1 )(N,)Ω(1)

Detto questo, i tempi di autonomia medi possono contenere componenti oscillanti, ad esempio Mergesort .


Non vedo come questa risposta sia correlata alla domanda.
A. Schulz,

@ A.Schulz Fornisce una prova per la domanda principale "È vero che la complessità del tempo è sempre una funzione crescente nella dimensione dell'input?", Leggendo "crescente" come "non decrescente", cioè non necessariamente strettamente crescente.
Raffaello

1
Bene, "non aumentare" non deve necessariamente significare "decrescente? O per dirla in senso contrario a non decrescente crescente.
A.Schulz

@ A.Schulz: Comunque, la mia interpretazione sembra essere ciò che interessa a Jennifer .
Raffaello
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.