Sunteți pe pagina 1din 120

Examen scris

 242, 244 - Miercuri 14.01.2015 la curs


 241, 243 – Joi 15.01.2014 la seminar
 241 : 8-10
 243 : 10-12

Laborator 241, 242


 Marti 13.01.2015
 Miercuri 07.01.2014 14.01.2014 ora 14
 Miercuri 14.01.2014 de la ora 12 -restanţa
 Java
◦ elemente fundamentale
◦ clase, tablouri, citirea de la tastatură
◦ clasa Object, colecții, tipuri generice
◦ extinderi:
 concept
 super
 polimorfism, legare dinamică
 modificatori de acces
◦ interfețe:
 utilitate
 interfeţe Java:Comparable
 Tehnici de programare
 Divide et Impera (complexitate)
 Greedy (corectitudine)
 Programare dinamică
 Backtracking
 descrierea tehnicii + exemple

 Algoritmi probabiliști, genetici


Dacă m>kn obiecte sunt plasate în n căsuţe,
atunci va exista o căsuţă ce va conţine mai
mult de k obiecte.
Se dă vectorul a = (a1, …, an). Să se
determine doi indicii i < j astfel încât
ai+…+aj
este multiplu de n
Considerăm sumele parţiale (n sume)
sk = a1+ … + ak, k=1,…,n
Considerăm sumele parţiale (n sume)
sk = a1+ … + ak, k=1,…,n
Clasele de resturi modulo n:
𝑠𝑘 {0 , 1 ,…, 𝑛 − 1 }
Considerăm sumele parţiale (n sume)
sk = a1+ … + ak, k=1,…,n
𝑠𝑘 {0 , 1 ,…, 𝑛 − 1 }.
Avem cazurile:
 𝑠𝑘 = 0
 𝑠𝑘 = 𝑠𝑙  {1 ,…, 𝑛 − 1 }
Considerăm sumele parţiale (n sume)
sk = a1+ … + ak, k=1,…,n
𝑠𝑘 {0 , 1 ,…, 𝑛 − 1 }
 Dacă 𝑠𝑘 = 0  n  a1 +…+ ak
sk = a1+ … + ak, k=1,…,n
𝑠𝑘 {0 , 1 ,…, 𝑛 − 1 }
 Dacă 𝑠𝑘 = 𝑠𝑙  {1 ,…, 𝑛 − 1 } 
𝑠𝑘 − 𝑠𝑙 = 0
sk = a1+ … + ak, k=1,…,n
𝑠𝑘 {0 , 1 ,…, 𝑛 − 1 }
 Dacă 𝑠𝑘 = 𝑠𝑙  {1 ,…, 𝑛 − 1 } 
𝑠𝑘 − 𝑠𝑙 = 0  n  ak+1 +…+ al
Dat un număr natural, să se determine un
multiplu m al său (nenul) în a cărui
scriere în baza 10 apar doar cifrele 0 și 1
sk  11...1, k  1,..., n
k ori
Se consideră n numere naturale nenule a
căror sumă este mai mică decât 2n. Să se
determine o submulțime de sumă n
Dat un număr natural impar, să se
determine un multiplu m al său în a cărui
scriere în baza 2 apare doar cifra 1
sk  2  1, k  1,..., n
k
sk  2  1, k  1,..., n
k

l k
n sk  sl  2 ( 2
k
 1)
sk  2  1, k  0,..., n
k

l k
n sk  sl  2 ( 2
k
 1) 
n 2l  k  1
 Se aplică problemelor care pot fi reprezentate
pe un arbore – la un pas avem de ales între
mai multe variante (≈ backtracking)

 Vârfurile arborelui corespund stărilor posibile


în dezvoltarea soluţiei.
 Două tipuri
◦ Se caută un anumit vârf rezultat (final, frunză)
◦ Există mai multe vârfuri finale, căutăm o
soluție optimă
 Backtracking = parcurgerea limitată în
adâncime (DF) a unui arbore
x1

x2

xk

Dacă nu este satisfăcută condiția de


continuare nu se mai parcurge subarborele
 Diferențe față de backtracking
◦ ordinea de parcurgere a arborelui
◦ modul în care sunt eliminaţi subarborii care
nu pot conduce la o soluţie
◦ arborele poate fi infinit
 Diferențe față de backtracking
