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(c⌊n2⌋)+n≤cn+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)Θ(nlog⁡n)


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⌋)+n≤2c⌊n/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 ) .∀k≥N,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⌋)+n≤2c⌊n/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=c0log2⁡k

Questo può essere reso preciso. Dimostrare per induzione che per , T ( k ) ≤ c log 2 ( k ) .k≥1T(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)a≥1b>1f(n)⌊n/2⌋n/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)nlogb⁡a=nlog2⁡2=nf(n)=Θ(n) .T(n)=Θ(nlog⁡n)


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.