Escolar Documentos
Profissional Documentos
Cultura Documentos
Lista 4
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
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
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