◦ ordinea de parcurgere a arborelui
◦ modul în care sunt eliminaţi subarborii care
nu pot conduce la o soluţie
◦ arborele poate fi infinit

 Arborele de stări este construit dinamic


1 2 3 4 1 2 3 4
5 7 8 5 6 7 8
9 6 10 11 9 10 11 12
13 14 15 12 13 14 15
1 2 3 4
5 7 8
9 6 10 11
13 14 15 12

1 2 3 4 1 2 3 4 1 3 4 1 2 3 4
5 7 8 5 7 8 5 2 7 8 5 6 7 8
9 6 10 11 9 6 10 11 9 6 10 11 9 10 11
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12
1 2 3 4
5 7 8
9 6 10 11
13 14 15 12

1 2 3 4 1 2 3 4 1 3 4 1 2 3 4
5 7 8 5 7 8 5 2 7 8 5 6 7 8
9 6 10 11 9 6 10 11 9 6 10 11 9 10 11
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12

Arbore infinit
 3 7 2 
 
5  1 9
C  
4 8  3
 
 6 2 6 
 3 7 2 
  1
5  1 9
C  
4 8  3
  (1,2) (1,3) (1,4)
 6 2 6 

2 3 4

(2,3) (2,4) (3,2) (3,4) (4,2) (4,3)

5 6 7 8 9 10

(3,4) (4,5) (2,4) (4,2) (2,3) (3,2)

11 12 13 14 15 16
Schemă
 Fie L –lisa de vârfuri active
 Se inserează în L vârful inițial
 Repetă
◦ Se alege un vârf din L care devine curent
◦ Se generează fii săi, care se adaugă în L
până când vârful curent este final
Cum se alege vârful curent?
Cum se alege vârful curent
 DF
Cum se alege vârful curent
 DF
- o parte arborele poate fi infinit
- soluţia căutată poate fi de exemplu
un fiu al rădăcinii diferit de primul fiu
Cum se alege vârful curent
 DF
- o parte arborele poate fi infinit
- soluţia căutată poate fi de exemplu
un fiu al rădăcinii diferit de primul fiu
 BF
Cum se alege vârful curent
 DF
- o parte arborele poate fi infinit
- soluţia căutată poate fi de exemplu
un fiu al rădăcinii diferit de primul fiu
 BF
- conduce totdeauna la soluţie, dar
poate fi ineficientă dacă vârfurile au
mulţi fii
 Compromis:
Vârf x – asociat un cost pozitiv c(x)
= măsură a gradului de "apropiere" a
vârfului de o soluţie
 Compromis:
Vârf x – asociat un cost pozitiv c(x)
= măsură a gradului de "apropiere" a
vârfului de o soluţie

 Este ales vârful de cost minim (! care nu este


neapărat fiu al vârfului curent anterior)
 Compromis:
Vârf x – asociat un cost pozitiv c(x)
= măsură a gradului de "apropiere" a
vârfului de o soluţie

 Este ales vârful de cost minim

 c(varf) ≤ c(fiu)
1

2 3 4
1

2 3 4

7 8
1

2 3 4

7 8 9 10
1

2 3 4

7 8 9 10
 L va fi în general un min-ansamblu
 L va fi în general un min-ansamblu
 Din analiza teoretică a problemei deducem o
valoare lim care este o aproximaţie prin adaos a
minimului căutat
 L va fi în general un min-ansamblu
 Din analiza teoretică a problemei deducem o
valoare lim care este o aproximaţie prin adaos a
minimului căutat
• Atunci când costul unui vârf depăşeşte lim, vârful
curent este ignorat, deci este eliminat întregul
subarbore pentru care este rădăcină
 Funcție de cost ideală
c(x) =
 nivel(x), dacă x este vârf rezultat
 +, dacă x este vârf final, diferit de
vârf rezultat
 min {c(y) | y fiu al lui x },
dacă x nu este vârf final
 Funcție de cost ideală
c(x) =
 nivel(x), dacă x este vârf rezultat
 +, dacă x este vârf final, diferit de
vârf rezultat
 min {c(y) | y fiu al lui x },
dacă x nu este vârf final
 Nu se poate calcula pentru arbore infinit
 Trebuie parcurs arborele în întregime pentru a
