0% au considerat acest document util (0 voturi)
6 vizualizări76 pagini

02 Complexity

Documentul abordează complexitatea algoritmilor și a problemelor de calcul, prezentând concepte precum eficiența algoritmului, costurile în timp și spațiu, precum și complexitatea în cel mai rău caz. Se discută despre tipurile de date, evaluarea costurilor operațiunilor și problemele rezolvabile versus cele nesoluționabile. De asemenea, se oferă exemple de costuri temporale pentru diverse operații și se subliniază importanța implementării în analiza timpului.

Încărcat de

razvantaga97
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
6 vizualizări76 pagini

02 Complexity

Documentul abordează complexitatea algoritmilor și a problemelor de calcul, prezentând concepte precum eficiența algoritmului, costurile în timp și spațiu, precum și complexitatea în cel mai rău caz. Se discută despre tipurile de date, evaluarea costurilor operațiunilor și problemele rezolvabile versus cele nesoluționabile. De asemenea, se oferă exemple de costuri temporale pentru diverse operații și se subliniază importanța implementării în analiza timpului.

Încărcat de

razvantaga97
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Subscribe to DeepL Pro to translate larger

Visit [Link]/pro for more infor

Complexitatea algoritmilor
Complexitatea algoritmică a problemelor de calcul

Dorel Lucanu

Facultatea de Informatică
Universitatea Alexandru Ioan Cuza, Iași,

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 1 /76


România
dlucanu@[Link]

PA 2022/2023

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 2 /76


Schiță

1 Recapitulare

2 Eficiența algoritmului: funcții de


cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz

4 Complexitatea (algoritmică) a problemelor de calcul

5 Complexitatea sortării

6 Reducerea polinomială a
problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 3 /76


Recap
itulare

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a
problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 4 /76


Recapitulare

Limbajul algoritmic Alk

fact(n){
f=1;
p e n t r u ( i = 2 ; i <= n ;
++i ) f �= i ;
r e tu r n f ;
}

b=fact(a);

Dorim să o rulăm pentru a=21:


$ a l k i -a f a c t . a l k -i " a |-> 21 " -m
a |-> 21
b |-> 51090942171709440000

Opțiunea -m este pentru afișarea stării finale.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 5 /76


Recap
itulare

Semantică: Execuție

Configurația inițială �S0 , σ0 ⟩ include algoritmul (codul Alk) ce urmează a


fi executat S0 și starea inițială σ0 .
Configurația finală �Sn , σn �, care există numai dacă execuția este
finită, nu are configurații succesoare (nu mai este nimic de executat).
Un algoritm este determinist dacă, pentru orice execuție și pentru orice
configurație a execuției respective, există cel mult o configurație
succesoare.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 6 /76


Recapitulare

Problemă rezolvată de un algoritm

Un algoritm determinist A rezolvă o problemă P dacă:


conceptele din domeniul problemei sunt reprezentate prin structuri de
date;
pentru orice instanță (intrare) p din P, există o configurație inițială
⟨A, σp �; astfel încât σp include structuri de date care descriu p;
execuția pornind de la configurația inițială ⟨A, σp � se termină
într-o configurație finală ⟨-, σ′ �, scrie ⟨A, σ⟩ ⇒∗ �., σ′ �; și
σ′ include structuri de date care descriu rezultatul P(p).

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 7 /76


Recapitulare

Problemă rezolvabilă/computabilă/decidabilă

O problemă P este rezolvabilă (calculabilă) dacă există un algoritm A


care rezolvă P.
O problemă P este nesoluționabilă (necomputabilă) dacă NU există un
algoritm A care să rezolve P.
O problemă de decizie P are răspunsul (output) de forma "DA" sau
"NU" (în mod echivalent, "adevărat" sau "fals").
O problemă de decizie este în general prezentată de o pereche (instanță,

întrebare). O problemă decidabilă este o problemă de decizie care

poate fi rezolvată.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 8 /76


O problemă nehotărâbilă este o problemă de decizie care nu poate fi
rezolvată.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 9 /76


Eficiența algoritmului: funcții de
cost

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 10 /


Eficiența algoritmului: funcții de cost

Povestea unui proiect privind usturoiul1 1/2

1RFagin. Aplicarea teoriei (inclusiv a logicii cu valori reale) în practică.


Workshop FMTMVLCI.
[Link]
[Link]
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 9/
Eficiența algoritmului: funcții de cost

Povestea unui proiect privind usturoiul2 2/2

2RFagin. Aplicarea teoriei (inclusiv a logicii cu valori reale) în practică.


Workshop FMTMVLCI.
[Link]
[Link]
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 10 /
Eficiența algoritmului: funcții de cost Valoare
Dimensiune

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 11 /76


Eficiența algoritmului: funcții de cost Valoare Dimensiune

Cu privire la tipurile de date

Un tip de date este format din valori (constante) și operații.

