Cursul 2 Ppt

download Cursul 2 Ppt

of 40

Transcript of Cursul 2 Ppt

  • 7/24/2019 Cursul 2 Ppt

    1/40

    Algoritmi si structuri de date - Curs 2

    (2015)

    1

    CURS 2:Descrierea algoritmilor n pseudocod

    =Exemple=

  • 7/24/2019 Cursul 2 Ppt

    2/40

    Algoritmi si structuri de date - Curs 2(2015)

    2

    Structura

    Descrierea unor algoritmi simpli

    Specificarea i utilizarea subalgoritmilor

  • 7/24/2019 Cursul 2 Ppt

    3/40

    Algoritmi si structuri de date - Curs 2(2015)

    3

    Exemplu 1Considerm un tabel cu informaii despre studeni

    Nr. Nume Note Credite Stare Medie

    1 A 8 6 7 60

    2 B 10 10 10 60

    3 C - 7 5 40

    4 D 6 - - 20

    5 E 8 7 9 60

    Problema: sse completeze coloanele stare i mediefolosind regulilestare = 1 dacCredite=60 (obs:1 credit=30 ore de activitate)

    stare= 2 dacCredite este in [30,60)

    stare= 3 dacCredite

  • 7/24/2019 Cursul 2 Ppt

    4/40

    Algoritmi si structuri de date - Curs 2(2015)

    4

    Exemplu 1Dupcompletare tabelul va arta astfel:

    Nr. Nume Note Credite Stare Medie

    1 A 8 6 7 60 1 7

    2 B 10 10 10 60 1 10

    3 C - 7 5 40 2 -

    4 D 6 - - 20 3 -

    5 E 8 7 9 60 1 8

    stare = 1 dacCredite=60

    stare= 2 dacCredite este in [30,60)

    stare= 3 dacCredite

  • 7/24/2019 Cursul 2 Ppt

    5/40

    Algoritmi si structuri de date - Curs 2(2015)

    5

    Exemplu 1Ce fel de date vor fi prelucrate?

    Nr. Nume Note Credite Stare Medie

    1 A 8 6 7 60

    2 B 10 10 10 60

    3 C - 7 5 40

    4 D 6 - - 20

    5 E 8 7 9 60

    Date de intrare: Notesi Credite

    note[1..5,1..3] : tablou bidimensional (matrice) cu 5 linii i 3coloane

    Descriere n pseudocod: int note[1..5,1..3]

  • 7/24/2019 Cursul 2 Ppt

    6/40

    Algoritmi si structuri de date - Curs 2(2015)

    6

    Exemplu 1Ce fel de date vor fi prelucrate?

    Nr. Nume Note Credite Stare Medie

    1 A 8 6 7 60

    2 B 10 10 10 60

    3 C - 7 5 40

    4 D 6 - - 20

    5 E 8 7 9 60

    Date de intrare: Note i Credite

    credite[1..5] : tablou unidimensional cu 5 elemente

    Descriere in pseudocod: int credite[1..5]

  • 7/24/2019 Cursul 2 Ppt

    7/40

    Algoritmi si structuri de date - Curs 2(2015)

    7

    Exemplu 1Ce fel de date vor fi prelucrate?

    Nr. Nume Note Credite Stare Medie

    1 A 8 6 7 60

    2 B 10 10 10 60

    3 C - 7 5 40

    4 D 6 - - 20

    5 E 8 7 9 60

    Date de ieire: Stare si Mediestare[1..5], medie[1..5] : tablouri unidimensionale cu 5 elemente

    Descriere pseudocod: int stare[1..5]

    real medie[1..5]

  • 7/24/2019 Cursul 2 Ppt

    8/40

    Algoritmi si structuri de date - Curs 2(2015)

    8

    Exemplu 1Regula pt.determinarea strii

    asociate unui student

    stare = 1 dac credite=60

    stare= 2 daccredite in [30,60)

    stare= 3 daccredite =30 then stare = 2

    else stare = 3endif

    endif

    stare 1

    da

    credite>=30

    stare 2 stare 3

    nu

    nuda Descriere in Python

    if credite==60:stare=1

    elif credite>=30:stare=2

    else:

    stare=3

  • 7/24/2019 Cursul 2 Ppt

    9/40

    Exemplu 1Completarea strii pentru toi studenii

    Obs:Numrul studenilor este notat cu n (nexemplul analizat n=5)

    Pas 1: se pornete de la prima linie din tabel(i 1)

    Pas 2: se verificdacmai sunt linii deprelucrat (i

  • 7/24/2019 Cursul 2 Ppt

    10/40

    Algoritmi si structuri de date - Curs 2(2015)

    Exemplu 1Completarea strii pentru toi

    studenii Pseudocod:int credite[1..n], stare[1..n], i

    i =1

    while i=30 then stare[i]=2

    else stare[i] = 3

    endif

    endif

    i = i+1

    endwhile

    10

    calcul stare[i]

    i 1

    i

  • 7/24/2019 Cursul 2 Ppt

    11/40

    Algoritmi si structuri de date - Curs 2(2015)

    Exemplu 1Simplificarea descrierii algoritmuluiprin gruparea unor prelucrri in

    cadrul unui subalgoritm

    Pseudocod:

    int credite[1..n], stare[1..n], i

    i = 1

    while i=30 then stare = 2

    else stare = 3

    endif

    endifreturn stare

    Obs:un subalgoritm descrie un calculafectuat asupra unor date genericenumite parametri

    11

  • 7/24/2019 Cursul 2 Ppt

    12/40

    Algoritmi si structuri de date - Curs 2(2015)

    Utilizarea subalgoritmilorIdei de baz:

    Problema iniialse descompune n subprobleme

    Pentru fiecare subproblemse proiecteazun algoritm (numitsubalgoritm sau modul saufuncie sau procedur)

    Prelucrrile din cadrul subalgoritmului se aplicunor date generice(numite parametri) i eventual unor date ajuttoare (numitevariabilelocale)

    Prelucrrile specificate n cadrul subalgoritmului sunt executate nmomentul apeluluiacestuia (cnd parametrii generici sunt inlocuii cuvalori concrete)

    Efectul unui subalgoritm constn :

    Returnarea unuia sau a mai multor rezultate

    Modificarea valorilor unor parametri (sau a unor variabile globale)

    12

  • 7/24/2019 Cursul 2 Ppt

    13/40

    Utilizarea subalgoritmilorMecanismul de comunicare intre algoritm si subalgoritmi:

    - parametri i valori returnate

    Algoritm

    Variabile (globale)

    Calcule locale.Apel subalgoritm

    ..Calcule locale

    Variable locale

    Calcule asupra variabilelorlocale si parametrilor

    Returnarea rezultatelor

    Parametri:- intrare

    - iesire

    Subalgoritm

    Date intrare

    Date iesire

    Algoritmi si structuri de date - Curs 2(2015)

    13

  • 7/24/2019 Cursul 2 Ppt

    14/40

    Algoritmi si structuri de date - Curs 2(2015)

    Utilizarea subalgoritmilorMecanismul de comunicare intre algoritm si subalgoritmi:

    - parametri si valori returnate

    Algoritm

    int credite[1..n], stare[1..n], ii 1

    while i=30

    then stare 2

    else stare 3

    endifendif

    return stare

    Subalgoritm

    Date intrare

    Date iesire

    Param. intrare

    Var.

    locala

    Rezultat dereturnat

    14

  • 7/24/2019 Cursul 2 Ppt

    15/40

    Utilizarea subalgoritmilor Structura unui subalgoritm:

    ()

    < declaraii ale variabilelor locale >

    < prelucrri >

    RETURN

    Apelul unui subalgoritm:

    ()

    Algoritmi si structuri de date - Curs 2(2015)

    15

  • 7/24/2019 Cursul 2 Ppt

    16/40

    napoi la Exemplul 1

    Pseudocod:int credite[1..n], stare[1..n], i

    i = 1

    while i=30 then stare = 2

    else stare = 3

    endif

    endif

    return stare

    Algoritmi si structuri de date - Curs 2(2015)

    16

  • 7/24/2019 Cursul 2 Ppt

    17/40

    napoi la Exemplul 1

    Python:credite=[60,60,40,20,60]stare=[0]*5

    n=5

    i=0

    while i=30:stare=2

    else:

    stare=3

    return stare

    Obs: indentarea liniilor este foarteimportantn Python

    Algoritmi si structuri de date - Curs 2(2015)

    17

  • 7/24/2019 Cursul 2 Ppt

    18/40

    napoi la Exemplul 1

    Calcul medie: pentru studenii avndstarea=1

    trebuie calculat mediaaritmetic a notelor

    Notele studentului ise afl pe linia ia matricii note(se pot specifica prinnote[i,1..m])

    Nr. Nume Note Credite Stare Medie

    1 A 8 6 7 60 1

    2 B 10 10 10 60 1

    3 C - 7 5 40 2

    4 D 6 - - 20 3

    5 E 8 7 9 60 1

    18Algoritmi si structuri de date - Curs 2(2015)

  • 7/24/2019 Cursul 2 Ppt

    19/40

    napoi la Exemplul 1

    Calculul mediei

    int note[1..n,1..m], stare[1..n]

    real medie[1..n]

    for i = 1,n do

    if stare[i]==1

    medie[i] = calculMedie(note[i,1..m])

    endif

    endfor

    Funcie pt calcul medie

    calculMedie(int v[1..m])

    real suma

    int i

    suma = 0

    for i = 1,m do

    suma = suma+v[i]

    endfor

    suma = suma/mreturn suma

    19Algoritmi si structuri de date - Curs 2(2015)

    Linia i a matricii =tablou uni-dimensional

  • 7/24/2019 Cursul 2 Ppt

    20/40

    napoi la Exemplul 1

    Calculul mediei (exemplu Python)note=[[8,6,7],[10,10,10],[0,7,5],[6,0,0],[8,7,9]]stare=[1,1,2,3,1]

    medie=[0]*5

    for i in range(5):

    if stare[i]==1:medie[i]=calculMedie(note[i])

    print medie

    Obs: range(5) = [0,1,2,3,4]

    In Python indicii tablourilor ncep de la 0

    Functie pt. calculul mediei(Python)

    def calculMedie(note):

    m=len(note)

    suma=0

    for i in range(m):

    suma = suma+note[i]

    suma=suma/m

    return suma

    20Algoritmi si structuri de date - Curs 2(2015)

  • 7/24/2019 Cursul 2 Ppt

    21/40

    Pauz ... de ciocolat

    Am o tablet de ciocolat pe care doresc s o rup nbucele (n cazul unei tablete 4x6 sunt 24 astfelde bucele). Care este numrul de micri derupere necesare pentru a separa cele 24 debucele ? (la fiecare micare pot rupe o bucat

    n alte dou buci doar de-a lungul uneia dinliniile separatoare ale tabletei)

    21Algoritmi si structuri de date - Curs 2(2015)

  • 7/24/2019 Cursul 2 Ppt

    22/40

    Pauz ... de ciocolat

    Am o tablet de ciocolat pe care doresc s o rup nbucele (n cazul unei tablete 4x6 sunt 24 astfelde bucele). Care este numrul de micri derupere necesare pentru a separa cele 24 debucele ? (la fiecare micare pot rupe o bucat n

    alte dou buci doar de-a lungul uneia din liniileseparatoare ale tabletei)

    Rspuns: 23 (n cazul unei tablete de mxn numrulde micri este mxn-1)

    Cum putem demonstra ?

    22Algoritmi si structuri de date - Curs 2(2015)

  • 7/24/2019 Cursul 2 Ppt

    23/40

    Pauz ... de ciocolat

    Prin inducie matematic (pentru o tablet cu N=nxmbucele)

    Caz particular: bucata ntreag (1) nu necesit nici o

    rupere (0)Ipotez: Prespunem c pentru orice K

  • 7/24/2019 Cursul 2 Ppt

    24/40

    Algoritmi si structuri de date - Curs 2(2015)

    24

    Exemplu 2 cel mai mare divizorcomun

    Problema: Fie a i b dounumere reale. Sse determine cel maimare divizor al lui a i b: cmmdc(a,b)

    Metoda lui Euclid (varianta bazat pe mpriri):

    Se calculeazrestul r al mpririi lui a (demprit) la b(mpritor)

    Inlocuiete valoarea deimpritului (a)cu valoareampritorului (b),

    valoareampritorului(b)cu valoarea restului r icalculeazdin nou restulmpririi luia lab

    Procesul continupnse obine un rest egal cu 0

    Restul anterior (care este evident diferit de 0) va fi cmmdc(a,b).

  • 7/24/2019 Cursul 2 Ppt

    25/40

    Algoritmi si structuri de date - Curs 2(2015)

    25

    Exemplu 2 cel mai mare divizorcomun

    Cum funcioneazmetoda?

    1: a=bq1+r1, 0

  • 7/24/2019 Cursul 2 Ppt

    26/40

    Algoritmi si structuri de date - Curs 2(2015)

    26

    Exemplu 2 cel mai mare divizorcomun

    Cum funcioneazmetoda?

    1: a=bq1+r1, 0

  • 7/24/2019 Cursul 2 Ppt

    27/40

    Algoritmi si structuri de date - Curs 2(2015)

    27

    Exemplu 2 cel mai mare divizorcomun

    Algoritm

    (varianta WHILE ):

    cmmdc(int a,b)int d,i,rd = a

    i = br = d MOD iwhile r!=0 do

    d = ii = r

    r = d MOD iendwhilereturn i

    Algoritm :

    (varianta REPEAT )

    cmmdc(int a,b)

    int d,i,r

    d = a

    i = brepeat

    r = d MOD i

    d = i

    i = runtil r=0

    return d

    E l 2 d l i

  • 7/24/2019 Cursul 2 Ppt

    28/40

    Algoritmi si structuri de date - Curs 2(2015)

    28

    Exemplu 2 cmmdc al unei secvenede valori

    Problema: sse determine cmmdc al unei secvene de numere

    naturale nenule

    Exemplu:cmmdc(12,8,10)=cmmdc(cmmdc(12,8),10)=cmmdc(4,10)=2

    Date de intrare: secvena de valori (a1,a2,..., an) Date de ieire (rezultat): cmmdc (a1,a2,..., an)

    Idee:

    Se calculeazcmmdc al primelor douelemente, dupcare secalculeazcmmdc pentru rezultatul anterior i noua valoare

    e natural sse utilizeze un subalgoritm care calculeazcmmdc

  • 7/24/2019 Cursul 2 Ppt

    29/40

    Algoritmi si structuri de date - Curs 2(2015) 29

    Exemplu 2 cmmdc al unei secvenede valori

    Structura algoritmului:

    cmmdcSecventa(int a[1..n])

    int d,i

    d = cmmdc(a[1],a[2])

    for i = 3,n dod = cmmdc(d,a[i])

    endfor

    return d

    cmmdc (int a,b)

    int d,i,r

    d = a

    i = br = d MOD i

    while r0 do

    d = i

    i = rr = d MOD i

    endwhile

    return i

  • 7/24/2019 Cursul 2 Ppt

    30/40

    Algoritmi si structuri de date - Curs 2(2015) 30

    Exemplu 3: problema succesorului

    Se considerun numr constituit din 10 cifre distincte. Ssedetermine elementul urmtor din secvena cresctoare anumerelor naturale constituite din 10 cifre distincte.

    Exemplu:x= 6309487521

    Data de intrare: tablou unidimensional cu 10 elemente ce coninecifrele numrului: [6,3,0,9,4,8,7,5,2,1]

    Care este urmtorul numr (n ordine cresctoare) ce conine 10

    cifre distincte?

    Rspuns:

    6309512478

  • 7/24/2019 Cursul 2 Ppt

    31/40

    Algoritmi si structuri de date -Curs 2 (2015) 31

    Exemplu 3: problemasuccesorului

    Pas 1.Determincel mai mare indice i avnd proprietatea cx[i-1]

  • 7/24/2019 Cursul 2 Ppt

    32/40

    Algoritmi si structuri de date -Curs 2 (2015) 32

    Exemplu 3: problema succesoruluiSubprobleme / subalgoritmi:

    Identifica:Identificpoziia ia celui mai din dreapta element x[i],care este mai mare dect vecinul su stng (x[i-1])

    Input:x[1..n]

    Output:i

    Minim:determinindicele celui mai mic element din subtabloulx[i..n] care este mai mare decat x[i-1]Input:x[i-1..n]Output:k

    Inversare:inverseazordinea elementelor din x[i..n]Input:x[i..n]Output:x[i..n]

  • 7/24/2019 Cursul 2 Ppt

    33/40

    Algoritmi si structuri de date -Curs 2 (2015) 33

    Exemplu 3: problema succesorului

    Structura generala a algoritmului:

    Succesor(int x[1..n])int i, ki = Identifica(x[1..n])

    if i==1then write nu exista succesor !"else

    k = Minim(x[i-1..n])x[i-1]x[k]

    x[i..n] = Inversare(x[i..n])write x[1..n]

    endif

    Observaie: In generalinterschimbarea valorilor a douvariabile necesit 3 atribuiri iutilizarea unei variabile auxiliare(la fel cum schimbareaconinutului lichid a dou

    pahare necesit utilizarea unuialt pahar)

    a beste echivalent cu

    aux = aa = bb = aux

  • 7/24/2019 Cursul 2 Ppt

    34/40

    Algoritmi si structuri de date -Curs 2 (2015) 34

    Exemplu 3: problema succesorului

    Identifica(int x[1..n])int ii = nwhile (i>1) and (x[i]

  • 7/24/2019 Cursul 2 Ppt

    35/40

    Algoritmi si structuri de date -Curs 2 (2015) 35

    Exemplu 3: problema succesorului

    inversare(int x[left..right])int i,ji = leftj = right

    while i

  • 7/24/2019 Cursul 2 Ppt

    36/40

    Algoritmi si structuri de date -Curs 2 (2015) 36

    Exemplu 3: implementare Pythondef identifica(x):

    n=len(x)

    i=n-1

    while(i>0)and(x[i-1]>x[i]):

    i=i-1

    return i

    defminim(x,i):

    n=len(x)

    k=i

    forj inrange(i+1,n):

    if(x[j]x[i-1]):

    k=j

    returnk

    def inversare(x,left,right):

    i=left

    j=right

    while i

  • 7/24/2019 Cursul 2 Ppt

    37/40

    Algoritmi si structuri de date -Curs 2 (2015) 37

    Exemplu 3: implementare Python

    # apelul functiilor definite anteriorx=[6,3,0,9,4,8,7,5,2,1]print "secventa cifrelor din numarul initial:",x

    i=identifica(x)

    print "i=",i

    k=minim(x,i)

    print "k=",k

    x[i-1],x[k]=x[k],x[i-1]

    print "secventa dupa interschimbare:",xx=inversare(x,i,len(x)-1)

    print "secventa dupa inversare:",x

  • 7/24/2019 Cursul 2 Ppt

    38/40

    Algoritmi si structuri de date -Curs 2 (2015) 38

    Sumar

    Problemele se descompun in subprobleme crora li se asociazsubalgoritmi

    Un subalgoritmeste caracterizat prin:

    Nume

    Parametri

    Valori returnate

    Variabile locale

    Prelucrri

    Apelul unui subalgoritm:

    Parametrii sunt nlocuii cu valori concrete Prelucrrile din algoritm sunt executate

  • 7/24/2019 Cursul 2 Ppt

    39/40

    Algoritmi si structuri de date -Curs 2 (2015) 39

    Cursul urmtor

    Cum se poate verifica corectitudinea algoritmilor

    Introducere in verificarea formala corectitudinii algoritmilor

  • 7/24/2019 Cursul 2 Ppt

    40/40

    40

    Intrebare de final

    x = 7

    y = 5

    while y>0 do

    x = x+1y = y-1

    endwhile

    Ce valoare va avea variabila xdup execuia algoritmului demai sus ?

    Variante de rspuns:

    a) 8

    b) 6

    c) 12d) 11

    e) 5