|
@@ -126,4 +126,44 @@ $$c \leq \frac{14an}{3n-154} $$
|
|
|
|
|
|
Note que a partir de n = 100 a fração será sempre menor do que 9, portanto existe o $c \geq 9a$ vai satisfazer a equação anterior e vai permitir que a nossa hipótese seja verdadeira.
|
|
|
|
|
|
+###### 8. Considere a seguinte variante do Particione-BFPRT, que chamaremos de Particione-D. Em vez de acionar o Select-BFPRT para calcular a mediana das medianas, ela aciona recursivamente o próprio Particione-D, para calcular uma “mediana aproximada” do vetor das medianas. Suponha que o Particione-D rearranja o vetor A[p..d] e devolve um índice q tal que A[p..q−1] ≤ A[q] < A[q+1..d] e max{k, n−k} ≤ 9n/10, onde n = d−p+1 e k = q−p+1. Analise o consumo de tempo da variante do Select-BFPRT que chama o Particione-D em vez do Particione-BFPRT.
|
|
|
+
|
|
|
+Para facilitar a visualização desse exercício vamos escrever o código Select-BFPRT novamente:
|
|
|
+
|
|
|
+```
|
|
|
+Select-BFPRT(A, p, r, i)
|
|
|
+ se p = r
|
|
|
+ devolve p
|
|
|
+ q <- Particione-D(A, p, r)
|
|
|
+ k <- q-p+1
|
|
|
+ se k = i
|
|
|
+ devolve k
|
|
|
+ senão se k > i
|
|
|
+ devolve Select-BFPRT(A, p, q-1, i)
|
|
|
+ senão
|
|
|
+ devolve Select-BFPRT(A, q+1, r, i-k)
|
|
|
+
|
|
|
+
|
|
|
+Particione-D(A, p, r)
|
|
|
+ para j <- p, p+5, p+10 ... p+5*(n+1)/5-1
|
|
|
+ ordena_5_elementos
|
|
|
+ para j <- 1 até (n+1)/5-1 #numero de elementos medianos
|
|
|
+ A[p - 1 + j] <--> A[p + 5*j -3] #colocar os pedianos no inicio
|
|
|
+ [p - 1 + ceil(n/5)] <--> A[ floor((p + 5 * floor(n/5) + r)/2) ] // meio do último intervalo...
|
|
|
+
|
|
|
+ k <-- Particione-D(A, p, p+ceil(n/5), floor( (ceil(n/5) + 1)/2 ))
|
|
|
+ A[k] <--> A[r] # manda a mediana para o final
|
|
|
+
|
|
|
+ devolve particiona(A, p, r)
|
|
|
+```
|
|
|
+
|
|
|
+A primeira parte é verificar o consumo de tempo do Particione-D. Note que $r-p+1 = n$.
|
|
|
+
|
|
|
+$$ T(n) \leq O(n) + T(max{k, n−k}) \leq O(n) + T(9n/10)$$
|
|
|
+
|
|
|
+Vamos analizar essa recursão, note que colocamos $\leq$ , pois as linhas 3 e 5 do Particione-D podem consumir tempo menor do que as linhas 2 e 4.
|
|
|
+
|
|
|
+T(n) \leq O(n) + T(9n/10) \leq O(n) + O(n) + T(n \cdot (9/10)^2 ) \leq i \cdot O(n) + T(n \cdot (9/10)^i )$$
|
|
|
+
|
|
|
+
|
|
|
|