Fiecare valoare este reprezentată cu ajutorul unui spațiu


de memorie.
Pentru valorile fiecărui tip de date, trebuie menționată dimensiunea de
reprezentare.
Există (cel puțin) trei moduri de a defini mărimea valorilor:
uniform: |v |unif
logaritmică: |v |log
liniar: |v |lin

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 12 /76


Eficiența algoritmului: funcții de cost Valoare Dimensiune

Exemple de mărime a valorilor

numere întregi:
Int = {. . . , -2, -1, 0, 1, 2, . . .}
dimensiune uniformă: |n|unif = 1
dimensiune logaritmică: |n|log = log2 abs(n)
dimensiune liniară: |n|lin = abs(n)
array-uri:
valoare: a = [a0 , a1 , . . . . , a ]n−1
dimensiune: |a|d = |a | |0d + |a |1d + - - - - + |a |n−1d , d ∈ {unif, log,
lin}
array-urile bidimensionale sunt array-uri de array-uri unidimensionale,
array-urile tridimensionale sunt array-uri de array-uri
bidimensionale, etc.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 13 /76


Eficiența algoritmului: funcții de cost Costul în timp al evaluării
operațiunii

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 14 /76


Eficiența algoritmului: funcții de cost Costul în timp al evaluării operațiunii

Tipul de date (continuare)

Tipul de date = valori + operații

Fiecare operație op are un cost de timp time(op).

Pentru fiecare operațiune de orice tip de date trebuie menționat timpul de


cost.

Există trei moduri de măsurare a timpului (moștenite de la dimensiunea


valorii):
uniform: timeunif (op) - utilizează dimensiunea uniformă a valorilor
logaritmic: timelog (op) - utilizează dimensiunea logaritmică a valorilor
linear: timelin (op) - utilizează dimensiunea liniară a valorilor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 15 /76


Eficiența algoritmului: funcții de cost Costul în timp al evaluării operațiunii

Exemple de costuri temporale ale operațiunilor


adunarea numerelor întregi a +Int b
uniformă: O(1)
logaritmic: O(max(log a, log b))
liniar: O(a + b)
căutare de matrice
// σk : . . . a '→ A . . . . i '→ i0 . . . . .
x=a[i];
// σk+1 : . . . a '→ A . . . . i '→ i0 . . . . x '→ [Link](i0 ) . . . .
costul timpului
uniformă: O(1)
logaritmic: O(i0 + |A[i0 ]|log )
linear: O(|A[i0 ]| )lin
Observ
ație
Costul de timp al operațiilor asupra listelor, seturilor, hărților depinde de implementare (array-
uri, liste legate, . . . ) (a se vedea cursul de structură a datelor). De fapt, Alk este abstract în
ceea ce privește implementarea operațiilor din definiția sa. Prin urmare, analiza timpului poate fi
efectuată numai în funcție de o implementare. De exemplu, există mulți algoritmi pentru
înmulțirea a doi numere întregi. Atunci când este nevoie de timpul logaritmic pentru această
operație, trebuie să-l luăm pe cel corespunzător implementării presupuse. Evident, această
abordare este cea mai precisă, dar dificil de manevrat în practică. Prin urmare, restricționăm
acest tip de ipoteze doar la liste, hărți, seturi etc.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme AP 2022/2023 16 / 68
calcul onale
Eficiența algoritmului: funcții de cost Costul de timp al evaluării unei expresii și al unei etape de calcul

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 17 /76


Eficiența algoritmului: funcții de cost Costul de timp al evaluării unei expresii și al unei etape de calcul

Costul în timp al evaluării unei expresii


Evaluarea expresiilor: [E ]]](σ) - valoarea lui E în starea σ
Exemplu: σ = a '→ 3 b '→ 6
[a + b ∗ 2]](σ) = [a]](σ) +Int [b ∗ 2]](σ) = 3 +Int [b]](σ) ∗Int [2]](σ)=
3 +Int 6 ∗Int 2 = 3 +Int 12 = 15
unde +Int reprezintă algoritmul pentru adunarea numerelor întregi și ∗Int reprezintă
algoritmul pentru înmulțirea numerelor întregi.
Costul de timp al evaluării unei expresii este suma costurilor de timp ale
operațiilor incluse în expresie.
Evident, poate fi uniformă, logaritmică sau liniară. Exemplu:
timpuld ([[a + b ∗ 2]](σ)) =
timpd ([[a]](σ)) + timpd ([[b]](σ)) + timpd (6 ∗Int 2) + timpd (3 +Int 122),
d ∈ {unif, log, lin}.
σ = a '→ 3 b '→ 6
timplog ([[a]](σ)) = log 3, timplog ([[b]](σ)) = log 6
timpunif ([[a]](σ)) = 1, timpunif ([[b]](σ)) = 1
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 18 /76
timplin ([[a]](σ)) = 3, timplin ([[b]](σ)) = 6

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 19 /76


