Pergunta

Ao estudar o QuickSort usando o livro "Introdução aos Algoritmos" por Cormen, Lazer, Rivest e Stein, eles descrevem para mostrar a correção, uma invariante deve manter os 3 estágios do loop, a inicialização, a manutenção e a rescisão. do loop.

Com base no Algoritmo a seguir, não entendo propriedades 1 e 2 abaixo: Digite a descrição da imagem aqui

Aqui está o algoritmo que estou referenciando:

 Digite a descrição da imagem aqui Digite a descrição da imagem aqui

Alguém pode me ajudar a entender as condições

1) Se $ p \ leq k \ leq i $ então $ a [k] \ leq x $

No algoritmo quando, por exemplo, $ P $ é $ 1 $ , não vai $ i $ ser $ 0 $ .... Como isso ocuparia, já que antes do loop para o loop, temos i = p-1 / p >.

2) Se $ i + 1 \ leq k \ leq j - 1 $ então $ a [k]> x $

No algoritmo, por exemplo, quando entramos pela primeira vez o loop para j= 1, então $ i $ seria 0 .... eu não t ver como isso funciona.

obrigado

Foi útil?

Solução

.

Se $ p \ leq k \ leq i $ então $ a [k] \ leq x. $ No algoritmo quando, por exemplo, $ P $ é $ 1 $ , não vai $ i $ ser $ 0 $ .... Como isso ocuparia, já que antes do loop para o loop, temos i = p-1

embora, como você observou, $ i $ é sempre menor do que $ P $ no Início do loop, pode tornar-se maior porque a declaração " $ i= i + 1 $ " no loop pode ser executado. Uma vez $ i $ foi aumentado, para pelo menos $ k= p $ , temos a classe $ p \ le k \ le i $ .

Observe que quando $ p \ le i $ não segura, ou seja, quando não há $ K $ < / span> tal que $ p \ le k \ le i $ , a condição "se $ p \ leq k \ leq i $ então $ a [k] \ leq x $ "mantém automaticamente. (Lembre-se de que a proposição "se falsa, então qualquer coisa pode acontecer" é sempre verdadeira.) Para falsificar essa condição, temos que encontrar uma instância de $ (p, k, i) $ tal que $ p \ leq k \ leq i $ mas $ a [k] \ gt x $ < / span>.

Você deve ser capaz de descobrir o caso do segundo loop invariante agora.

Outras dicas

Eu não estou com vontade de traçar um código rightnow, mas entendo que você começa com um [r]= x e termina com um [i]= x

(o pivô, que parece ser escolhido como o último elemento $ R $ no código determinado, atinge sua posição correta com o restante da lista que se apresenta)

-At um primeiro olhar, talvez o código tenha alguns erros, não há necessidade de troca nos colchetes, e a outra troca deve ser apostar um [R] e um [J] dentro da $ mais $

Licenciado em: CC-BY-SA com atribuição
Não afiliado a cs.stackexchange
scroll top