|
@@ -64,8 +64,10 @@ Na nossa função vamos ter dois vetores v1 e v2 com n elementos. Suponha que 3/
|
|
|
|
|
|
```
|
|
|
Mediana(v1, v2, p1, q1, p2, q2)
|
|
|
-1. se q1-p1 = 0
|
|
|
-2. retorna v1[p1]
|
|
|
+1. se q1-p1 = 1
|
|
|
+2. tmp <- [v1[p1], v1[q1], v2[p2], v2[q2]]
|
|
|
+3. tmp <- ordena tmp
|
|
|
+2. retorna tmp[3]
|
|
|
3.
|
|
|
4. j1l <- p1+(q1-p1)/2
|
|
|
5. j2l <- p2+(q2-p2)/2
|
|
@@ -76,15 +78,15 @@ Mediana(v1, v2, p1, q1, p2, q2)
|
|
|
10. tmpv2 <- v2[j2l] + v2[j2u]
|
|
|
11.
|
|
|
12. se tmpv1 > tmpv2
|
|
|
-13. retorna Mediana(v1, v2, p1, j1l, j2u, q2)
|
|
|
+13. retorna Mediana(v1, v2, p1, j1u, j2l, q2)
|
|
|
15. senão
|
|
|
-16. retorna Mediana(v1, v2, j1u, q1, p2, j2l)
|
|
|
+16. retorna Mediana(v1, v2, j1l, q1, p2, j2u)
|
|
|
```
|
|
|
|
|
|
```ruby
|
|
|
def Mediana(v1, v2, p1, q1, p2, q2)
|
|
|
- if q1-p1 == 0
|
|
|
- return v1[p1]
|
|
|
+ if q1-p1 == 1
|
|
|
+ return (v1[p1,2] + v2[p2,2]).sort[1 , 2].join(" ")
|
|
|
end
|
|
|
|
|
|
j1l = p1+(q1-p1)/2
|
|
@@ -96,9 +98,9 @@ def Mediana(v1, v2, p1, q1, p2, q2)
|
|
|
tmpv2 = v2[j2l] + v2[j2u]
|
|
|
|
|
|
if tmpv1 > tmpv2
|
|
|
- return Mediana(v1, v2, p1, j1l, j2u, q2)
|
|
|
+ return Mediana(v1, v2, p1, j1u, j2l, q2)
|
|
|
else
|
|
|
- return Mediana(v1, v2, j1u, q1, p2, j2l)
|
|
|
+ return Mediana(v1, v2, j1l, q1, p2, j2u)
|
|
|
end
|
|
|
end
|
|
|
|
|
@@ -109,12 +111,28 @@ v2 = Array.new(size) { rand(10...50) }.sort!
|
|
|
puts v1.join(" ")
|
|
|
puts v2.join(" ")
|
|
|
puts Mediana(v1, v2, 0, size-1, 0, size-1)
|
|
|
-puts (v1+v2).sort[size-1, 2].join(" ")
|
|
|
+sorted = (v1+v2).sort
|
|
|
+puts [sorted[(2*size - 1) / 2], sorted[(2*size) / 2]].join(" ")
|
|
|
+
|
|
|
```
|
|
|
|
|
|
Vamos provar que é $O(lg n)$.
|
|
|
|
|
|
-$$T(0) = 1$$
|
|
|
+$$T(1) = 1$$
|
|
|
$$T(n) = T(\lceil x/2 \rceil) + O(1)$$
|
|
|
$$T(n) = T(\lceil x/2^i \rceil) + i$$
|
|
|
|
|
|
+Vamos supor que $x$ é potencia de 2, ou seja, $x = 2^i$
|
|
|
+
|
|
|
+$$T(x) = T(2^i/2^i) + i$$
|
|
|
+$$T(x) = T(1) + i$$
|
|
|
+$$T(x) = 1 + lg x$$
|
|
|
+
|
|
|
+Vamos provar por indução:
|
|
|
+
|
|
|
+BASE $x = 1, T(1) = 1$ e $1 + lg 1 = 1$
|
|
|
+
|
|
|
+HIPÓTESE $T(2^(i-1)) = 1 + i - 1 = i$
|
|
|
+
|
|
|
+$$T(2^i) = T(2^(i-1)) + i = (pela HI) = 2i $$
|
|
|
+
|