Eficiența algoritmului: funcții de cost Costul de timp al evaluării unei expresii și al unei etape de calcul

Costul în timp al unei etape de execuție a unei instrucțiuni


O etapă de execuție este o pereche ⟨S, σ⟩ ⇒ �S′ , σ′ �, ceea ce înseamnă că
după prima etapă din
S se execută în starea σ, obținem S′ și σ′ .
Costul de timp al unei etape de execuție a unei instrucțiuni depinde de starea
σ și de instrucțiunea executată.
Exemple:
�V = E ; S, σ⟩ ⇒ ⟨S, σ′ ⟩ , unde σ′ = σ[V '→ [E ]]](σ)
timpul de execuție este egal cu timpul de evaluare a lui E în starea σ3 ;
⟨if (E ) S1 else S2 S, σ� ⇒ �Si S, σ⟩
timpul de execuție este egal cu timpul de evaluare a lui E în starea σ;
în timp ce instrucțiunea (E ) S S S′ poate fi înlocuită cu una echivalentă
if (E ) {S while (E ) S } S′ ;
...
Din nou, poate fi uniformă, logaritmică sau liniară.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 20 /76
3O analiză mai atentă ar putea lua în considerare și operatorul de atribuire.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 21 /76


Eficiența algoritmului: funcții de cost Costul în timp/spațiu al unui calcul

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 22 /76


Eficiența algoritmului: funcții de cost Costul în timp/spațiu al unui calcul

Costul în timp al unui calcul (execuție)

Un calcul (o execuție) este o secvență de etape de execuție:


τ = �S1 , σ1 ⟩ ⇒ �S2 , σ2 ⟩ ⇒ �S3 , σ3 ⟩ ⇒ . . . .

Costul în timp al unui calcul:


timed (τ ) = Σi timed (�Si , σi ⟩ ⇒ �Si+1 , σi+1

�), unde d ∈ {unif , log, lin}

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 23 /76


Eficiența algoritmului: funcții de cost Costul în timp/spațiu al unui calcul

Dimensiunea (spațiu) costul unui calcul (execuție)

Dimensiunea (spațiul) unei stări σ este suma dimensiunilor valorilor stocate

în σ. Dimensiunea (spațiul) unui calcul:

dimensiuned (τ ) = maxi dimensiuned (σi ),


unde τ = �S1 , σ1 ⟩ ⇒ �S2 , σ2 ⟩ ⇒ �S3 , σ3 ⟩ ⇒ . . . și
d ∈ {unif , log, lin}

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 24 /76


Eficiența algoritmului: funcții de cost Costul în timp/spațiu al unui calcul

Costuri de calcul: exemplu

�if (x > 3) x = x + y; else x = 0; y = 4; , x '→ 7 y '→ 12⟩ ⇒


�x = x + y; y = 4; , x '→ 7 y '→ 12⟩ ⇒
⟨y = 4; , x '→ 19 y '→ 12⟩ ⇒
⟨-, x '→ 19 y '→ 4⟩
Evaluările expresiei utilizate:
[x > 3]]](x '→ 7 y '→ 12) = 7 > 3 = true
[x + y]](x '→ 7 y '→ 12) = 7 + 12 = 19
[4]](x '→ 19 y '→ 12) = 4
Costul de calcul:
cost uniform: 3 (= numărul de pași) cost
logaritmic: log 7 + log 12 + log 19 + log 4
cost liniar: 7 + 12 + 19 + 4

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 25 /76


Eficiența algoritmului: funcții de cost Costul în timp/spațiu al unui calcul

Calcularea funcțiilor de cost cu interpretorul Alk 1/3

Se consideră algoritmul care calculează suma primelor n numere întregi:


sumă ( n )
// r e q u i r e s n >= 0
{
s=0;
i=0;
dacă ( i < n ) {
i ++;
s=s+i;
}
returnes;
}

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 26 /76


Eficiența algoritmului: funcții de cost Costul în timp/spațiu al unui calcul

Calcularea funcțiilor de cost cu interpretorul Alk 2/3


Adăugăm instrucțiuni de calcul al funcțiilor de cost al timpului (rețineți că
log(x ) returnează logaritmul în baza e):
#i n c l u d e " ops-time . a l k "

timeSum ( n , time Tip )


// r e q u i r e s n >= 0
{
t ime = 0 ;
s=0;
t ime += timeOpUn ("=" , time Type , s ) ;
i=0;
t ime += timeOpUn ("=" , time Type , i ) ;
dacă ( i < n ) {
t ime += time Op Bin ("<" , time Type , i , n ) ;
i ++;
t ime += timeOpUn ("++" , time Type , i ) ;
s=s+i;
t ime += time Op Bin ("+" , time Type , i , s ) ;
}
r e t u r n t ime ;
}
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 27 /76
Eficiența algoritmului: funcții de cost Costul în timp/spațiu al unui calcul

