Domanda

In studiare Quicksort usando il libro "Introduzione agli algoritmi" di Cormen, Seeteron, Rivest e Stein, descrivono per mostrare la correttezza, un invariante deve tenere per le 3 fasi del loop, l'inizializzazione, la manutenzione e la risoluzione del ciclo.

Sulla base del seguente algoritmo, non capisco le proprietà 1 e 2 di seguito: Inserisci la descrizione dell'immagine qui

Ecco l'algoritmo che sto facendo riferimento:

 Inserire la descrizione dell'immagine qui Inserisci la descrizione dell'immagine qui

Qualcuno potrebbe aiutarmi a capire le condizioni

1) se $ p \ leq k \ leq i $ quindi $ a [k] \ leq x $ < / span>

nell'algoritmo quando ad esempio, $ p $ è $ 1 $ , non sarà $ i $ Be $ 0 $ .... Come sarebbe in attesa, dal momento che prima del ciclo abbiamo i = p-1 < / P >.

2) se $ i + 1 \ leq k \ leq j - 1 $ quindi $ a [k]> x $

Nell'algoritmo, ad esempio, quando entriamo per la prima volta il loop per il ciclo e J= 1, quindi $ i $ sarebbe 0 .... Io don ' T Guarda come funziona.

Grazie

È stato utile?

Soluzione

.

se $ p \ leq k \ leq i $ quindi $ a [k] \ leq x. $ . Nell'algoritmo quando ad esempio, $ p $ è $ 1 $ , non sarà $ i $ Be $ 0 $ .... Come sarebbe successo, dal momento che prima del ciclo abbiamo generatodicetagcode

Sebbene, come hai osservato, $ i $ è sempre più piccolo di $ p $ al Inizio del ciclo, potrebbe diventare più grande perché la dichiarazione " $ i= I + 1 $ " nel ciclo potrebbe essere eseguito. Una volta $ i $ è stato aumentato, per almeno $ k= p $ , abbiamo $ p \ le k \ le i $ .

Si noti che quando $ p \ le i $ non tiene, cioè quando non c'è $ k $ < / span> tali quella $ p \ le k \ le i $ , la condizione "se $ p \ leq k \ leq $ quindi $ A [k] \ leq x $ "Tiene automaticamente. (Ricorda che la proposta "Se falsa, allora qualcosa può accadere" è sempre vero.) Per falsificare quella condizione, dobbiamo trovare un'istanza di $ (P, K, I) $ tali quella $ p \ leq k \ leq I $ ma $ a [k] \ gt x $ < / span>.

Dovresti essere in grado di capire il caso del secondo loop invariante ora.

Altri suggerimenti

Non sono dell'umore della traccia di un rigido di codice, ma capisci che inizi con un [R]= x e termina con un [i]= x

(il perno, che sembra essere scelto come l'ultimo elemento $ R $ Nel codice specificato, raggiunge la sua posizione corretta con il resto dell'elenco viene parezionato)

-it Un primo sguardo Forse il codice ha alcuni errori, non è necessario alcun scambio nelle staffe, e l'altro scambio dovrebbe essere puntato a [R] e A [J] all'interno della $ Else $

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top