o calcula
 Aproximație f a lui c
◦ f(x) să poată fi calculată doar pe baza
informaţilor din drumul de la rădăcină la x
◦ este indicat ca f ≤ c (aproximare optimistă)
 Aproximație f a lui c
◦ f(x) să poată fi calculată doar pe baza
informaţilor din drumul de la rădăcină la x
◦ este indicat ca f ≤ c (aproximare optimistă)
 Aproximație f a lui c
◦ f(x) să poată fi calculată doar pe baza
informaţilor din drumul de la rădăcină la x
◦ este indicat ca f ≤ c (aproximare optimistă)
 Condiţie compromis DF/BF:
Există un k natural - pentru orice vârf x situat pe un
nivel nx şi orice vârf y situat pe un nivel ny  nx+k,
să avem
f(x) < f(y)
 Condiţie compromis DF/BF:
Există un k natural - pentru orice vârf x situat pe un
nivel nx şi orice vârf y situat pe un nivel ny  nx+k,
să avem
f(x) < f(y)

◦ dacă există soluție, ea va fi atinsă într-un timp finit


 Cum definim f?
 Cum definim f?
f(x) = g(x)+h(x)
 g(x) = distanţa de la rădăcină la nodul x

 h(x) = estimarea distanţei de la x la vârful


rezultat ("subestimare")
radacina
g

x
estimat prin h

rezultat
1 2 3 4 1 2 3 4
5 7 8 5 6 7 8
9 6 10 11 9 10 11 12
13 14 15 12 13 14 15
 Condiție de existență
- căsuța liberă 16, pe poziția (l, c)
- pentru plăcuța etichetată cu i calculăm
n(i) = numărul locaşurilor care îi urmează
şi care conţin o plăcuţă cu etichetă
mai mică decât i

Există soluție 
n(1)+n(2)+...+n(16)+(l+c) %2 este par.
 Putem considera euristica
◦ h(t) = numărul de plăcuţe care nu sunt la locul lor
sau
 Putem considera euristica
◦ h(t) = numărul de plăcuţe care nu sunt la locul lor
sau
◦ h(t) = distanţa Manhattan = suma pentru fiecare
căsuță a numărului de mutări pentru a o putea
aduce în poziţia finală
 dacă o cifră este pe poziţia (i,j) şi trebuie adusă pe
poziţia (r,s) distanţa este
r i  s  j
h = câte plăcuţe nu 1 2 3 4 1 2 3 4
sunt la locul lor 5 7 8 5 6 7 8
9 6 10 11 9 10 11 12
13 14 15 12 13 14 15
1 2 3 4 1 2 3 4
5 7 8 5 6 7 8
g=0
9 6 10 11 9 10 11 12
h=5
13 14 15 12 13 14 15
1 2 3 4 1 2 3 4
5 7 8 5 6 7 8
g=0,h=5
9 6 10 11 9 10 11 12
f=5
13 14 15 12 13 14 15

g=1,h=6 g=1,h=6 g=1,h=4 g=1,h=6


f=7 f=7 f=5 f=7
1 3 4 1 2 3 4 1 2 3 4 1 2 3 4
5 2 7 8 5 7 8 5 6 7 8 5 7 8
9 6 10 11 9 6 10 11 9 10 11 9 6 10 11
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12
1 2 3 4 1 2 3 4
5 7 8 5 6 7 8
g=0,h=5
9 6 10 11 9 10 11 12
f=5
13 14 15 12 13 14 15

g=1,h=6 g=1,h=6 g=1,h=4 g=1,h=6


f=7 f=7 f=5 f=7
1 3 4 1 2 3 4 1 2 3 4 1 2 3 4
5 2 7 8 5 7 8 5 6 7 8 5 7 8
9 6 10 11 9 6 10 11 9 10 11 9 6 10 11
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12
1 2 3 4 1 2 3 4
5 7 8 5 6 7 8
g=0,h=5
9 6 10 11 9 10 11 12
f=5
13 14 15 12 13 14 15

g=1,h=6 g=1,h=6 g=1,h=4 g=1,h=6