Calcularea funcțiilor de cost cu interpretorul Alk 3/3

Execută-l:
t i m e u n i f = timeSum ( 1 0 0 0 , " u n i f "
) ; t i m e l o g = timeSum ( 1 0 0 0 , " l o g "
);
t i m e l i n = timeSum ( 1 0 0 0 , " l i n " ) ;

Configurația finală:
t i m e u n i f |-> 302 O(n)
t i m e l o g |-> 2282 O(log n!), de
ce? t i m e l i n |-> 191800 O(n4 ), de
ce?

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 28 /76


Complexitatea în cel mai
rău caz

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 29 /76


Complexitatea în cel mai rău caz

Dimensiunea unei instanțe de problemă

Dimensiunea unei stări σ este


Σ
dimensiune x'→v dimensiuned (v )
d (σ) = �σ

Dimensiunea unei configurații este


dimensiuned (⟨A, σ�) =
dimensiuned (σ) unde d ∈ {log, unif , lin}.
Fie P o problemă, p ∈ P și A un algoritm determinist care rezolvă P.
Dimensiunea lui p este dimensiunea configurației sale inițiale:
sized (p) = sized (⟨A, σp �) (= size(σp ))
unde d ∈ {log, unif , lin}.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 30 /76


Complexitatea în cel mai rău caz

Complexitatea de timp în cel mai rău caz

Fie P o problemă și A un algoritm determinist care rezolvă P și fixați


d ∈ {log, unif , lin}.
Grupați instanțele p din P în clase de echivalență: p și p′ se află în aceeași
clasă de echivalență dacă size(p) = size(p ).′
Un număr natural n poate fi considerat ca fiind clasa de echivalență a
instanțelor p de dimensiune n (dimensiuned (p) = n).
Complexitatea timpului în cel mai rău caz:
TA,d (n) = sup{timpd (A, p) | p ∈ P, dimensiuned (p) = n}

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 31 /76


Complexitatea în cel mai rău caz

Complexitatea spațială

Fie E = ⟨A0 , σ0 ⟩ ⇒ - - - - - ⇒ �An , σn ⟩ o execuție și să se fixeze


d ∈ {log, unif , lin}
Spațiul utilizat de această execuție este:

distanțate (E )= i dimensiuned (�Ai , σi �)}


maxn =0

Spațiul necesar algoritmului A pentru rezolvarea instanței p ∈ P este


spaced (A, p) = spaced (Ep
) unde Ep este execuția corespunzătoare lui p.
Complexitatea spațială în cel mai rău caz:
SA,d (n) = sup{spaced (A, p) | sized (p) = n}

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 32 /76


Complexitatea în cel mai rău caz

Calcularea complexității temporale în cel mai rău caz:


Exemplul
@input
1/2
D un digraf, un vertex i0
@output S = setul de vârfuri la care se poate ajunge de la i0
D = {D.V , D.a}
D.a = harta listelor de adiacență
p = emptyMap ;
pentru fiecare din D. V p
[ i ] = D. a [ i ] ;

SB = <i 0 >;
S={i0};

în cazul în care ( SB . s i z e () > 0 )


{
i = SB . to p F ro n t ( ) ;
dacă ( p [ i ] . s i z e () == 0 ) {
SB . pop Front ( ) ;
}
else{
j = p [ i ] . to p F ro n t ( ) ;
p [ i ] . pop Front ( ) ;
i f ( ! ( j i n S )) {
// v i s i t j
S=SU{j};
SB . p u s h F ro n t ( j ) ;
}
}
}
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 33 /76
Complexitatea în cel mai rău caz

Calcularea complexității temporale în cel mai rău caz:


Exemplul
tipul de2/2
cost: uniform
dimensiunea unei instanțe: n = D.V .size()
ipoteze: time([Link]()) = O(1), time([Link]()) = O(1),
time([Link](j)) = O(1), time(S ∪ {j}) = O(1) 4
operațiile analizate: toate cele care implică vârfuri
în cel mai rău caz: D.a[i ].size() = n - 1 pentru fiecare i (un digraf
complet) foreach: O(n), presupunând că timpul pentru p[i ] = D.a[i
];
Σ este O(1) while: numărul de iterații pentru cel mai rău caz este
D.a[i ].size() = n - (n -
i
timpul
1) pentru while-body este O(1), deoarece toate operațiile din interior au
aceeași valoare.
timp de execuție O(1)
timpul de execuție pentru cel mai rău caz:
TA (n) = O(1) + O(n) + n - (n - 1) - O(1) = O(n )2
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 34 /76
4Alk
este abstract în ceea ce privește implementarea operațiilor din definiția sa. Prin urmare, sunt necesare astfel de
ipoteze și trebuie să fie o implementare a Alk cu timpii de execuție presupuși. Analiza timpilor se poate face numai în raport cu o
implementare.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 35 /76


