Universidade Tecnol´ogica Federal do Paran´a Professor Murilo V. G. da Silva
Notas de aula – Algoritmos Avan¸cados I (Aula 04) Conte´udos da aula: [CLR09: cap. 7 e 9][MIE05 1.4, 2.5]
Vamos estudar nesta aula trˆes algoritmos aleatorizados. Primeiramente a vers˜ao do Quicksort que faz esco-lhas aleat´orias de pivots. Depois veremos o algoritmo Selection que encontra o i-´esimo menor elemento de um vetor. Por fim apresentamos um algoritmo aleatorizado que retorna um corte m´ınimo de um grafo.
1. Revis˜ao informal de probabilidade discreta
Enumeramos abaixo alguns t´opicos vistos em sala de aula:
• Espa¸co amostral Ω: Conjunto enumer´avel de todos os poss´ıveis resultados de um experimento aleat´orio. • Fam´ılia F = {E1, E2, ...} de eventos. Um evento Ei ´e um subconjunto de Ω. Um elemento de Ω ´e dito
um evento elementar.
• Fun¸c˜ao de probabilidade P r : F → R. Normalmente “sobrecarregamos” a nota¸c˜ao de probabilidade permitindo escrever P r(i) para elementos i ∈ Ω (ao inv´es de escrever P r({i})).
• Seja E ⊆ Ω, P r(E) = P
i∈S
p(i).
• Uma vari´avel aleat´oria ´e uma fun¸c˜ao X : Ω → R.
• A esperan¸ca de uma vari´avel aleat´oria X ´e definida por E[X] = P
i∈Ω
X(i)P r(i).
• Linearidade da Esperan¸ca: Se X1, ..., Xn s˜ao vari´aveis aleat´orias definidas sobre Ω, ent˜ao
E n X j=1 Xj = n X j=1 E[Xj]
• Se X ´e uma vari´avel de indicadora de um experimento com probabilidade de sucesso p, ent˜ao E[X] = p. • Se X ´e uma vari´avel geom´etrica com parˆametro p, ent˜ao E[X] = 1p.
• Probabilidade condicional: Dados X, Y ⊆ Ω, P r(X|Y ) = P r(X∩Y )P (Y ) . • Os eventos X e Y s˜ao independentes ⇔ P r(X ∩ Y ) = P r(X)P r(Y ). • Desigualdade de Markov: P r(X ≥ a) ≤ E[X]/a
2. An´alise do Quicksort Aleatorizado (ou seja, com os pivots escolhidos aleatoriamente)
Teorema: Para qualquer vetor de entrada, o Quicksort Aleatorizado tem tempo esperado de execu¸c˜ao O(n log n). Prova: Este ´e um esbo¸co da prova (detalhes vistos em sala de aula).
• Ω: Cada poss´ıvel sequˆencia de escolhas aleat´orias de pivots σ = {p1, p2, p3, ...} ´e um elemento de Ω.
• C(σ) ´e uma vari´avel aleat´oria que conta o n´umero de compara¸c˜oes feita pelo algoritmo para a sequˆencia σ de pivots (observe que o tempo de execu¸c˜ao do algoritmo ´e dominado pelo n´umero de compara¸c˜oes). O que queremos provar? Queremos mostrar que E[C] = O(n log n).
• Nota¸c˜ao: zi´e o i-´esimo menor elemento do vetor de entrada A.
• Para σ ∈ Ω e ´ındices i < j definimos a vari´avel aleat´oria Xij(σ) que conta quantas vezes zi e zj s˜ao
comparados para um σ dado. Observe que na execu¸c˜ao do algoritmo qualquer par de elementos de A ´e comparado ou 0 ou 1 vez apenas (isso pode n˜ao ser claro de in´ıcio, mas convidamos o aluno a pensar 1 minuto a respeito e se convencer que isso ´e verdade). Portanto Xij ´e uma vari´avel indicadora.
Portanto, ∀σ, C(σ) = n−1 P i=1 n P j=i+1 Xij(σ)
Pela linearidade da esperan¸ca e como Xij ´e uma v.a. indicadora:
E[C] = n−1 P i=1 n P j=i+1 E[Xij] = n−1 P i=1 n P j=i+1 P r[“zi ´e comparado com zj”]
Queremos saber agora qual ´e a probabilidade P r(“zi ´e comparado com zj”). Fixe zi, zj, para i < j e
considere o conjunto S = {zi, zi+1, ..., zj−1, zj}. Note que enquanto nenhum destes elementos forem escolhidos
como pivot, eles s˜ao passados para a mesma chamada recursiva. Considere o momento em que o primeiro elemento de S ´e escolhido como pivot. Temos duas possibilidades:
(1) O pivot escolhido ´e zi ou zj.
(2) O pivot escolhido ´e um elemento de S \ {zi, zj}.
No caso (1) os dois elementos zi, zj s˜ao comparados (o pivot ´e comparado com todos elementos de S). No
caso (2) zi, zj nunca s˜ao comparados, pois o pivot ´e um elemento entre os dois valores, colocando cada um em
uma chamada recursiva diferente.
Como os pivots s˜ao escolhidos uniformemente de maneira aleat´oria, no momento em que o primeiro elemento de S ´e escolhido para ser pivot, a probabilidade de qualquer elemento ser escolhido ´e a mesma. Como zi e zj
s˜ao comparados somente se o caso (1) ocorre, ent˜ao: • P r(“zi´e comparado com zj”) = j−i+12
Portanto E[C] = n−1 P i=1 n P j=i+1 E[Xij] = n−1 P i=1 n P j=i+1 2 j−i+1 ≤ 2n n P k=2 1 k ≤ O(n log n).
3. Algoritmo linear para encontrar o i-´esimo menor elemento
Considere o algoritmo Selection(A, n, i) que recebe um vetor A de tamanho n e retorna seu i-´esimo menor elemento. Segue a id´eia do algoritmo:
1. Se n = 1, retorne A[1]
2. Escolha um pivot p aleatoriamente de maneira uniforme
3. Use p para particionar A no novo vetor [A1][p][A2] e seja j o ´ındice de p neste novo vetor
4. Se j = i, retorne p
5. Se j > i, retorne Selection(A1, j − 1, i)
6. Se j < i, retorne Selection(A2, n − j, i − j)
Nota¸c˜oes e observa¸c˜oes:
• O n´umero de opera¸c˜oes executadas fora da chamada recursiva, ou seja, na opera¸c˜ao de parti¸c˜ao ´e ≤ cn. • A ideia ´e que se o pivot faz uma parti¸c˜ao do tipo 25-75 (ou seja, o maior subvetor tem no m´aximo 75%
do tamanho original) o algoritmo est´a fazendo progresso. Isso ´e definido formalmente a seguir.
Nota¸c˜ao: Na execu¸c˜ao do algoritmo, dizemos que ele est´a na fase jjj se o tamanho do vetor atual est´a entre (34)j+1n e (3
4)
jn. Observe que o algoritmo come¸ca na fase 0.
• Xj: Var. aleat´oria que conta o n´umero de chamadas recursivas na fase j.
• X: Var. aleat´oria que conta o n´umero total de opera¸c˜oes do algoritmo. Observa¸c˜oes chave:
• N´umero esperado de passos do algoritmo: T (n) = E[X] ≤ E " P fases j Xj· c · (34)j· n # .
• Xj´e uma vari´avel aleat´oria geom´etrica com parˆametro p = 12. Motivo: A chance de se obter uma parti¸c˜ao
25-75 ´e de 50% e em uma dada uma fase j, caso obtenha-se tal parti¸c˜ao o algoritmo passa para a fase j + 1. Ou seja, Xj conta quantas vezes o algoritmo precisa tentar at´e obter “sucesso” em obter uma parti¸c˜ao
adequada. Portanto Xj ´e uma v.a. geom´etrica com parˆametro p = 12.
Portanto E[Xj] = 2 e consequentemente:
T (n) = E[cn P fases j (34)jXj] = cn P fases j (34)jE[Xj] = cn P fases j (34)j· 2 = 2cn P fases j (34)j
Observe que o somat´orio P
fases j
(3 4)
j da ´ultima igualdade ´e uma soma geom´etrica de raz˜ao menor que 1. Tal
soma tem o seguinte limitante superior: P
j
rj ≤ 1
1−r. Neste caso r = 3
4 e portanto a soma ´e ≤ 4.
A partir da´ı temos T (n) ≤ 2cn P
fases j
(3 4)
1. Corte M´ınimo em Grafos (Algoritmo da contra¸c˜ao)
Problema: Dado um grafo G = (V, E), encontrar um corte m´ınimo de arestas F ⊆ E. Obs: Neste caso estamos considerando grafos com m´ultiplas arestas conectando um mesmo par de v´ertices.
RandContract (G)
1: while |V (G)| > 2 do
2: Escolha uma aresta uv aleatoriamente
3: Contraia uv unindo u e v em ´unico v´ertice
4: Remova eventuais “loops”
5: end while
6: Retorne o corte que separa os 2 v´ertices remanescentes Qual a probabilidade de sucesso? Vamos a an´alise:
• Fixe o grafo G = (V, E) e seja |V | = n e |E| = m.
• Fixe um corte m´ınimo que particiona V em (A, B). Por quˆe fixar? A rigor o grafo pode ter outros cortes m´ınimos, mas vamos nos ater a probabilidade de encontrar um corte m´ınimo espec´ıfico, pois no pior caso estamos errando ao nosso favor.
• Seja F ∈ E o conjunto das arestas deste corte e seja |F | = k.
• Observe que a probabilidade do algoritmo encontrar o corte (A, B) ´e a probabilidade de que o algoritmo nunca contraia uma aresta de F .
Seja Si o evento de que um aresta de F ´e contra´ıda na itera¸c˜ao i.
• Queremos ent˜ao: P r(¬SP r(¬SP r(¬S111∧ ¬S∧ ¬S∧ ¬S222∧ ¬S∧ ¬S∧ ¬S333∧ ... ∧ ¬S∧ ... ∧ ¬S∧ ... ∧ ¬Sn−2n−2n−2)))
Primeira itera¸c˜ao: • Note que P (S1) =mk.
• Como δ(G) ≥ k eP
v
d(v) = 2m, ent˜ao m ≥kn2 . • Portanto P (S1) ≤ n2 e ent˜ao P (¬S1) ≥ 1 −n2.
Segunda itera¸c˜ao:
• Note primeiramente que no grafo contra´ıdo o grau m´ınimo ainda ´e no m´ınimo k e portanto o n´umero de arestas remanescentes ´e ≥ k(n−1)2 .
• Queremos P r(¬S1∧ ¬S2) e isso ´e igual a P r(¬S2|¬S1) · P r(¬S1).
• P r(¬S2|¬S1) = 1 −# de arestas remanescentesk ≥ 1 − k k(n−1) 2 = 1 −(n−1)2 • Portanto P r(¬S1∧ ¬S2) ≥ (1 −(n−1)2 )(1 −n2) Generalizando: P r(¬S1∧ ¬S2¬ ∧ S3∧ ... ∧ ¬Sn−2) = P r(¬S1) · P r(¬S2|¬S1) · P r(¬S3|¬S2∧ ¬S1)...P r(¬Sn−2|¬S1∧ ... ∧ ¬Sn−3)
Ou seja, a probabilidade de sucesso ´e baixa! Temos como melhorar? Claro! Solu¸c˜ao: Rode o algoritmo N vezes (escolheremos este n´umero adequadamente a seguir) e lembre o menor corte encontrado.
• Seja Ti o evento: O corte (A, B) ´e encontrado na i-´esima tentativa;
• P r(“todas N tentativas falham”) = P r(¬T1∧ ¬T2∧ ... ∧ ¬TN) ≤ 1 −n12
N .
Usando o fato que 1 + x ≤ ex e fazendo N = n2 temos: P r(“N fracassos”) ≤e− 1 n2
n2 = 1
e. Ainda n˜ao
est´a bom. Agora fazendo N = n2ln n obtemos um resultado muito bom: P r(“N fracassos”) ≤ 1 e
ln n = n1.