Errore nell'uso della notazione asintotica


10

Sto cercando di capire cosa c'è che non va nella seguente prova della seguente ricorrenza

T(n)=2T(n2)+n
T(n)2(cn2)+ncn+n=n(c+1)=O(n)

La documentazione dice che è sbagliato a causa dell'ipotesi induttiva che Cosa mi sto perdendo?

T(n)cn

2
Le ricorrenze di questo modulo possono anche essere risolte usando il teorema del Maestro .
Juho,

2
@Ran: non credo che il teorema del maestro sia un tag appropriato per questa domanda. La domanda non è su come risolverlo, ma sottolineare l'errore in un particolare argomento. Inoltre, il teorema del maestro è probabilmente troppo specifico e probabilmente non merita di avere un proprio tag. In generale, dovremmo etichettare in base alla domanda, non alle possibili risposte. Ad esempio, vuoi etichettare questo akra-bazzi?
Aryabhata,

"Cosa c'è che non va nella seguente prova" - Non vedo una prova. È spesso utile scrivere una prova completa (cioè rendere esplicita l'induzione) al fine di individuare gli errori.
Raffaello

Risposte:


12

Diciamo che l'obiettivo finale è dimostrare . Si inizia con l'ipotesi di induzione:T(n)=O(n)

per tutto i < n .T(i)cii<n

E per completare la dimostrazione, devi mostrare anche che .T(n)cn

Tuttavia, ciò che puoi dedurre è , che non è utile per completare la prova; hai bisogno di una costante c per (quasi) tutto n . Pertanto, non possiamo concludere nulla e T ( n ) = O ( n ) non è dimostrato.T(n)(c+1)ncnT(n)=O(n)

Si noti che si è confusi tra il risultato e il processo di prova. E un altro punto, è in realtà Θ ( n log n ) in questo caso, quindi puoi considerare un'ipotesi di induzione appropriata per essere in grado di dimostrarlo.T(n)Θ(nlogn)


se sostituiamo c '= c + 1, cambierà?
Erb,

@erb: No, non lo farà. Devi provare per una costante scelta. Se si sostituisce , alla fine si ottiene T ( n ) ( c + 1 ) n (o T ( n ) ( c + 2 ) n ), il risultato è lo stesso. c=c+1T(n)(c+1)nT(n)(c+2)n
pad

8

Hai omesso alcuni passaggi. Sembra che tu stia provando a provare per induzione che , e la tua prova va:T(n)=O(n)

Supponiamo che per k < n . Ciò significa che T ( k ) cT(K)=O(K)K<n per alcuni c . Quindi T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(K)cKc , quindi T ( n ) = O ( n ) .T(n)=2T(n/2)+n2cn/2+n(c+1)nT(n)=O(n)

Questa dimostrazione è sbagliata fin dall'inizio: “ per k < n ” non ha senso. Big oh è una nozione asintotica: T ( k ) = O ( k ) significa che c'è una costante c e una soglia N tale che k N , T ( k ) cT(k)=O(k)k<nT(k)=O(k)c . E ancora alla fine, non puoi concludere che “ T ( n ) = O ( n ) ”, perché questo dice qualcosa sulla funzione T nel suo insieme e hai solo dimostrato qualcosa sul particolare valore T ( n ) .kN,T(k)ckT(n)=O(n)TT(n)

Devi essere esplicito su cosa significhi Quindi forse la tua prova è:O

Supponiamo che per tutto k < n . Quindi T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(k)ckk<n .T(n)=2T(n/2)+n2cn/2+n(c+1)n

Questo non dimostra un passaggio induttivo: sei partito da , e hai dimostrato che per k = n , T ( k ) ( c + 1 )T(k)ckk=n . Questo è un limite più debole. Guarda cosa significa: T ( k ) cT(k)(c+1)k significa che c è un vincolato per il tasso di crescita di T . Ma hai un tasso c che cresce quando k cresce. Non è una crescita lineare!T(k)ckcTck

Se osservi attentamente, noterai che la velocità aumenta di 1 ogni volta che k raddoppia. Quindi, informalmente, se m = 2 p k allora c m = c k + p ; in altre parole, c k = c 0 log 2 k .c1km=2pkcm=ck+pck=c0log2k

Questo può essere reso preciso. Dimostrare per induzione che per , T ( k ) c log 2 ( k ) .k1T(k)clog2(k)

La relazione di ricorrenza è tipica degli algoritmi di divisione e conquista che dividono i dati in due parti uguali in tempo lineare. Tali algoritmi operano in tempo (non O ( n ) ).Θ(nlog(n))O(n)

Per vedere quale sia il risultato atteso, è possibile verificare la relazione di ricorrenza rispetto al teorema principale . La divisione è e il lavoro extra fatto è n ; log 2 ( 2 ) = 1 quindi questo è il secondo caso per il quale la crescita è Θ ( n2T(n/2)nlog2(2)=1 .Θ(nlog(n))


7

Sto estendendo la risposta già fornita, forse solo spiegando il mio commento in modo più dettagliato.

Poiché indovinare può essere chiaramente difficile e noioso, a volte esistono metodi migliori. Uno di questi metodi è il Teorema del Maestro . La nostra ricorrenza è ora della forma , dove a 1 e b > 1 sono costanti e f ( n ) una funzione. Si noti che nel nostro caso n / 2 può essere interpretato nel senso di n / 2T(n)=aT(n/b)+f(n)a1b>1f(n)n/2n/2. Per essere tecnicamente esatti, la nostra ricorrenza potrebbe non essere ben definita perché potrebbe non essere un numero intero. Tuttavia, ciò è consentito poiché non influirà sul comportamento asintotico della ricorrenza. Pertanto, spesso troviamo conveniente far cadere pavimenti e soffitti. La prova formale di questo è un po 'noiosa, ma il lettore interessato può trovarla ad esempio da Cormen et al. libro .n/2

Nel nostro caso, abbiamo , b = 2 , f ( n ) = Θ ( n ) . Ciò significa che abbiamo n log b a = n log 2 2 = n . Il secondo caso del teorema del Maestro si applica poiché f ( n ) = Θ ( n ) , e abbiamo la soluzione T ( n ) = Θ ( n loga=2b=2f(n)=Θ(n)nlogba=nlog22=nf(n)=Θ(n) .T(n)=Θ(nlogn)


Grazie! Si può notare che "far cadere pavimenti e cementi" corrisponde all'assunzione che che è comunemente fatto. L'osservazione di base è che per le funzioni non decrescenti, la crescita asintotica delle sottosequenze è uguale alla crescita asintotica dell'intera sequenza. n=2k
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.