Complexitatea (algoritmică) a problemelor de calcul

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 36 /76


Complexitatea (algoritmică) a problemelor de calcul

De ce?

O problemă poate fi rezolvată prin mai mulți algoritmi.

De fapt, dacă există un algoritm care să rezolve această problemă,


atunci există o infinitate. (De ce?)

Definiția din eficiența algoritmilor poate fi extinsă la probleme.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 37 /76


Complexitatea (algoritmică) a problemelor de calcul

Reamintim povestea proiectului


Garlic Project5

Cum?
5RFagin. Aplicarea teoriei (inclusiv a logicii cu valori reale) în practică. Workshop
FMTMVLCI.
[Link]
[Link]
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 38 /76
Complexitatea (algoritmică) a problemelor de calcul

Când știm UN algoritm care rezolvă problema

Luați în considerare:
o problemă P
n = size(x ), x ∈ P o instanță a lui P
un algoritm A care rezolvă P cu timpul de execuție în cel mai rău caz
O(f (n)) Ce putem spune despre complexitatea în timp a lui P?

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 39 /76


Complexitatea (algoritmică) a problemelor de calcul

Complexitatea O(f (n)) a unei probleme

Aceasta oferă o limită superioară pentru efortul de calcul necesar pentru a


rezolva o problemă.
Definiție
O problemă P are complexitatea în timp în cel mai rău caz O(f (n)) dacă
există un algoritm A care rezolvă P și TA (n) = O(f (n)).

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 40 /76


Complexitatea (algoritmică) a problemelor de calcul

Când vrem să știm ceva despre TOȚI algoritmii

Luați în considerare:
o problemă P
n = size(x ), x ∈ P o instanță a lui P
Ce fel de informații putem furniza despre toți algoritmii care rezolvă P

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 41 /76


Complexitatea (algoritmică) a problemelor de calcul

Complexitatea Ω(f (n)) a unei probleme

Acesta furnizează o limită inferioară pentru efortul de calcul necesar pentru


a rezolva o problemă.
Definiție
O problemă P are complexitatea în timp în cel mai rău caz Ω(f (n)) dacă
orice algoritm
A care rezolvă P are TA (n) = Ω(f (n)).

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 42 /76


Complexitatea (algoritmică) a problemelor de calcul

Un algoritm optim pentru o problemă

Luați în considerare:
o problemă P
n = size(x ), x ∈ P o instanță a lui P
Când un algoritm este optim pentru P?
Definiție
A este un algoritm optim (în ceea ce privește complexitatea în timp în cel
mai rău caz) pentru P dacă
A rezolvă P și
P are o complexitate de timp în cel mai rău caz Ω(TA (n)).

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 43 /76


Complexitatea sortării

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 44 /76


Complexitatea sortării

Problema de
sortare

Să luăm în considerare cazul particular al sortării array-urilor:


TRIMITE
@domeniu Presupunem că (U , ≤) este un ansamblu (univers)
total ordonat. @input n și matricea a = [v0 , . . . . , vn−1 ]
cu vi ∈ U. @output Un array a′ = [w0 , . . . . , wn−1 ] cu
proprietatea:
w0 ≤ - - - - - ≤ wn−1 și w = (w0 , . . . , wn−1 ) este o permutare
a
v = (v0 , . . . . , v ).n−1
Notație:
SORTED(w ): secvența w este sortată (ordonată în mod nedecrescător)
Perm(v, w ): w este o permutare a lui v

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 45 /76


Complexitatea sortării

BubbleSort: algoritmul

bubbleSort(out a) {
last = [Link]()-1;
askIth(out a, i)
while (last > 0)
{
{
if (a[i] > a[i+1])
oldLast =
{ temp = a[i];
last; i = 0;
a[i] = a[i+1];
while (i < oldLast)
a[i+1] = temp;
{
return i;
last = askIth(a, i);
}
i = i + 1;
returnează 0;
}
}
}
}

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 46 /76


Complexitatea sortării

Analiza algoritmului BubbleSort

Timp de execuție
mărimea instanței: n (= [Link]())
operații măsurate: comparații care implică elementele tabloului
cazul cel mai defavorabil: când elementele tabloului sunt în ordine
descrescătoare, numărul de comparații pentru acest caz este
(n - 1)n
(n - 1) + (n - 2) + - - - - + 1 = = O(n )2
2

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 47 /76


Complexitatea sortării

InsertSort: algoritmul

insertSort(out a, n) {
for (j = 1; j < n; j = j+1) {
i = j - 1;
temp = a[j];
while ((i >= 0) && (temp < a[i]))) {
a[i+1] = a[i];
i = i - 1;
}
if (i != j-1) a[i+1] = temp;
}
}

Notă. Este necesară evaluarea în scurtcircuit pentru expresiile booleene.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 48 /76


