[2] compl-alg

36
Complexitatea algoritmilor Dorel Lucanu Faculty of Computer Science Alexandru Ioan Cuza University, Ia¸ si, Romania [email protected] PA 2014/2015 D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 1 / 36

Upload: eirdnocotim

Post on 24-Sep-2015

251 views

Category:

Documents


0 download

DESCRIPTION

[2] compl-alg

TRANSCRIPT

  • Complexitatea algoritmilor

    Dorel Lucanu

    Faculty of Computer ScienceAlexandru Ioan Cuza University, Iasi, Romania

    [email protected]

    PA 2014/2015

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 1 / 36

  • Anunt

    Seminar grupa speciala: marti, ora 18, C308.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 2 / 36

  • Outline

    1 Problema rezolvata de un algoritm

    2 Complexitatea unui algoritm

    3 Complexitatea n cazul cel mai nefavorabil

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 3 / 36

  • Problema rezolvata de un algoritm

    Plan

    1 Problema rezolvata de un algoritm

    2 Complexitatea unui algoritm

    3 Complexitatea n cazul cel mai nefavorabil

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 4 / 36

  • Problema rezolvata de un algoritm

    Problema

    O problema propusa pentru a fi rezolvata de un algoritm poate fireprezentata prin:

    domeniul problemei - descrie conceptele ce apar n descriereaproblemei si relatiile dintre acestea

    o pereche (input, output), unde input descrie date de intrare (oinstanta) iar output descrie datele de iesire (raspunsul).

    Daca domeniul este subnteles sau cunoscut atunci se poate renunta ladescrierea lui.

    Notatie: prin p P notam faptul ca p este instanta (componenta input) aproblemei P si prin P(p) rezultatul (componenta ouput).

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 5 / 36

  • Problema rezolvata de un algoritm

    Exemplu: problema Platou 1/2

    Domeniul problemei : Fiind data o secventa a = (a0, . . . , an1) de numerentregi, un segment a[i ..j ] al seceventei a este secventa (ai , . . . , aj), undei j . Daca i > j putem presupune ca segmentul a[i ..j ] este secventa vida.Lungimea unui segnent a[i ..j ] este j + 1 i . Un platou este un segment cutoate elementele egale.

    Input: O secventa a = (a0, . . . , an1) de numere ntregi de lungime nordonata crescator.

    Output: Lungimea celui mai lung platou.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 6 / 36

  • Problema rezolvata de un algoritm

    Exemplu: problema Platou 2/2

    De multe ori perechea (input, output) poate fi reprezentata, cu ajutorulpredicatelor:

    platou(a, i , j) are loc daca si numai daca a[i ..j ] este platou:(k)i k j = a[i ] = a[k]; daca tabloul este ordonat, atunciplatou(a, i , j) este echivalent cu a[i ] == a[j ];

    ordonatCrescator(a) are loc daca si numai daca a[0] . . . a[n 1];Input: a = (a0, . . . , an1) astfel ncat ordonatCrescator(a).

    Output: q astfel ncat(0 i j < n)platou(a, i , j) q = j + 1 i (0 k ` < n)platou(a, k , `) = q (`+ 1 k).

    Formalizate cu formule din logica de ordinul I, componenta input se mainumeste preconditie, componenta output se numeste postconditie iarperechea (preconditie, postconditie) se numeste specificatie.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 7 / 36

  • Problema rezolvata de un algoritm

    Problema rezolvata de un algoritm

    Spunem ca un algoritm A rezolva o problema P daca:

    pentru orice instanta p a lui P, exista o configuratie A, p astfelncat p include structuri date ce descrie p;

    executia care pleaca din configuratia initiala A, p se termina ntr-oconfiguratie finala , , scriem A, ., ; si include structuri de date ce descriu P(p).

    Observatie.Definitia de mai sus presupune ca A este determinist, astfel ca exista ounica executie care pleaca din p. Instructiunile Alk studiate pana acumsunt deterministe. Vom discuta mai tarziu de programe nedeterministe.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 8 / 36

  • Problema rezolvata de un algoritm

    Problema rezolvata de un algoritm, mai formal

    Presupunem ca asertiune sunt descrise cu variabilele care par nalgoritm.

    Notam cu |= faptul ca valorile variabilelor n satisfac .Exemplu: daca = x 7 3 y 7 5, atunci |= 2 x > y si 6|= x + y < 0.

    A rezolva P, specificata de (pre, post) daca pentru orice stare , daca |= pre atunci exista astfel ncat A, ., si |= post.Perechea (pre, post) reprezinta specificatia (preconditie,postconditie).instanta p P:

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 9 / 36

  • Problema rezolvata de un algoritm

    Rezolvare versus Corectitudine

    Daca un algoritm A rezolva o problema specificata prin(preconditie,postconditie), se mai spune ca algoritmul A este corect(relativ la specificatia (preconditie,postconditie)).

    Cele doua notiuni nu sunt chiar echivalente.

    Exista doua tipuri de corectitudine:

    corectitudine totala: pentru orice stare , daca |= pre atunci exista astfel ncat A, ., si |= post.corectitudine partiala: pentru orice stare , daca |= pre si daca exista astfel ncat A, ., , atunci |= post.La corectitudinea totala trebuie dovedita si terminarea executiei, la ceapartiala se cere ca starea finala sa satisfaca postconditia numai n cazurilecand executia care pleaca din se termina.

    Rezolvarea este echivalenta cu corectitudinea totala.D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 10 / 36

    TeaHighlight

    TeaHighlight

  • Problema rezolvata de un algoritm

    Algoritmul PlatouAlg

    Presupunem ca secventa a este reprezentata de tabloula 7 {0 7 a0 . . . n 1 7 an1}. Un algoritm propus pentru a rezolvaproblema Platou este:

    lg = 1;

    i = 1;

    while (i < n) {

    if (a[i] == a[i - lg]) lg = lg+1;

    i = i + 1;

    }

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 11 / 36

  • Problema rezolvata de un algoritm

    Relatia dintre PlatouAlg si specificarea problemei Platou

    Ca sa aratam ca PlatouAlg rezolva Platou, va trebui sa aratam ca oriceexecutie care pleaca din configuratia initiala:

    PlatouAlg , n 7 n a 7 {0 7 a0, . . . n 1 7 an1}cu a0 an1 n 1 (i.e., satisface preconditia)se opreste n configuratia finala:

    , n 7 n a 7 {0 7 a0 . . . n 1 7 an1} i 7 n lg 7 qsi ` reprezinta lungimea celui mai lung platou din a:

    (0 i j < n)platou(a, i , j) q = j + 1 i (0 k ` < n)platou(a, k , `) = q (`+ 1 k)

    (i.e., satisface postconditia)

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 12 / 36

  • Problema rezolvata de un algoritm

    Cum demonstram corectitudinea?

    Com dovedim ca algoritmul PlatouAlg rezolva ntr-adevar problemaPlatou?

    O posibila solutie:

    - se arata ca la nceputul si la sfarsitul buclei while are loc proprietatea lgreprezinta lungimea celui mai lung platou din segmentul a[0..i 1](0 i0 j0 < i)platou(a, i0, j0) lg = j0 + 1 i0 (0 k ` < i)platou(a, k , `) = lg (`+ 1 k)- aceasta prorietate se numeste invariant de bucla

    - la sfarsitul buclei while are loc invariantul si negatia conditiei (i n);daca aratam ca si i n este invariant, atunci la sfarsitul buclei while vomavea i = n si invariantul devine exact postconditia.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 13 / 36

    TeaHighlight

    TeaHighlight

    TeaHighlight

  • Problema rezolvata de un algoritm

    Cum demonstram invariantul?

    Distingem doua cazuri:

    1. j0 = i 1 (cel mai lung platou din a[0..i 1] se termina n i 1).Distingem doua cazuri:

    1.1 are loc platou(a, i0, i), platoul a[i0..j0] se mareste cu o unitate si a[i0..i ]devine cel mai lung platou din a[0..i ] (de ce?); de aceea lg esteincrementat;

    1.2 nu are loc platou(a, i0, i), adica a[i 1] < a[i ]; cel mai lung platou dina[0..i 1] va fi si cel mai lung platou din a[0..i ]; de aceea lg nu semodifica;

    2. cel mai lung platou din a[0..i 1] NU se termina n i 1. Rezulta calungimea platoului care se termina n i 1 este < lg, de unde lungimeaplatoului care se termina n i este lg; de aceea lg nu se modifica.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 14 / 36

  • Problema rezolvata de un algoritm

    Alt exemplu: problema celebritatii

    Descriere neformala:

    Se considera o colectivitate formata din n persoane. O celebritate este opersoana care este cunoscuta de oricare alta persoana si nu cunoaste penimeni. Problema consta n a scrie un program care sa determine dacaexista o celebritate n cadrul colectivitatii prin ntrebari de forma:Persoana i cunoaste persoana j?. Programul va pune unu mar cat maimic de ntrebari (e posibil cel mult 3 n ntrebari).Se remarca cerinta de performanta.

    Exercitiu.Sa se formalizeze problema ca o pereche (preconditie,postconditie), sa sescrie un algoritm care rezolva problema, sa se demonstreze ca algoritmulrezolva corect problema.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 15 / 36

  • Problema rezolvata de un algoritm

    Problema rezolvabila

    O problema P este rezolvabila daca exista un algoritm A care rezolva P.

    O problema P este nerezolvabila daca NU exista un algoritm A carerezolva P.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 16 / 36

  • Problema rezolvata de un algoritm

    Problema de decizie

    O problema de decizie este o problema P la care raspunsul este de formaDA sau NU (echivalent, true sau false). Mai precis, pentru oriceinstanta p P, P(p) {DA, NU} (P(p) {true, false}).

    O problema de decizie este reprezentata n general printr-o pereche(instance, question) (sau (instanta, ntrebare)).

    O problema decidabila este o problema de decizie rezolvabila.

    O problema nedecidabila este o problema de decizie nerezolvabila.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 17 / 36

  • Problema rezolvata de un algoritm

    Sunt toate problemele rezolvabile (decidabile)?

    La nceputul secolului 20, matematicienii credeau ca da.

    In 1931, Kurt Godel a socat dovedind ca aceasta este imposibil. El ademonstrat ca daca avem un sistem destul de puternic si cu o comportarebine-definita ce include rationamentul matematic, atunci vor existaafirmatii care nu pot fi demonstrate ca fiind adevarate cu acest sistem,chiar daca n realitate ele sunt adevarate. (celebra teorema deincompletitudine alui Godel).

    Cativa ani mai tarziu, Alan Turing a demonstrat acelsi lucru utilizandnotiunea de algoritm (masina Turing).

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 18 / 36

  • Problema rezolvata de un algoritm

    Program universal

    Pornind de la ideea de masina Turing universala, putem defini notiunea deprogram (algoritm) universal: acesta are la intrare un program (algoritm)A si o intrare x (echivalent cu avand la intare configuratia A, x),simuleaza activitatea lui A pentru intrarea x (plecand din configuratiaA, x).Programele (algoritmii) pot fi intrari pentru alti algoritmi!

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 19 / 36

  • Problema rezolvata de un algoritm

    Exemplu de problema nerezolvabila/nedecidabila

    Problema opririi:Instance: O configuratie A, 0, unde A este un algoritm.Question: Executia care pleaca din configuratia initiala A, 0 este finita?

    Teorema

    Nu exista un algoritm care sa rezolve Problema opririi.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 20 / 36

  • Problema rezolvata de un algoritm

    Ideea de demonstrare 1/2

    Prin reducere la absurd. Presupunem ca exista un algoritm H care rezolva

    problema opririi. Un apel al algoritmului H pentru intrarea A, x este notatprin H(A, x).

    Construin un alt aloritm, care apeleaza H:

    NewH(A) {

    if H(A, A) return true;

    else return false;

    }

    si un alt program care apeleaza NewH:

    HaltsOnSelf (A) {

    if NewH(A) while (true) { }

    else return false;

    }

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 21 / 36

  • Problema rezolvata de un algoritm

    Ideea de demonstrare 2/2

    Ce se ntampla cand se apeleaza HaltsOnSelf(HaltsOnSelf)?

    Executia lui HaltsOnSelf(HaltsOnSelf) nu se termina; rezulta caNewH(HaltsOnSelf) ntoarce true, care implicaH(HaltsOnSelf,HaltsOnSelf) ntoarce true. Contradictie.

    Executia lui HaltsOnSelf(HaltsOnSelf) se termina si ntoarce true;rezulta ca NewH(HaltsOnSelf) ntoarce false, care implicaH(HaltsOnSelf,HaltsOnSelf) ntoarce false. Contradictie din nou.

    Rezolvarea teoremei de mai sus este strans legata de urmatorul paradoxlogic. Exista un oras cu un barbier care barbiereste pe oricine ce nu sebarbiereste singur. Cine barbiereste pe barbier?

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 22 / 36

  • Problema rezolvata de un algoritm

    Alte exemple de problme nedecidabile

    Problema echivalentei programelor.

    Totality: daca un program dat se opreste pentru toate intrarile.

    Problema corectitudinii totale.. . .

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 23 / 36

  • Problema rezolvata de un algoritm

    Partial rezolvabil (calculabil, decidabil)

    O problema de decizie este partial calculabila (semidecidabila) daca existaun algoritm care se opreste cu raspunsul DA pentru toate intrarilepentru care raspunsul correct este DA.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 24 / 36

  • Complexitatea unui algoritm

    Plan

    1 Problema rezolvata de un algoritm

    2 Complexitatea unui algoritm

    3 Complexitatea n cazul cel mai nefavorabil

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 25 / 36

  • Complexitatea unui algoritm

    Timpul unei executii

    Fie E = A0, 0 An, n o executie. Timpul consumat deaceasta executie este suma timpilor pasilor de executie:

    time(E ) =n1

    i=0 time(Ai , i Ai+1, i+1)Reamintim ca timpul de executie al unui pas time(Ai , i Ai+1, i+1)a fost precizat cand s-au descris evaluarile expresiilor si semanticainstructiunilor. Reamintim ca exista doua versiuni pentru time, uniform silogaritmic, ceea ce implica doua versiuni pentru time(E ).

    Demo cu versiunea de Alk care calculeaza si timpii uniform si logaritmic.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 26 / 36

  • Complexitatea unui algoritm

    Timpul necesar executiei unei instante

    Un algoritm determinist este un algoritm A cu proprietatea ca pentru oriceconfiguratie Ai , i accesibila dintr-o configuratie initiala A0, 0 (i.e.,A0, 0 Ai , i ) exista cel mult of configuratie succesoare, i.e., celmult un A, cu proprietatea Ai , i A, .Fie P o problema, p o instanta a lui P si A un algoritm determinist carerezolva P. Executia A, p este unica (deoarece A este determinist)si finita (deoarece A rezolva P); notam aceasta executie cu Ep.

    Timpul necesar algoritmului A pentru a rezolva instanta p estetime(A, p) = time(Ep)

    Mai sus avem doua defininitii: una pentru cazul costului uniform si unapentru cazul costului logaritmic.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 27 / 36

    TeaHighlight

    TeaHighlight

  • Complexitatea n cazul cel mai nefavorabil

    Plan

    1 Problema rezolvata de un algoritm

    2 Complexitatea unui algoritm

    3 Complexitatea n cazul cel mai nefavorabil

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 28 / 36

  • Complexitatea n cazul cel mai nefavorabil

    Dimensiunea unei configuratii

    Dimensiunea unei configuratii este data de dimensiunea memoriei (facemabstractie de componenta program de executat):

    size(A, ) = size()Dimensiunea unei memorii este suma lungimilor reprezentarilor valorilorvariabilelor variabilelor:

    size() =

    x7v size(v)

    Dimensiunea valorilor:

    scalarintregi: size(x) = [log2 x ] + 1 (logaritmic), size(x) = 1 (uniform)booleni: size(b) = 1siruri: size(s) = numarul de caractere din sirul s

    tablouri: size(A) =

    i 7aiA size(ai )liste cons: size(()) = 0, size(V , (L)) = size(V ) + size(L)

    structuri: size(S) =

    f7vS size(v)D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 29 / 36

    TeaHighlight

  • Complexitatea n cazul cel mai nefavorabil

    Dimensiunea unei instante a unei probleme

    Fie P o problema, p o instanta a lui P si A un algoritm care rezolva P.

    Dimensiunea lui p este dimensiunea reprezentarii sale n configuratiainitiala:

    size(p) = size(A, p)(= size(p))Pe tabla: calculul dimensiunii a unei instante a problemei Tablou.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 30 / 36

  • Complexitatea n cazul cel mai nefavorabil

    Complexitatea timp n cazul cel mai nefavorabil

    Fie P o problema si A un algoritm determinist care rezolva P.

    Grupam instantele p ale problemei P n clase de echivalenta: p si p suntn aceeasi clasa daca size(p) = size(p).

    Complexitatea timp n cazul cel mai nefavorabil este timpul dat deexecutia cu timpul cel mai mare peste configuratiile initiale date deinstantele din aceeasi clasa de echivalenta:

    TA(n) = max{time(A, p) | p P, size(p) = n}Numarul ntreg pozitiv n poate fi privit ca fiind clasa de ecivalenta ainstantelor de marime n.

    De fapt mai sus avem doua defininitii: una pentru cazul costului uniform siuna pentru cazul costului logaritmic.

    In practica vom considera doar cazul costului uniform.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 31 / 36

  • Complexitatea n cazul cel mai nefavorabil

    Complexitatea spatiu

    Fie E = A0, 0 An, n o executie.Spatiul consumat de aceasta executie este dat de maximul dintredimensiunile configuratiilor din E :

    space(E ) = maxni=0 size(Ai , i )}Spatiul necesar algoritmului A pentru a rezolva instanta p este

    space(A, p) = space(Ep)

    Complexitatea spatiu n cazul cel mai nefavorabil este calculata ntr-unmod similar complexitatii timp pentru cazul cel mai nefavorabil:

    SA(n) = max{space(A, p) | size(p) = n}

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 32 / 36

  • Complexitatea n cazul cel mai nefavorabil

    Exemplul 1

    input: n, (a0, . . . , an1), z numere ntregi.

    output: poz =

    {min{i | ai = z} daca {i | ai = z} 6= ,1 altfel.

    i = 0;

    while (a[i] != z) and (i < n-1)

    i = i+1;

    if (a[i] == z) poz = i;

    else poz = -1;

    Discutia pe tabla.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 33 / 36

  • Complexitatea n cazul cel mai nefavorabil

    Exemplul 2

    input: n, (a0, . . . , an1) numere ntregi.output: max = max{ai | 0 i n 1}.

    max = a[0];

    for (i = 1; i < n; i++)

    if (a[i] > max)

    max = a[i];

    Discutia pe tabla.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 34 / 36

    TeaHighlight

  • Complexitatea n cazul cel mai nefavorabil

    Exemplul 3

    input: n, (a0, . . . , an1) numere ntregi.output: (ai0 , . . . , ain1 ) unde (i0, . . . , in1) este o permutare

    a sirului (0, . . . , n 1) si aij aij+1 ,j {0, . . . , n 2}.

    for (k = 1; k < n; k++) {

    temp = a[k];

    i = k - 1;

    while (i >= 0 and a[i] > temp) {

    a[i+1] = a[i];

    i = i-1;

    }

    a[i+1] = temp;

    }

    Discutia pe tabla.

    D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 35 / 36

    TeaHighlight

    TeaHighlight

  • Complexitatea n cazul cel mai nefavorabil

    Exemplul 4

    input: n, (a0, . . . , an1), z numere ntregi;secventa (a0, . . . , an1) este sortata crescator,

    output: poz =

    {k {i | ai = z} daca {i | ai = z} 6= ,1 altfel.

    istg = 0;

    idr = n - 1;

    while (istg z)

    idr = imed-1;

    else

    istg = imed + 1;

    }

    return -1

    Discutia pe tabla.D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2014/2015 36 / 36

    TeaHighlight

    Problema rezolvata de un algoritmComplexitatea unui algoritmComplexitatea n cazul cel mai nefavorabil