f=7 f=7 f=5 f=7
1 3 4 1 2 3 4 1 2 3 4 1 2 3 4
5 2 7 8 5 7 8 5 6 7 8 5 7 8
9 6 10 11 9 6 10 11 9 10 11 9 6 10 11
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12

1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
5 7 8 5 6 7 8 5 6 7 8 5 6 7 8
9 6 10 11 9 10 11 9 14 10 11 9 10 11
13 14 15 12 13 14 15 12 13 15 12 13 14 15 12

g=2,h=5 g=2,h=5 g=2,h=5 g=2,h=3


f=7 f=7 f=7 f=5
1 2 3 4 1 2 3 4
5 7 8 5 6 7 8
g=0,h=5
9 6 10 11 9 10 11 12
f=5
13 14 15 12 13 14 15

g=1,h=6 g=1,h=6 g=1,h=4 g=1,h=6


f=7 f=7 f=5 f=7
1 3 4 1 2 3 4 1 2 3 4 1 2 3 4
5 2 7 8 5 7 8 5 6 7 8 5 7 8
9 6 10 11 9 6 10 11 9 10 11 9 6 10 11
13 14 15 12 13 14 15 12 13 14 15 12 13 14 15 12

1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
5 7 8 5 6 7 8 5 6 7 8 5 6 7 8
9 6 10 11 9 10 11 9 14 10 11 9 10 11
13 14 15 12 13 14 15 12 13 15 12 13 14 15 12

g=2,h=5 g=2,h=5 g=2,h=5 g=2,h=3


f=7 f=7 f=7 f=5

etc
 Pentru probleme de optim
◦ folosim lim - aproximaţie prin adaos a
minimului căutat, care se actualizează pe
parcursul algoritmului
 Pentru probleme de optim
◦ Notăm rad – vârful corespunzător
configurației inițiale
i  rad; L  {i}; min  lim;
calculăm f(rad); tata(i)  0
while L  
i  L {scos vârful i cu ĉ(i) minim din min-ansamblul L}
for toţi j fii ai lui i
calculăm ĉ(j); calcule locale asupra lui j;
tata(j)  i
if j este vârf final
if ĉ(j)<min
min  ĉ(j); ifinal  j
elimină din L vârfurile k cu ĉ(k)≥ min
else
if ĉ(j)<min
j  L

if min=lim
write('Nu există soluţie')
else writeln(min); i  ifinal
while i  0
write(i); i  tata(i)
i  rad; L  {i}; min  lim;
calculăm f(rad); tata(i)  0
while L  
i  L {scos vârful i cu f(i) minim din min-ansamblul L}
for toţi j fii ai lui i
calculăm ĉ(j); calcule locale asupra lui j;
tata(j)  i
if j este vârf final
if ĉ(j)<min
min  ĉ(j); ifinal  j
elimină din L vârfurile k cu ĉ(k)≥ min
else
if ĉ(j)<min
j  L

if min=lim
write('Nu există soluţie')
else writeln(min); i  ifinal
while i  0
write(i); i  tata(i)
i  rad; L  {i}; min  lim;
calculăm f(rad); tata(i)  0
while L  
i  L {scos vârful i cu f(i) minim din min-ansamblul L}
for toţi j fii ai lui i
calculăm f(j); calcule locale asupra lui j;
tata(j)  i
if j este vârf final
if ĉ(j)<min
min  ĉ(j); ifinal  j
elimină din L vârfurile k cu ĉ(k)≥ min
else
if ĉ(j)<min
j  L

if min=lim
write('Nu există soluţie')
else writeln(min); i  ifinal
while i  0
write(i); i  tata(i)
i  rad; L  {i}; min  lim;
calculăm f(rad); tata(i)  0
while L  
i  L {scos vârful i cu f(i) minim din min-ansamblul L}
for toţi j fii ai lui i
calculăm f(j); calcule locale asupra lui j;
tata(j)  i
if j este vârf final
if f(j)<min
min  f(j); ifinal  j
elimină din L vârfurile k cu f(k)≥ min
else
if ĉ(j)<min
j  L

