Pregunta

Al estudiar Quicksort utilizando el libro "Introducción a los algoritmos" por Cormen, Leabloson, Rivest y Stein, describen para mostrar la exactitud, un invariante debe mantener las 3 etapas del bucle, la inicialización, el mantenimiento y la terminación. del bucle.

Basado en el siguiente algoritmo, no entiendo las propiedades 1 y 2 a continuación: ingrese la descripción de la imagen aquí

Aquí está el algoritmo que estoy haciendo referencia:

 ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

¿Podría alguien ayudarme a entender las condiciones

1) Si $ P \ leq k \ leq i $ luego $ a [k] \ leq x $ < / span>

En el algoritmo cuando, por ejemplo, $ p $ es $ 1 $ , no $ i $ Be $ 0 $ .... ¿cómo se llevaría a cabo, desde antes del bucle para el bucle, tenemos i = p-1? / p>

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

En el algoritmo, por ejemplo, cuando ingresamos primero al bucle For, y J= 1, luego $ i $ sería 0 ... yo no T ver cómo funciona esto.

gracias

¿Fue útil?

Solución

Si $ P \ leq k \ leq i $ luego $ a [k] \ leq x. $ En el algoritmo cuando, por ejemplo, $ p $ es $ 1 $ , no $ i $ be $ 0 $ .... ¿Cómo se mantuvo esto, desde antes del bucle para el bucle, tenemos i = p-1

Aunque, como ha observado, $ i $ es siempre más pequeño que $ P $ en el Inicio del bucle, puede volverse más grande porque la declaración " $ i= i + 1 $ " en el bucle podría ser ejecutado. Una vez $ i $ se ha incrementado, para al menos $ k= p $ , tenemos $ P \ le k \ le i $ .

Tenga en cuenta que cuando $ P \ le i $ no se mantiene, es decir, cuando no hay $ k $ < / span> tal que $ P \ le k \ le i $ , la condición "Si $ P \ leq k \ leq i $ luego $ a [k] \ leq x $ "se mantiene automáticamente. (Recordemos que la proposición "Si falsa, entonces todo puede suceder" siempre es cierta). Para falsificar esa condición, tenemos que encontrar una instancia de $ (p, k, i) $ de tal manera que $ P \ leq k \ leq i $ pero $ a [k] \ gt x $ < / span>.

Debe poder descubrir el caso del segundo bucle invariante ahora.

Otros consejos

No estoy de humor para rastrear un código RightNow, pero entienda que comienza con un [R]= X y termina con un [I]= X

(El pivote, que parece ser elegido como el último elemento $ r $ en el código dado, llega a su posición correcta con el resto de la lista.)

-at Una primera mirada, tal vez el código tiene algunos errores, no hay necesidad de intercambio en los paréntesis, y el otro intercambio debe apostarse a [R] & A [J] dentro de la $ más $

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top