Sunteți pe pagina 1din 4

ANALIZA ALGORITMILOR

EFTIMIE IOAN ALEXANDRU


322CC
TEMA 3
PROBLEMA 1
Sa se verifice daca o valoare x apartine unei matrice A cu n linii si 3*m coloane folosind un algoritm
nedeterminist cu 3*n copii. Calculati complexitatea algoritmului.
0 apartine(x, A, n, m)
1 i = choice([1 ... 3*n])
2 for j = 1:m
3 if A[i % n + 1][((i 1) ! n)*m + j] == x " #(m)
$ %&cce%%
' fai(
Explicatie: i primeste o valoare intre 1 si 3*n. Din aceasta obtin pe de o parte linia, care este in 1:n
prin urmare i modulo n + 1, iar pe de alta parte coloana prin (i 1 div n) * m + j ceea ce duce la
intervalul fixat pentru coloane, 1:3*m. Alegerea astfel facuta duce la acoperirea intregii matrici.
Complexitatea algoritmului este: O(m) (for-ul de la linia 2 se executa de m+1 ori si continte
numai operatii simple, matematice).
Fiind un algoritm nedeterminist, complexitatea algoritmului este suma complexitatii operatiilor de pe
calea cea mai scurta, care se termina cu succes. (complexitate angelica).
PROBLEMA 2
Enuntati 5 probleme din NPC.
1. Programarea programarii mai multor procesoare (Multiprocessor scheduling)
Fiind dat o multime J de lucrari, unde lucrarea j are lungimea L
j
si un numar de procesoare m, care
este timpul minim necesar pentru programarea lucrarilor J pe m procesoare, astfel incat nici unul sa nu
se suprapuna?"
Exemplu: chiar functionarea unui sistem de operare multitasking, multiprocesor pe un PC.
2. Problema stocarii eficiente (Bin packing problem)
Fiind dat un numar finit de containere de capacitate V s se gseasc impachetarea optima a unor
obiecte de volume diferite, prin optim n?elegnd numr minim de containere .
Exemplu: stocarea datelor, a copiilor de siguranta pe casete cu banda magnetica. Obiectele sunt in acest
caz fisierele de dimensiuni diferite -, iar containerele sunt casetele, de aceeasi dimensiune, V.
3. Problema sumei submul ? imilor (Subset sum problem)
Fiind data o multime de intregi, si un numar s exista o submultime a carei suma este s?
Exemplu: pentru { -7, -3, -2, 5, 8} si s =0, raspunsul este DA, exista submultimea {-3, -2, 5} a carei
suma este s, adica zero. Acest algoritm se foloseste in criptografie, pentru calculul cheii publice.
Aceasta problema mai este cunoscuta si ca problema rucsacului (Knapsack Problem): fiind dat un
rucsac de un anumit volum si mai multe obiecte cu costuri si volume asociate sa se gaseasca multimea
de obiecte optima care incap in sac.
4. Problema dirijarii vehicolelor (Vehicle routing problem)
Fiind dat un parc auto si o multime de clienti se cere ordonarea servirii clientilor pentru minimizarea
costurilor de livrare .
Exemplu: acest algooritm poate rezolva problema unei Pizzerii cu livrarea la domiciliu. In functie de
comenzi, de adresele clientilor si de numarul de masini, cursele trebuie programate in asa fel incat sa
fie serviti toti clientii consumand cat mai putina benzina.
5. Problema multimii de vrfuri independente (Independent set problem)
Fiind dat un graf neorientat G si un intreg k se pune problema daca exista un subgraf format dintr-o
submultime a nodurilor grafului initial, cu proprietatea ca varfurile nu sunt doua cate doua adiacente,
altfel spus graful indus de aceste varfuri nu are muchii, doar varfuri izolate.
Exemplu: Pentru graful din parea stanga, si k 21 (maxim de altfel), o multime de noduri independente
este cea ingrosata in imaginea din partea dreapta.
PROBLEMA 3
Demonstrez ca problema 5, K_Independent_Set (a multimii de varfuri independente de cardinal k)
este NP-Completa. Arat acest lucru reducand problema K_clica (presupusa NP-Completa) si aratand ca
K Independent Set este in NP.
Lema 1: K_Indepenedent_Set este in NP
Demonstratie:
Fie algoritmul nedeterminist urmator care rezolva problema:
0 a()*+*in,epen,ent*%et(-, .)
1 -/ = m&(timea*0i,a
2 n = car,(-)
3 m = car,(.)
$ for 1 = 1:2
' 0 := choice(n)
3 if 0 e -/ #(2)
4 fai(
5 for j = 1 : car,(-/) #(2)
10 if (0, -/[j]) e . #(m)
11 fai(
12 -/ = -/ + 6 0 "
1' %&cce%%
Algoritmul functioneaza in felul urmator: adauga la o submultime V' toate varfurile fara muchii intre
ele. Daca am ajuns la k, am obtinut o multime de varfuri independente: V'.
Complexitatea algoritmului este: O(k
2
+m*k
2
) = O(k
2
) deci are complexitate temporala polinomiala,
rezolva problema K_Independent_Set, asadar Lema 1 este demonstrata.
Lema 2: Problema K_Clica este reductibila in timp polinomial la problema K_Independent_Set.
Demonstratie:
Plec de la urmatoarea afirmatie:
Fiind dat graful G in care k noduri verifica problema K_Clica, aceleasi noduri in graful complementar
G' verifica problema K_Independent set.
In imaginea de mai sus, se observa cum am transformat graful G (in care subgraful corespunzator
problemei 4_Clica este subliniat cu galben), in graful G' (din dreapta, in care nodurile rosii verifica
problema 4_Independent_Set).
Demonstratia acestei echivalente este simpla:
=> G verifica K_Clica -> G' verifica K_Independent_Set
Presupun prin reducere la absurd ca G' nu verifica K_Independent_Set. Astfel, exista doua
varfuri (v1, v2) cu (v1, v2) e E'. Cum, E' este complementara lui E (multimile muchiilor), rezulta ca
(v1, v2) nu apartine E. Dar v1, v2 sunt varfuri din subgraful K_Clica, deci (v1, v2) apartine E.
Contradictie.
<= G' verifica K_Independent_Set -> G verifica K_Clica
Analog, presupun prin absurd, ca G nu verifica K_Clica. Asadar, exista (v1, v2) doua varfuri,
iar (v1, v2) nu apartine E. Conform constructiei G', (v1, v2) ca apartine E', ceea ce contrazice faptul ca
G' verifica K_Independent_Set pe o submultime de varfuri incluzand v1, v2. Contradictie, deci
demonstrat.
Mai ramane de aratat existenta algoritmului determinist care transforma G in G' (creaza un graf
complementar pe baza unui graf dat). Acesta este simplu:
con%tr&ct*7/(-, .)
./ = m&(timea 0i,a
-/ = -
for i in -
for j in -
if i 8= j 99 (i, j) n& apartine .
./ = ./ + 6 (i, j) "
ret&rn (-/, ./)
Asadar, Lema 2 este demonstrata.
Teorema: K_Independent_Set este NPC.
Demonstratie:
K_Independent_Set e NP (Lema 1)
K_Clica <
p
K_Independent_Set (Lema 2)
K_Clica e NPC (ipoteza, seminar)
Din acestea 3 rezulta K_Independent_Set este NPC, asadar teorema este demonstrata.

S-ar putea să vă placă și