if min=lim
write('Nu există soluţie')
else writeln(min); i  ifinal
while i  0
write(i); i  tata(i)
i  rad; L  {i}; min  lim;
calculăm f(rad); tata(i)  0
while L  
i  L {scos vârful i cu f(i) minim din min-ansamblul L}
for toţi j fii ai lui i
calculăm f(j); calcule locale asupra lui j;
tata(j)  i
if j este vârf final
if f(j)<min
min  f(j); ifinal  j
elimină din L vârfurile k cu f(k)≥ min
else
if f(j)<min
j  L

if min=lim
write('Nu există soluţie')
else writeln(min); i  ifinal
while i  0
write(i); i  tata(i)
i  rad; L  {i}; min  lim;
calculăm f(rad); tata(i)  0
while L  
i  L {scos vârful i cu f(i) minim din min-ansamblul L}
for toţi j fii ai lui i
calculăm f(j); calcule locale asupra lui j;
tata(j)  i
if j este vârf final
if f(j)<min
min  f(j); ifinal  j
elimină din L vârfurile k cu f(k)≥ min
else
if f(j)<min
j  L

if min=lim
write('Nu există soluţie')
else writeln(min); i  ifinal
while i  0
write(i); i  tata(i)
i  rad; L  {i}; min  lim;
calculăm f(rad); tata(i)  0
while L  
i  L {scos vârful i cu f(i) minim din min-ansamblul L}
for toţi j fii ai lui i
calculăm f(j); calcule locale asupra lui j;
tata(j)  i
if j este vârf final
if f(j)<min
min  f(j); ifinal  j
elimină din L vârfurile k cu f(k)≥ min
else
if f(j)<min
j  L

if min=lim
write('Nu există soluţie')
else writeln(min); i  ifinal
while i  0
write(i); i  tata(i)
 3 7 2 
 
5  1 9
C  
4 8  3
 
 6 2 6 
 3 7 2 
  1
5  1 9
C  
4 8  3
  (1,2) (1,3) (1,4)
 6 2 6 

2 3 4

(2,3) (2,4) (3,2) (3,4) (4,2) (4,3)

5 6 7 8 9 10

(3,4) (4,5) (2,4) (4,2) (2,3) (3,2)

11 12 13 14 15 16
Pentru un vârf x din arbore valoarea c(x) dată
de funcţia de cost ideală este:
 lungimea circuitului corespunzător lui x
dacă x este frunză
 min {c(y) | y fiu al lui x } altfel.
Cum determinăm limita inferioară f(x) pentru
circuitului minim corespunzător vârfului x din
arborele Branch and Bound
Cum determinăm limita inferioară f(x) pentru
circuitului minim corespunzător vârfului x din
arborele Branch and Bound

f(rad) = limită inferioară pentru costul unui circuit


hamiltonian minim CHM din graf
 Observație. Dacă micşorăm toate elementele unei linii
sau coloane din matricea de costuri C cu , orice
circuit hamiltonian va avea costul micşorat cu 

i i
 Vom lucra cu matrice de costuri reduse = în care pe
orice linie sau coloană apare cel puţin un zero,
exceptând cazul când linia sau coloana conţine
numai 
 Vom lucra cu matrice de costuri reduse = în care pe
orice linie sau coloană apare cel puţin un zero,
exceptând cazul când linia sau coloana conţine
numai 

 f(rad) = cantitatea (totală) cu care se reduce


matricea de cost C
= limită inferioară pentru costul CHM
 3 7 2 
 
5  1 9
C  
4 8  3
 
 6 2 6  

Reducem linia 2 cu 1 Reducem linia 1 cu 2 Reducem linia 3 cu 3


 1 5 0   1 5 0   1 5 0 
     
5  1 9  4  0 8   4  0 8 
 
4 8  3 4 8  3 1 5  0
     
 6 2 6    6 2 6   6 2 6 
Reducem linia 4 cu 2 Reducem coloana 1 cu 1
 1 5 0   1 5 0 
   
4  0 8  3  0 8 
 
1 5  0 0 5  0
   
 4 0 4    3 0 4  
 1 5 0 
 
 4  0 8 
1 5  0
 
 6 2 6   1 5 0 
 
 4  0 8 
Reducem linia 4 cu 2
1 5  0
 
 4 0 4  
 1 5 0 
 
 3  0 8 
Reducem coloana 1 cu 1
0 5  0
 
 3 0 4  
 3 7 2   1 5 0 
   
