Você está na página 1de 4

MAC0450 - Algoritmos de Aproximação

Lista 4

Arthur Correia Gomes


NUSP: 10734481

2 de Dezembro de 2020

11. Vamos mostrar que o algoritmo MaxSAT-CaraCoroa(V) é uma 0, 5-aproximação probabilı́stica poli-
nomial para o MaxSAT.
Seja ZC uma variável aleatória para cada C ∈ C tal que ZC = 1 se a valoração produzida pelo
algoritmo satisfaz C e 0 caso contrário. Seja
X
XC = ZC
C∈C

o número de cláusulas satisfeitas. Temos então que a esperança da solução devolvida pelo algoritmo
é: X X
E[XC ] = E[ZC ] = P[ZC = 1]
C∈C C∈C

Precisamos agora calcular P[ZC = 1] = 1 − P[ZC = 0].


Para uma cláusula não ser satisfeita a valoração de todos os literais deve ser igual a 0. Mas como
todas as variáveis recebem o mesmo valor que é escolhido com probabilidade 12 , então a probabilidade
de uma cláusula não ser satisfeita é P[ZC = 0] = 12 . Dessa forma, P[ZC = 1] = 1 − 12 = 21 .
Portanto ficaremos com: X1
X 1
E[XC ] = P[ZC = 1] = = |C|
2 2
C∈C C∈C
1
Como opt(V, C) ≤ |C|, então E[XC ] ≥ 2 opt(V, C), logo o algoritmo é uma 0, 5-aproximação proba-
bilı́stica polinomial para o MaxSAT.

12. Podemos criar o algoritmo:


function MAXCUT-ALEATORIO(G, w)
X←∅
para cada vértice v ∈ V faça
xv ← RAN D(1/2)
se xv = 1
então X ← X ∪ {v}
R ← δ(X)
return R
end function

1
O algoritmo acima escolhe de qual lado do corte cada vértice ficará com probabilidade 1/2. Queremos
calcular a esperança do peso w(R) do corte gerado pelo algoritmo. Seja Zuv uma variável aleatória
tal que para cada aresta uv ∈ E do grafo, Zuv = 1 se uv está no corte R e 0 caso contrário.
Seja X
W = w(uv)Zuv
uv∈E
o peso total do corte.
Queremos calcular E[W ].
X X X
E[W ] = E[ w(uv)Xuv ] = w(uv)E[Zuv ] = w(uv)P[Zuv = 1]
uv∈E uv∈E uv∈E

Precisamos calcular P[Zuv = 1]. Seja X um lado do corte e X̄ o outro. Dessa forma temos que
1 1 1 1 1
P[Xuv = 1] = P[u ∈ X] · P[v ∈ X̄] + P[u ∈ X̄] · P[v ∈ X] = · + · =
2 2 2 2 2
Logo,
X X 1 1
w(uv)P[Xuv = 1] = w(uv) = w(E)
2 2
uv∈E uv∈E
1 1
Como opt(G, w) ≤ w(E), então ≥
2 w(E) 2 opt(G, w).
Como o algoritmo itera apenas uma vez para
cada vértice ele é polinomial.
Dessa forma, esse algoritmo é uma 0, 5-aproximação probabilı́stica polinomial para o MaxCut.

13. Seja X um lado do corte, X̄ o outro e W o peso do corte. Seja xi = 1 se o vértice vi está em X e 0 se
está em X̄. Se já tivermos os vértices v1 , ..., vi em X ou X̄, vamos calcular a esperança condicionada
de vi+1 .
1 1
E[W |x1 , ..., xi ] = E[W |x1 , ..., xi e xi+1 = 1] + E[W |x1 , ..., xi e xi+1 = 0]
2 2
Dessa forma temos que
1 1
max{ E[W |x1 , ..., xi e xi+1 = 1], E[W |x1 , ..., xi e xi+1 = 0]} ≥ E[W |x1 , ..., xi ]
2 2
Precisamos encontrar uma maneira de calcular essa esperança condicionada. Suponha que os vértices
v1 , ..., vi já estão em X ou X̄ e agora iremos adicionar vi+1 . Suponha que k seja o peso das arestas
entre X e X̄, m1 o peso das arestas entre vi+1 e X, m2 o peso das arestas entre vi+1 e X̄ e seja t o
peso total das arestas dentro dos conjuntos X e X̄.
Dessa forma, se m é o peso total das arestas, então o peso das arestas que estão nos vértices que
ainda não foram adicionados a nenhum lado do corte é m − k − m1 − m2 − t. Assim as esperanças
condicionadas serão:
1 m − k − m1 − m2 − t
E[W |x1 , ..., xi exi+1 = 1] = k + m2 +
2 2
1 m − k − m1 − m2 − t
E[W |x1 , ..., xi exi+1 = 0] = k + m1 +
2 2
Como a única diferença entre as duas esperanças é m1 e m2 , então podemos simplesmente comparar
m1 e m2 e colocar vi no conjunto que maximize o peso das arestas entrando no corte.
O algoritmo ficará assim:

