Sto cercando di capire cosa c'è che non va nella seguente prova della seguente ricorrenza
La documentazione dice che è sbagliato a causa dell'ipotesi induttiva che Cosa mi sto perdendo?
Sto cercando di capire cosa c'è che non va nella seguente prova della seguente ricorrenza
La documentazione dice che è sbagliato a causa dell'ipotesi induttiva che Cosa mi sto perdendo?
Risposte:
Diciamo che l'obiettivo finale è dimostrare . Si inizia con l'ipotesi di induzione:
per tutto i < n .
E per completare la dimostrazione, devi mostrare anche che .
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.
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.
Hai omesso alcuni passaggi. Sembra che tu stia provando a provare per induzione che , e la tua prova va:
Supponiamo che per k < n . Ciò significa che T ( k ) ≤ c per alcuni c . Quindi T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n ≤ 2 c ⌊ n / 2 ⌋ + n ≤ ( c + 1 ) , quindi T ( 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 ) ≤ 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 ) .
Devi essere esplicito su cosa significhi Quindi forse la tua prova è:
Supponiamo che per tutto k < n . Quindi T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n ≤ 2 c ⌊ n / 2 ⌋ + n ≤ ( c + 1 ) .
Questo non dimostra un passaggio induttivo: sei partito da , e hai dimostrato che per k = n , T ( k ) ≤ ( c + 1 ) . Questo è un limite più debole. Guarda cosa significa: T ( k ) ≤ c 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!
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 .
Questo può essere reso preciso. Dimostrare per induzione che per , T ( k ) ≤ c log 2 ( 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 ) ).
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 è Θ ( n .
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 / 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 .
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 log .