5  1 9 3  0 8
C   matricea redusă =  
4 8  3 0 5  0
   
 6 2 6   3 0 4 

Cantitatea totală cu care s-a redus matricea =


2+1+3+2+1=9
 f(rad) = cantitatea totală cu care s-a redus
matricea C

 Unui vârf x îi asociem


◦ o matrice de costuri redusă Mx (dacă nu este frunză)
◦ o valoare f(x) calculată după cum urmează
 Pentru un vârf y din arborele BB al cărui tată este x şi
muchia (x,y) este etichetată cu (i,j) modificăm Mx:
x

(i,j)

y
 Pentru un vârf y din arborele BB al cărui tată este x şi
muchia (x,y) este etichetată cu (i,j) modificăm Mx:
x  elementele liniei i devin  (mergem sigur către j)

(i,j)

y
 Pentru un vârf y din arborele BB al cărui tată este x şi
muchia (x,y) este etichetată cu (i,j) modificăm Mx:
x  elementele liniei i devin  (mergem sigur către j)
 elementele coloanei j devin  (am ajuns sigur în j)
(i,j)

y
 Pentru un vârf y din arborele BB al cărui tată este x şi
muchia (x,y) este etichetată cu (i,j) modificăm Mx:
x  elementele liniei i devin  (mergem sigur către j)
 elementele coloanei j devin  (am ajuns sigur în j)
(i,j)
 Mx(j,1)   pentru a nu reveni prematur în
y rădăcina 1;
 Pentru un vârf y din arborele BB al cărui tată este x şi
muchia (x,y) este etichetată cu (i,j) modificăm Mx:
x  elementele liniei i devin  (mergem sigur către j)
 elementele coloanei j devin  (am ajuns sigur în j)
(i,j)
 Mx(j,1)   pentru a nu reveni prematur în
y rădăcina 1;
 reducem noua matrice Mx şi obţinem My;
fie r cantitatea cu care s-a redus Mx.
 Pentru un vârf y din arborele BB al cărui tată este x şi
muchia (x,y) este etichetată cu (i,j) modificăm Mx:
x  elementele liniei i devin  (mergem sigur către j)
 elementele coloanei j devin  (am ajuns sigur în j)
(i,j)
 Mx(j,1)   pentru a nu reveni prematur în
y rădăcina 1;
 reducem noua matrice Mx şi obţinem My;
fie r cantitatea cu care s-a redus Mx.
 Luăm f(y)  f(x) + Mx(i,j) + r.
 Avem
f(x)  cost CHM corespunzător lui x

 Dacă x este frunză avem


f(x) = c(x) = cost CHM
 3 7 2   1 5 0 
   
5  1 9 3  0 8
C   M1 =  
4 8  3 0 5  0
   
 6 2 6   3 0 4 

f(1) = 2 + 1 + 3 + 2 + 1 = 9
f(1)=9 1
f(1)=9 1

(1,2) (1,3) (1,4)

2 3 4

L = {2, 3, 4}
f(1)=9 1

(1,2) (1,3) (1,4)

2 3 4

L = {2, 3, 4}
Calculăm f(2)

 1 5 0 
 
3  0 8
M1   
0 5  0
 
 3 0 4  
f(1)=9 1

(1,2) (1,3) (1,4)

2 3 4

L = {2, 3, 4}
Calculăm f(2)

    - Linia 1 și coloana 2 devin 


  - Elementul (2, 1) devine 
  0 8
0   0 - Reducem linia 4 cu 3
 
3  4 
f(1)=9 1

(1,2) (1,3) (1,4)

2 3 4

L = {2, 3, 4}
Calculăm f(2)

    - Linia 1 și coloana 2 devin 


  - Elementul (2, 1) devine 
  0 8
0   0 - Reducem linia 4 cu 3
 
0  1 
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 3 4

L = {2, 3, 4}
Calculăm f(2)

    - Linia 1 și coloana 2 devin 


  - Elementul (2, 1) devine 
  0 8
M2  
0   0 - Reducem linia 4 cu 3
 
0  1  - Obținem f(2) = f(1)+r + M1(1,2) = 9+3+1=13
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 3 4

L = {2, 3, 4}
Calculăm f(3)

 1 5 0  - Linia 1 și coloana 3 devin 


  - Elementul (3, 1) devine 
