Documente Academic
Documente Profesional
Documente Cultură
Algoritmi de aproximare
definitii
acoperirea unei multimi
submultime de suma data
comis voiajor
Cutare locala
Euristici
Ce e defacut cind avem de rezolvat o problema NP-dificila?
1. Renunta la algoritmii polinomiali si spera ca
algoritmul proiectat rezolva in timp rezonabil
problema pentru instantele intalnite in practica
2. Renunta la optimalitate si incearca una din urmatoarele
posibilitati
a) algoritmi de aproximare
b) euristica
cautare locala
cautare tabu
hill climbing (cursul de IA)
simulated anealing
c) algoritmi genetici
Algoritmi de aproximare
este fascinant de vazut cum uneori o schimbare minora a
cerintelor duce la un salt de la complexitate exponentiala
(netractabil) la complexitate polinomiala (tractabil)
aceasta schimbare poate fi de forma: in loc de solutia
optima, se cere o solutie care difera de solutia optima cu
cel mult c%, c > 0
aceasta este foarte important pentru algoritmii cu
aplicabilitate practica mare
principalele probleme la care trebuie sa raspundem
fundamentele conceptului de aproximare
exemple
margini inferioare pentru neaproximabilitate
polinomiala in timp
Algoritmi de aproximare
P = problema de optim NP-completa
algoritm de aproximare un algoritm A care determina o
solutie aproape optima
pentru o intrare x cu dimensiunea g(x):
Optim(x) = valoarea optima
A(x) = valoarea calculata de A
eroarea relativa
) (
| ) ( ) ( |
) (
x Optim
x Optim x A
x E
A
=
= n x g
x Optim
x Optim x A
n E
A
) (
) (
| ) ( ) ( |
max ) (
Algoritmi de aproximare
A algoritm de aproximare cu eroarea relativa marginita
de c(n) daca:
ratia de aproximare
|
|
.
|
\
|
=
) (
) (
,
) (
) (
max ) (
x A
x Optim
x Optim
x A
x R
A
{ } n x g x R n R
A A
= = ) ( | ) ( max ) (
) ( ) ( n n E
A
c s
A algoritm de aproximare cu ratia marginita de (n) daca:
) ( ) ( n n R
A
s
rezulta c(n) s (n) -1
Acoperirea unei multimi
Intrare:
o multime T = {t
1
, t
2
, ...., t
n
}
m submultimi: S
1
, S
2
, ...., S
m
_ T
de ponderi (costuri) w
1
, w
2
, ...., w
m
Iesire: o submultime I _{1,2,...,m} care minimizeaza
ieI
w
i
astfel incit
ieI
S
i
= T
V-acoperire este un caz special
T = multimea muchiilor
S
i
= multimea muchiilor incidente in i
w
i
= 1
Acoperirea unei multimi
Algoritm greedy (versiunea 1)
procedure ASGreedy1(T, S, w)
begin
I
while T do
(*)alege t
i
din T
I I {j | t
i
e S
j
}
T T -
jeI
S
j
end
Acoperirea unei multimi
3
6
4
8 9
7 1
2 5
S
1
S
5
S
2
S
4
S
3
t1 = 3
I ={1, 2}
t2 = 7
I ={1, 2,3,5}
Acoperirea unei multimi
Teorema
Daca toate ponderile sunt 1 (cazul neponderat), atunci
ASGreedy1 este un algoritm de aproximare cu ratia
marginita de , unde = max
i
#{j | t
i
e S
j
}
Demonstratie
pp. ca exista t
i
t
j
alesi in (*) a.i. t
i
, t
j
e S
k
pentru un
k oarecare din solutia optima IOptim(T,S,w)
pp. ca t
j
s-a ales dupa t
i
cind a fost ales t
i
, S
k
a fost eliminata din T
deci t
j
nu poate fi ales mai tirziu; contradictie!
rezulta ca fiecare t
i
ales de (*) apartine la un element
distinct din solutia IOptim(T,S,w)
Acoperirea unei multimi
fie X numarul de iteratii ale buclei while
avem X s # IOptim(T,S,w) (din observatia din slide-ul
precedent)
rezulta #I s X s #IOptim(T,S,w)
ASGreedy1(T,S,w) = #I
Optim(T,S,w) = #IOptim(T,S,w)
avem ASGreedy1(T,S,w) / Optim(T,S,w) s
Acoperirea unei multimi
Algoritm greedy (versiunea 2)
C = multimea elementelor deja acoperite ( = {t
i
| i e I })
cost efectiv al lui S
j
: w
j
/ #(S
j
- C)
procedure ASGreedy2(T, S, w)
begin
I C
while T C do
determina S
j
cu cel mai mic cost efectiv
for t
i
e S
j
-C
do
pret(t
i
) = w
j
/#(S
j
- C)
I I {j}
C C
S
j
end
Acoperirea unei multimi
Lema
pret(t
k
) s Optim(T,S,w) / (n-k+1)
Dem.
se presupune ca elementele din T sunt numerotate in
ordinea in care sunt acoperite
la fiecare iteratie exista cel putin o multime cu costul
efectiv s Optim(T,S,w) / #(T-C)
la momentul in care t
k
este acoperit, sunt cel putin (n-k+1)
elemente nealese (care se gasesc in T - C)
pret(t
k
) s Optim(T,S,w) / #(T-C) s Optim(T,S,w) / (n-k+1)
Teorema
ASGreedy2 este un algoritm de aproximare cu ratia
marginita de H
n
= 1 +1/2 + + 1/n
Scheme de aproximare
schema de aproximare = un algoritm de apoximare A
pentru P care are la intrare o atit o instanta a lui P cit si un
c > 0 a.i., pentru orice c fixat, eroarea relativa a lui A este
marginita de c.
schema de aproximare polinomiala = schema de
aproximare care pentru un c fixat, are complexitatea timp
polinomiala in marimea instantei n
schema de aproximare polinomiala completa = schema
de aproximare cu eroarea relativa marginita de c si care are
complexitatea timp polinomiala atit in marimea instantei n
cit si in 1/c.
Submultimea de suma data: reformulare
intrare: A, s[a] e Z
+
, M e Z
+
iesire: cel mai mare M* s M a.i. exista A _ A cu
(s[a] a e A) = M*
Presupunem A = {1, 2, ..., n}
Submultimea de suma data: algoritm exponential
procedure SSDopt(n, s, M)
begin
L[0] (0);
for i 1 to n do
L[i] merge(L[i-1], L[i-1] + s[i])
elimina din L[i] valorile mai mari decit M
intoarce vea mai mare valoare din L[n]
end
Submultimea de suma data: curatirea listei
o (0 < o < 1) curata L daca, notand cu L lista curatita, atunci
(y e L L)(-z e L) z s y si (y z)/y s o
Exemplu:
L = (1, 4, 5, 7, 8, 11, 13, 16)
o = 0.5 L' = (1, 4, 11)
o = 0.25 L' = (1, 4, 7, 11, 16)
Submultimea de suma data: algoritm de curatire
procedure Curata(L, o, L)
/* L lista liniara ordonata crescator */
begin
m lung(L)
citeste(L, 1, y)
L (y);
ultim y
for i 2 to m do
citeste(L, i, y)
if (ultim < (1 - o)*y)
then insereaza(L, y)
ultim y
end
Submultimea de suma data: algoritm de aproximare
procedure SSDaprox(n, s, M, c)
begin
L[0] (0);
for i 1 to n do
Ltemp merge(L[i-1], L[i-1] + s[i])
Curata(Ltemp, c/n, L[i])
elimina din L[i] valorile mai mari decit M
intoarce cea mai mare valoare din L[n]
end
Submultimea de suma data: evaluare
Lema
Fie P[i] multimea valorilor obtinute ca sume de elemente din
{s[1], ...,s[i]}.
Pentru orice y e P[i] exista un z e L[i] a.i.
y z y
n
i
s s
|
.
|
\
|
c
1
Teorema
Algoritmul SSDaprox este o schema de aproximare
complet polinomiala.
Demonstratie
Se considera in lema: i = n, y = y* (solutia optima), z cel
dat de algoritmul de aproximare
Submultimea de suma data: evaluare (cont.)
Se obtine:
(1 c)y* s z (eroarea relativa este marginita de c)
(1 c/n)
n
este crescatoare
(1 c) s (1 c/n)
n
raportul dintre doua valori consecutive z/z > 1/(1 c/n)
M > z
k
/z
1
> 1/(1 c/n)
k
numarul de elemente din L[n] este cel mult:
c
c
c
M n
n
M
M
n
ln
) 1 ln(
ln
log
1
1
s
=