Documente Academic
Documente Profesional
Documente Cultură
Algoritmilor (PA)
Seminar III
Punctaj seminar
● Maxim 1 punct
● 0.4p - raspunsuri (intrebarile apar cu albastru; max 1 rasp/sem)
● 0.6p - probleme suplimentare:
○ 0.1p - dificultate usoara ( nu neaparat putin cod)
○ 0.2p - dificultate medie
○ 0.4p - dificultate mare
○ o singura persoana poate raspunde la o problema; daca aveti alta
metoda de a rezolva problema puteti raspunde (NU for => while)
○ problemele pot fi rezolvate de toate grupele (144, 151, 152)
○ problemele vor fi verificate antiplagiat (0; luat de internet;
translatat codul C++ -> Python; folosit cod pe care nu il intelegeti)
Structuri de date
Introducere
● Liste (list)
○ mutable (elementele se pot modifica)
○ conteaza ordinea
○ retineti un numar arbitrar de elemente (ex: cuvinte dintr-o carte)
● Tupluri (tuple)
○ imutable (elementele nu se pot modifica)
○ conteaza ordinea
○ retineti un numar fix de elemente
Structuri de date
Operatii comune
● xs = [] # lista vida
● xs.append(1) # adaugare element la final
● x = xs.pop() # stergere element de la final
● x = xs.pop(3) # stergere element de pe pozitia 3 (idx → 0)
● xs[1] = 3 # modificam valoarea de pe pozitia 1 in 3
Structuri de date
Tupluri - operatii
Exemple:
# f : R -> RxR
● a=1 # f(x) = (x + 2, x^2 + 1)
● b=2 def f(x)
● (a, b) = (b, a) return (x+2, x**2 + 1)
Structuri de date
Liste - folosite ca vectori/matrici din C
xs = [0 for x in range( n)] # declaram o lista care contine n zerouri
xs[ n - 1] = 5 # fara declaratia anterioara (xs=[], eroare)
xs = [] xs.append(tmp)
for y in range( m):
tmp = [] print(xs)
for x in range( n):
tmp.append(0)
Structuri de date
Liste - exemplu
Primiti o lista de numere naturale mai mici decat 100. Sortati lista.
Exemplu:
Input: xs = [1,5,2,1,1,3,4,1,2] Output: [1, 1, 1, 1, 2, 2, 3, 4, 5]
Rezolvare simpla:
xs.sort()
print(xs)
sau:
print(sorted(xs))
for x in xs:
frecventa[x] += 1
prop = “Ana are cinci mere si Maria ia doua mere cate mere are Ana”
cautate = [“are”, “mere”, “iar”]
# Cuvintele care apar de mai multe ori sunt afisate de mai multe ori
# Cum scapam de aceasta problema?
# Complexitate? ( presupunem ca avem n cuvinte in prop, m in cautate)
Structuri de date
Exercitiu: aparitie cuvinte liste
prop = “Ana are cinci mere si Maria ia doua mere cate mere are Ana”
cautate = [“are”, “mere”, “iar”]
prop = “Ana are cinci mere si Maria ia doua mere cate mere are Ana”
cautate = [“are”, “mere”, “iar”]
if cuvant in cautate:
print (“Cuvantul”, cautat, “apare in prop”)
cautate.remove(cautat)
prop = “Ana are cinci mere si Maria ia doua mere cate mere are Ana”
cautate = [“are”, “mere”, “iar”]
s = set()
for cuvant in prop.split():
for cautat in cautate:
if cautat == cuvant and not cautat in s:
print (“Cuvantul”, cautat, “apare in prop”)
s.add(cautat)
prop = “Ana are cinci mere si Maria ia doua mere cate mere are Ana”
cautate = [“are”, “mere”, “iar”]
s = set()
for cuvant in prop.split():
s.add(cuvant)
prop = “ana are cinci mere si maria ia doua mere cate mere are ana”
# Afisam rezultatul
for i in range(len(frecventa)):
print(‘Litera’, chr(ord(‘a’) + i), ‘apare de’, frecventa[i], ori)
Exercitiu:
Afisati frecventa literelor dintr-un str
prop = “Ana are cinci mere si Maria ia doua mere. Cate mere are Ana?”
for key in d:
print(“Caracterul”, key, “apare de”, d[key])
Exercitiu:
Afisati frecventa cuvintelor dintr-un str
s = “Ana are cinci mere si Maria ia doua mere. Cate mere are Ana?”
are - [1]
Primiti doua cuvinte formate din litere mici. Verificati daca sunt
anagrame. Exemplu: “emerit” si “treime” sunt anagrame, dar
“emerit” si “treimi” nu sunt.
Input: Output:
12 7 66
2 9 0 5 1 8 7 3 10 4 11 6 30
1 0 11 43
225 68
105
1 5 10
264
147
1 0 11
Square Root Decomposition
Simplificare
0 1 2 3 4 5 6 7 8 9 10 11
2 9 0 5 1 8 7 3 10 4 11 6
11 14 20 21
Operatii: Operatii:
1 0 11 -> cum mergem? 225 -> ce facem?
1 5 10 -> cum mergem?
Complexitati ( pe 1 si 2)?