3  0 8
M1   
0 5  0
 
 3 0 4  
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 3 4

L = {2, 3, 4}
Calculăm f(3)

    - Linia 1 și coloana 3 devin 


  - Elementul (3, 1) devine 
 3   8 
 5  0  - Reducem linia 2 cu 3
 
 3 0   
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 4

L = {2, 3, 4}
Calculăm f(3)

    - Linia 1 și coloana 3 devin 


  - Elementul (3, 1) devine 
 0   5 
 5  0  - Reducem linia 2 cu 3
 
 3 0    - Obținem f(3) = f(1)+r + M1(1,3) = 9+3+5=17
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 4

L = {2, 3, 4}
Calculăm f(4)

 1 5 0  - Linia 1 și coloana 4 devin 


  - Elementul (4, 1) devine 
3  0 8
M1   
0 5  0
 
 3 0 4  
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 4

L = {2, 3, 4}
Calculăm f(4)

    - Linia 1 și coloana 4 devin 


  - Elementul (4, 1) devine 
 3  0  
 0 5  
 
  0 4  
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

L = {2, 3, 4}
Calculăm f(4)

    - Linia 1 și coloana 4 devin 


  - Elementul (4, 1) devine 
3  0 
M4   
 0 5   - Nu sunt necesare reduceri
 
  0 4   - Obținem f(4) = f(1) + M1(1,4)= 9 + 0 =9
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

L = {2, 3, 4}
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

L = {2, 3, 4}
Extragem din L vârful cu f minim -> 4
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

9 10

L = {2, 3, 9, 10}
Calculăm f(9) și f(10) analog
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

9 10
Calculăm f(9) – corespunzător muchiei (4,2)
    - Linia 4 și coloana 2 devin 
 
 
M4  
3 0  - Elementul (2, 1) devine 
 0 5  
 
 3 0 4 
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

9 10
Calculăm f(9) – corespunzător muchiei (4,2)
    - Linia 4 și coloana 2 devin 
 
  0 
M9   - Elementul (2, 1) devine 
0   
  - Nu sunt necesare reduceri
   
- f(9) = f(4) + M4(4,2) = 9 + 0 =9
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

9 10
Calculăm f(10) – corespunzător muchiei (4,3)
    - Linia 4 și coloana 3 devin 
 
 
M4  
3 0  - Elementul (3, 1) devine 
 0 5  
 
 3 0 4 
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

9 10
Calculăm f(10) – corespunzător muchiei (4,3)
    - Linia 4 și coloana 3 devin 
 
  
 3  - Elementul (3, 1) devine 
 5  
  - Reducem linia 2 cu 3 și linia 3 cu 5
   
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

9 10
Calculăm f(10) – corespunzător muchiei (4,3)
    - Linia 4 și coloana 3 devin 
 
  
M 10 
0  - Elementul (3, 1) devine 
 0  
  - Reducem linia 2 cu 3 și linia 3 cu 5
    - f(10)=f(4)+r+M4(4,3)=9+(3+5)+4=21
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

f(9)=9 9 10 f(10)=21

L = {2, 3, 9, 10}
Extragem din L vârful cu f minim -> 9
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

f(9)=9 9 10 f(10)=21

(2,3)

15 este frunză 15
f(15) = c(15) = 9
f(1)=9 1

(1,2) (1,3) (1,4)

f(2)=13 2 f(3)=17 3 f(4)=9 4

(4,2) (4,3)

f(9)=9 9 10 f(10)=21

(2,3)

f(15)=9 15

• min devine 9
• se elimină din L toate vârfurile cu f mai mare decât 9
• L devine vidă -> STOP
f(1)=9 1

(1,2) (1,3) (1,4)

2 3 4

(2,3) (2,4) (3,2) (3,4) (4,2) (4,3)

5 6 7 8 9 10

(3,4) (4,5) (2,4) (4,2) (2,3) (3,2)

11 12 13 14 15 16
f(1)=9 1

(1,2) (1,3) (1,4)

2 3 4

(2,3) (2,4) (3,2) (3,4) (4,2) (4,3)

5 6 7 8 9 10

(3,4) (4,5) (2,4) (4,2) (2,3) (3,2)

11 12 13 14 15 16

S-ar putea să vă placă și