of 20/20
Analiza Algoritmilor. Algoritmi Elementari CURS 3

Analiza Algoritmilor. Algoritmi Elementaricadredidactice.ub.ro/simonavarlan/files/2018/02/Curs-3-2018.pdf · Complexitatea Algoritmilor Căutarebinară(doar pentru șirordonat) Ideea:

  • View
    34

  • Download
    0

Embed Size (px)

Text of Analiza Algoritmilor. Algoritmi...

  • Analiza Algoritmilor.Algoritmi Elementari

    CURS 3

  • Complexitatea Algoritmilor

    1. Algoritmi de cutare

    2. Algoritmi de sortare

    3. Problem rezolvat de un algoritm

  • Complexitatea AlgoritmilorAlgoritmi de cutare

    Cutare secvenial

    Ideea:

    Verificm pe rnd elementele din ir pn cnd gsim elementul cutat poziia

    Exemplu:

    sir = 1, 7, 3, 5, 2

    x = 3

    Rezultat: 3

    sir = 1, 7, 3, 5, 2

    x = 4

    Rezultat: nu s-a gasit (-1)

  • Complexitatea AlgoritmilorCutare secvenial

    poz=-1;

    i=1;

    Ct timp (i

  • Complexitatea AlgoritmilorCutare binar (doar pentru ir ordonat)

    Ideea:

    Se determin n ce relaie se afl elementul aflat nmijlocul irului cu elementul ce se caut. n urma acesteiverificri cutarea se continu doar ntr-o jumtate airului. n acest mod, prin njumtiri succesive semicoreaz volumul irului rmas pentru cutare.

  • Complexitatea AlgoritmilorCutare binar (doar pentru ir ordonat)

    {v este ordonat crescator}

    {rezultatul e pozitia pe care apare x}

    mij, inf, sup, ind

    inf=1, sup=n

    ind=0

    execut

    mij=(inf+sup)/2

    dac vmij = x atunci ind=1

    altfel dac vmij < x atunci inf=mij+1

    altfel sup=mij-1

    pn cnd inf >= sup si ind!=0

    dac ind=1 return mij

    altfel return 0

    Complexitatea?

  • Complexitatea AlgoritmilorAlgoritmi de sortare

    Metoda bulelor

    Ideea:

    Compar dou cte dou elemente consecutive iar ncazul n care acestea nu se afl n relaia dorit, ele vor fiinterschimbate. Procesul de comparare se va ncheia nmomentul n care toate perechile de elementeconsecutive sunt n relaia de ordine dorit.

  • Complexitatea AlgoritmilorAlgoritmi de sortare

    Metoda bulelor

    execut

    ordonat=true;

    pentru i=2 , vndac vi-1 > vi atunci

    t=vi-1vi-1 =vivi =t

    ordonat=false;

    pn cnd ordonat;

    Complexitatea?

  • Complexitatea AlgoritmilorAlgoritmi de sortare

    Metoda inseriei

    Ideea:

    Traversm elementele, inserm elementul curentpe poziia corect n subirul care este dejaordonat. n acest fel elementele care au fost dejaprocesate sunt n ordinea corect. Dup ce amtraversat tot irul toate elementele vor fi sortate.

  • Complexitatea AlgoritmilorAlgoritmi de sortare

    Metoda inseriei

    Pentru i=2, vnind=i-1;

    x=vict timp ind>0 i x

  • Complexitatea AlgoritmilorAlgoritmi de sortare

    Metoda seleciei

    Ideea:

    Se determin poziia elementului cu valoare minim (respectivmaxim), dup care acesta se va interschimba cu primulelement.

    Acest procedeu se repet pentru subirul rmas, pn cndmai rmne doar elementul maxim.

  • Complexitatea AlgoritmilorAlgoritmi de sortare

    Metoda seleciei

    pentru i=1, vn-1ind=i;

    for j=i+1, vnif vj

  • Complexitatea AlgoritmilorAlgoritmi de sortare

    Metoda numrrii

    Ideea:

    Se da un sir de elemente distincte. Pentru fiecareelement numarm elementele care sunt mai mici,astfel aflm poziia elementului n irul ordonat.

  • Complexitatea AlgoritmilorAlgoritmi de sortare

    Metoda numrrii

    v1=v

    pentr i=1 , vn//numar cate elemente sunt mai mici decat vi

    k=0;

    x=vifor j=1 , vn

    dac vj < x atunci k=k+1;

    vk+1 = x

    Complexitatea?

  • Problem rezolvat de un algoritmAtunci cnd vorbim de rezolvarea unei probleme cu ajutorul unui algoritmvorbim de date de intrare input i de date de ieire output.

    Spunem c un algoritm A rezolv o problem P dac pentru orice date deintrare execuia lui A dintr-o configuraie iniial se termin ntr-oconfiguraie final ce are ca rezultat datele de ieire.

    O problem P este rezolvabil dac exist un algoritm A care rezolv P.

    O problem P este nerezolvabil dac NU exist un algoritm A care rezolvP.

    O problem de decizie este o problem P la care soluia este de tipul dasau nu true sau false.

    O problem decidabil este o problem de decizie rezolvabil.

    O problem nedecidabil este o problem de decizie nerezolvabil.

  • Problem rezolvat de un algoritmDe exemplu problema opririi (Halting Problem) este o problemnedecidabil:

    "Exist un algoritm Turing-echivalent A care primind ca parametru deintrare specificaia (e.g. codul surs) al unui program arbitrar s decidntr-un numr finit de pai dac programul a crui specificaie a primit-oca parametru se ncheie ntr-un numr finit de pai sau ruleaz la infinit?

    Rspunsul este nu, pentru orice specificaie de cod surs (orice limbaj),adic nu putem ti despre orice program dac el se va opri odat sau nu.

    Teorema a fost demonstrat de Alan Turing in 1936 prin faptul c putem daunei maini Turing H specificaiile unei maini H1 Turing despre care sspunem dac se oprete sau nu, ns maina H1 fiind tot o main Turingputem s o descriem pe ea nsi, adic H primete de fapt la intrarepropriile specificaii.

    Demonstraie bazat pe paradoxul mincinosului de la greci: Eu mint.

  • Problem rezolvat de un algoritmExist algoritmi determiniti pentru care plecnd de la un set de date anumerezultatul este unic ori decte ori este executat algoritmul (dat o main algoritmultrece prin aceeai succesiune de stri) (maina Turing).

    Exist i algoritmi nedeterminiti care, spre deosebire de cei determiniti accept iurmtoarele instruciuni:- succes i failure, cnd algoritmul se termin cu succes sau cu eec- choice(A), unde A este o mulime finit de valori, iar funcia ntoarce un element din

    A ales arbitrarExist operaii al cror rezultat nu este unic definit ci are valori ntr-o mulime finitde posibiliti.Etape n execuia unui algoritm nedeterminist:- choise genereaz o copie pentru fiecare element din mulimea A parteanedeterminist a algoritmului. Are complexitatea O(1)

    - testare fiecare copie generat este testat dac e o soluie corectUn algoritm nedeterminist se termin cu eec dac nu exist o modalitate de aefectua alegeri care s conduc la o instruciune de succes.

  • Problem rezolvat de un algoritmExemple de algoritmi nedeterminiti:

    Exemplul 1: - se verific dac elementul x apare sau nu n mulimea A

    Algoritmul determinist este de ordin O(n) iar cel nedeterminist este O(1)

    i -> choise() // generarea poziiei elementului cutat

    dac ai = x atunci //testarea elementului de cutat

    scrie i

    scrie success

    altfel failure

  • Problem rezolvat de un algoritmExemple de algoritmi nedeterminiti:

    Exemplul 2: ordonarea cresctoare a unui vector A

    Complexitatea n cazul cel mai nefavorabil este O(n2) iar pentru celnedeterminist este O(n).

    Se copie elementele vectorului A ntr-un vector auxiliar B dup care se verificdac elementele lui B sunt ordonate cresctor

    Pentru i -> 1 la n

    j -> choice() //generarea poziia elementului vectorului B

    dac bj = NULL atunci bj -> ai // testare dac elementul bj nu e ocupat

    altfel failure

    pentru i -> 1 la n-1

    dac bi > bi+1 atunci failure //testare dac vectorul nu e sortat

    scrie b ; succes //dac testul nu a dat fail atunci avem succes

  • Problem rezolvat de un algoritmExemple de algoritmi nedeterminiti:

    Exemplul 3: Problema celor N regine. Avem o tabl de ah n x n i o aezare a n piese de tipregin a.. Nicio regin nu atac o alt regin.

    Complexitatea este O(n2)

    Ataca (VectorSolutii, i, j)

    pentru k = 0 , (i-1)

    dac VectorSolutiik = j sau VectorSolutiik j = k i sau VectorSolutiik j = i - k

    return true

    return false

    Regine (n, VectorSolutii)

    pentru i = 0, n

    j = choise() //generare linia reginei de pe coloana i

    dac Ataca(VectorSolutii, i, j) failure //testare dac se atac

    VectorSolutiii = j

    succes //dac testul nu genereaz failure atunci avem succes