Complexitatea sortării

Analiza algoritmului InsertSort

Timp de execuție
mărimea instanței: n (= [Link]())
operații măsurate: comparații care implică elementele tabloului cel
mai rău caz: când secvența de intrare este descrescătoare
- căutarea lui i în a[0 ... j - 1] necesită j - 1 comparații
numărul de comparații pentru acest caz
(n - 1)n
este 1 + 2 + - - - - + (n - 1) = =
O(n )2
2

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 49 /76


Complexitatea sortării

HeapSort: algoritmul
insertInHeap(out a, n, ℓ) {
isHeap = false; j = ℓ;
while (2*j+1 <= n-1 && ! isHeap)
{ k = 2*j +1;
dacă ((k < n-1) && (a[k] < a[k+1])) k = k+1;
if (a[j] < a[k]) swap(a, j, k); else isHeap = true;
j = k;
}
}
Notă. Este necesară evaluarea în scurtcircuit pentru expresiile booleene.
heapSort(out a, n) {
for (l = (n-1)/2; l >= 0; l = l-1)
insertInHeap(a, n, l);
r = n-1;
while (r >= 1) {
swap(a, 0, r);
insertInHeap(a, r, 0);
r = r - 1;
}
}
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 50 /76
Complexitatea sortării

HeapSort: analiza

Timp de execuție
mărimea instanței: n (= [Link]())
operații măsurate: comparații care implică elementele tabloului cel
mai rău caz: greu de spus
– complexitatea timpului pentru insertInHeap: O(log k), unde k este
heap-ul
dimensiune
– construcția grămezii inițiale necesită
O(logn−12 ) + - - - - + O(log n) = O(n log n) (de fapt, este Θ(n), a
se vedea Cormen et al., 6.3)
– complexitatea timpului pentru o perioadă de timp:
O(log (n - 1)) + O(log(n - 2)) + - - - - + O(log 1) = O(n log n)
numărul total de comparații O(n log n)
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 51 /76
Complexitatea sortării

Alți algoritmi de sortare

Exerciții pentru seminar.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 52 /76


Complexitatea sortării

Două întrebări referitoare la algoritmii de sortare

Algoritmii de sortare studiați până acum se bazează pe două operații


primitive: compararea și schimbarea a două elemente de tablou. Deoarece
permutarea este precedată de o comparație, putem presupune că operațiile
primitive esențiale sunt compararea a două elemente de matrice.

Următoarele două întrebări referitoare la complexitatea computațională a


sortării sunt destul de naturale:
Care este numărul minim de comparații în cel mai rău caz?
Ce algoritmi de sortare necesită numărul minim de comparații?
Pentru a răspunde la aceste întrebări, trebuie să definim în mod formal
modelul de calcul al algoritmilor bazați pe comparații (un tip special de arbori de
decizie).
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 53 /76
Complexitatea sortării

Arbori de decizie pentru sortare: intuitiv

Ipoteză: ai ̸= aj dacă i ̸= j.
Notație: i ? j ≡ se compară a[i ] și a[j].
Un arbore de decizie pentru sortare include comparațiile efectuate de
algoritm:
un mod intern este etichetat cu i ? j, i , j ∈ {0, 1, . . . . , n -
1}; subarborele stâng al lui i ? j include comparațiile
pentru uni < aj ; subarborele drept al lui i ? j include
comparațiile pentru uni > aj ; nodurile externe (de
frontieră) sunt etichetate cu permutări

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 54 /76


Complexitatea sortării

Algoritmii reprezentați ca arbori de decizie

Definiție
Un arbore de decizie pentru n elemente este un arbore binar
astfel încât: noduri interne: i ? j, i , j ∈ {0, 1, . . . . , n -
1};
noduri externe (de frontieră): permutări ale setului {0, 1, . . . . , n - 1}.
Definiție

Un calcul al unui arbore de decizie t pentru intrarea a = (a0 , . . .


. , an−1 ): o cale de la rădăcină la frontieră cu proprietatea:
dacă ai < aj : copilul stâng al lui i ? j este nodul
curent; în caz contrar, copilul drept devine nodul
curent calculul (ar trebui) să se încheie la frontieră

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 55 /76


Complexitatea sortării

Arbori de decizie pentru sortare

Definiție
Un arbore de decizie t rezolvă problema de
sortare dacă pentru orice intrare de intrare
a = (a0 , . . . . , a ),n−1
calculul lui t pentru a se termină în π s.t. aπ(0) < - - - - < aπ(n-1).
Un arbore de decizie pentru sortare este un arbore de decizie
care rezolvă problema de sortare.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 56 /76


Complexitatea sortării

Un arbore de decizie care reprezintă InsertSort

0?1

< >

1?2 0?2

< > < >

0?2 1,0,2 1?2


0,1,2
< > < >

0,2,1 2,0,1 1,2,0 2,1,0

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 57 /76