2
function MAXCUT-ALEATORIO(G, w)
X←∅
X̄ ← ∅
para cada vértice v ∈ V faça
seja m1 o peso das arestas entre X e v
seja m2 o peso das arestas entre X̄ e v.
se m1 ≥ m2
então X̄ ← X̄ ∪ {v}
senão X ← X ∪ {v}
R ← δ(X)
return R
end function

Vamos mostrar que esse algoritmo é uma 0, 5-aproximação polinomial para o MaxCut. Seja W o
peso do corte gerado pelo algoritmo. Temos que:
1 1
E[W ] = E[W |xv = 1] + E[W |xv = 0] ≤ max{E[W |xv = 1], E[W |xv = 0]}
2 2
Então,
E[W ] ≤ E[W |xv1 ] ≤ ... ≤ E[W |xv1 , ..., xvn ]
1
Como E[W] ≥ 2 opt(G, w),
então o resultado segue. Assim esse algoritmo é uma 0, 5-aproximação
polinomial para o MaxCut.
14. Vamos formular um PL 0/1 para esse problema.
Seja x um vetor indexado pelos subconjuntos S ∈ S tal que xS = 1 se S ∈ T e 0 caso contrário e seja
z um vetor indexado pelos elementos de E tal que ze = 1 se e está coberto por T e 0 caso contrário.
Formulando o PL 0/1 temos:
X
maximizar we · z e
e∈E
X
sujeito a xS = k
S∈S
P
S∈S xS ≥ ze ∀e ∈ E
xS ∈ {0, 1}∀S ∈ S
ze ∈ {0, 1}∀e ∈ E
Vamos agora considerar um PL (P) como a relaxação desse PL 0/1:
X
maximizar we · z e
e∈E
X
sujeito a xS = k
S∈S
P
S∈S xS ≥ ze ∀e ∈ E
0 ≤ xS ≤ 1∀S ∈ S
0 ≤ ze ≤ 1∀e ∈ E
Dada uma solução para esse PL podemos gerar um algoritmo de arredondamento probabilı́stico:

3
function MAXCC-ALEATORIO(E, w, S, k)
seja (x̂, ẑ) uma solução ótima racional de (P)
T ←∅
para cada S ∈ S faça
x˙S ← RAN D(x̂/k)
se x˙S = 1
então T ← T ∪ {S}
return T
end function

Vamos calcular a probabilidade de um elemento e ∈ E ser coberto por T . Seja S um subconjunto


P de S
escolhido com probabilidade xˆS /k, então S irá cobrir um elemento e com probabilidade S∈S xˆS /k ≥
zˆe /k para todo e em E. Assim, a probabilidade de e não ser coberto por nenhum conjunto é no
máximo (1 − zkˆe )k .
Dessa forma, a probabilidade de e ser coberto por T é pelo menos

zˆe k
 
1− 1−
k

Temos que
k !
zˆe k
  
1
1− 1− ≥ 1− 1− zˆe
k k
1 k
k
≤ 1e ∀k ≥ 1, então temos que 1 − 1 − k1 > 0, 63. Dessa forma,

Como 1 − k
 !
1 k

1− 1− zˆe > 0, 63zˆe
k

Vamos provar o valor esperado do algoritmo. P


Seja Ze uma variável aleatória tal que Ze = 1 se T cobre e e 0 caso contrário. Seja W = e∈E we · Ze
o peso da solução devolvida pelo algoritmo. Então,
X X X
E[W ] = we E[Ze ] = we P[Ze = 1] > we · 0, 63zˆe
e∈E e∈E e∈E
P
Como opt(I) ≤ e∈E we , então E[W ] ≥ 0, 63opt(I).
Dessa forma esse algoritmo é uma 0, 63-aproximação probabilı́stica polinomial para o MaxCC.

Você também pode gostar