Ata de Resolução de Exercícios - QuickSort - 19/03/2003


7.1-2
Que valor de q PARTITION retorna quando todos os elementos no arranjo A[p..r] têm o mesmo valor? Modifique PARTITION de forma que q = (p + r)/2 quando todos os elementos no arranjo A[p..r] têm o mesmo valor.


Para o caso de todos os elementos serem iguais, o PARTITION incrementa r-p vezes o valor do índice i, pois nenhum elemento do vetor é maior que o pivô A[r]. Por tanto o valor retornado é (p-1) + (r-p) + 1, ou seja, r, o índice para o último elemento do vetor.

Abaixo está a versão modificada do PARTITION. O trecho acrescido, linhas de 2 a 8, verifica se todos os elementos são iguais ao pivô. Neste caso retorna (p+r)/2. Caso contrário, o algoritmo continua sua operação de forma idêntica ao PARTITION original.
PARTITION(A, p, r)
1  x ← A[r]
2  tudoigual ← true               ; Início das modificações
3  for jp to r-1
4     do if A[j] ≠ x
5        then tudoigual ← false
6             break
7  if tudoigual = true
8     then return (p+r)/2          ; Fim das modificações
9  ip - 1
10 for jp to r - 1
11    do if A[j] ≤ x
12       then ii + 1 
13            trocar A[i] ↔ A[j]
14 trocar A[i+1] ↔ A[r]
15 return i + 1


7.1-3
Forneça um breve argumento mostrando que o tempo de execução de PARTITION sobre um subarranjo de tamanho n é Θ(n).


Na linha 3 do PARTITION, o for é executado de p até r-1, então percorre r-p elementos, ou seja, n-1.



7-3
Os professores Howard, Fine e Howard propuseram o seguinte algoritmo de ordenação "elegante":
STOOGE-SORT(A, i, j)
1 if A[i] > A[j]
2   then trocar A[i] ↔ A[j]
3 if i + 1 ≥ j
4   then return
5 k ← (j-i+1)/3                ; Arredonda para menos
6 STOOGE-SORT(A, i, j-k)
7 STOOGE-SORT(A, i+k, j)
8 STOOGE-SORT(A, i, j-k)
a.Mostre que, se n = comprimento[A], então STOOGE-SORT(A, 1, comprimento[A]) ordena corretamente o arranjo de entrada A[1..n].
b.Forneça uma recorrência para o tempo de execução no pior caso de STOOGE-SORT e um limite assintótico restrito (notação Θ) sobre o tempo de execução no pior caso.
c.Compare o tempo de execução no pior caso de STOOGE-SORT com o da ordenação por inserção, da ordenação por intercalação, de heapsort e de quicksort. Os professores merecem a estabilidade no emprego?


a) O funcionamento do STOOGE-SORT tem as seguintes características:
  • Para arranjos de 1 ou 2 elementos fornecidos como entrada, retorna o arranjo ordenado. Propriedade observada nas linhas de 1 a 4.
  • Após a primeira chamada recursiva (linha 6) os maiores elementos dos primeiros 2/3 do arranjo de entrada estarão localizados no segundo 1/3.
  • Após a segunda chamada recursiva (linha 7) o último 1/3 do arranjo de entrada estará ordenado, e conterá os maiores elementos. Os menores elementos dos últimos 2/3 estarão localizados no segundo 1/3.
  • Após a terceira chamada recursiva (linha 8) o STOOGE-SORT terá reordenado os primeiros 2/3, e com isto todo o arranjo de entrada estará ordenado.
Ou seja, o algoritmo ordena corretamente o arranjo de entrada.

b) A recorrência para o STOOGE-SORT é T(n) = 3 T(2n/3) + O(1).

Aplicando o método mestre para: a = 3, b = 3/2 e f(n) = 1, constata-se que f(n) = O( nlog3/23 - ε ) + 1, por tanto se encaixa no primeiro caso do método.

Então o STOOGE-SORT tem limite assintótico restrito Θ( nlog3/23 ) para o pior caso.

c) O limite assintótico do STOOGE-SORT foi calculado como sendo Θ(nk), com k = log3/23 > 2. Por tanto STOOGE-SORT é ω(n2) para o pior caso, garantidamente pior que qualquer dos algoritmos de ordenação citados.

Quanto à estabilidade dos professores, apesar da mancada, não devemos julgar sem avaliar melhor suas outras contribuições.


Disciplina: MO417 - Complexidade de Algoritmos I
Livro texto: Algoritmos : teoria e prática / Thomas H. Cormen... [et al.]; tradução da segunda edição [americana] - Rio de Janeiro : Campus, 2002
Redator: Bruno Cedraz Brandão   022245