Complexitatea sortării

Complexitatea în timp a sortării


Notații:
ADS (n) = setul de arbori de decizie pentru sortarea secvențelor de lungime
n.
Fr (t) = frontiera arborelui de decizie t
length(π, t) = lungimea în t a drumului de la rădăcină la π ∈ Fr (t).
Complexitatea în timp pentru cel mai rău caz:

T (n) = min max lungime(π, t)


t�ADS (n) π�Fr
(t)

Teorema

Problema de sortare are o complexitate de timp în cel mai rău caz Ω(n log
n) în modelul de calcul al arborilor de decizie pentru sortare.
Corolarul
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 58 /76
HeapSort este optim în modelul de calcul al arborilor de decizie pentru sortare.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 59 /76


Reducerea polinomială a
problemelor

Plan

1 Recapitulare
2 Eficiența algoritmului: funcții de
cost Valoare Dimensiune
Evaluarea costului în timp al operațiunii
Costul în timp al evaluării unei expresii și al unei etape de calcul Costul
în timp/spațiu al unui calcul

3 Complexitatea în cel mai rău caz


4 Complexitatea (algoritmică) a problemelor de calcul
5 Complexitatea sortării
6 Reducerea polinomială a problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 60 /76


Reducerea polinomială a
problemelor

Motivație

Mentalitate: "Dacă știu să rezolv o problemă Q, atunci pot folosi


acest algoritm pentru a rezolva P?".
Intuiție: O problemă P se reduce la Q dacă algoritmii pentru Q pot ajuta
la rezolvarea lui P.
Aplicație:
proiectarea algoritmului
dovada limitelor: dacă P este dificil, atunci și Q este dificil
clasificarea problemelor

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 61 /76


Reducerea polinomială a problemelor

Reducerea Turing/Cook

O problemă P se reduce polinomial la (o problemă rezolvabilă) Q, se scrie


P ∝ Q, dacă putem concepe un algoritm pentru P
1
după cum urmează: fie p o instanță a lui P;
2
preprocesează în timp polinomial intrarea p pentru a obține o instanță
(sau instanțe) a lui Q;
3
apelați un algoritm pentru Q, posibil de mai multe ori (dar de timp
polinomial);
4
postprocesează ieș irile date de Q în timp polinomial pentru a
obține răspunsul P(p).
Dacă timpul de procesare (pre+post) necesită timp O(g (n)), atunci scriem
P �g (n) Q.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 62 /76


Reducerea polinomială a problemelor

Exemplu: MAX ∝ SORT

FieSă fie MAX următoarea problemă:


@input Un set S total ordonat.
@output Cel mai mare element
din S . Următorul algoritm rezolvă
MAX:
1 reprezintă S cu un tablou s (preprocesare);
2 apelează un algoritm de sortare pentru s;
3 returnează ultimul element din s
(postprocesare); Așadar, avem MAX ∝ SORT!?
� nu înseamnă în mod necesar "reducerea unei probleme complexe la o
problemă complexă la o
mai ușor"!!!

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 63 /76


∝ este mai degrabă o "transformare"... .

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 64 /76


Reducerea polinomială a problemelor

Variante pentru problema sumei de subseturi

SSD1
@input Un set S de numere întregi, M un număr întreg pozitiv.
Σ mai mare număr întreg M s.t. M ≤ M și ∃ S ⊆ S cu
@output Cel ∗ ∗ ′

x �S ′ x = M .∗

SSD2
@instanță Un set S de numere întregi, M, K două numereîntregi pozitive cu K
≤ M.
@întrebare Există M◦ s.t. K ≤ M◦ ≤ M și un ◦
x �S′ x = M pentru

anumit set S ⊆ S ? a
SSD3
@instance Un set S de numere întregi, M un număr în tr e g pozitiv.
@întrebare Există un subset S′ ⊆ S cu x �S′ x = M?

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 65 /76


Reducerea polinomială a problemelor

Exemplu: SSD1 ∝ SSD2

SSD1
@input Un set S de numere întregi, M un număr întreg pozitiv.
Σ mai mare număr întreg M s.t. M ≤ M și ∃ S ⊆ S cu
@output Cel ∗ ∗ ′

x �S ′ x = M∗ .

SSD2
@instance Un set S de numere întregi, M, K două numere întregi pozitive cu K
≤ M.
Σ
@întrebare Există M◦ s.t. K ≤ M◦ ≤ M și x ◦
′ x = M pentru a
�S
un anumit set S′ ⊆ S ?
1 fără preprocesare;
2 găsiți M∗ în (0, M] apelând un algoritm care rezolvă SSD2 într-o
manieră de căutare binară.
Acesta este un exemplu în care o problemă de optimizare este redusă la o
problemă de decizie.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 66 /76
Reducerea polinomială a problemelor

Exemplu: SSD2 ∝ SSD1

