Documente Academic
Documente Profesional
Documente Cultură
1 Constrangeri si grafuri
Programare liniara
Constrangeri sub forma unui graf
3 Arbori si paduri
Definitii
Arbori de acoperire
Algoritmul lui Kruskal
algoritmul lui Prim
Prufer
codare Huffman
2 / 60
Constrangeri si grafuri Programare liniara
Programare liniară
Problema generală
fie o matrice A de dimensiune m x n, un vector b de dimensiune m și un
vector c de dimensiune n. Trebuie găsit un vector x de n elemente care
maximizează funcţia obiectiv
n
X
ci xi
i=1
Ax ≤ b.
Sistem de constrângeri
xj − xi ≤ bk ,
unde 1 ≤ i, j ≤ n, i 6= j și 1 ≤ k ≤ m.
4 / 60
Constrangeri si grafuri Programare liniara
Exemplu
1 −1 0 0 0 0
1 0 0 0 −1 −0
x
0 1 0 0 −1 1 1
x2
−1 0 1 0 0 5
−1 0
x3 ≤
0 1 0
4
x4
0
0 −1 1 0 −1
x5
0 0 −1 0 1 −3
0 0 0 −1 1 −3
5 / 60
Constrangeri si grafuri Programare liniara
Exemplu (II)
x 0 = (0, 2, 5, 4, 1)
6 / 60
Constrangeri si grafuri Programare liniara
Lema 4.1
fie x = (x1 , x2 , ..., xn ) o soluţie pentru Ax ≤ b și d o constantă. Atunci și
x + d = (x1 + d, x2 + d, ..., xn + d) este o soluţie pentru sistemul de
constrângeri Ax ≤ b și d.
Demonstraţie.
pentru fiecare xi și xj avem (xj + d) − (xi + d) = xj − xi . Dacă x satisface
Ax ≤ b atunci și x + d este o soluţie.
7 / 60
Constrangeri si grafuri Constrangeri sub forma unui graf
Grafuri de constrângeri
8 / 60
Constrangeri si grafuri Constrangeri sub forma unui graf
Grafuri de constrângeri
Definiţie
fie un sistem Ax ≤ b de constrângeri, graful corespunzător acestui sistem
este un graf ponderat și orientat G = (V , E ) unde V = {v0 , v1 , ..., vn } și
10 / 60
Constrangeri si grafuri Constrangeri sub forma unui graf
Teorema 4.1
fie un sistem Ax ≤ b de constrângeri și G = (V , E ) graful constrângerilor.
Dacă G nu conţine circuite de pondere negativă, atunci
11 / 60
Constrangeri si grafuri Constrangeri sub forma unui graf
Exemplu
v4 -1 −1 0 v3
0
12 / 60
Drum de lungime minima intre toate perechile de varfuri
13 / 60
Arbori si paduri
Arbori și păduri
14 / 60
Arbori si paduri
Arbori şi păduri
un arbore
15 / 60
Arbori si paduri
o pădure
16 / 60
Arbori si paduri
Arbori şi păduri
17 / 60
Arbori si paduri Definitii
Definiţii
Un arbore este un graf simplu care nu are cicluri.
O pădure este un graf G = (V , E ) simplu în care fiecare componentă este
un arbore.
18 / 60
Arbori si paduri Definitii
Definiţie
un vârf u al unui graf simplu G = (V , E ) se numește frunză dacă
dG (u) = 1. Un vârf care nu este frunză se numește vârf intern.
19 / 60
Arbori si paduri Definitii
Demonstraţie.
fie T un arbore cu n ≥ 2, fie p lanţul de lungime maximă din T și u,
v vârfurile lui p
se arată că u și v sunt frunze, d(u) = d(v ) = 1, este suficient să se
demonstreze pentru un singur vârf
dacă d(u) ≥ 2 ⇒ ∃ e ∈ E , e 6∈ p, având vârfurile u, w ∈ V
avem două cazuri:
1 w 6∈ p ⇒ lanţul compus p 0 = (w , e, u)p este un lanţ din T având
lungimea lanţului p plus 1 −→ contradicţie (p lanţul de lungime
maximă)
2 w ∈ p, dacă p 00 este lanţul de la u la v atunci avem un ciclu
c = (w , e, u)p 00 de lungime cel puţin 3 în T −→ T nu este arbore
⇒ d(u) = 1
20 / 60
Arbori si paduri Definitii
21 / 60
Arbori si paduri Definitii
Teorema Erdős-Szekeres
dacă (x1 , x2 , ..., xhk+1 ) este o secvenţă de numere reale distincte, atunci
există o subsecvenţă crescătoare de h + 1 elemente sau o subsecvenţă
descrescătoare de k + 1 elemente.
Corolar
fiecare secvenţă de numere reale distincte de lungime n conţine o
√
subsecvenţă de lungime d ne strict crescătoare sau strict descrescătoare.
22 / 60
Arbori si paduri Definitii
min(G (u))
u∈V
23 / 60
Arbori si paduri Definitii
24 / 60
Arbori si paduri Definitii
Arbore binar
un arbore binar este un arbore ce are o rădăcină, este ordonat și în care
fiecare vârf are cel mult doi succesori. Succesorii fiecărui vârf sunt
ordonaţi, fiul stâng și fiul drept.
25 / 60
Arbori si paduri Arbori de acoperire
26 / 60
Arbori si paduri Arbori de acoperire
minim.
27 / 60
Arbori si paduri Arbori de acoperire
28 / 60
Arbori si paduri Arbori de acoperire
29 / 60
Arbori si paduri Arbori de acoperire
Cayley
fie un graf complet Kn , numărul arborilor etichetaţi este nn−2
30 / 60
Arbori si paduri Arbori de acoperire
31 / 60
Arbori si paduri Arbori de acoperire
32 / 60
Arbori si paduri Arbori de acoperire
Teorema
fie G = (V , E ) un graf simplu neorientat ponderat cu funcţia de pondere
w : E → R. Fie A un subset al lui E inclus într-un arbore minim de
acoperire al lui G, fie (S, V − S) o tăietură a lui G ce respectă A și (u, v )
muchia de pondere minimă ce traversează tăietura (S, V − S). În acest
caz, muchia (u, v ) este sigură pentru A.
Corolar
G = (V , E ) un graf simplu neorientat ponderat cu funcţia de pondere
w : E → R. Fie A un subset al lui E inclus într-un arbore minim de
acoperire al lui G, fie C = (VC , EC ) o componentă conexă (arbore) în
pădurea GA = (V , A). Dacă (u, v ) este o muchie de pondere minimă ce
leagă componenta C de o altă componentă din GA , atunci (u, v ) este
sigură pentru A.
33 / 60
Arbori si paduri Algoritmul lui Kruskal
mst_kruskal(G,w)
1: A = ∅
2: for v ∈ V do
3: make_set(v)
4: sortare muchii crescător după ponderea w
5: for (u, v ) ∈ E luate crescător după w do
6: if find_set(u) 6= find_set(v) then
7: A = A ∪ (u, v )
8: union(u,v)
9: return A
34 / 60
Arbori si paduri Algoritmul lui Kruskal
35 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
37 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
38 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
39 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
40 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
41 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
42 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
43 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
44 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
45 / 60
Arbori si paduri Algoritmul lui Kruskal
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
46 / 60
Arbori si paduri algoritmul lui Prim
mst_prin(G,w,r)
1: for u ∈ V do
2: u.key = ∞
3: u.π = NIL
4: r .key = 0
5: Q = V
6: while Q 6= ∅ do
7: u = extract_min(Q)
8: for v ∈ Adj[u] do
9: if v ∈ Q și w (u, v ) < v .key then
10: v .π = u
11: v .key = w (u, v )
47 / 60
Arbori si paduri algoritmul lui Prim
48 / 60
Arbori si paduri algoritmul lui Prim
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
Arbori si paduri algoritmul lui Prim
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
50 / 60
Arbori si paduri algoritmul lui Prim
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
51 / 60
Arbori si paduri algoritmul lui Prim
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
52 / 60
Arbori si paduri algoritmul lui Prim
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
53 / 60
Arbori si paduri algoritmul lui Prim
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
54 / 60
Arbori si paduri algoritmul lui Prim
a
7
8
5 b c
7
9 5
15
d e
6 9
8
11
f g
55 / 60
Arbori si paduri Prufer
Codare Prüfer
codare_prufer(F )
1. K = ∅
2. while T conţine și alte vârfuri decât rădăcina do
3. fie v frunza minimă din T
4. K ← predecesor(v )
5. T = T \ {v }
6. return K
exemplu:
56 / 60
Arbori si paduri Prufer
Decodare Prüfer
decodare_prufer(K , n)
1. T = ∅
2. for i = 1, 2, . . . , n − 1 do
3. x primul element din K
4. y cel mai mic număr natural care nu se găsește în K
5. (x , y ) ∈ E (T ), x părintele lui y în T
6. șterg x din K , adaugă y în K
7. return T
57 / 60
Arbori si paduri Prufer
58 / 60
Arbori si paduri codare Huffman
Codare Huffman
HUFFMAN(C )
1: n = |C |
2: Q = C
3: for 1 ≤ i ≤ n − 1 do
4: alocă un nou vârf z
5: z.stang = x =EXTRACT_MIN(Q)
6: z.drept = y =EXTRACT_MIN(Q)
7: z.fr = x .fr + y .fr
8: INSERT(Q, z)
9: return EXTRACT_MIN(Q)
59 / 60