SSD1
@input Un set S de numere întregi, M un număr întreg pozitiv.
Σ mai mare număr întreg M s.t. M ≤ M și ∃ S ⊆ S cu
@output Cel ∗ ∗ ′


x �S ′ x = M .

SSD2
@instance Un set S de numere întregi, M, K două numere întregi pozitive cu K
≤ M.
Σ
@întrebare Există M◦ s.t. K ≤ M◦ ≤ M și x ◦
′ x = M pentru a
′ �S
un anumit set S ⊆ S ?
1 fără preprocesare;
2 se calculează M∗ ≤ M apelând un algoritm care
3 rezolvă SSD1; dacă M∗ ≥ K, atunci se returnează
"YES", altfel se returnează "NO";
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 67 /76
Reducerea polinomială a problemelor

Exemplu: SSD3 ∝ SSD1

SSD1
@input Un set S de numere întregi, M un număr întreg pozitiv.
Σ mai mare număr întreg M s.t. M ≤ M și ∃ S ⊆ S cu
@output Cel ∗ ∗ ′


x �S ′ x = M .

SSD3
@instance Un set S de numere întregi, M un
număr întreg pozitiv.
Σ ′ x = M?
@întrebare Există un subset S′ ⊆ S cu
x
�S
1 fără preprocesare;
2 se calculează M∗ ≤ M apelând un algoritm care
3 rezolvă SSD1; dacă M∗ = M se returnează "YES",
altfel se returnează "NO".

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 68 /76


Reducerea polinomială a problemelor

Reducerea Karp

Fie P și Q probleme de decizie.


Problema P se reduce polinomial la (rezolvabila) Q, se scrie P ∝ Q,
dacă putem proiecta un algoritm care să rezolve P după cum urmează:
1
fie p o instanță a lui P;
2
preprocesează intrarea p în timp polinomial pentru a obține o
3
instanță q a lui Q; apelează (o singură dată) un algoritm care
rezolvă Q;
4
răspunsul pentru Q pentru q este același cu răspunsul pentru P
pentru p (fără postprocesare).
Dacă timpul de preprocesare este O(g (n)), atunci scriem P �g (n) Q.
Reducerea Karp este un caz particular al reducerii Turing/Cook.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 69 /76
Reducerea polinomială a problemelor

Exemplu: SSD3 ∝ SSD2

SSD2
@instance Un set S de numere întregi, M, K două numere întregi pozitive cu K
≤ M.
Σ
@întrebare Există M◦ s.t. K ≤ M◦ ≤ M și x ◦
′ x = M pentru a
′ �S
un anumit set S ⊆ S ?
SSD3
@instance Un set S de numere întregi, M un
număr întreg pozitiv.
Σ ′ x = M?
@întrebare Există un subset S′ ⊆ S cu
x
�S
1 fără preprocesare;
2
se numește un algoritm care rezolvă SSD2 pentru instanța S, M, M.

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 70 /76


Reducerea polinomială a problemelor

Exemplu: 3-SUMA ∝ 3-COLINIAR


3-SUM
@instance Un set S de n numere întregi.
@întrebare Există 3 numere în S s.t. suma lor este 0?
3-COLLINEAR
@instance Un set S de n puncte în plan.
@întrebare Există trei puncte în S care sunt coliniare? 3-
SUM ∝ 3-SUNT COLINIARE:
1
sconsiderăm o intrare S = {a0 ,3 a1 , . . . . 3, an−1 } din 3-SUM;3
2 se calculează t(S ) = {(a0 , a ), (a1 , a ), . . . . , (an−1 , a )}
0 1 n-1
3 returnează rezultatul dat de un algoritm care rezolvă 3-COLLINEAR
pentru
t(S ).

Lema
Dacă a, b, c sunt distincte, atunci a + b + c = 0 dacă (a, a3 ), (b, b3 ) și
(c, cD.3Lucanu
) sunt coliniare. Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023
(FII - UAIC) 71 /76
Reducerea polinomială a problemelor

Reducere: proprietăți

Teorema
a) Dacă P are complexitatea în timp Ω(f (n)) și P ∝g (n) Q (versiunea
Karp), atunci se obține
Q are o complexitate în timp Ω(f (n) - g (n)).

b) Dacă Q are complexitatea în timp O(f (n)) și P �g (n) Q


(versiunea Karp), atunci P are complexitatea în timp O(f (n) + g
(n)).

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 72 /76


Reducerea polinomială a
problemelor

Un studiu de
caz

Următoarea este cunoscută sub numele de problema coifului convex:


CH
@input Un set de puncte P în plan.
@output Cel mai mic poligon convex care conține toate punctele din P.

Deoarece SORT ∝n CH, rezultă că CH are o complexitate în timp Ω(n log


n).

D. Lucanu (FII - UAIC) Complexitatea algoritmilor și a calculelor de Probleme PA 2022/2023 73 /76

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