Sie sind auf Seite 1von 111

UNIVERSITATEA DIN BUCUREŞTI

FACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ

Structuri de Date
şi
Tehnici de Programare

c
Cuprins
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Cuprins

PREZENTAREA MODULULUI¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦ 5

Unitatea de învăţare Nr. 1


ARBORI BINARI

Obiectivele unităţii de învăţare nr¦ 1 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5


1¦1¦ Necesitatea utilizarii arborilor binari ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
1¦ ¦ Un exemplu de parcurgere a unui arbore binar ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
1¦¦ Ce este un cod prefixat ? ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
1¦¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 10
1¦5¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 11
1¦6¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 11

Unitatea de învăţare Nr. 2


SORTARE OPTIMA

Obiectivele unităţii de învăţare nr¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 1


¦1¦ Ce este sortarea si necesitatea utilizarii ei ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦ 1
¦ ¦ Un prim exemplu : Sortarea rapida (quick sort) ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 1
¦¦ Ce este un ansamblu (heap) ? ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 15
¦¦ Sortare optima ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 17
¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 0
¦6¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 1
¦7¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

Unitatea de învăţare Nr. 3


REGASIREA INFORMATIEI

Obiectivele unităţii de învăţare nr¦  ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 


¦1¦ Ce este cautarea (regasirea informatiei) ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦ 
¦ ¦ Un prim exemplu : algoritmul de cautare binara ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
¦¦ Arbori binari optimi pentru cautare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
¦¦ Ce este un fisier cu autoorganizare ?¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦ 0
¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
¦6¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 
¦7¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 

Unitatea de învăţare Nr. 4


ARBORI BINARI DE CAUTARE

Obiectivele unităţii de învăţare nr¦  ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 


aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccc
c
Structuri de date si tehnici de programare c
Cuprins
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
¦1¦ Ce sunt arborii binari de cautare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
¦ ¦ Un prim exemplu : algoritm de cautare si insertie in arbore binar ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
¦¦ Arbori Fibonacci ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦ 6
¦¦ Ce este un arbore echilibrat dupa inaltime (AVL)? ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 1
¦6¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 
¦7¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 

Unitatea de învăţare Nr. 5


DISPERSAREA MEMORIEI

Obiectivele unităţii de învăţare nr¦ 5 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 


5¦1¦ Ce este dispersarea memoriei ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
5¦ ¦ Un prim exemplu : algoritm de cautare si insertie in tabele dispersate si inlantui te ¦¦¦ 6
5¦¦ Dispersarea cu adresare deschisa ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
5¦¦ Ce este dubla dispersare? ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
5¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
5¦6¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 5
5¦7¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5

Unitatea de învăţare Nr. 6


METODA GREEDY

Obiectivele unităţii de învăţare nr¦ 6 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5


6¦1¦ Introducere ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
6¦ ¦ Memorarea textelor pe bandă ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 56
6¦¦ Problema continuă a rucsacului ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 56
6¦¦ Problema arborelui parţial de cost minim ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦ 58
6¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
6¦6¦ Lucrare de verificare pentru studenţicontiunuă a rucsa cului ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦ 6
6¦7¦ Bibliografie¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
c
c
Unitatea de învăţare Nr. 7
METODA BACKTRACKING
c
Obiectivele unităţii de învăţare nr¦ 7 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
7¦1¦ Descrierea metodei ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦ 65
7¦ ¦ Exemple ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 66
7¦¦ O descriere succintă a metodei backtracking ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 67
7¦¦ Variante ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 68
7¦5¦ Varianta recursivǎ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦ 6
7¦6¦ Metoda backtracking în plan ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 70
7¦7¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
7¦8¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ 7
7¦¦ Bibliografie¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
c
c

c
ccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccc
Structuri de date si tehnici de programare c
Cuprins
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Unitatea de învăţare Nr. 8
METODA DIVIDE ET IMPERA

Obiectivele unităţii de învăţare nr¦8 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 7 5


8¦1¦ Schema generală ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ 76
8¦ ¦ Căutarea binară ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 76
8¦¦ Problema turnurilor din Hanoi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 77
8¦¦ Sortare prin interclasare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 78
8¦5¦ Metoda Quicksort ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ 7
8¦6¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 8
8¦7¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 8
8¦8¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 8
c
c
Unitatea de învăţare Nr. 9
METODA BRANCH AND BOUND

Obiectivele unităţii de învăţare nr¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 8 5


¦1¦ Prezentare generală ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦ 85
¦ ¦ Algoritmul Branch & Bound pentru probleme de optim ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 8
¦¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
¦¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 
¦5¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5

Unitatea de învăţare Nr. 10


METODA PROGRAMĂRII DINAMICE

Obiectivele unităţii de învăţare nr¦ 10 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6


10¦1¦ O problemă generală ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
10¦ ¦ Metoda şirului crescător de mulţimi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 8
10¦¦ Sortarea topologică ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦ 
10¦¦ Soluţie finală ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 100
10¦5¦ Metoda programării dinamice¦ Exemple reprezentative ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 100
10¦6¦ Comentarii şi răspun suri la testele de autoevaluare c c107
10¦7¦ Lucrare de verificare pentru stude nţic  c108
10¦8¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦ ¦10

BIBLIOGRAFIE¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 110

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccc
c
Structuri de date si tehnici de programare c
Prezentarea modulului
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

PREZENTAREA MODULULUI

Unitatea de învăţare "Structuri de date şi tehnici de programare" îşi


propune o recapitulare însoţită de o actualizare a cunoştinţelor în domeniul
precizat, totul fiind orientat spre facilitarea urmăririi următoarelor cursuri
din Masterul "Baze de date"¦

Partea de structuri de date începe cu studiul arborilor binari¦ Es te apoi


abordată problema sortării, atât din punct de vedere practic, cât şi teoretic,
prin analiza optimalităţii algoritmilor de sortare¦ Se continuă cu
problematica regăsirii informaţiei, prezentându -se algoritmi de căutare;
studiul este extins la prezentarea arborilor binari de căutare¦ Ultima unitate
de învăţare din această parte este dedicată problemei dispersării
memoriei¦

Partea de tehnici de programare prezintă cele mai importante tehnici de


programare: Greedy, Backtracking, Divide et Impera, Branch and Bound,
precum şi metoda programării dinamice¦

Este de remarcat că acest modul este strâns legat de cel de "Limbaje


evoluate de programare", algoritmii urmând a fi programaţi în limbajul
Java¦

c
ccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccc
Structuri de date si tehnici de pro gramare c
1¦ Arbori binari
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Unitatea de învăţare Nr. 1


ARBORI BINARI

Cuprins

Obiectivele unităţii de învăţare nr¦ 1 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5


1¦1¦ Necesitatea utilizarii arborilor binari ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
1¦ ¦ Un exemplu de parcurgere a unui arbore binar ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
1¦¦ Ce este un cod prefixat ? ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
1¦¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 10
1¦5¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 11
1¦6¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 11

Obiectivele Unităţii de învăţare nr. 1

După ce veţi parcurge această unitate de învăţare, veţi reuşi să:

c ù Intelegeti notiunea de arbore binar,modul de reprezentare


si posibilitatile de parcurgere ;

ù Utilizati arborii binari inseilati pentru parcurgerea mai


rapida a arborilor binari si gasirea
succesorilor/predecesorilor unor noduri ;
c
c ù Utilizati algoritmul lui Huffman pentru construirea unor
c coduri prefixate optime
c
c
c
1.1. Necesitatea utilizarii arborilor binari

In multe situatii utilizarea listelor liniare in alocarea secventiala sau


inlantuita (simplu sau dublu),care pot functiona ca stive (ultimul intrat -
primul iesit) sau cozi (primul intrat-primul iesit) nu este suficienta¦Cel mai
simplu caz de structuri de date neliniare il constituie {  { ,care se
pot defini recursiv in modul urmator :
-arborele vid este un arbore binar ;
-un arbore binar nevid este alcatuit din radacina si un subarbore
stang si un subarbore drept,care la randul lor sunt arbori binari¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccc
c
Structuri de date si tehnici de programare c
1¦ Arbori binari
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Daca ambii subarbori binari ai radacinii sunt nevizi,radacinile lor se
mai numesc Ñradacinii,iar cei doi fii se numesc Ñ {¦
Arborii binari se pot reprezenta in felul urmator : fiecare nod este
reprezentat printr-un camp INFO care contine informatia memorata in acel
nod,precum si prin doua alte campuri LLINK si RLIN K,care contin pointeri
catre adresele radacinilor subarborilor stang,respectiv drept (L de la left si
R de la right)¦Daca unul dintre acestia este vid, campul de legatura
respectiv va fi reprezentat prin { {¦
Un arbore binar se numeste
   daca fiecare nod are zero sau doi
fii ; nodurile cu zero fii se numesc Ñ   sau   {¦

Arborii binari se utilizeaza pentru reprezentarea expresiilor


aritmetice ; in radacina unui arbore apare ultimul operator (operatie)
efectuata de acea expresie,iar subarborii stang,respectiv drept reprezinta
cele doua expresii carora li se aplica acest operator¦ In acest fel in frunze
apar operanzii (variabilele si constantele) ,iar in nodurile interne operator ii
expresiei¦
Vom vedea ca arborii binari se utilizeaza pentru repre zentarea unor
algoritmi de sortare si de cautare (regasire a informatiei),operatii care apar
frecvent in bazele de date¦
Structura de arbore binar se poate transforma intr -o structura liniara
in urma parcurgerii sau traversarii arborelui,adica a vizitarii nodurilor sale
intr-o anumita ordine,rezultand un sir de noduri¦
Tipurile principale de parcurgeri sunt urmatoarele :
-traversarea in    sau in ordinea RSD (radacina -stanga-
dreapta) : se viziteaza intai radacina, subarborele ei stang si apoi
subarborele drept, in aceeasi ordine ;
-traversarea in   sau in ordinea simetrica SRD (stanga-
radacina-dreapta) : se viziteaza intai subarborele stang, radacina si
subarborele drept;
-traversarea in 
  SDR (stanga-dreapta-radacina) : se
viziteaza subarborele stang, apoi subarborele drept si la final radacina¦
Aceste definitii sunt recursive ; daca arborele este vid, nu se
executa nimic¦
Pentru traversarea unui arbore binar se poate utiliza o stiva,ca in
urmatorul exemplu :

1.2. Un exemplu de parcurgere a unui arbore binar

˜ c Urmatorul algoritm traverseaza un arbore binar in ordinea simetrica


folosind o stiva auxiliara ô ; accesul la arbore se face printr-un pointer 
care memoreaza adresa radacinii arborelui ;daca arborele este vid,atunci
={ {¦

x 
 
   
  G  ´ 
  
     
  ´      
 !" #   
  
  
´     $  


   %   &  

c
ccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccc
Structuri de date si tehnici de programare c
1¦ Arbori binari
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
½ 
' '  ( " #    ) !" # 
 
c
Daca se face vizitarea nodului NOD(×) la pasul ,inainte de
depunerea valorii lui × in stiva,se obtine un algoritm pentru vizitarea
arborelui in ordinea RSD¦
Deoarece in reprezentarea cu legaturi LLIN K si RLINK a unui
arbore binar multe campuri sunt { {,adica nu contin nicio informatie
utila,se poate utiliza o reprezentare insailata a arborelui¦Daca insailarea se
face relativ la ordinea simetrica,atunci daca LLINK(×)={ { ea se va
inlocui cu adresa predecesorului nodului NOD(×) relativa la ordinea
simetrica,iar daca RLINK(×)= { {,atunci vom defini RLINK(×) ca fiind
egal cu adresa succesorului nodului NOD(×) relativ la aceeasi
ordine¦Pentru a distinge legaturile de insailare de cele obisnuite vom folosi
un camp de un singur bit in fiecare nod,care va avea valoarea TAG( ×)=1
daca legatura este obisnuita si TAG(×)=0 daca legatura a fost creata prin
insailare¦
Sa mai observam ca este necesara prezenta unui nou nod care sa
joace rolul unui nod cap de l ista si la care sa mearga lagatura de insailare
stanga a primului nod,respectiv legatura de insailare dreapta a ultimului
nod al arborelui in ordinea simetrica¦Radacina arborelui poata fi gasita in
campul LLINK al acestui nod,a carui adresa trebuie memorata printr-un
pointer ¦
In felul acesta unele operatii asupra arborelui pot fi simplificate,de
exemplu gasirea succesorului simetric al lui NOD(×) intr-un astfel de
arbore,care poate fi gasit facand o parcurgere partiala a unui drum din
arbore,fara a mai folosi o stiva auxiliara¦

1.3. Ce este un cod prefixat?

Frunzele unui arbore binar pot fi puse in corespondenta cu cuvinte


binare peste alfabetul • cu doua simboluri,0 si 1 : plecand din radacina
arborelui,de fiecare data cand ne deplasam la stanga scriem 0 si cand ne
deplasam la dreapta scriem 1¦Lungimea unui cuvant binar asociat unei
frunze,adica numarul sau de litere este egal cu lungimea drumului de la
radacina la acea frunza,care mai este egal cu numarul de nivel al frunzei
respective,nivelul radacinii fiind egal cu 0 (se presupune ca arborele este
desenat cu radacina sus si frunzele jos,pe nivelele cele mai mari)¦
Multimea cuvintelor de cod asociate frunzelor unui arbore binar formeaza
un asa numit   Ñ{ (sau 
{{ ),care are proprietatea ca niciun
cuvant de cod nu este inceput propriu al celuilalt¦
Aceasta se justifica prin aceea ca nicio frunza nu este nici
descendent si nici stramos al altei frunze in arbore¦
Daca un sir de litere este format prin concatenarea cuvintelor dintr -
un astfel de cod,decodificarea se poate face usor citind sirul de la stanga
la dreapta si marcand un cuvant de fiecare data cand el este recunoscut¦
De exemplu,pentru codul care consta din cuvintele
00,01,100,101,11, sirul 000110110100 se descompune imediat,de la
stanga la dreapta in 00,01,101,101,00¦
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccc
c
Structuri de date si tehnici de programare c
1¦ Arbori binari
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Ne vom ocupa de constructia unui arbore binar care este optim intr -
un sens care va fi precizat ulterior,prezentand problema ca o problema de
comunicatie optima,context in care a fost rezolvata de Huffman in anul
150¦Insa aceasta metoda de optimizare se aplica de asemenea in
sortarea externa,in cautare,in comprimarea fisierelor etc¦
Sa presupunem ca trebuie sa transmitem ~ mesaje printr-un canal de
comunicatie care transfera literele din alfabetul 0,1 cate una intr -o unitate
de timp¦Sa mai presupunem ca aceste mesaje apar unul dupa altul cu
probabilitatile _1,_ ,«,~,iar urmatorul mesaj care trebuie transmis
apare cu aceste probabilitati,independent de mesajele precedente¦
Vrem sa gasim un cod prefixat _1, _ ,«, _~ peste alfabetul
•,pentru care notand vectorul lungimilor acestor cuvinte prin
(_1,_ ,«,~),lungimea medie ™ sa fie minima¦In aceasta formula s-
a notat cu  _ lungimea (numarul de litere) al e cuvantului ¦

c
Algoritmul lui Huffman construieste un arbore optim plecandu-se
cu o multime  formata din  frunze , carora li se asociaza
ponderile   pentru 1” si cu o multime  de noduri interne ; 
este initial multimea vida¦Variabila ,initial egala cu 0 este un contor care
numara nodurile interne construite pana in acel moment¦
Algoritmul se scrie astfel :

Ú ‰ x

'   *x * +  
 $           
      *x * 
       ´ ‰‰,x$
     *x * +
 

 öntrebare: 9{ 
  {{    { 
Ñ {{    
 ÑÑ{?
c

Răspuns: 1¦ { {  {   Ñ    {  


{
{ 
{ {  Ñ   
ccccccccccccccccccccc!"#
{ {
c   { Ñ    {   

c Ñ {"
c
c $
 %
 { 
  {   {
 { 
 {    
c {  {      { {       ÑÑ{ 
 
 
˜ ccccc


c  c c 

{     {    {  c 
   
  {   { 
  & ' ! ( )
 {{ 
{ " 

c
ccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccc
Structuri de date si tehnici de programare c
1¦ Arbori binari
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Testul de autoevaluare nr. 1

1. De ce expresiile aritmetice trebuie reprezentate prin arbori


binari?

2. Cate noduri interne are un arbore binar strict cu  frunze (• ) ?

Răspunsurile 3. Cum se poate defini prin recurenta un arbore -ar,in care


la test se vor fiecare nod care nu este frunza sa aiba cel mult  fii ( • ) si
da în spaţiul ordinea in care apar acestia sa aiba importanta ?
liber din
chenar, în
continuarea 4. Cum se poate defini parcurgerea unui arbore -ar in ordinea
enunţurilor RSD ?

5. Ce structuri de date se pot folosi la aplicarea algoritmului lui


Huffman astfel incat complexitatea sa timp sa fie liniara?¦
Justificati raspunsul¦

Răspunsurile la acest test se găsesc la pagina 10 a acestei unităţi de


învăţare¦



aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccc
c
Structuri de date si tehnici de programare c
1¦ Arbori binari
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Tema de autoinstruire nr. 1

Consultaţi bibliografia pentru a afla :

c 1. Cum procedeaza algoritmul lui Huffman in cazul nebinar ¦


c
2. Care este numarul de operatii efectuate de fiecare pas al
algoritmului prezentat de parcurgere a unui arbore binar in
ordinea simetrica,numar care depinde numai de numarul
de noduri ale arborelui si nu de forma lui¦
c
c
c
c
c
1.4. Comentarii şi răspunsuri la testele de autoevaluare
c
c Testul 1.
c
c 1. Operatorii care apar in expresiile aritmetice sunt operatori
c binari,care in general nu sunt comutativi (de exemplu
c scaderea,impartirea,exponentierea)¦De aceea,expresiile
c aritmetice trebuie reprezentate prin arbori binari,la ca re se
c face distinctie intre subarborele stang si cel drept¦
c
c 2. Un arbore binar strict cu  frunze ( • ) are -1 noduri
c
interne¦Aceasta proprietate se demonstreaza prin inductie
c dupa :pentru = ea se verifica¦Presupunand-o adevarata
c pentru arborii binari cu -1 frunze,fie un arbore binar cu 
frunze¦Suprimand doua frunze ale aces tuia,fiii aceluiasi nod
intern,se obtine un arbore ¶ cu -1 frunze,deci cu - noduri
interne,conform ipotezei de inductie¦Dar numarul de noduri
interne ale lui este egal cu numarul de noduri interne ale lui
¶ plus 1,adica -1¦

3. Un arbore -ar este fie vid,fie este alcatuit dintr -o radacina si


o lista ordonata cu  elemente (ô_1,ô_ ,«,ô) care sunt
arbori -ari¦Arborele ô se numeste subarborele de ordinul 
al radacinii¦Acesti subarbori au multimile de noduri disjuncte
doua cate doua¦

4. Se parcurge radacina,apoi subarborii radacinii


ô_1,ô_ ,«,ô in aceeasi ordine RSD¦

5. Se utilizeaza o coada pentru a memora nodurile interne ale


arborelui create de algoritm cu ponderile coresp unzatoare si
o stiva sau o coada pentru a memora cele  frunze care au
asociate cele  ponderi date initial ,sortate crescator¦ Din lista
liniara a frunzelor numai se scot noduri,la coada nodurilor
interne,generate in ordine crescatoare a ponderilor,se scot si
se adauga noduri¦

c
ccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccccccccc
Structuri de date si tehnici de programare c
1¦ Arbori binari
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Pentru a afla care sunt cele noduri cu cele mai mici ponderi
trebuie sa comparam ponderile a  noduri, situate in varful stivei
(fata cozii) frunzelor si situate in fata cozii nodurilor interne,ceea
ce se realizeaza cu o complexitate O(1)¦
Se elimina nodurile astfel gasite si se adauga un nou nod cu
ponderea egala cu suma celor doua ponderi la spatele cozii
nodurilor interne¦Deoarece numarul nodurilor interne create de
algoritm este egal cu %1,complexitatea lui folosind aceasta
structura de date este egala cu O()¦

1.5. Lucrare de verificare pentru studenţi

* -    {   {  {   {


  { {  
{   { 
 { 
{{ {   { { { {
  " .{
 
{ 
{  { 
{{

     { { 
{ " 

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
- însoţiţi programul de o documentaţie privind problema tratată,
c
modul de introducere a datelor şi aspecte deosebite folosite la
elaborarea programelor¦

¯ /  {  0 Ñ /- 12{   Ñ  {   {
   "

1.6. Bibliografie

[1] D¦ E¦ Knuth, {{    {{ { { {{  , Vol¦ I,Editura


Tehnica, Bucuresti, 17; retiparit, Editura Teora, 000¦
[ ] K¦Mehlhorn, {{ *  
 {  ô +
, Springer-Verlag,
Berlin,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
9 ++, Mc
c Graw Hill,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
,{{ ,
Mc Graw Hill, 000¦
[5] I¦ Tomescu, {{ *  
, Editura Universitatii din Bu curesti,
008¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccccccccccc
c
Structuri de date si tehnici de programare c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------
c

Unitatea de învăţare Nr. 2


SORTARE OPTIMA

Cuprins

Obiectivele unităţii de învăţare nr¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 1


¦1¦ Ce este sortarea si necesitatea utili zarii ei ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦ 1
¦ ¦ Un prim exemplu : Sortarea rapida (quick sort) ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 1
¦¦ Ce este un ansamblu (heap) ? ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 15
¦¦ Sortare optima ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 17
¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 0
¦6¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 1
¦7¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

Obiectivele Unităţii de învăţare nr. 2

După ce veţi parcurge această unitate de învăţare, veţi reuşi să:


ù Aflati principalele tipuri de algoritmi de sortare interna ;
ù Utilizati algoritmul de sortare rapida si sa deduceti
c complexitatea medie a acestuia;
ù Utilizati algoritmul de sortare de ansamble;
ù Aflati numarul asimptotic minim de comparatii de chei
efectuate de cel mai bun algoritm de sortare in cazul cel
mai nefavorabil

2.1. Ce este sortarea si necesitatea utilizarii ei


cccccccccc
Sa consideram o multime de  inregistrari ¯_1,¯_ ,«,¯,fiecare
continand o cheie 3 (1 ”   ) si o informatie asociata cu aceasta
cheie¦Cheile apartin unei multimi total ordonate 4 cu o relatie de ordine
notata ” (cum ar fi de exemplu relatia de ordine uzuala din multimea
numerelor reale sau ordinea lexicografica din multimea cuvintelor peste un
alfabet total ordonat)¦ * { { acestor inregistrari dupa cheile 3
presupune gasirea unei rearanjari a inregistrarilor sau gasirea unei
permutari (1)( )«) astfel incat sa avem :
3(1) ” 3( ) ” « ” 3(n)
Sortarea inregistrarilor dupa o anumita cheie este o operatie
importanta in vederea regasirii rapide a informatiei¦Vom vedea ca sortarea
poate reduce complexitatea operatiei de cautare a unei inregistrari de la
O() la O(log ),ceea ce este foarte mult pentru  mare¦Cum operatia de
cautare a unei inregistrari este foarte frecventa in bazele de date,deducem
importanta operatiei de sortare in vederea functionarii eficiente a

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc
Structuri de date si tehnici de programare
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------c
c
acestora¦IBM a estimat ca in jur de 5% din timpul total de calcul se
consuma cu operatii de sortare in aplicatiile comerciale ale calculatoarelor¦
In multe cazuri nu se doreste rearanjarea fizica a inregistrarilor in
memorie astfel incat cheile lor sa fie in ordine,ci numai existenta unui tabel
auxiliar care sa specifice ordinea inregistrarilor¦ Astfel pozitia  a tabelului
indica adresa inregistrarii 3 dupa sortare;aceasta metoda se numeste

 {  { { 
 ¦
O alta varianta este
 { { 
¦Se pastreaza inregistrarile sub
forma unei liste simplu inlantuite cu nod cap de lista¦Campul de legatura al
acestuia indica inregistrarea cu cheia cea mai mica,de care se inlantuie
toate celelalte inregistrari,in ordinea crescatoare a cheilor ; ultimul camp
de legatura este { {,care indica sfarsitul listei¦
In ceea ce urmeaza vom considera numai sortarea interna,care se
desfasoara numai in unitatea centrala a calculatorului ; pentru acest tip de
sortare criteriul de performanta va fi minimizarea numarului de comparatii
de chei necesare in procesul de sortare¦In cazul sortarii externe,cand
inregistrarile sunt asa de numeroase incat nu incap in me moria
interna,strategia de sortare este alcatuirea de siruri sortate cat mai lungi in
memoria interna,apoi depunerea ace stora pe memorii externe si in final
sortarea acestora prin interclasare¦Deoarece timpul de acces la memoria
externa este de sute de ori mai mare decat timpul necesitat de operatiile
din memoria interna,criteriul de eficienta in acest caz este minimizarea
numarului de citiri si scrieri de pe /in memoria externa,nu numarul de
comparatii de chei din memoria interna¦
Exista mai multe clase de algoritmi de sortare : prin  { { ,prin

  (
{ si  {),prin 
+  {  (metoda   si

 { { { {),
 { {  {
{,
 { {    {
{  

   { 
  etc¦
Sa mai amintim ca sortarea a avut un rol important in evolutia
calculatoarelor,datorita importantei practice a manipularii unor volume mari
de date,cum sunt cele rezultate de exemplu din recensamintele populatiei :
primele masini de prelucrarea automata a datelor,primele memorii
tampon,primii algoritmi folositi la prelucrarea datelor,primele studii privind
complexitatea algoritmilor au fost legate de algoritmii de sortare¦
c
c

2.2. Un prim exemplu : Sortarea rapida (quicksort)

˜ c * { { { { se incadreaza in familia algoritmilor de sort are prin



+{  sau  {
 ,care interschimba intre ele perechile de
elemente care nu sunt in ordine,adica prezinta inversiuni,pana cand astfel
de perechi nu mai exista¦
Sortarea rapida actioneaza asupra unui sir de inregistrari
¯_1,«¯ in felul urmator : Se utilizeaza doi indici si  care initial au
valorile =1 si ¦La pasul curent se compara cheile 3 cu 3 si daca nu
este necesara nicio schimbare (avem mereu  se descreste  cu 1 si se
repeta acest proces¦In momentul cand apare prima interschimbare se
creste  cu 1 si se continua compararea crescandu -l pe  pana cand apare
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare c
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------
c
o noua interschimbare¦Atunci se scade din nou  cu o unitate si asa mai
departe,pana cand ¦Deci la fiecare interschimbare se comuta regula de
variatie pentru  si  ;dupa scaderea lui  urmeaza cresterea lui ,apoi iarasi
scaderea lui s¦a¦m¦d¦
Fiecare comparatie va implica valoarea cheii 3_1 ;in momentul
cand ,prima inregistrare ¯_1 va fi deja in pozitia ei finala din sirul
sortat,deoarece toate inregist rarile cu chei mai mici decat ea au fost
mutate in stanga ei iar inregistrarile cu chei mai mari se gasesc la dreapta
ei¦
Astfel fisierul original a fost partitionat in doua subfisiere,in asa fel
incat problema initiala s-a redus la doua probleme mai simple si anume
sortarea fisierelor ¯_1,«,¯{-1} si ¯{+1} ,«, ¯¦
Putem aplica acelasi algoritm pentru fiecare din aceste subfisiere ;
este clar caracterul recursiv al acestui algoritm¦El ilustreaza bine tehnica
de programare numita    { »¦
In interiorul calculatorului,aceste subfisiere se pot reprezenta prin
perechi ( ),care sunt perechile de indici ai inregistrarilor de la capetele
subfisierelor,care se depun intr-o stiva care contine toate aceste perechi
( )¦Daca de fiecare data cand un fisier este partitionat se pune
perechea de indici care reprezinta fisierul cel mai mare in stiva si se
prelucreaza subfisierul ramas,stiva nu va contine niciodata mai mult de log
 perechi,deci necesita un spatiu mic de memorare¦

Aceasta procedura,propusa de C¦Hoare,se numeste


 {  { {
(5  
 ) si este eficienta pentru valori mari ale lui  ; de aceea este de
dorit ca fisierele scurte sa se sorteze prin alte metode,cum ar fi insertia
simpla¦
Algoritmul se poate scrie simplu ca o procedura re cursiva dupa cum
urmeaza :
cccccccccccccccccccccc
  - ."´# $
 - ."´#'%  /0´´/0 
   $
 %  ´.,x´/0$ 
 Ú  1. 
 %   ,x / 02$ 
 ..3x /.04$ 
 .5    %/.0 / 0 
  $
  %/0 /.0$ 
 1.3x - ."´. 3x#$
 .,x1 - .".,x´# 
  
cc
Sa notam cu QS() numarul mediu de comparatii de chei efectuate
de algoritmul de sortare rapida pentru a sorta un fisier cu  chei distincte
doua cate doua (fara a restrange generalitatea putem presupune ca
acestea sunt chiar numerele 1, ,«,)¦Daca sirul de chei de intrare este
chiar sortat,atunci procesul de partitionare se desfasoara ineficient si
numarul de comparatii de chei este patratic,deci algoritmul are
complexitatea O(^ ),insa vom arata ca QS()=O(log )¦
c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc
Structuri de date si tehnici de programare
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------c
c
Daca prima cheie este ,atunci in urma primei faze a algoritmului de
sortare rapida rezulta doua subfisiere de lungimi egale cu -1 si % ;daca
aceasta faza necesita +1 comparatii de chei,putem scrie :
QS() = ™(+1+QS(-1)+QS(%))/, unde suma se efectueaza de
la =1 la ¦
Se observa ca aceasta suma este egala cu QS() =
+1+ ™QS()/ pentru  • ,unde suma se efectueaza de la =0 la -
1¦Este evident ca QS(0)=QS(1)=0¦
Vom rezolva aceasta recurenta in felul urmator : aducand la acelasi
numitor gasim:
QS() = (+1)+ ™ QS(); scriind aceasta ecuatie pentru -1 si
scazand membru cu membru egalitatile obtinute gasim
QS()/(+1) = /(+1)+QS(-1)/¦
Daca notam P() = QS()/(+1), se gaseste
P() = /(+1)+P(-1) = /(+1)+ /+P(- ) = «= (1/(+1)+1/+ «+ 1/),
deoarece P(1) = 0¦Insa 1/(+1)+«+1/ = H_{+1}-/ ,unde H_{+1} =
1+1/ +«+1/(+1) este cel de al (+1)-lea numar armonic¦Conform
teoremei lui #  ,H_{}-ln  converge la constanta {{ (§ 0¦57),deci
QS() = (+1)(H_{+1}-/ ),expresie care este asimptotic egala cu ln 
= O(log )¦

2.3. Ce este un ansamblu (heap)?

Un tabel ordonat S[1],S[ ],«,S[] formeaza un {


{ (+{)
daca S[[/ ]] • S[] pentru orice ”   ,unde [/ ] reprezinta partea
intreaga din / ¦ Daca un astfel de tablou este un ansamblu , rezulta ca pe
prima pozitie se gaseste cel mai mare elem ent din tabel,ceea ce nu
implica faptul ca tabelul este ordonat descrescator¦D e exemplu,sirul
10,6,,,5 este un ansamblu¦Daca putem transforma un sir oarecare de
chei intr-un ansamblu,printr-o procedura de selectie cum este cea care va
fi descrisa in continuare,putem obtine un algoritm eficient de sortare¦
c
Algoritmul de sortare care urmeaza presupune ca trebuie sortate
cheile 3_1,«,3 ( • ) permutandu-le intre ele pe acelasi spatiu de
memorie¦

˜ c
Algoritmul sortarii de ansamble c

x /60,x´ 
 5x´  3x´!!*$!!*´ 
!*!*x 3x$ x!*x!   
 7
    7   7  7   71    ½$  7 
8  75 9 
½ !*71!*:7,x;´<77,x 
8 !2!*7´ 9
= !* !*7  
9 !* !   

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare c
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------
c

c
La pasul daca >1 suntem in faza de construire a ansamblului si
adaugam cheia 3 ;in caz contrar suntem in faza de selectie,cheia 3_1
este cea mai mare cheie dintre 3_1,«,3 ,interschimbam pe 3_1 cu 3
si trebuie sa restabilim proprietatea de ansamblu in multimea d e chei
3_1,«,3_{ -1},interschimband pe 3 in mod repetat cu cel mai mare
dintre fiii sai¦In faza de constructie  si  descreste la 1 ;in faza de
selectie =1 si descreste de la  la 1¦

öntrebare: c
9{  
 {{ {   
 {   {
{  {
 { { { 
+6"
c
c
c
c
c
cRăspuns:
c
c
{       {    { { { {  +
  
   
c { !{{ {  {{  {  { {{Ñ { Ñ{ { { 
c
c
 { { 
       7 " {  
  Ñ{  {{
c {{{{   
{{ 7" 
c
c

c
c
c
c
c
˜ cc Algoritmul de sortare prin 
 
{

Ideea algoritmului se bazeaza pe urmatoarea observatie : Daca 1 <


 ”  si inregistrarile ¯_1, « ¯_{-1} au fost rearanjate astfel incat 3_1 ”
3_ ” « ” 3_{-1},pentru a insera inregistrarea ¯_{} la locul ei in acest
sir,se procedeaza in felul urmator : Se compara pe rand noua cheie 3_ cu
cheile 3_{-1},3_{- }, «,descoperindu-se ca ¯_{} trebuie inserata intre
¯_{} si ¯_{+1},dupa care se muta inregistrarile ¯_{-1}, « ,¯_{+1} cu
cate o pozitie la dreapta in aceasta ordine si se depune inregi strarea ¯_{}
pe pozitia +1¦

x <  ½7´´´ 
 73x´!!*7´))*7 
 !2!* ´½ 
 )*: ,x;)* $  3x  5>´"
>´ !      
´ ) ' '  # 
½ )*: ,x;) 

D¦Shell a propus metoda de sortare prin insertie multipla,care
foloseste un sir de incrementi ++_{-1}, «, +_1 =1 pentru a sorta prin
aceasta metoda cheile situate la o distanta egala cu +_,«,+_1¦Prin
suprapunerea acestor sortari prin insertie in final se obtine sirul

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc
Structuri de date si tehnici de programare
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------c
c
sortat,deoarece +_1=1¦Algoritmul de sortare prin 
  { se poate
scrie astfel :

x <´ 3x´´x
  * <  87 ,x´ ´
"          
          
 ´      !* 4!*: , ;x4
43 #
 73 ´!!*7´))*7 
 !2!* 8 
½ )*: , ;)* $  3  5>´ 
8 )*: , ;) 
 

Printr-o alegere convenabila a incrementilor +,«,+_1 se pot
imbunatati performantele algoritmului de sortare prin insertie simpla,prin
micsorarea numarului de comparatii de chei¦

2.4. Sortare optima

Vom face un scurt studiu al algoritmilor de sortare bazat numai pe


relatia de ordine < intre chei¦Pentru simplitate,vom presupune toate cheile
distincte doua cate doua,deci exista numai doua raspunsuri posibile la
compararea a doua chei 3 si 3: fie 33 fie 383¦ Orice metoda
de sortare bazata pe compararea a  chei distincte poate fi reprezentata
printr-un arbore binar :fiecare nod intern contine doi indici 9 ,care
reprezinta o comparatie a cheilor 3 si K_j¦Daca 33 mergem in
subarborele stang al acestui nod si facem comparatiile indicate acolo,iar
daca 383 mergem in subarborele drept¦
Fiecare nod terminal (frunza) a acestui arbore contine o permutare
{_1{_ «{ a multimii {1, ,«,},reprezentand faptul ca algoritmul a
stabilit ordinea 3_{{_{1}}<3_{{_{ }}< « <3_{{_{}} a cheilor¦O comparatie
a lui 3 cu 3 in acest arbore semnifica o comparatie intre valorile
originale ale acestor chei,nu ale cheilor care ocupa in mod curent pozitiile 
si  ale fisierului dupa ce s-au facut interschimbari ale cheilor¦Daca nu se
fac comparatii redundante,fiecare permutare a cheilor defineste un drum
unic de la radacina arborelui la o frunza,deci exista exact  ! frunze intr-un
arbore care sorteaza  chei fara comparatii redundante¦Un {   
   este un arbore binar ale carui noduri au etichete de forma
393¦Cele doua muchii care ies dintr-un nod intern sunt etichetate cu <
si >¦Frunzele unui arbore de decizie reprezinta diferitele iesiri ale
algoritmului¦
Se spune ca un arbore de decizie binar rezolva problema de sortare
de dimensiune  daca exista o etichetare a frunzelor lui cu permutari ale
multimii {1, ,«,} astfel incat pentru orice sir de intrare 3_1,«,3,daca
frunza atinsa pentru aceasta intrare este etichetata cu permutarea ,atunci
3(1) ” 3( ) ” « ” 3()¦Se poate acum defini cazul cel mai
nefavorabil al complexitatii problemei de sortare¦Pentru un arbore de
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare c
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------
c
decizie vom nota cu +( ) {{ arborelui,adica numarul maxim de
nivel,daca nivelul radacinii este notat cu 0¦Este clar ca +( ) reprezinta
numarul maxim de comparatii de chei necesare pentru sortarea oricarui sir
de chei de lungime cuarborele de decizie  ¦Sa notam
*() = max_{ } +( ),
unde parcurge multimea tuturor arborilor de decizie pentru sortarea a 
elemente¦Deci *() este complexitatea minima in cazul cel mai nefavorabil
pentru orice algoritm de sortare care sorteaza  chei distincte¦Daca *() ”
,un arbore de inaltime are cel mult ^ frunze¦Un arbore pentru sortarea
a  chei are cel putin  ! frunze,deci ^*() •  !,deci *() • log n !¦
Folosind aproximatia lui *  pentru  ! obtinem ca log  ! =
(+1/ )log -/ln + O(1) = log -1¦+O(log ),logaritmul fiind in baza
¦
O margine superioara pentru *() se obtine de exemplu din analiza
algoritmului sortarii de ansamble : *() ” log  + O(),de unde se deduce
ca limita cand  tinde la ’ din *()/log  este egala cu 1¦
Deci *() este asimptotic egal cu log  ; putine valori ale functiei
*() sunt cunoscute,de exemplu *()=,*()=5,*(5)=6 etc¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc
Structuri de date si tehnici de programare
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------c
c

Testul de autoevaluare nr. 1

1. Sa se indice un algoritm pentru gasirea tuturor cheilor distincte


doua cate doua dintr-un sir de  chei care sa aiba complexitatea
O(log ) utilizand ideea de sortare¦

Răspunsurile
la test se vor
da în spaţiul 2. Se considera doua siruri de chei sortate _1 ” _ ” « ” si
liber din :_1 ” :_ ” « ” :¦Sa se scrie un algoritm care sa
chenar, în  {
  cele doua siruri de chei intr -un singur sir
continuarea sortat,continand ' chei,prin compararea de fiecare data a
enunţurilor celor mai mici chei din cele doua siruri¦Sa se arate ca un astfel
de algoritm face cel mult '-1 operatii de comparatii de chei¦

3. Care este numarul de comparatii de chei efectuate de alg oritmul


de sortare rapida in cazul unui sir deja sortat ?

4. Sa se arate ca orice algoritm care face comparatii a cate doua


chei va face cel putin -1 comparatii pentru a gasi maximum
(sau minimum) din  chei¦

5. Sa se arate ca prima cheie dintr-un ansamblu este cea mai mare


cheie din acel ansamblu¦

Răspunsurile la acest test se găsesc la pagina 0 a acestei unităţi de


învăţare¦



aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare c
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------
c

Tema de autoinstruire nr. 1

Consultaţi bibliografia pentru a afla :

c 1. Cum procedeaza algoritmul de sortare prin metoda  


c si pentru ce siruri acesta are o complexitate minima,egala cu
-1,cand sorteaza siruri de chei de lungime  ?¦

3. Cum pot fi rearanjate inregistrarile ¯_1«¯ sub forma


¯(1)«¯(),in acelasi spatiu de memorie,fiind data
c permutarea ?¦
c
c
c

2.5. Comentarii şi răspunsuri la testele de autoevaluare


c
c
c
c
c Testul 1.
c
c 1. Daca se compara cheile doua cate doua rezulta un algoritm
c cu complexitatea O(^ )¦Daca insa intai se sorteaza cheile cu
c un algoritm de complexitate O(log ) si apoi se face o trecere
c prin ele marind cu cate o unitatea valoarea unui contor de
c fiecare data cand intalnim o cheie diferita de cea precedenta,
c operatie de complexitate O(),rezulta in final un algoritm de
c complexitate O(log )¦
c
c 2. Se compara de fiecare data cea mai mica cheie din cele
doua siruri,care se gaseste pe prima pozitie curenta,iar cea
mai mica cheie dintre acestea se depune in sirul final _1 ”
_ ” « ” _{'}¦ In momentul cand unul dintre sir uri este
epuizat,se copiaza ceea ce a ramas din celalalt in sirul
final¦Deoarece orice cheie ajunge in sirul final fie in urma
unei comparatii,fie in urma unei copieri,este clar ca numarul
maxim de comparatii de chei este '-1,deoarece cel putin
o cheie se copiaza,cand unul dintre siruri este epuizat,iar cel
de al doilea mai contine o singura cheie¦
Se observa usor ca acest numar de comparatii de chei
poate fi atins¦


c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc
Structuri de date si tehnici de programare
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------c
c

3. Dupa fiecare faza a algoritmului de sortare rapida prima


cheie ramane pe loc,dar e ste comparata cu toate cheile
ramase¦Deci numarul total de comparatii de chei este egal
cu (-1)+(- )+ «+1 = (-1)/ = O(^ )¦

4. Un astfel de algoritm compara cheile cate doua si retine


maximum lor intr-un nod tata ; intreg procesul,cand nu
se fac comparatii redundante,se poate reprezenta
printr-un arbore binar strict cu cele  chei dintre care
se alege maximum drept frunze¦Deoarece exista 
frunze,vor exista -1 noduri interne¦Insa numarul de
noduri interne este egal cu numarul de comparatii
de chei,adica -1¦

5¦ Daca (3_1,«,3) este un ansamblu,atunci 3 • max


(3_{ },3_{ +1}) pentru orice  • 1¦ Rezulta ca oricare ar fi
indicele ,avem 3 ” 3_[/ ] ” 3_[[/ ]/ ] ” « ”3_1,
deoarece luand mereu partea intreaga din numarul 
care se imparte repetat la ,obtinem in final numarul 1¦

2.6. Lucrare de verificare pentru studenţi

* -    {  


 { {  
   +    {

 {  {
{+{
 " 

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
- însoţiţi programul de o documentaţie privind problema tratată,
modul de introducere a datelor şi aspecte deosebite fo losite la
c
elaborarea programului¦

¯ /  {  0 Ñ /- 12 {   Ñ  {   {
   "

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare c
c
¦ Sortare optima
------------------------------------------------------------------------------------------------------------------------
c

2.7. Bibliografie

[1] D¦ E¦ Knuth, {{    {{ { { {{  , Vol¦ I, Editura


Tehnica, Bucuresti, 17; retiparit, Editura Teora, 000¦
[ ] K¦ Mehlhorn, {{ *  
 {  ô +
, Springer-Verlag,
Berlin,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
9 ++, Mc
c Graw Hill,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
,{{ ,
Mc Graw Hill, 000¦
[5] I¦ Tomescu, {{ *  
, Editura Universitatii din Bucuresti,
008¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc
Structuri de date si tehnici de programare
c
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c

Unitatea de învăţare Nr. 3


REGASIREA INFORMATIEI

Cuprins

Obiectivele unităţii de în văţare nr¦  ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 


¦1¦ Ce este cautarea (regasirea informatiei) ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦ 
¦ ¦ Un prim exemplu : algoritmul de cautare binara ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
¦¦ Arbori binari optimi pentru cautare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
¦¦ Ce este un fisier cu autoorganizare ?¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦ 0
¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
¦6¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 
¦7¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 

Obiectivele unităţii de învăţare nr. 3

După ce veţi parcurge această unitate de învăţare, veţi reuşi să:

ù Aflati in ce consta regasirea informatiei si cum se clasifica


c metodele de cautare ;

ù Utilizati algoritmul de cautare binara si sa -i evaluati


performantele;

ù Aflati cum se construiesc arborii binari optimi pentru


cautare folosind programarea dinamica¦

3.1. Ce este cautarea (regasirea informatiei)


cccccccccc
De multe ori suntem confruntati cu urmatoa rea problema : cum
trebuie organizate datele astfel incat regasirea lor sa fie cat mai rapida¦In
general,vom presupune ca o multime de inregistrari a fost memorata si
ne punem problema sa avem acces cat mai rapid la o anumita
inregistrare¦Ca si in cazul sortarii,presupunem ca fiecare inregistrare
contine un camp special numit cheie dupa care se face cautarea¦Vom
impune cerinta ca cele  chei sa fie distincte,astfel incat fiecare cheie sa
identifice in mod unic inregistrarea asociata¦
Aceste cautari de obicei se fac in baze de date care contin fisiere de
mari dimensiuni¦
Algoritmii de cautare sunt prezentati cu argumentul cautarii 3 si
problema de cautare este de a gasi inregistrarea care are cheia 3¦Dupa ce
cautarea s-a incheiat,exista doua posibilitati : cautarea a fost cu
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Stucturi de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c
succes,localizandu-se unica inregistrare care are cheia 3 sau a fost fara
succes,negasindu-se nicio inregistrare cu cheia 3¦Dupa o cautare fara
succes este uneori de dorit sa inseram o noua inregistrare care contine
cheia 3 in tabel ; o metoda care procedeaza in acest mod se numeste un
{   { { 

  ¦
In general, la cautarea unei inregistrari cu o cheie data se ignora
orice alta informatie in afara cheii cautate¦Operatia de cautare este cea
care consuma cel mai mult timp in multe programe,astfel incat gasirea
unui algoritm eficient de cautare are o importanta deosebita¦
Metodele de cautare pot fi clasificate in multe feluri ; de exemplu o
clasificare poate fi in metode de cautare
{  si { ¦Aici cuvantul
static se refera la faptul ca tabelul in care se face cautarea este
neschimbat si dinamic inseamna faptul ca tabelul este supus frecvent la
insertii si suprimari de inregistrari¦Metodele de cautare se pot imparti de
asemenea in metode care folosesc valoarea reala a cheii si acelea care
utilizeaza chei transformate (prin anumite    

{ )¦De
asemenea vom vedea ca exista o anumita legatura intre sortare si
cautare,sortarea facand cautarea mai rapida¦Exista multe proceduri de
regasirea informatiei bazate p e structuri arborescente,iar cautarea unor
structuri de date cat mai eficiente in perspectiva cautarii continua si in
prezent¦

Vom discuta metode de cautare bazate pe ordinea liniara a


cheilor¦Dupa ce am comparat cheia 3 pe care o cautam cu o cheie 3 din
tabel,cautarea continua in functie de cazurile : 33 ; 33 ; 383"Cand
efectuam multe cautari intr-un tabel,este mai convenabil sa -l ordonam
dupa valorile cheilor cautate 3_1 <3_ < « <3 (am presupus ca orice
cheie nu apare de doua ori)¦Intr -un astfel de tabel,dupa compararea cheii
3 cu 3 avem fie : 33 (cand subfisierul ¯,¯_{+1}, « ,¯ nu mai
este luat in considerare) ; 33 (cautarea este incheiata) ; 383
(subfisierul ¯_1,¯_ , « ,¯ nu mai este cercetat pentru gasirea cheii
3)¦In fiecare dintre aceste cazuri am facut un progres substantial,inafara
cazului cand cheia 3 este apropiata de unul dintre capetele fisierului
initial¦Daca multimea ordonata de chei *={3_1<3_ < « <3} este
memorata in tabelul 3[1 « ] astfel incat 3[]=3 si cheia { se gaseste in
universul cheilor 4,pentru a decide daca { este un element al lui * il vom
compara pe { cu un element din tabel ;in caz ca { nu a fost gasit,vom
proceda in consecinta fie cu partea inferioara fie cu partea superioara a
tabelului¦Aceasta idee conduce la urmatorul algoritm general,din care
diferiti algoritmi particulari se obtin inlocuind liniile ( ) si (7) prin diferite
strategii specifice pentru alegerea variabilei next :

"x# Úx´   


"# <   
/Ú´  0 
"# Ú ?!/<0   5Ú 
"#  1!/<0 
"½#   < 3x
"8#Ú<,x  
"=#<   
/Ú´  0 
"9# 

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c
"@# !/<0  ABA
B


Cautarea liniara se obtine alegand next ĸlow;cautarea binara luand
next ĸ [(low+high)/ ] si cautarea prin interpolare alegand next ĸ low -
1+[({-3[low-1])(high-low+1)/(3[high+1]-3[low-1])]¦Corectitudinea
algoritmului este independenta de alegerea particulara facuta in liniile ( )
si (7)¦Daca {=3[next] atunci cautarea a fost cu succes,cheia fiind
gasita¦Daca {  3[next] stim ca { apartine lui * implica faptul ca { se
gaseste in multimea {3[low],«,3[high]}¦Daca high < low atunci { nu se
gaseste in *¦Daca high = low atunci next = high si deci { nu se gaseste in
*¦In aceste cazuri cautarea a fost fara succes¦Aplicarea algoritmului se
termina deoarece diferenta high ± low descreste cu cel putin o unitate la
fiecare executie a ciclului¦
La cautarea prin interpolare se presupun e ca s-au adaugat pozitiile
3[0] si 3[+1] si au fost completate cu chei artificiale¦Cazul cel mai
nefavorabil pentru algoritmul de cautare prin interpolare este O( ) (se
poate alege 3[0]=0,3[+1]=1,{=1/(+1) si * inclusa in intervalul deschis
(0,{))¦In acest caz avem mereu next=low si cautarea prin interpolare se
reduce la cautarea liniara¦Complexitatea medie este mult mai buna,ca si in
cazul cautarii binare,al carui algoritm il rescriem in conti nuare¦

3.2. Un prim exemplu : Algoritmul de cautare binara

˜ c c
 
Algoritmul de cautare care urmeaza realizeaza cautarea unei chei 3
intr-un tabel de inregistrari ¯_1,¯_ ,«,¯ ale caror chei sunt in ordine
crescatoare : 3_1<3_ < «<3n¦

  %  



x x´
 1´       $
 /",#60´ 7< 
% 
 !1!* ´ $ !5!* ´ ½  
!!*     
  3x  
½  ,x  

cccccccccccccccccccccccc
Acest algoritm poate fi asociat unui arbore de decizie binar ;nodurile
interne sunt etichetate cu numere naturale de la 0 la eticheta 
semnificand o comparatie cu cheia 3¦Daca cheia 3 a fost gasita ne
oprim,daca nu mergem in radacina subarborelui stang daca acesta este
nevid si facem comparatia cu cheia al carui indice eticheteaza aceasta
radacina daca cheia 33 si analog pentru subarborele drept daca cheia
383¦In cazul cand subarborele stang (drept) este vid avem cautare fara
succes si ajungem intr-o frunza ;frunzele sunt etichetate cu numerele 0,1,
« ,¦Daca ajungem in frunza cu eticheta 0 inseamna ca cheia cautata
33_1 ;pentru eticheta  avem 383 si pentru eticheta  cu 0< avem
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Stucturi de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c
situatia 3_{}<33_{+1}¦De exemplu,pentru =16 prima comparatie facuta
este cu cheia 3_8,iar 8 este eticheta radacinii¦Daca cheia 33_8 se
merge in subarborele stang al radacinii,comparand cheia 3 cu 3_ ;in mod
similar,daca cheia 383_8 se merge in subarborele drept si se compara
cheia 3 cu 3_1 etc¦O cautare fara succes conduce la una dintre frunze ;
de exemplu daca 3_6<3<3_7 ajungem in frunza cu eticheta 6¦Pentru a
face distinctie intre nodurile interne si frunze,primele se pot r eprezenta prin
cerculete iar frunzele prin patrate la desenarea arborelui¦
In cazul general,arborele binar care corespunde algoritmului de
cautare binara pentru  chei se poate construi astfel : daca =0 arborele
contine o singura frunza cu eticheta 0¦In c az contrar,eticheta radacinii este
cel mai mic intreg mai mare sau egal cu / ,notat cu ň/ , subarborele
stang este arborele corespunzator unei cautari binare pentru ň / -1
chei, iar subarborele drept este arborele corespunzator unei cautari binare
pentru [/ ] chei cu toate etichetele nodurilor marite cu ň / ¦
In mod asemanator,orice algoritm pentru cautarea intr-un tabel cu 
chei cu ajutorul comparatiilor neredundante poate fi reprezentat ca un
arbore binar in care nodurile interne sunt etichetate cu numerele de la 1 la
 si frunzele cu numerele de la 0 la ¦
ccccccccccccccccccccc
Reciproc,orice arbore binar cu  noduri interne (si +1 frunze)
corespunde unui algoritm valid de cautare a unei chei intr -un tabel sortat
cu  chei,daca etichetam nodurile interne si frunzele sale cu etichetele
0,1,1, , , « ,-1,-1,, in ordinea simetrica,de la stanga la dreapta¦
Metoda de construire a arborilor binari asociati algoritmului de
cautare binara permite sa se demonstreze prin inductie dupa  urmatorul
rezultat :
Daca ^{-1} ”  < ^,o cautare cu succes cu algoritmul de cautare
binara necesita cel mult  comparatii ;daca = ^-1,o cautare fara succes
necesita  comparatii de chei,iar daca ^{-1} ”  < ^-1,o cautare fara
succes necesita -1 sau  comparatii de chei¦
Aceasta inseamna ca pentru = ^-1 toate frunzele arborelui binar
se gasesc pe un singur nivel ,iar pentru ^{-1} ”  < ^-1 frunzele se
gasesc pe nivelele consecutive -1 si ¦
Rezulta ca numarul de comparatii de chei efectuate de algoritmul de
cautare binara atat in cazul unei cautari cu succes cat si a unei cautari fara
succes este majorat de [log ]+1 in cazul unui tabel care contine  chei in
ordine crescatoare¦
Se defineste lungimea drumului extern al unui arbore binar ca
fiind suma lungimilor (numarul de muchii) ale drumurilor care unesc
radacina cu frunzele lui si se noteaza cu #( )¦In mod analog lungimea
drumului intern,notata ( ),este suma lungimilor drumurilor de la radacina
lui la toate nodurile interne ale lui ¦Intre aceste doua marimi exista
relatia,independenta de forma arborelui, #( )-( ) = ,daca arborele
este un arbore binar strict cu  noduri interne¦
Modul de reprezentare a algoritmului de cautare binara ne permite
sa evaluam numarul mediu de comparatii de chei efectuate de acest
algoritm intr-un mod simplu : sa notam cu 9 numarul mediu de
comparatii de chei intr-o cautare cu succes,presupunand ca toate cele 
chei sunt egal probabile si cu 9  numarul mediu de comparatii intr-o

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c
cautare fara succes,presupunand ca fiecare dintre cele +1 intervale
dintre chei sunt de asemenea egal probabile¦Vom avea 9= 1+( )/ si
9 = #( )/(+1)¦Deoarece #(T) = ( )+ ,mai obtinem relatia
9 = (1+1/)9  ± 1¦
Aceasta formula are loc pentru toate metodele de cautare care corespund
unor arbori binari,adica metode care nu fac comparatii redundante de
chei¦Rezulta ca 9 este minim daca si numai daca 9  este minim¦Dar
lungimea drumului extern #( ) este minima numai daca toate frunzele se
gasesc pe cel mult doua nivele consecutive (ele se pot gasi pe un singur
nivel numai daca arborele este complet si = ^-1)¦Am vazut ca algoritmul
cautarii binare satisface aceasta cerinta,deci el minimizeaza numarul
mediu de comparatii atat in cazul cautarii cu succes cat si al cautarii fara
succes¦Singurul neajuns major al acestui algoritm es te caracterul static al
fisierului in care se face cautarea ;daca se fac multe inserari si stergeri de
chei trebuie sa folosim alte structuri de date arborescente mai putin
performante,dar care au de asemenea o complexitate logaritmica,cum
sunt {   + {,pe care ii vom introduce in paragrafele urmatoare¦

3.3. Arbori binari optimi pentru cautare

In continuare vom considera operatia de acces la o multime de chei


*,fiecare avand o anumita probabilitate de cautare ¦Daca o cheie are o
probabilitate mare,deci este cautata frecvent,este de dorit ca ea sa se
gaseasca aproape de radacina arborelui de cautare si deci sa fie gasita
repede¦Apare necesitatea gasirii unui arbore optim pentru cautare¦
Pentru =,avem tabelul alcatuit din cheile 3_1<3_ <3_¦Exista 5
arbori posibili de cautare,corespunzatori ordinii de comparare a cheilor :
(1)3_,3_ ,3_1 ; ( ) 3_,3_1,K_ ; ()3_ si apoi 3_1 sau 3_,dupa cum
cheia 3 este mai mica,respectiv mai mare decat 3_ ; )3_1,3_,3_ ;
5)3_1,3_ ,3_¦Daca probabilitatile d e cautare ale cheilor 3_1,3_ si 3_
sunt respectiv egale cu 5 ,atunci numerele medii de comparatii de chei
in cazul arborilor 1)²5) sunt egale respectiv cu + 5+ ; +5+ ;
+5+ ; +5+ ; + 5+ ¦Am obtinut astfel cinci expresii algebrice,pe
care le numim costurile arborilor respectivi ;in functie de valorile numerice
ale probabilitatilor 5 putem gasi expresia sau expresiile care
minimizeaza costul arborelui binar de cautare¦
Revenind la cazul general,vom lua in considerare si probabilitatil e
de cautare in cazul cautarilor fara succes (daca avem numai cautari cu
succes,probabilitatile cautarilor fara succes vor fi egale cu 0)¦
Fie multimea ordonata de chei *={3_1<3_ < « <3} si fie 
(respectiv 5) probabilitatea operatiei acces( {*) cand {=3 (respectiv
3{3_{+1}) pentru 1 ”  ( 0 ”  n)¦ Deci 5_0 este probabilitatea
ca cheia cautata 3 sa fie mai mica decat 3_1 si 5 este probabilitatea ca
cheia 383¦Rezulta ca 5 • 0 si suma tuturor acestor +1 numere
este egala cu 1¦ ( +1)-uplul (5_0,_1,5_1, « ,5) se numeste

  { {{  { 
¦
Deoarece numarul arborilor binari cu  noduri interne este de natura
exponentiala (el este de ordinul O(^ /¥),nu putem proceda direct
evaluand costurile tuturor a cestor arbori si apoi selectand minimul¦Vom
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Stucturi de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c
folosi un algoritm bazat pe ideile programarii dinamice,care afirma ca
subpoliticile unei politici optime trebuie de asemenea sa fie optime¦
Pentru aceasta fie un arbore de cautare pentru multimea * si sa
notam cu { nivelul (adancimea) nodului intern  (cel de al -lea nod intern
in ordinea simetrica) in arborele si cu  nivelul frunzei  (cea de a (+1)-
a frunza in ordinea simetrica sau frunza asociata intervalului dintre chei
(33_{+1}))¦Daca facem o cautare pentru elementul { din * si daca {
3,atunci il comparam pe { cu {+1 chei din arbore ;daca K {
3_{+1} atunci il comparam pe { cu  elemente din ¦Deci numarul
mediu de comparatii de chei este egal cu ™ (1+{)+™5 ,prima
suma facandu-se dupa = 1, « , si a doua dupa = 0, « ,¦
Vom numi aceasta expresie costul arborelui (relativ la distributia
data de probabilitati) si il vom nota cu cost( )¦Acesta este masura de baza
pentru eficienta operatiei acces ;numarul asteptat de comparatii de chei
este proportional cu cost( )¦
Daca (5_0,_1,5_1, « ,5n) este o distributie de probabilitati
fixata pentru multimea ordonata *={3_1 < 3_ < « < 3},un arbore binar
cu  noduri interne se numeste {   {    { {  pentru
multimea * daca costul sau cost( ) este minim in multimea tuturor
arborilor binari de cautare pentru multimea * ¦Pentru aceasta definitie nu
mai este necesar sa cerem ca suma tuturor numerelor nenegative
5_0,p_1,5_1, « ,5 sa fie egala cu 1 ;algoritmul care va fi prezentat
functioneaza in acest caz mai general¦
Pentru aceasta se va folosi programarea dinamica, construindu-se
in mod sistematic solutii optime pentru subprobleme de dimensiuni din ce
in ce mai mari ;algoritmul rezultat va avea complexitatea timp O(^) si
complexitatea spatiu O(^ )¦
Un arbore binar de cautare pentru multimea * are nodurile interne
etichetate cu 1, , « ,si frunzele cu 0,1, « , (sau ( ,3_1),(3_1,3_ ), «
,(3, ))¦Un subarbore are nodurile interne de forma +1,+ , « , si
frunzele , « ,, unde 0 ”  si %1¦Un astfel de subarbore este tot un
arbore de cautare, insa pentru multimea ordonata de chei {3_{+1}< «
<3}¦Sa notam ()_{+1}+ « ++5_+ « +5 si costul unui astfel
de subarbore cost()¦Daca radacina acestui subarbore este  (   
),atunci putem lega costul acestui subarbore de costurile subarborilor sai
stang si respectiv drept in modul urmator :
cost() = () + cost(-1) + cost()
daca se tine seama ca in cei doi subarbori numerele de nivel scad cu o
unitate,ceea ce conduce la aparitia termenului (),iar subarborele stang
are frunzele +1, « ,-1,iar subarborele drept frunzele +1, « ¦Daca
notam cu () costul unui subarbore optim cu ponderile ( _{+1}, «
, 5, « ,5) si presupunem ca () si () sunt definite pentru orice 0
,obtinem relatiile:
() = 0 si () = () + min ( (-1) + ()) pentru , (1)
unde minimul se ia dupa toti indicii  verificand      ,deoarece atat
subarborele stang cat si cel drept relativ la radacina  trebuie sa fie
minimi¦Daca pentru  notam cu ¯() multimea tuturor valorilor  pentru
care se atinge minimul in aceasta ecuatie,aceasta multime de indici
specifica toate valorile posibile ale radacinii  in cazul subarborilor optimi¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c
Ecuatia (1) ne da posibilit atea sa evaluam pe () succesiv,pentru %
 = 1, , « ,¦Exista (-1)/ = O(^ ) astfel de valori,iar operatia de
minimizare se efectueaza de ™(-) = ^/+O(^ ) = O(^) ori,unde
suma se face dupa = 1, « ,-1¦Deci un arbore de cautare minim se poate
obtine cu complexitatea timp O(^) si complexitatea spatiu
O(^ )¦Complexitatea timp se poate inca reduce la O( ^ ),folosind o
proprietate de monotonie a multimii de indici ¯()¦

˜ c Vom considera un exemplu de construire a unui arbore binar optim


de cautare in cazul =, 5_0=, _1=1, 5_1=0 _ =, 5_ =0 _=,
q_=, _=0, 5_=10¦Aplicand algoritmul descris se obtine (0,1) =
(0,1) = 5_0 + _1+ 5_1=5, (1, ) = (1, ) = , ( ,) = ( ,) = 6, (,)
= (,) = 1¦
Acum se calculeaza () pentru %= ,adica (0, ) = (0, ) +
min( (0,-1) + (, )) (unde  = 1, ) = 8 + min(,5)=11( = 1) ; (1,) =
(1,) + min ( (1,-1) + (,)) (unde = ,) =  + min(6,) = 1
(=); ( ,) = ( ,) + min( ( ,-1) + (,)) (unde =,) =16 +
min(1,6) = (=)¦
Valorile scrise in paranteze indica valorile lui pentru care minimul
este atins¦
Mai departe fie j%= : (0,) = (0,) + min ( (0,-1) + (,)) (unde
 = 1, ,) = 1 + min(1 ,11,11)= 5 ( = ,) ; (1,) = (1,) + min( (1,k-1)
+ (,)) (unde  = ,,) = 1 + min( ,16,1 ) = 1 (  = )¦Valorile ()
pot fi calculate recursiv deoarece (,j+1) = () + _{+1} + 5_{+1}¦In
final deducem (0,) = (0,) + min( (0,-1)+ (,)) (unde =1, ,,) =
(0,) + min(1, 7, , 5) (=)¦Rezulta ca radacina arborelui minim
este ,deci radacina subarborelui drept al radacinii  este  si subarborele
drept al lui  este bine determinat¦Subarbore le stang al radacinii  are
frunzele 0,1, ;el corespunde indicilor  = 0 si  = ¦Costul minim al unui
astfel de arbore este (0, ) = 11 si radacina sa este 1¦Acum subarborele
stang al lui 1 este frunza 0 si subarborele sau stang are radacina ,cu doi
fii care sunt frunzele 1 si ¦Putem transforma distributia initiala de ponderi
intr-o distributie de probabilitati impartind fiecare componenta cu suma
lor, ¦


 öntrebare: Va functiona corect algoritmul de cautare binara daca se modifica:
a) pasul 5 in l ĸ i in loc de l ĸ i+1 sau
 b) pasul  in u ĸ i in loc de u ĸ i -1?
c

c
Răspuns: c
˜ cccccc
a)Nu,se intra intr-un ciclu infinit cand l = u si K>K_u ;

b)Da¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Stucturi de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c

3.4. Ce este un fisier cu autoorganizare ?

Ideea {  { {  este simpla : Sa presupunem ca avem o


structura de date pentru multimea de chei *={_1,«,}¦In momentul
accesarii unui element din *,fie ,il deplasam pe  mai aproape de
punctul de intrare al structurii de date¦Pentru listele liniare, aceasta
inseamna ca atunci cand o inregistrare a fost gasita,ea este mutata la
inceputul listei¦Acest algoritm se implementeaza usor daca tabelul este o
lista liniara inlantuita¦Aceasta metoda va face urmatoarele accese la 
mai usoare,in sensul ca va micsora numarul de comparatii de chei,care se
fac secvential incepand cu cheia de la inceputul listei¦Astfel, elementele lui
* care sunt mai frecvent cautate vor obtine locuri mai bune,mai apropiate
de inceputul listei¦Sa mai notam ca nu se mentine explicit nicio
contabilitate a frecventei de cautare a unei chei,structura de date se
autoorganizeaza ca o structura de date eficienta¦
Analiza numarului asimptotic mediu de comparatii de chei la
cautarea unei chei se poate face folosind un {•{  cu  ! stari,unde
 este numarul cheilor,care corespund celor  ! permutari posibile ale
cheilor din *¦Acest lant Markov este    (digraful asociat este { 
) si {   ,deci probabilitatile limita stationare exista si se pot
calcula efectiv in functie de frecventele celo r  chei¦Astfel, se poate arata
ca numarul asimptotic mediu de comparatii de chei la cautarea cu succes
a unei chei nu depaseste dublul numarului optim de comparatii,care
corespunde cazului cand cheile sunt aranjate in ordinea descrescatoare a
frecventelor (care in general nu sunt cunoscute aprioric)¦
Vom mai da un exemplu de aplicare a acestei reguli de deplasare in
fata a unei inregistrari odata gasite : Prin operatiile insertie ( ),acces
(),acces (),suprimare (1),acces (),sirul de chei 1 se modifica astfel :
1 ĺ 1 ĺ  1 ĺ  1 ĺ  ĺ  ¦


c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c

Testul de autoevaluare nr. 1

1. Sa se arate ca un arbore binar strict cu  frunze are lungimea


drumului extern #( ) minima numai daca toate frunzele se
gasesc pe cel mult doua nivele consecutive¦

Răspunsurile 2. Sa se arate ca pentru orice arbore binar strict cu  noduri


la test se vor interne,exista urmatoarea relatie intre lungimile drumurilor
da în spaţiul externe si interne : #( )( )'!, indiferent de forma arborelui¦
liber din
chenar, în
continuarea
enunţurilor 3. Se poate inlocui testul  de la pasul al algoritmului de
cautare binara cu o conditie echivalenta,dar de egalitate ?

4. Sa se arate ca pentru orice algoritm de cautare a unei chei bazat


pe comparatii neredundante,reprezentat printr -un arbore binar
cu  noduri interne,exista urmatoarea relatie intre numarul mediu
de comparatii in cazul cautarii cu succes si fara succes,notate
prin 9 si respectiv 9 99(1'1;)9 %1¦

Răspunsurile la acest test se găsesc la pagina  a acestei unităţi de


învăţare¦



aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Stucturi de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c

Tema de autoinstruire nr. 1

Consultaţi bibliografia pentru a afla :

c 1. Care este expresia numarului asimptotic mediu


c
de comparatii de chei la cautarea unei chei in
c
c cazul fisierelor cu autoorganizare in functie de
c probabilitatile de cautare ale celor  chei¦
c
c 2. Evaluarea numarului de comparatii de chei
efectuate de algoritmul de cautare binara in cazul
cautarii cu succes si fara succes¦

3.5. Comentarii şi răspunsuri la testele de autoevaluare


c
c
c Testul 1.
c
c 1. Daca contine frunzele si  pe nivelul ~: si pe nivelul 
c astfel incat ~%<!,se poate defini un alt arbore binar strict
c  cu o lungime strict mai mica a drumului extern in felul
c urmator : Se transfera si  pe nivelul '1 ca fii ai lui :¦Tatal
c acestora devine frunza pe nivelul ~-1 si : devine nod intern
c pe nivelul ¦Se obtine # %# !~%~%'%!'~%%
c  • 1,deci nu poate avea lungimea minima a drumului
extern¦
Rezulta ca are toate frunzele pe un singur nivel daca 
este o putere a lui sau pe doua nivele consecutive 5-1 si 5
in caz contrar,unde 5 este cel mai mic intreg mai mare sau
egal cu log ¦

¦ Se poate aplica un rationament inductiv : presupunand


proprietatea adevarata pentru toti arborii binari stricti cu -1
noduri interne,o vom demonstra pentru arborii binari stricti
cu  noduri interne¦Fir un arbore binar strict cu  noduri
interne¦Suprimandu-i doua frunze,fii ale aceluiasi nod intern
 gasim un alt arbore binar strict _1 cu -1 noduri interne in
care  a devenit frunza¦Avem # _1# %% 
 %',deci # % # % '!!,deoarece
conform ipotezei de inductie,# % !%"

¦ Se poate inlocui cu conditia -1¦

¦ Exista relatiile 9' ; si 9 # ;' ;tinand


seama de se obtine relatia cautata¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Regasirea informatiei
------------------------------------------------------------------------------------------------------------------------
c

3.6. Lucrare de verificare pentru studenţi

* -    {   {


 {   {   {     
{ {   {  {  +Ñ  {     !'  {
 {{   { 
"×  Ñ {    { {    {    

Ñ  {
     { { { 
{   
{
{
 
 
"

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
c- însoţiţi programul de o documentaţie privind problema tratată,
modul de introducere a datelor şi aspecte deosebite fo losite la
elaborarea programului ¦

¯ /  {  0 Ñ /- 12{   Ñ  {   {
   "

3.7. Bibliografie

[1] D¦ E¦ Knuth, {{    {{ { { {{  , Vol¦ I, Editura


Tehnica, Bucuresti, 17; retiparit, Editura Teora, 000¦
[ ] K¦ Mehlhorn, {{ *  
 {  ô +
, Springer-Verlag,
Berlin,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
9 ++, Mc
c Graw Hill,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
,{{ ,
Mc Graw Hill, 000¦
[5] I¦ Tomescu, {{ *  
, Editura Universitatii din Bucuresti,
008¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Stucturi de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c

Unitatea de învăţare Nr. 4


ARBORI BINARI DE CAUTARE

Cuprins

Obiectivele unităţii de învăţare nr¦  ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 


¦1¦ Ce sunt arborii binari de cautare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
¦ ¦ Un prim exemplu : algoritm de cautare si insertie in arbore binar ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
¦¦ Arbori Fibonacci ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦ 6
¦¦ Ce este un arbore echilibrat dupa inaltime (AVL)? ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 1
¦6¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 
¦7¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 

Obiectivele Unităţii de învăţare nr. 4

După ce veţi parcurge această unitate de învăţare, veţi reuşi să:


ù Aflati rolul arborilor binari de cautare ;
ù Utilizati arborii de cautare ca structuri de date dinamice ;
c ù Aflati rolul arborilor Fibonacci printre arborii ec hilibrati dupa
inaltime ;
ù Utilizati arborii echilibrati dupa inaltime si sa -i reechilibrati
la inserarea/stergerea de chei prin rotatii simple/duble¦

4.1. Ce sunt arborii binari de cautare


cccc
Un {   {   { {  este un arbore binar care poate fi
vid¦Daca este nevid,el are urmatoarele proprietati :
1¦ Orice nod are o cheie, iar toate cheile arborelui sunt distincte;
¦ Daca subarborele stang al radacinii este nevid,atunci toate cheile din
acest subarbore sunt mai mici decat cheia din radacina ;
¦ Daca subarborele drept al radacinii este nevid,atunci toate ch eile din
acest subarbore sunt mai mari decat cheia din radacina;
¦ Atat subarborele stang cat si subarborele drept al radacinii sunt de
asemenea arbori binari de cautare¦
Sa observam ca proprietatile , si  implica de asemenea faptul
ca toate cheile din arbore trebuie sa fie distincte¦
Un arbore binar de cautare  { se obtine dintr-un arbore binar
de cautare adaugand in fiecare nod un nou camp,numit {g¦Rangul unui
nod ne arata pozitia relativa a nodului in subarborele a carui radacina
este,adica numarul de noduri interne din subarborele sau stang marit cu o
unitate¦
c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c

Algoritmul de cautare a unei chei 3 intr-un arbore binar de cautare


utilizeaza proprietatile unui astfel de arbore : mai intai cheia se cauta in
radacina ;daca cheia nu se gaseste acolo, atunci ea se cauta in
subarborele stang sau in subarborele drept,dupa cum 3este mai mica sau
mai mare decat cheia din radacina¦Daca subarborele in care urmeaza sa
se faca cautarea este vid,atunci avem o cautare fara succes si cheia
trebuie inserata in arbore,legata la stanga sau la dreapta nodului cu a
carui cheie s-a facut ultima comparatie,astfel incat arborele obtinut sa fie in
continuare un arbore binar de cautare¦
Acest algoritm este prezentat in detaliu in continuare¦

4.2. Un prim exemplu : Algoritm de cautare si inserare in arbore binar

˜ c c
 
Algoritmul de cautare care urmeaza realizeaza cautarea unei chei 3
intr-un arbore binar de cautare ,care poate fi accesat printr-un pointer ¯
catre radacina lui ¦Daca cheia 3 nu este in arbore,ea se va insera astfel
incat arborele extins sa ramana arbore de cautare¦Nodurile arborelui
contin urmatoarele campuri :
KEY(×) - cheia memorata in NOD(×) ;
LLINK(×) - pointer catre radacina subarborelui stang al lui NOD( ×);
RLINK(×) - pointer catre radacina subarborelui drept al lui NOD( ×)¦
Daca un subarbore este vid,atunci legatura catre radacina lui are
valoarea { {¦Se presupune ca este nevid,adica ¯={ {¦

      %%  



x ĸ)
  !1!CD" #´   $  !5!CD" #´  
$ !!CD" #´  
  !" #? G  ´  ĸ !" # 
$½ 
 ) !" #? G  ´  ĸ) !" # 
 
½  "E     '   ! 
%  # & - ĸ   "   
      
      %   
%    -# $!CD"-# ĸ!´ !"-#
ĸ  ´) !"-# ĸG    !   
 !CD" #    !" # ĸ Q,  ) !" # ĸ -   
   

Desi se demonstreaza ca in medie arborii rezultati in aceste mod
prin inserare succesiva de chei au totusi o inaltime logaritmica,de forma
O(log ),exista totusi posibilitate a ca sa apara arbori degenerati avand
inaltimea O()¦In acest caz cautarea se reduce la o cautare secventiala
intr-o lista liniara,avand complexitatea O()¦
Pentru a evita aceste cazuri critice,au fost propus e mai multe
subclase de arbori de cautare care a u inaltime logaritmica¦ Acesti arbori se

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Stucturi de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c
numesc {    + {¦O prima clasa de arbori echilibrati sunt {  i
${ care vor fi prezentati in continuare¦Alte clase sunt {  
 + { { { ô~ + { {   {   
%
etc¦
cccccccccccccccccccccc

4.3. Arbori Fibonacci

O clasa importanta de arbori echilibrati este clasa arborilor


${ ¦Sirul numerelor Fibonacci se defineste de obicei prin recurenta
$_{+ }=$_{+1}+$_ pentru orice  • 1,iar F_1=$_ =1¦Expresia explicita
a acestora este data de asa-numita formula a lui >(a se vedea testul
de autoevaluare nr¦ 1)¦Primii termeni ai sirului Fibonacci sunt urmatorii :
1,1, ,,5,8,1, 1,,55,8, «,fiecare numar din sir incepand cu al treilea
fiind egal cu suma celor doua numere care il preced¦
Arborii Fibonacci,notati prin ô$ ( = 0,1, ,«) se definesc prin
recurenta in felul urmator : ei sunt arbori binari etichetati ; ô$_0 si ô$_1
constau dintr-o singura frunza,etichetata cu 0 ; pentru  • , arborele
Fibonacci de ordinul , ô$ are radacina cu eticheta $,subarborele
sau stang este ô$_{-1} iar subarborele drept este ô$_{- } avand toate
etichetele nodurilor interne si ale frunzelor marite cu $,eticheta radacinii
lui ô$¦De exemplu,ô$_ are radacina cu eticheta 1 si frunze cu
etichetele 0 si 1,ô$_ are radacina cu eticheta ,subarborele sau stang
este ô$_ si subarborele drept este o frunza cu eticheta etc¦
Proprietatile de baza ale acestor arbori sunt enuntate in testul de
autoevaluare nr¦ 1,proprietati care intervin in demonstrarea rezultatului
care arata ca arborii echilibrati au inaltimea logaritmica¦Arborii Fibonacci
ô$ nu au lungimea drumului extern minima pentru  • 5,deoarece
incepand cu aceasta valoare a lui  frunzele lor nu se mai gasesc pe doua
nivele consecutive¦

4.4. Ce este un arbore echilibrat dupa inaltime (AVL) ?

Algoritmul de cautare si insertie in arbore binar poate produce arbori


de cautare buni cand datele de intrare sunt aleatorii,dar exista posibilitatea
obtinerii unui arbore de cautare degenerat de inaltime O( )¦O solutie la
problema mentinerii unui bun arbore de cautare cand se fac atat insertii
cat si suprimari de chei din arbore a fost propusa de G¦M¦Adelson-Velskii
si E¦M¦Landis in anul 16 ¦Aceasta metoda foloseste numai doi biti
suplimentari pe nod si numarul de operatii la cautarea sau inserarea unei
chei are complexitatea O(log )¦Aceasta abordare permite si
reprezentarea listelor liniare de l ungime astfel incat urmatoarele operatii
asupra listei sa fie efectuate in numai O(log ) unitati de timp :
1) gasirea unui articol avand o cheie data ;
) gasirea articolului cu numarul de ordine  in lista ;
) inserarea unui articol intr -un loc specificat ;
) suprimarea unui articol specificat¦
Daca se foloseste alocarea secventiala pentru liste liniare,operatiile
1) si ) sunt eficiente,dar operatiile ) si ) au o complexitate O( ) ;daca se
c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c
foloseste alocarea inlantuita,operatiile ) si ) sunt eficiente,dar 1) si ) au
o complexitate liniara in ¦
Reprezentarea listelor liniare sub forma de arbori echilibrati face ca
toate cele patru operatii standard sa se faca cu o complexitate egala cu
O(log )¦
Folosirea arborilor echilibrati pentru memorarea datelor in mem oria
interna este benefica pentru  mare¦
Un arbore binar se numeste  + { { { (sau {  
ô~) daca pentru orice nod intern al sau modulul diferentei dintre inaltimea
subarborelui stang si cea a subarborelui drept este cel mult egal cu
1¦${    +  din fiecare nod esteegal prin definitie cu inaltimea
subarborelui sau drept minus inaltime a subarborelui sau stang¦Deci daca
un arbore binar este echilibrat,atunci factorul de echilibru din fiecare nod
este egal cu 1,0 sau -1¦
Este clar ca orice subarbore al unui arbore echilibrat este de
asemenea echilibrat¦
Un arbore de cautare AVL este un arbore de cautare care este si
arbore AVL ;un arbore de cautare indexat AVL este un arbore de cautare
indexat care este si arbore AVL¦
Arborii AVL se reprezinta folosind schema de reprezentare
inlantuita pentru arborii binari ;in plus apare factorul de echilibru in fiecare
nod,care ajuta la reechilibrarea arborelui atunci cand se fac insertii si
suprimari de noduri¦
Definitia arborilor echilibrati AV L reprezinta un compromis intre
arborii binari optimi (cand toate frunzele se gasesc pe un singur nivel sau
pe doua nivele consecutive) si arborii binari oarecare¦Inaltimea unui arbore
echilibrat AVL cu  noduri interne este majorata de 1¦0log( + )-
0¦ 8,deci cautarea va fi in cel mai nefavorabil caz cu doar 5% mai lunga
decat in cazul arborilor optimi¦Se poate arata,de exemplu,ca o cautare intr -
un arbore echilibrat va necesita mai mult de 5 comparatii de chei numai
daca arborele are cel putin F_ 7 -1=16¦17 noduri¦
Sa studiem cum pot fi reechilibrati arborii AVL la inserarea unui nou
nod¦ Apare problema dezechilibrului cand exista un nod cu factorul de
echilibru egal cu 1 pentru care inaltimea subarborelui drept creste cu o
unitate in urma inserarii sau dual,daca factorul de echilibru este -1 si
inaltimea subarborelui stang creste cu o unitate¦
Exista numai doua cazuri care sunt esential distincte cand trebuie
facuta reechilibrarea :
-cazul 1 : nodul ô a capatat factorul de echilibru cand subarborel e
sau drept,de radacina > si subarbori  si si-a crescut inaltimea prin
cresterea inaltimii lui de la + la ++1 ;subarborele stang al lui ô este { de
inaltime +,iar subarborele stang al lui > este  de inaltime +¦Mai exista alte
doua cazuri esential identice daca schimbam stanga si dreapta intre
ele¦Situatia se rezolva printr-o rotatie simpla :acest subarbore se schimba
facandu-l pe > radacina,fiul sau stang este ô,cu subarborii { si ,iar
subarborele stang al lui > este de inaltime +'1¦Sa mai observam ca
ordinea subarborilor de la stanga la dreapta este tot { ,deci arborele a
ramas arbore binar de cautare,iar inaltimea acestui subarbore este tot
++ ,cat era inaltimea subarborelui de radacina ô inainte de aparitia
dezechilibrului in ô,deci aceasta rotatie simpla nu a produs alte

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Stucturi de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c
dezechilibre in arbore¦Acum nodurile ô si > au ambele factorul de echilibru
egal cu 0,iar pentru realizarea rotatiei simple a trebuit sa modificam exact
 campuri de legatura¦Desigur,pentru descoperirea nodurilor ô si > in
arbore,a trebuit sa memorizam ultimul nod parcurs cu un factor de
echilibru egal cu 1 in acest caz si sa modificam toti factorii de echilibru ai
nodurilor pe drumul de la ô la nodul nou inserat in arbore¦ Aceasta
operatie are de asemenea complexitatea O(log n ),inaltimea arborelui fiind
logaritmica¦
-cazul : factorul de echilibru al nodului ô a crescut la prin
cresterea cu o unitate a inaltimii subarborelui stang al lui >¦In acest caz
trebuie sa punem in evidenta radacina ? a subarborelui stang al lui >,care
are subarborii  si ;inaltimea unuia dintre ei a crescut de la +-1 la
+¦Subarborele stang al lui ô este {,de inaltime + si subarborele drept al lui
> este de inaltime +¦Fiul drept al lui ô este >,iar fiul stang al lui > este ?¦
Rotatia dubla reface echilibrul facandu-l pe ? radacina a
subarborelui,cu fiul stang ô,care are subarborele stang { si subarborele
drept  si fiul drept > cu subarborele stang si subarborele drept ,astfel
incat ordinea subarborilor este tot {  ,deci ramane arbore de
cautare¦Factorul de echilibru al radacinii ? devine 0,iar inaltimea intregului
subarbore dupa rotatia dubla este tot ++ ¦Numarul de legaturi modificate
este egal cu 5¦

˜ c Arborii echilibrati pot fi utilizati pentru a reprezenta listele liniare


astfel incat insertiile de chei sa se faca rapid (depasind dificultatile alocarii
secventiale),dar si accesele aleatorii la elementele listei (depasind
limitarile alocarii inlantuite)¦Pentru aceasta se folosesc arborii binari de
cautare indexati care contin campul RANG in fiecare nod¦Reamintim ca
acest camp indica pozitia relativa a nodului respectiv in subarborele
sau,adica numarul de noduri din subarborele sau stang plus o unitate¦
Folosind campul RANG regasirea dupa pozitie se face modificand
algoritmul de cautare in arbore binar¦
Fiind data o lista liniara reprezentata ca un arbore binar,algoritmul
care urmeaza gaseste al -lea element al listei (al -lea nod al arborelui in
ordinea simetrica),fiind data valoarea lui ¦Arborele binar se presupune
reprezentat astfel incat fiecare nod are campurile LLINK si RLINK,un camp
RANG si un nod cap de lista¦

   %%  '   


x Fĸ.´ ĸ) !"GC #
    G          
"    . 
    %.4># 
 ´  F1) H" #     $  F5) H" # 
$  F) H" #  
"    . 3 #
 ĸ !" #  
 FĸF3) H" #´ ĸ) !" #  

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c

 öntrebare: In ce mod poate fi utilizat un arbore binar de cautare pentru a so rta 


chei?
 c

c
c
c
c
Răspuns: Se c insereaza cele  chei intr-un arbore binar de cautare,initial vid si apoi
se aplica algoritmul de traversare cin inordine (ordinea simetrica),ceea
˜ ccccc


c  c c 

ce va produce sirul sortat al celor  chei¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Stucturi de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c

Testul de autoevaluare nr. 1

1¦ Sa se arate ca numerele Fibonacci au expresia :

$=1/¥5((1+¥5)/ )^-1/¥5((1-¥5)/ )^ (Formula lui >)¦

2. Sa se arate ca arborii Fibonac ci ô$ ( • 1) sunt arbori


Răspunsurile echilibrati care au inaltimea +(ô$)=-1,$_{+1} frunze si
la test se vor $_{+1}-1 noduri interne¦
da în spaţiul
liber din
chenar, în 3. Sa se arate ca arborii Fibonacci de ordinul ++1, ô$_{++1} au cel
continuarea mai mic numar de noduri interne in multimea arborilor echilibrati
enunţurilor de inaltime + si acest numar minim de noduri interne este egal
cu $_{++ }-1¦

4. Sa se justifice faptul ca inaltimea unui arbore echilibrat cu 


noduri interne se afla cuprinsa intre log( +1) si 1¦0log(+ )-
0¦ 8,logaritmii fiind in baza ¦

Răspunsurile la acest test se găsesc la pagina 1 a acestei unităţi de


învăţare¦




c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c

Tema de autoinstruire nr. 1

Consultaţi bibliografia pentru a afla :

c
c 1. Cum se definesc si ce performante au arborii de
cautare echilibrati dupa pondere,pondere care se
defineste in functie de numarul de frunze din cei
doi subarbori,stang si drept¦
c 2. Cum se pot folosi arborii echilibrati indexati
c
pentru reprezentarea listelor liniare,astfel incat
atat insertia cheilor cat si accesul dupa pozitie in
lista sa se faca rapid,combinand astfel avantajele
alocarii secventiale si ale alocarii inlantuite¦

3. Ce sunt si ce proprietati au arborii splay¦

4. Proprietatile >-arborilor ca extindere a arborilor


binari de cautare pentru memoria secundara¦

4.5. Comentarii şi răspunsuri la testele de autoevaluare


c
c
c Testul 1.
c
c 1. Numerele Fibonacci $ verifica recurenta
c $_{+ }=$_{+1}+$ pentru orice  • 1,iar $_1=$_ =1¦ Se
c cauta o solutie a acestei recurente de forma $= @ si se
c obtine ecuatia caracteristica ^ - -1=0 cu solutiile _{1, }=
c (1+¥5)/ si (1-¥5)/ ¦Solutia generala a recurentei date este
c $=9_1( _1)^+9_ ( _ )^¦Punand conditia $_1=1 si
c $_ =1 se obtine 9_1=1/¥5 si 9_ =-1/¥5¦
c
c 2. Proprietatea se justifica prin inductie dupa  :pentru =1 si
= proprietatea se verifica¦Daca se presupune ca ea este
adevarata pentru toti arborii ô$_{k¶} cu   si daca ô$
este un arbore Fibonacci de ordinul  ( • ),gasim
+(ô$)=+(ô$_{-1})+1=-1,numarul frunzelor lui ô$ este
$+$_{-1}=$_{+1},deci numarul nodurilor interne este
$_{+1}-1¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Stucturi de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c

Proprietatea de echilibru se verifica de a semenea prin inductie


pentru toate nodurile diferite de radacina lui ô$¦Pentru radacina
lui ô$ subarborele sau stang are inaltimea - si subarborele
sau drept are inaltimea -,deci ô$_ este echilibrat¦

3. Fie + un astfel de arbore cu numarul m inim de noduri


interne ;rezulta ca unul dintre subarborii radacinii,sa spunem cel
stang,are inaltimea +-1 si cel drept are inaltimea +-1 sau +-
¦Cerinta relativa la numarul minim de noduri implica faptul ca
subarborele stang are inaltimea +-1 si cel drept are inaltimea +- ¦
Deci putem presupune ca subarborele stang al radacinii este
_{+-1} si cel drept este _{+- }¦Acest argument ne conduce la
demonstrarea prin inductie a proprietatii ca ô$_{++1} are numarul
minim de noduri interne in multimea arborilor ec hilibrati de
inaltime + si ca acest numar minim de noduri este egal cu
$_{++ }-1¦

¦ Un arbore binar de inaltime + are cel mult ^+ frunze,deci +1
” ^{+( )},deci +( ) • log(+1)¦Din problema anterioara se
deduce  • $_{++ }-1 =1/¥5((1+¥5)/ )^{++ }-1/¥5((1-¥5)/ )^{++ }
-1¦Deoarece (1-¥5)/ se gaseste in intervalul ( -1,0),rezulta  •
{^{++ }/¥5- ,unde {=(1+¥5)/ >1¦Prin logaritmare se obtine
inegalitatea cautata¦

4.6. Lucrare de verificare pentru studenţi

* -   {  { { { {  


 

  {
 +  % {  {   { { "ô { { {Ñ  { {
{ 
  {{  { 
{Ñ  {  {    { { " 

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
- însoţiţi programul de o documentaţie privind problema tratată, modul de
c introducere a datelor şi aspecte deosebite folosite la elaborarea
programului¦

¯ /  {  0 Ñ /- 12{   Ñ  {   {
   "

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Arbori binari de cautare
------------------------------------------------------------------------------------------------------------------------
c

4.7. Bibliografie

[1] D¦ E¦ Knuth, {{    {{ { { {{  , Vol¦ I,Editura


Tehnica, Bucuresti, 17; retiparit, Editura Teora, 000¦
[ ] K¦ Mehlhorn, {{ *  
 {  ô +
, Springer-Verlag,
Berlin,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
 9++, Mc
c Graw Hill,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
,{{ ,
Mc Graw Hill, 000¦
[5] I¦ Tomescu, {{ *  
, Editura Universitatii din Bucuresti,
008¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Stucturi de date si tehnici de programare
c 5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c
c

Unitatea de învăţare Nr. 5


DISPERSAREA MEMORIEI

Cuprins

Obiectivele unităţii de învăţare nr¦ 5 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 


5¦1¦ Ce este dispersarea memoriei ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
5¦ ¦ Un prim exemplu : algoritm de cautare si insertie in tabele dispersate si inlantu ite ¦¦¦ 6
5¦¦ Dispersarea cu adresare deschisa ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
5¦¦ Ce este dubla dispersare? ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
5¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
5¦6¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 5
5¦7¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5

Obiectivele unităţii de învăţare nr. 5

După ce veţi parcurge această unitate de învăţare, veţi r euşi să:


ù Aflati ce este disperarea memoriei ca metoda de cautare
c cu chei modificate;
ù Utilizati algoritmii de cautare si insertie in tabele dispersate
atat in cazul dispersarii cu inlantuire,cat si in cazul
dispersarii cu adresare deschisa;
ù Aflati cum pot fi imbunatatite performantele adresarii
deschise prin folosirea dispersarii duble¦

5.1. Ce este dispersarea memoriei


c
Pana acum am considerat metode de cautare care se bazau pe
compararea unei chei 3 cu cheile existente intr-un tabel de date¦O alta
posibilitate este sa facem mai intai un calcul asupra cheii 3,calculand
valoarea unei functii de cheia 3,utila in localizarea cheii 3 in tabel¦
Folosind 

{ { (+{
+),cheia 3 va fi cautata in fisierul
+3"Functia + aplica universul 4 al cheilor in numerele fisierelor din tabela
:
+94 ĺ {A%}
Spunem ca o cheie 3 

{ { in fisierul +3 si ca +3 este
valoarea Ñ    

{  pentru cheia 3¦Scopul utilizarii unei astfel
de functii este acela de a reduce dimensiunea fisierului (subtabloului) in
care cautam cheia 3¦In loc sa cautam printre |4| chei,reducem cautarea
printre aproximativ |4|/ chei,daca cheile sunt distribuite uniform in
c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c
cele  subtablouri prin functia de dispersare +¦Doua chei distincte 3 si
3_care au aceeasi functie de dispersare,adica +3+3 se spune ca
au o    si vom studia algoritmi efectivi pentru rezolvarea
coliziunilor¦Deci ideea cautarii prin dispersare este aceea de a neglija
anumite aspecte ale cheii si sa utilizam aceasta informatie partiala,
exprimata prin +3drept baza a cautarii¦Valoarea functiei de dispersare
+3 determina adresa de unde incepe cautarea efectiva a cheii 3¦
Pentru a utiliza aceasta metoda,trebuie sa luam in considerare doua
decizii independente:mai intai trebuie sa alegem o functie de dispersare
+3 si apoi sa gasim o metoda de rezolvare a coliziunilor¦Functia de
dispersare trebuie desigur sa fie determinista,adica o aceeasi intrare 3
trebuie sa determine intotdeauna aceeasi iesire +3)¦Daca |4|> nu
putem evita coliziunile,iar alegerea unei func tii de dispersare bune poate
sa echilibreze numerele de chei care disperseaza la aceeasi adresa¦
Exista doua metode simple pentru definirea functiilor de dispersare:
prin impartire si prin inmultire¦Daca cheile sunt numere reale pozitive si
subunitare,0 ” 3 <1,putem defini functia de dispersare ca fiind partea
intreaga din 3,adica Ñ3[3]¦
In cazul cand cheile sunt numere naturale,definirea unei functii de
dispersare + prin impartire se poate face cu formula +33 unde
de obicei  este un numar prim¦
In cazul definirii prin inmultire,mai intai se alege o constanta
subunitara, 0<ô<1 si se extrage partea fractionara a lui 3ô,adica se pune
0 in stanga virgulei acestui numar¦
Apoi se inmulteste acest numar cu  si se considera partea
intreaga a rezultatului,deci +3[3ô   ]unde 3ô    este
partea fractionara a lui 3ôadica 3ô%[3ô]¦
De exemplu,daca ô=(¥5 ± 1)/ § 0¦6180,atunci pentru aceasta
alegere dispersarea se numeste 

{ ${  si functioneaza bine
pentru multimi de chei in progresie aritmetica¦
Exista si metode pentru calcularea functiei de dispersare care se
bazeaza pe teoria algebrica a codurilor ; ideea este similara cu metoda
impartirii expusa mai inainte,numai ca impartirea se face cu un polinom
modulo ,in loc sa se imparta cu un intreg¦Pentru aceasta se considera
!@
si se foloseste un polinom fixat de gradul
in variabila  :
×@
'&
%)@&
%)''A¦O cheie 3 se transforma in numar binar
3&%)A! si acestuia i se asociaza polinomul 3&%
)@&%)'  ''A" Apoi se calculeaza restul impartirii polinomului
3 la polinomul ×adica 3 ×+&
%)@&
%)''+'+A
folosind aritmetica polinomiala modulo ¦In final se defineste
+3+&
%)++A!¦Daca polinomul × este bine ales,aceasta
functie de dispersare poate garanta evitarea coliziunilor intre chei care
difera pe putine pozitii ca numere binare¦De exmplu,daca =15,
=10 si
×@A'@B'@C'@D'@!'',se poate arata ca +3 este diferit de
+3! cand 3 si 3! sunt chei distincte care difera pe mai putin de
sapte biti¦
ccc

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
c 5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c
c
5.2. Un prim exemplu : Algoritm de cautare si insertie in tabele
dispersate si inlantuite

˜ c c
 
In cazul rezolvarii coliziunilor prin inlantuire se depun toate inregistrarile
ale caror chei disperseaza la aceeasi adresa intr-o lista inlantuita¦
Subtabelul  (0 ”  ” -1) contine un pointer catre capul de lista al
elementelor pentru care cheia 3 verifica +3)=¦Daca sunt  chei si  liste
inlantuite umplute uniform,lungimea medie a unei liste in care trebuie sa
facem cautarea este ;,deci dispersarea poate reduce numarul de
comparatii secventiale de chei cu un factor de ordinul lui ¦
Pentru a accesa o cheie  calculam mai intai +apoi cautam cheia
 in lista +"Operatiile de insertie sau stergere ale cheii  se
implementeaza la fel ca aceste operatii in listele inlantuite folosind
legaturile de inlantuire¦Aceste liste se pot pastra ca arbori binari de
cautare indexati,astfel incat sa putem regasi rapid o cheie sau putem folosi
ideea de fisiere cu autoorganizare¦
Urmatorul algoritm propune o rezolvare posibila acestei probleme,
permitand listelor inlantuite ale inregistrarilor ale caror chei disperseaza la
aceeasi adresa sa se intrepatrunda¦In acest algoritm se lucreaza numai c u
cheile inregistrarilor¦Se cauta intr-un tabel cu  noduri o cheie 3¦Daca
aceasta cheie nu este in tabel si tabelul nu este plin,ea se insereaza¦
Nodurile tabelului se noteaza cu TABLE[ ] pentru 0 ”    si ele
sunt de doua feluri : libere si ocupate¦Un nod ocupat contine campul
KEY[],campul LINK[] si eventual si alte campuri¦Algoritmul foloseste o
functie de dispersare +3 si o variabila auxiliara ¯ pentru a gasi spatiile
libere¦Atunci cand tabelul este vid avem ¯'¦Dupa ce se vor face
insertii,TABLE[] este ocupat pentru toti  care verifica inegalitatile ¯   
¦Se mai presupune ca TABLE[0] este intotdeauna liber¦

         %   


  

x  ĸ "!#,x 
 '   IC/ 0 %´8 
 !!CD/ 0   
  !" #? G  ´ ĸ !" # 
 
½  "E       '
   !  %#    )      

    IC/)0   
)>´    ´ !/ 0 ĸ)´
ĸ) 
8   " '     #   '  IC/ 0  
$!CD/ 0ĸ!  !/ 0ĸG  


De exemplu,pentru =7,+33  7) si tabelul initial liber,daca
se cauta cheile 5,1, ,75, ,18,50 acestea nu se gasesc in tabel si se

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c
insereaza pe rand,obtinandu -seTABLE[1]= ,TABLE[ ]=50, TABLE[]= ,
TABLE[]=18, TABLE[5]=75, TABLE[6]=5 si TABLE[7]=1¦
Pentru gasirea cheilor  ,50,  si 5 se face cate o comparatie de
chei, pentru 1 se fac comparatii,pentru 75 se fac  comparatii si pentru
gasirea cheii 18 se fac  comparatii,rezultand o medie de 1/7=1¦857
comparatii de chei¦Daca se cautau cheile prin cautare secventiala intr -o
lista liniara numarul mediu de comparatii era de (1+ +++5+6+7)/7=¦

Complexitatea algoritmilor de dispersarea memoriei se evalueaza in


urmatoarele ipoteze :
1) Functia de dispersare +94 E &A%} distribuie universul in mod
uniform,adica pentru orice  din {0,1,«,-1} avem |+^{-1}()|=|+^{-1}()|;
) Toate elementele din 4 sunt egal probabile ca argumente ale
operatiilor luate in considerare (cautari,inserari,suprimari de
elemente),adica argumentul operatiei de ordin  este egal cu  din 4cu
o probabilitate egala cu 1/| 4|,adica probabilitatea ×+;
pentru orice 1 ”  si 0 ” %¦Acest tip de dispersare se numeste


{ 
{ Ñ {¦Verificarea acestor ipoteze in aplicatiile
practice este discutabila¦
c

5.3. Dispersarea cu adresare deschisa

O alta cale de rezolvarea problemei coliziunilor este aceea de a


renunta definitiv la legaturi,cercetand diferitele pozitii ale tabelului una cate
una si fie gasind cheia 3 sau gasind o pozitie libera¦Ideea de baza este
formularea unei reguli dupa care pentru fiecare cheie 3 se determina un
sir de verificari,adica un sir de pozitii din tabel unde cheia 3 este
cautata¦Daca se intalneste o pozitie libera la cautarea chei i 3,folosind sirul
de verificari determinat de 3,ajungem la concluzia ca cheia 3 nu se afla in
tabel,deoarece acelasi sir de verificari va fi facut de fiecare data cand se
cauta cheia 3¦Aceasta clasa generala de metode s -a numit { 
{ 

+
{ de W¦W¦Peterson [IBM J¦ Research&Development 1(157),10 -
16]¦In adresarea deschisa toate cheile sunt memorate in tabela de
dispersare ;cand aceasta se umple nu se mai pot face alte insertii¦In locul
utilizarii pointerilor se calculeaza sirul de pozitii din tabel c are trebuie
examinate¦
Cea mai simpla schema de adresare deschisa se numeste numeste
cautare liniara si ea foloseste urmatorul sir ciclic de cautari : +3+3%
A%%!+3'¦
Urmatorul algoritm cauta o cheie 3 intr-un tabel cu  noduri¦Daca
cheia 3 nu se gaseste in tabel si tabelul nu este plin,atunci 3 se insereaza¦
Nodurile tabelului se noteaza prin TABLE[ ] pentru 0 ”  %1 si ele sunt
de doua feluri : libere si ocupate¦Un nod ocupat are un camp KEY[ ] care
contine o cheie si posibil si alte campuri¦Pentru evidenta numarului de
noduri ocupate din tabel se foloseste o variabila auxiliara  ; ea se mareste
cu o unitate de fiecare data cand se insereaza un nou nod¦Algoritmul
foloseste o functie de dispersare +3"

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
c 5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c
c
˜ c
         % 
  

x   "!#
    IC/ 0   %       ' 
 !CD/ 0!´        " 3  
  !# 
  ĸ 3x$  1>´   ĸ ,  
 E  3x´
   
          ! "  
  %      3x´   #  '
ĸ,x´ ' IC/ 0 !CD/ 0 ĸ! 

Reluand exemplul precedent cu =7,+33 ( 7),tabelul initial
neocupat si sirul de chei 5,1, ,75, ,18,50,aceste chei s e insereaza pe
rand in tabel si vom avea : TABLE[0]= ,TABLE[1]=18,TABLE[ ]= ,
TABLE[]= 75,TABLE[]=1,TABLE[5]=5 si TABLE[6] liber;cheia 50 nu
mai poate fi inserata in tabel¦

 öntrebare:   {    { { 


 
   { 

{ 
+

  { {   
  { {   {   {  { {{     { 
c
{%
 {   { { 
 {6" 

c
c
c
c
Răspuns: c
{  
˜ cc   { {     {c { {   {  {  
 

ccc


c  c c 

+{ { {{3 
{

{
  { %    Ñ {  

{{{   { {
{
 {  {{

  
 {{  
 %"

Experienta de calcul in cazul cautarii liniare ne arata ca algoritmul


functioneaza bine pana cand tabelul incepe sa se umple si procesul
devine lent,deoarece se fac cautari secventiale in liste lungi¦In
consecinta,performanta cautarii liniare se degradeaza rapid atunci c and 
se apropie de valoarea lui  deoarece liste izolate se combina in liste
lungi¦De fapt cand =-1 exista numai o pozitie libera in tabel si numarul
mediu de cautari in cazul unei cautari fara succes este egal cu ( +1)/ ¦
O cale pentru a ne proteja de acest fenomen este utilizarea
urmatoarei idei : in loc sa cautam in pozitii consecutive ale tabelului,sirul
de pozitii ale tabelului in care facem cautarea sa depinda de cheia pe care
o cautam cat si de numarul operatiei de cautare¦
Pentru a determina pe care pozitie a tabelului sa facem
cautarea,vom extinde functia de dispersare pentru a include printre
argumente si numarul cautarii (plecandu -se de la 0)¦In acest fel functia de
dispersare devine h :U x {0,1,«,m-1} ĺ {0,1,«,m-1}¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c
Atunci cand folosim adresarea deschisa vom impune cerinta ca
pentru orice cheie 3, sirul pozitiilor unde facem cautari,
<+(3,0),+(3,1),«,+(3,-1)> sa fie o permutare a multimii {0,1, « ,-
1},pentru a putea avea acces la toate pozitiile tabelului de dispersare
atunci cand facem cautarea¦Folosind aceasta idee de cautare si
insertie,algoritmul de cautare si insertie in tabele dispersate si inlantuite
folosind o functie de dispersare de doua variabile devine :

x >
 7 "!´ #
  IC/70´½ $ '
 !CD/70!  

  3x´     
 ,x 
½  ' IC/70 !CD/70!" 3
  ! %# 

Deoarece algoritmul propus atunci cand face cautarea cheii 3 cauta


in aceleasi pozitii ca atunci cand cheia 3 a fost inserata in tabel,cautarea
se poate termina fara succes atunci cand se gaseste o pozitie libera in
tabel (datorita acestui argument cheile nu pot fi sterse din tabel decat cu
suprimarea spatiilor libere ramase)¦Atunci cand se fac multe suprimari de
chei inlantuirea este de preferat adresarii deschise pentru rezolvarea
coliziunilor intre chei¦
Exista trei metode folosite in mod uzual pentru definirea unei functii
de dispersare de doua argumente: cautarea { {{ { { si {


{ ¦Aceste metode garanteaza ca sirul ordonat
<+(3,0),+(3,1),«,+(3-1)> este o permutare a multimii {0,1, « , -1}
pentru orice cheie 3¦
In cazul cautarii liniare fiind data o functie de dispersare + 94 ĺ
{0,1, « ,-1} se defineste functia de dispersare +(3)=+¶(3)+ (  )
sau +(3)=+¶(3)- ( ) pentru =0,1, « ,-1¦Cautarea liniara este usor
de implementat,dar sufera de fenomenul de 
  primar:cautarea se
face in blocuri mari de pozitii co nsecutive ocupate din tabel,ceea ce
mareste timpul mediu de cautare a unei chei¦
Cautarea patratica foloseste o functie de dispersare de forma
+(3)=(+¶(3)+/ +^ / ) (  ),unde +¶ este o functie de dispersare
auxiliara, este o putere a lui , = ^
,iar =0,1, « ,-1¦In acest caz
diferenta dintre numarul pozitiilor din tabel unde se face cautarea depinde
in mod patratic de numarul probei¦Performantele sunt mai bune decat ale
cautarii liniare,iar fenomenul de aglomerare a inregistrarilor in acest caz se
numeste clustering secundar¦

5.4. Ce este dispersarea dubla ?



{ { { este una dintre cele mai bune metode pentru
adresarea deschisa deoarece permutarile pozitiilor din tabelul datelor in
care se fac cautarile succesive au caracteristicile unor permutari
aleatoare¦Dispersarea dubla foloseste o functie de dispersare de forma
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
c 5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c
c
 +3+3'+!3 
unde al doilea argument  ia valorile naturale =0,1, ,«,iar +_1 si +_ sunt
doua functii de dispersare auxiliare astfel incat +_ (3) apartine multimii
{1, ,«,-1} pentru orice cheie 3¦
Prima pozitie din tabelul unde se cauta cheia 3 este
+3 celelalte pozitii unde se face cautarea se obtin din aceasta la
care se adauga succesiv valoarea +!3 ¦
De exemplu,se poate lua =7 (numar prim),+  7) si
+!' ))¦
Pentru =7 si sirul de chei 5 , 1 ,  , 75 , , 18 , 50 si tabela
initial neocupata, cautarea (fara succes) a acestora in tabel va determina
insertia lor in tabelul astfel incat (0)= , (1)=50 , ( )=1 , ()=  ,
()=18 , (5)=5 si (6) =75,in pozitii destul de imprastiate in tabel¦Intr -
adevar,+CC'!  7) ;pentru =0 avem pozitie libera in tabel si
inseram acolo cheia 5  +(1,)=5+ ( 7) ;pentru i=0 pozitia din tabel
este ocupata,dar pentru =1 pozitia este libera si inseram acolo cheia 1¦In
mod analog gasim + ,= ( 7) si =0 conduce la o pozitie
libera,+(75,)=5+ ( 7) si numai = conduce la o pozitie libera ;
+( ,)= + ( 7) si = este bun ; +(18,)=+ (mod 7) si =0 este
bun,iar +(50,)=1+ (mod 7) si =0 este bun¦
Cand facem cautarea pentru a gasi cheile  ,18,50 si 5 facem o
singura comparatie de chei,pentru 1 facem comparatii,iar pentru  si
75 facem cate  comparatii¦
Pentru a putea face cautari in tot tabelul valoarea +_ (3) trebuie
sa fie un numar relativ prim cu  ;acest lucru se realizeaza daca de
exemplu  este numar prim,ca in exemplul anterior,deoarece conform
ipotezei avem 1 ” +_ (3) ” -1 pentru orice cheie 3¦
Daca  si +_ (3) un un cel mai mare divizor comun >1 pentru o
anumita cheie 3,cautarea pentru 3 va examina numai a 1/ -a parte din
tabelul de dispersare ¦
Intr-adevar,daca cel mai mare divizor comun (+_ (3),)=1,atunci
<+(3,0),+(3,1),«, +(3,-1)> este o permutare a multimii {0,1,«, -1}¦


c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c

Testul de autoevaluare nr. 1

1. Sa se arate ca in cazul dublei dispersari cu functia


+3+3'+!3 ,daca +_ (3) se gaseste in
multimea {1,«,-1},iar cel mai mare divizor comun
(+_ (3),)=1,atunci +3A+3+3%8 este o
permutare a multimii {0,1,«, -1}¦

Răspunsurile
la test se vor
da în spaţiul 2. Sa se arate ca daca  este o putere a lui , = ^
,in cazul
liber din dispersarii cu adresare deschisa si cautare patratica ,cu o
chenar, în functie de dispersare de forma
continuarea +3+ 3';!'@!;!  
enunţurilor iar + 3 este o functie de dispersare auxiliara, atunci pentru
orice cheie 3+3A+3+3%8 este o permutare
a multimii {0,1,«,-1}¦

3. Ce precautii trebuie luate la stergerea unei chei in cazul


utilizarii algoritmului de rezolva re a coliziunilor prin adresare
deschisa?

Raspunsurile la acest test se gasesc la pagina 5 a acestei


unitati de invatare

ccccc

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
c 5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c
c

Tema de autoinstruire nr. 1

Consultaţi bibliografia pentru a afla :

c 1. Care este complexitatea unui sir de  operatii de


c
inserare,suprimare si operatii de acces la chei
pentru algoritmul de cautare si insertie in tabele
dispersate si inlantuite in ipoteza unei dispersari
simple uniforme in functie de factorul de
incarcare {; a tabelului¦
c
c
2. Aceeasi problema in cazul complexitatii medii a
algoritmului de dispersare cu adresare deschisa
in cazul unei cautari cu succes,respectiv fara
succes¦

5.5.Comentarii şi răspunsuri la testele de autoevaluare


c
c
c
Testul 1.
c
c
1¦ Trebuie aratat ca pentru orice =0,1,«,%1,toate valorile
c +'+!3  sunt diferite¦Daca exista doi indici
c
diferiti,8,din multimea {0,1,«, -1} pentru care
c +3'+!3F+3'+!3 ,
c
rezulta ca exista un intreg >0 pentru care %+!3¦
c
Aceasta egalitate nu poate avea loc deoarece 1 ” % ” -1,
c iar (+_ (3),)=1¦

¦ Trebuie demonstrat ca pentru orice =0,1,«,-1,toate


valorile + 3';!'@!;! sunt distincte modulo ^
¦Sa
presupunem contrariul si anume ca exista d oi indici  cu 8,din
multimea {0,1,«,-1} astfel incat + 3';!'@!;!F+ 3';!
+^ / (mod ^
)¦De aici rezulta ca exista un numar natural
>0 astfel incat
%''!@&
') (1)
In aceasta egalitate % si '' au paritati diferite,deoarece
diferenta lor este !',un numar impar,deci cea mai mare
putere a lui in factorizarea in numere prime a produsului ( -
)('+1) este mai mica sau egala cu cea gasita la factorizarea
numerelor din multimea {1,«, '+1}¦Insa '+1 ”-1+-
+1= - = ^{
+1}- ¦Deci aceasta putere este cel mult egala
cu ^
,ceea ce contrazice (1)¦

¦ La stergerea unei chei nu trebuie lasate pozitii libere


deoarece aceste pozitii libere semnale aza absenta unei chei
din tabel¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
5¦ Dispersarea memoriei
------------------------------------------------------------------------------------------------------------------------
c

5.6. Lucrare de verificare pentru studenţi

* -    {   { { { {     { { 




  { 
{  
+
{Ñ
  { { {{ { {" 

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
c - însoţiţi programul de o documentaţie privind problema tratată,
modul de introducere a datelor şi aspecte deosebite fo losite la
elaborarea programului ¦

¯ /  {  0 Ñ /- 12 {   Ñ  {   {
   "

5.7. Bibliografie

[1] T¦ Cormen, C¦ Leiserson, R¦ Rivest,   { +



 The MIT Press, McGraw-Hill, 000 (tradusa de editura Teora)¦

[ ] D¦ E¦ Knuth, {{    {{ { { {{  , Vol¦ I, Editura


Tehnica, Bucuresti, 17; retiparit, Editura Teora, 000¦

c [] K¦ Mehlhorn, {{ *  


 {  ô +
, Springer-Verlag,
Berlin,18¦

[] S¦ Sahni, {{*  


ô +
{ ô {
9 ++, Mc
Graw Hill,18¦

[5] S¦ Sahni, {{*  


ô +
{ ô {
,{{ , Mc
Graw Hill, 000¦
c
[6] I¦ Tomescu, {{ *  
, Editura Universitatii din Bucuresti,
008¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c
c

Unitatea de învăţare Nr. 6

METODA GREEDY

Cuprins

Obiectivele unităţii de învăţare nr¦ 6¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5


6¦1¦ Introducere ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5
6¦ ¦ Memorarea textelor pe bandă ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 56
6¦¦ Problema continuă a rucsacului ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 56
6¦¦ Problema arborelui parţial de cost minim ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦ 58
6¦5¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
6¦6¦ Lucrare de verificare pentru studenţicontiunuă a rucsacului ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦ 6
6¦7¦ Bibliografie¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6



Obiectivele Unităţii de învăţare nr. 6
După ce veţi parcurge această unitate de învăţare, veţi reuşi să:
ù stăpâniţi o metodă de programare pentru probleme de minim;
ù delimitaţi exact care este cadrul de aplicativitate al metodei şi
de ce nu poate fi extinsă la probleme foarte puţin diferite;
c ù înţelegeţi necesitatea demonstrării validităţii algoritmilor
elaboraţi prin metoda .  :¦

c
£  c c
c
Metoda Greedyc greedymlacom) este aplicabilă problemelor de optim¦
Considerăm mulţimea finităc :x´ ´ ;c şi o proprietate p definită
pe mulţimea submulţimilor luic Dc
"# x
c &×" #3:>´x; cuc c
¿"# "D#´ D  
O submulţimec cse numeştecJ e dacăc"#xc
Dintre soluţii aleg una care optimizează o funcţie c&×" #3¯cdată¦cc
Metoda urmăreşte evitarea parcurgerii tuturor submulţimilor (ceea
ce ar necesita un timp de calcul exponenţial), mergându -se "direct" spre
soluţia optim㦠Nu este însă garantată obţinerea unei soluţii optime; de
aceea aplicarea metodei Greedy trebuie însoţită neapărat de o
demonstraţie¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c
Distingem două variante generale de aplicare a metodei Greedy:
c
À " #
 x´ À
<À" #$ À J:<;  x´
 " :<;#x  " : ;#
  À :<;c   À : ;c

c
 
 :
c
c a în algoritm nu apare funcţia cc c
a timpul de calcul este liniar (exceptând prelucrările efectuate de
procedurileccşic   c
a dificultatea constă în a concepe procedurilec ´c respectivc  ´c în
care este "ascunsă" funcţia c
c
c
˜ c Se consideră mulţimea de valori reale c : x´ ´ ;c Se caută
submulţimea a cărei sumă a elementelor este maximă¦
Vom parcurge mulţimea şi vom selecta numai elementele pozitive¦
.À>
 x´
  5>
 . À.,x$ .À 
Ú "#


˜ c Caut cel mai scurt şir crescător cu elemente din mulţimea c:x´
ccccccccccccccccccccccccccc ´ ;c
öncepem prin a ordona crescător elementele mulţimii (corespunzător
proceduriic cApoi:c

.Àx$ xÀx$ À x$%' Àx
 ´
  5. . À.,x$ .À 
 .5  À.$%' À 3.
   .Àx$ xÀ 
Astfel, dacă în urma ordonării a rezultatc "x´x´´´´´½´8´=´9´9; ´c
vom obţine succesiv:
%'x$x$"x# 
%'$$"x´´´# 
%'8$½$"´½´8´=´9# c
c
c
 
c 
˜ cc Fie mulţimeac :x´ ´ ;c cu elemente pozitive¦ Caut submulţimea de
sumă maximă, dar cel mult egală cucFcdat¦c
c
Dacă procedez ca în exemplul 1, pentruc "8´´´# c şic F=c obţinc :8;c
Dar soluţia optimă estec:´; ccu suma egală cucc

Continuăm cu prezentarea unor exemple clasice¦


aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c
c

6.2. Memorarea textelor pe bandă

Textele cu lungimilec "x#´ ´"# c urmează a fi aşezate pe o


bandă¦c Pentru a citi textul de pe poziţia c ., trebuie citite textele de pe
poziţiile x´´ ´. (conform specificului accesului secvenţial pe bandă)¦ c
O
 - înseamnă o permutare `c
Pentru o astfel de permutare (ordine de aşezare a textelor pe
bandă), timpul pentru a citi textul de pe poziţie c .c este:c
".#" x#, ," .#c Presupunând textele egal probabile, trebuie c
x 
minimizată valoarea "# ó ".#c
 . x
c ccccSă observăm că funcţia T se mai poate scrie:c
À
 óÀ     c
À 
(textul de pe poziţia k este citit dacă vrem să citim unul dintre textele de pe
poziţiilec.´ ´ )¦c
c
Conform strategiei Greedy, începem prin a ordona crescător
vectorulccRezultă că în continuarec" #1"7#´  17c
c ccccDemonstrăm că în acest mod am obţinut modalitatea optimă, adică
permutarea identică minimizează funcţia de cost c
c
c ccccFiec `coptimă, adicăc cminimizează funcţiac cDacăc ceste diferită
de permutarea identicăcccc 17ccuc" #5" 7#Dc
c
c "
c c   c c  7 ccccccc #

Considerăm permutareac Kc în care am interschimbat elementele de pe


poziţiilec cşic7Dc
c
c K" 7    #
c
Atuncic/"#3"L#0"3 ,x#" #,"37,x#" 7#
 "3 ,x#" 7#,"37,x#" #
 "73 #" #," 37#"7#
  "73 #/" #3"7#05>´c ambii factori fiind
pozitivi¦

Rezultă căc"L#1"# cContradicţie¦c


c

6.3. Problema continuă a rucsacului

Se consideră un rucsac de capacitate (greutate) maximă G şi n


obiecte caracterizate prin:
a greutăţile lorcx´ ´  c
a câştigurilecx´ ´ cobţinute la încărcarea lor în totalitate în rucsac¦ c

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c
Din fiecare obiect poate fi încărcată orice fracţiune a sa¦
Se cere o modalitate de încărcare de (fracţiuni de) obiecte în
rucsac, astfel încât câştigul total să fie maxim¦
< `/>´x0´
O
Prin
 - înţelegem un vectorc<"<x´´< #ccuc c
Oó  <  H
¿ x
c cccccO
 - / este soluţie care maximizează funcţiac
À
  ó
  c

c c
Dacă suma greutăţilor obiectelor este mai mică decât G, atunci
încarc toate obiectele:c <"x´ ´x# cDe aceea presupunem în continuare
căcx, , 5Hc
Conform strategiei Greedy, ordonez obiectele descrescător după
câştigul la unitatea de greutate, deci lucrăm în situaţia:
x   
   cc c c  c
x   
c
Algoritmul constă în încărcarea în această ordine a obiectelor, atâta
timp cât nu se depăşeşte greutatea c Hc (ultimul obiect pote fi eventual
încărcat parţial):
cc
HxÀH{ G1 reprezintă greutatea disponibilă } c
 x´
   Hx < Àx$Hx ÀHx3 
< ÀHx6 $
  7 ,x´
   <7À >
  
Ú "<#
c
Am obţinut decic<"x´ ´x´< 7´>´ ´># ccuc<7`/>´x#c
Arătăm că soluţia astfel obţinută este optimă¦
À
Oó   
O

ccccccccccccFie y soluţia optimă:cù" ´ù .´ #ccuc c
À

 
O
 

ccccccccccccDacăcù <´cfiec.c3rcpoziţie pe carecù. <.c


c
 
 :
 .7Dcpentru .57cse depăşeşte Hc
 ù.1<.Dc
 pentruc.17 Dcevident, deoarecec<.x c
 pentruc.7 Dcdacăcù.5<.cse depăşeştecHc
c
Considerăm soluţia:cùL"ùx´´ù .3x´<.´˜ù.,x´´˜ ù#c cuc ˜ 1xc
(primelec.3xccomponente coincid cu cele din c<)¦ Păstrez greutatea totalăcH´c
deci:c
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c
.<.,˜".,xù.,x, , ù#.ù.,.,xù.,x, , ùcRezultă:c
."<.3ù.#"x3˜#".,xù.,x,, ù#  "MM#
c ccccCompar performanţa luicùKccu cea a luicùDc
"ùL#3"ù# .<.,˜.,xù.,x, , ˜ù3".ù.,.,xù.,x, , ù#
."<.3ù.#," ˜3x#" .,xù.,x, , ù#
.6./."<.3ù.#,"˜3x#".6..,xù.,x, , .6.ù#0

Dar ˜3x5> şi .6. 6, 5.¦


Atunci
cccccccccc"ùL#3"ù# .6.c/."<.3ù.#,"˜ 3x#".,xù.,x, , ù#0>´c
decic"ùK#5"ù# cContradicţie¦c
c
c cccc× { 
/{
{   diferă de cea continuă prin faptul că
fiecare obiect poate fi încărcat numai în întregime în rucsac¦
Să observăm că aplicarea metodei Greedy eşuează în acest caz¦
öntr-adevăr, aplicarea ei pentru:
H½´ ’"´´#´"8´´ ½#
are ca rezultat încărcarea primul obiect; câştigul obţinut este 6¦ Dar
încărcarea ultimelor două obiecte conduce la câştigul superior 6¦5¦
c
6.4. Problema arborelui parţial de cost minim

$c H"N´F# c  {Ñ {  + +{  


 
  
 "*    { {   {Ñ{ -{  
" 
c
c Ca exemplificare, să considerăm n oraşe iniţial nelegate între ele¦
Pentru fiecare două oraşe se cunoaşte costul conectării lor directe
(considerăm acest cost egal cu + dacă nu este posibilă conectarea lor)¦
Constructorul trebuie să conecteze oraşele astfel încât din oricare oraş să
se poată ajunge în oricare altul¦ Ce legături directe trebuie să aleagă
constructorul astfel încât costul total al lucrării să fie minim?

Este evident că graful parţial căutat este un arbore (dacă ar exista un


ciclu, am putea îndepărta orice muchie din el, cu păstrarea conexităţii şi
micşorarea costului total)¦
c Vom aplica metoda Greedy: { {       +  
 
   {
 0 {    Ñ { /           +
{

Acest algoritm poartă numele de {   3
{¦

Ca de obicei, fiecLNL´cLFLcVor fi alese decic3xcmuchii¦


c Construim o matricec c cuc c linii şic c coloane¦ Pe fiecare linie apar
extremităţilec cşic7cale unei muchii, precum şi costul acestei muchii¦ c
c öncepem prin a ordona liniile matricii crescător după ultima coloană (a
costurilor muchiilor)¦
c
˜ c Considerăm graful de mai jos şi matricea ccataşată¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c

c
c c c
cc c
c c c c c
c
c c c
c c c c
c c
c c c
c c c c c c
c c c c c
c c c
 c

Conform algoritmului lui Kruskal, vor fi alese în ordine muchiile:
(1, ), (1,), (,5), (,)
cu costul total egal cu 10¦ Muchia (1,5) nu a fost aleasă deoarece
formează cu precedentele un ciclu¦

Dificultatea principală constă în verificarea faptului că o muchie


formează sau nu cu precedentele un ciclu¦ Plecând de la observaţia că
orice soluţie parţială este o pădure, vom asocia fiecărui vârfc i un
reprezentantc ccare identifică componenta conexă (arborele) din care face
parte vârful în soluţia parţial㦠Atunci:
a o muchiec" ´7#cva forma un ciclu cu precedentelecc 7 c
- la alegerea (adăugarea) unei muchii c " ´7#c vom punec .À 7c pentru
orice vârfc.ccuc. c(unim doi arbori, deci vârfurile noului arbore trebuie să
aibă acelaşi reprezentant)¦
c c c
ön algoritmul care urmează metoda descrisă,c c este numărul liniei
curente din matricea ´c ceste numărul de muchii alese, iarc ceste
costul muchiilor alese

 À  ´ x´
À x$ À>$ À>
Ú O13x
 xÀ"´x#$  À"´#
xÀ x$À 
 x 
  À,x$ À,"´#$
Ú " x´ #
.x´
  .  .Àx
À,x
13x Ú "KH<K# 
Ú "KH< EL´# 




 /1  {     {{    3
{" 

Fie H"N´F#cun graf conex¦c

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c
Fc se numeşte  -  -/{    + dacă nu conţine
cicluri şi poate fi extinsă la un arbore parţial ×cde cost minim¦

$ c  -/{  0 DNc {


Ñ 1 2    2 Ñ c Dc   

× 
c
 {{  + c c$cc {   +  
 
 - {1 Dcô  c :;c
 -/{ ¦

Fiec×carborele parţial de cost minim la care poate fi extins c c


c 
c D
c
c
c ùc c
c 
c ùc
c 7
c
Dacăc`×c, O¦K¦c
Dacăc /×´ atuncic :;c are un ciclu¦ ön el există, în afară dec , o
altă muchiecKcadiacentă luicDc
Fiec× × :;J:L;cObservăm căc :;× cpentru căcc ×c
× ceste de cost minim deoarece costul luic c este mai mic sau egal
cu costul lui KcRezultă că mulţimea de muchiic :;ceste promiţătoare¦
c
× 
cc cccccccô   Ñ  {   { 3
{ 
 {   { -{  

"
c
Arătăm prin inducţie că dupăc .>´x´ ´3xc paşi, cele k muchii
alese formează o mulţime promiţătoare¦
Pentruc.>crezultatul este evident¦
Fiec cmulţimea promiţătoare a muchiilor selectate la primii c.cpaşi¦
FiecDNJ <cc <cextremitate a unei muchii din c $cmcmulţimea punctelor
izolate¦
Conform ×  -, mulţimeac muchia selectată la pasulc.,x$c
este promiţătoare¦c

ön final, o mulţime promiţătoare cuc 3xcmuchii este chiar un arbore


parţial de cost minim¦c
c
c


c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c

Tema de autoinstruire nr. 1

Consultaţi bibliografia pentru:

c 1¦ a cunoaşte un alt algoritm pentru problema arborelui parţial


c de cost minim, numit {   × ;
c ¦ a demonstra validitatea acestui algoritm;
c ¦ a compara eficienţa algoritmilor datoraţi lui Kruskal şi Prim¦
c
c

Testul de autoevaluare nr. 1

1. Care este clasa de probleme pentru care se poate aplica


metoda Greedy?

Răspunsurile 2. Unde apare funcţia de cost în schema generală de rezolvare?


la test se vor
da în spaţiul
liber din
chenar, în
continuarea 3. De ce anume depinde eficienţa metodei Greedy ?
enunţurilor

4. Care este esenţa algoritmului lui Prim ?

5. Urmăriţi pe exemplul de mai sus care sunt muchiile alese de


algoritmul lui Prim¦

Răspunsurile la acest test se găsesc la pagina 6 a acestei unităţi de


învăţare¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c

6.5. Comentarii şi răspunsuri la testele de autoevaluare

Testul 1.

1¦ Metoda Greedy este aplicabilă problemelor de optim (minim şi


c
maxim)¦

5¦ Funcţia de cost ce trebuie optimizată apare în procedurile


alege, respectiv prel,în procedurile alege, respectiv prel, din
cele două variante de aplicare a metodei Greedy¦

6¦ Eficienţa metodei Greedy depinde de asemenea de eficienţa


procedurilor alege, respectiv prel, în rest timpul fiind liniar¦

7¦ Algoritmul lui Prim, care constă în următoarele:


- se începe prin selectarea unui vârf;
- la fiecare pas aleg o muchie (i,j) de lungime minimă cu i
selectat, dar j neselectat¦
Propunem ca exerciţiu demonstrarea faptului că după n-1 paşi
se obţine un arbore parţial de cost minim¦
8¦ Dacă pornim cu vârful 5, ordinea de alegere a muchiilor este
următoarea: (5,), (,1), (1, ), (,)¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
6¦ Metoda Greedy
------------------------------------------------------------------------------------------------------------------------
c
6.6. Lucrare de verificare pentru studenţi


* - 2   { Ñ
 ’  { .  :   
  {
9

"Să se interclaseze  vectori ordonaţi, obţinând un singur vector ce
conţine toate elementele vectorilor iniţiali¦

!" Se dă o mulţime de perechi de nume de persoane cu proprietatea


că între două persoane dintr-o pereche există o legătură de rudenie
c direct㦠Să se listeze grupele de persoane între care există o legătură
de rudenie directă sau indirectă¦

(" Se dau orele de început şi sfârşit a  spectacole ce pot fi


programate într-o sal㦠Se cere să determinm numărul maxim de
spectacole ce pot fi programate fără a avea loc suprapuneri¦ 

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
- însoţiţi programul de o documentaţie privind problema tratată,
modul de introducere a datelor şi aspecte deosebite folosite la
elaborarea programelor¦

¯ /  {  0 Ñ /- 12{   Ñ  {   {
   "

6.7. Bibliografie

[1] Georgescu Horia, +     {{ , Editura Universităţii


Bucureşti, 005
[ ] Cormen T¦ H¦ et al¦    1{ , Computer Libris Agora,
000
[] Parberry Ian, Gasarch William, × 
  ô +
( nd
c Edition), 00
[] Skiena Steven, +ô  
•{ {, Springer 18

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Unitatea de învăţare Nr. 7

METODA BACKTRACKING
c
c
Cuprins

Obiectivele unităţii de învăţare nr¦ 7 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6


7¦1¦ Descrierea metodei ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦ 65
7¦ ¦ Exemple ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 66
7¦¦ O descriere succintă a metodei backtracking ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 67
7¦¦ Variante ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 68
7¦5¦ Varianta recursivǎ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦ 6
7¦6¦ Metoda backtracking în plan ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 70
7¦7¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 7
7¦8¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ 7
7¦¦ Bibliografie¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 7


Obiectivele Unităţii de învăţare nr. 7

După ce veţi parcurge această unitate de învăţare, veţi reuşi să:


ù stăpâniţi cea mai utilizată metodă de programare pentru
probleme de căutare;
ù înţelegeţi semnificaţia condiţiilor de continuare şi importanţa lor
c pentru reducerea timpului de calcul;
ù aplicaţi atât varianta iterativă, cât şi cea recursivă a metodei
>{  { ¦

 c
c c
c cccccAşa cum s-a subliniat în capitolele anterioare, complexitatea în timp
a algoritmilor joacă un rol esenţial¦ ön primul rând un algoritm este
considerat "acceptabil" numai dacă timpul său de executare este
polinomial, adică de ordinul (".#c pentru un anumitc . c c reprezintă
numărul datelor de intrare¦
Pentru a ne convinge de acet lucru, vom considera un calculator
capabil să efectueze un milion de operaţii pe secundă¦

c > > 8>



 Žc Žc
´cc
 cc ´cc cc
 cc cc
cc
c

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Chiar dacă în prezent calculatoarele performante sunt capabile de a
efectua zeci de miliarde de operaţii pe secundă, tabelul de mai sus arată
că algoritmii exponenţiali nu sunt acceptabili¦
c
c
7.1. Descrierea metodei

Fie x ë  ëcCautc<`ccucS"<), undecS& 3:>´x;ceste o


proprietate definită pe cc
Din cele de mai sus rezultă că generarea tuturor elementelor
produsului cartezianccnu este acceptabilă¦

Metoda backtracking încearcă, dar nu reuşeşte totdeauna,


micşorarea timpului de calcul¦c c este numitc J3c J  rc 3 Je, iarc S
sintetizeazǎc dec erec
Vectorulc<ceste construit progresiv, începând cu prima componentǎ¦
Se avanseazǎ cu o valoarec <.cdacǎ este satisfǎcutǎc dc dec   rec
S."<x´ ´< .#c Condiţiile de continuare rezultǎ de obicei din c S c ele sunt
strict necesare, ideal fiind sǎ fie şi suficiente¦
c
Distingem urmǎtoarele cazuri posibile la alegerea lui c‰Dc
  8ô  0{{
{ G8: mai sunt valori neconsumate dinc.cşiccccccc
cccccccccccccccccccc valoareac<.caleasǎ satisfacecS.ccse mǎreştec.c
  8   { 0 {G8: mai sunt valori neconsumate din c.cşi c
valoareac<.caleasǎ dintre acestea nu satisface S.ccse va
relua, încercându-se alegerea unei noi valori pentru c<.
  ¯ : nu mai existǎ valori neconsumate din c.c .cccccc
epuizatǎ ccîntreagac.devine disponibilǎ şic.À.3xc
) ¯  G  { { 
 - : este reţinutǎ soluţia¦
c
Reţinerea unei soluţii constă în apelarea unei proceduri c 
care prelucrează soluţia (o tipăreşte, o compară cu alte soluţii etc¦) şi fie
opreşte procesul (dacă se doreşte o singură soluţie), fie prevede c .À.3xc
(dacă dorim să determinăm toate soluţiile)¦ c
c
Notǎm princ E.. mulţimea valorilor consumate dinc .c Algoritmul
este următorul:
c
E À´ $
.Àx$
Ú .5>
 .,x
 "<#$. À.3x${ revenire după obţinerea unei soluţii } c
 E . .
 calege c
`.JE.$E.ÀE. :
;$
  S ."<x´´< .3x´
#
  < .À
$.À.,x$ccccccc{ atribuie şi avanseazǎ }
cc ccccccccc  ccccccccccccccccccccccccccccccccc { încercare eşuatǎ } c
E .À$.À.3x$cccccccccccccccc { revenire } c c
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
c
×  {  {  { c x  :x´´; ´c algoritmul se simplifică
astfel:
c
.Àx$< À>´ x´ ´
Ú .5>
 .,x
 "<#$. À.3x$ { revenire dupǎ obţinerea unei soluţii } c
c  < .1
 < .À<.,x$
  S ."<x´´< .#
  . À .,x$ { atribuie şi avanseazǎ } c
cc    { încercare eşuatǎ } c
< .À >$.À.3x$c cc{ revenire }

c
7.2. Exemple
c
ön exemplele care urmează,c S.c va fi notatǎ în continuare prin c
".#cSe aplică algoritmul de mai sus pentru diferite forme ale funcţiei
de continuare¦

 9 { {+G - ¦ Se consideră o hart㦠Se cere colorarea ei folosind


cel mult n culori, astfel încât oricare două ţări vecine (cu frontieră
comună de lungime strict pozitivă) să fie colorate diferit¦ 

Fie <.cculoarea curentă cu care este colora tǎ ţarac.c
c
 ".& #&%$ 
%À$  Àx$
Ú % " 1.# 
  
 " ´.#O< <.
  % À
   À ,x
 À%
 $

! c× {   {
Se consideră un caroiajcë cPrin analogie cu o tablă de şah c m ´c
se doreşte plasarea accdame pe pătrăţelele caroiajului, astfel încât să
nu existe două dame una în bătaia celeilalte (adică să nu existe două
dame pe aceeaşi linie, coloană sau diagonală)¦
Evident, pe fiecare linie vom plasa exact o dam㦠Fie c<.c  cpe
care este plasatǎ dama de pe linia c.c
Damele de pe liniile c cşic.csunt:c
a pe aceeaşi coloană: dacăc< <.c c
a pe aceeaşi diagonală: dacă cL< 3<.L.3 cc
c
c
c
c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
 ".& #&%$ 
%À$  Àx$
Ú %  1.
 L< 3<.L.3 < <.
 % À
  À ,x$
 À%
 $


( × {    +{{ 
Se consideră un graf neorientat¦ Un ciclu hamiltonian este un ciclu
care trece exact o dată prin fiecare vârf al grafului¦
Pentru orice ciclu hamiltonian putem presupun e că el pleacă din
vârful xccccc
Vom nota princ< calc -lea vârf din ciclu¦c
c <"<x´ ´< #c
 - dacă:
<xxO:< ´ ´< ;:´ ´;O< ´<xcvecine¦c
Vom considera că graful este dat prin matricea sa de adiacenţă¦
c
 ".& #&%$ 
 "<.3x´<.#>
  À
  À x$% À$
 Ú %O" 1.# 
  <.<  % À
    À ,x$
  . % À %"<´<x#x$
  À%
 $c




7.3. O descriere succintă a metodei backtracking

Metoda backtracking poate fi descrisă astfel:

*)
Backtracking
c = parcurgerea limitată în adâncime a unui
arbore
c
c *)
conform condiţiilor de continuare
c
c
Rolul condiţiilor de continuare este ilustrat în figura ce urmează¦
Dacă pentruc<.ceste aleasă o valoare ce nu satisface condiţiile de
continuare, atunci la parcurgerea în adâncime este evitată parcurgerea
unui întreg subarbore¦
c
c

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
c
c
c
c c
c
c
c
c c
c
c
c
c
c
c
c c
c
c
c
c
c
c
c
c
c
7.4. Variante
c
Variantele cele mai uzuale întâlnite în aplicarea metodei backtracking
sunt următoarele:
a soluţia poate avea un numǎr variabil de componente 0;
{
a dintre ele alegem una care optimizeazǎ o funcţie datǎ¦ c
c
c
˜ c Fie "x´´#`cCaut un subşir crescǎtor de lungime maximǎ¦
c
Deci cautcx<x1 1< .cccucc cc.maximc
c c c c c cc<x1<1 1 <.
c
cPentruc 9 şic"x´´´´=´½´9´8# cva rezultac.½c
c
Aici,
 -{
G: care nu poate fi continuată; exemplu: c"´=´9# c
c
Notǎm princ<cşic.csoluţia optimǎ şi lungimea sa¦c
 Completez cuc3cşic,cDc>À3$À,x$ À ,$

 Funcţiac care următoarea formă: 
 ".# 
 À<.3x1.
  $

 Procedurac care forma:
c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
 ".# 
.5. < À<$. À.$
 $

 Algoritmul backtracking se modifică astfel:

.Àx$<>À >$<xÀ>$. À>$
Ú .5>
 <.1
  < .À<.,x$
  ".#
    < . c,$
   ".#$. À .3x
  . À.,x$< .À<.3x
  
 . À.3x$c
c
 
  Se face tot o parcurgere limitatǎ în adâncime a unui arbore¦

c
c
7.5. Varianta recursivǎ

O descriem pentru început pentru cx  :x´ ´;c


Apelul iniţial este: c%."x# c
c
 %.".# 
 .,x
 
 x´
 <.À $
  ".#
 %.".,x#$ cc    
{ 
 
 

˜ c Dorim să producem toate şirurile deccparanteze ce se închid corect¦


c c
Existǎ soluţiicccpar¦c
c Fiec  "3#cCondiţiile sunt :c
c >cccpentruc.1 c
c >pentru c.c
c
Pornirea algoritmului backtracking se face prin:

xÀL"L$  Àx$%."#$

Procedurac%.care următoarea formă: c


aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
 %.".# 
 .,x
 cccccccccccccc {scrie soluţia} c
c  .ÀL"L$ ,,$
   3. %.".,x#
  33$
.ÀL#L$ 33$
cc c  > %.".,x# 
  ,,$
 

 
  ön exemplul tratat backtracking -ul este optimal! : se avansează
dacă şi numai dacă există şanse de obţinere a unei soluţii¦ Cu alte cuvinte,
condiţiile de continuare nu sunt numai necesare, dar şi suficiente¦
c
c
c
7.6. Metoda backtracking în plan

Prezentăm o problemă generală de căutare în plan, cu variante


posibile şi u abordări posibile¦

Se consideră un caroiaj (matrice)c c cuc c linii şic c coloane¦ Poziţile


pot fi:
a libere:cc 7> c
a ocupate:cc 7xc
Se mai dǎ o poziţiec " >´7>#c * { / {   {  
 1
{Ñ{ {{    2  {  - "
c
{ {9
a cum pot ajunge într-o poziţiec" x´7x#cdată?
a se cere determinarea componentelor conexe¦
c
 Mişcǎrile posibile sunt date printr -o matricec ccu două linii şi  c
coloane¦ De exemplu, dacă deplasările permise sunt cele către poziţiile
vecine situate la Est, Nord, Vest şi Sud, matricea are forma: c
 x > Ž x >
 ]] c
> Ž x > x
 Bordez matricea cu pentru a nu studia separat ieşirea din mat rice¦
 Pentru refacerea drumurilor, pentru fiecare poziţie atinsǎ memorăm
minte legǎtura la precedenta¦
 Dacǎ poziţia e liberǎ şi pot continua, pun c  73xc (a fost atinsǎ),
continuăm şi apoi repunemc 7À >c(întoarcere din recursivitate)¦
c



c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Testul de autoevaluare nr. 1

1. Care este clasa de probleme pentru care se poate aplica


metoda Backtracking?

Răspunsurile 2. Discutaţi importanţa condiţiile de c ontinuare, cu marjele: condiţii


la test se vor necesare şi condiţii suficiente¦
da în spaţiul
liber din
chenar, în
continuarea
enunţurilor 3. Care este esenţa metodei >{  {  ?

4. Comparaţi variantele iterativă şi recursivă ale metodei


>{  { ¦

5. Scrieţi un program în Java pentru rezolvarea problemei enunţate


în 7¦6¦

Răspunsurile la acest test se găsesc la pagina 7 a acestei unităţi de


învăţare¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
7.7. Comentarii şi răspunsuri la testele de autoevaluare

Testul 1.

1¦ Metoda Backtracking este aplicabilă problemelor de cătare¦


c
¦ Condiţiile de continuare sunt necesare (în sensul că
neverificarea lor face imposibilă existenţa unei soluţii cu prefixul
curent)¦ Cu cât ele se apropie de condiţii suficiente (care să
garanteze existenţa unui optim cu prefixul curent), cu atât ele
optimizează timpul de lucru¦

¦ Esenţa metodei backtracking constă în construirea dinami că a


unui arbore în spaţiul de soluţii şi parcurgerea acestuia în
adâncime¦ Parcurgerea este limitată de condiţiile de continuare¦

¦ Varianta recursivă are o formă mai simplă şi mai concis㦠ön


schimb varianta iterativă aduce un plus de eficienţă, ce se
regăseşte în timpul de executare¦

5¦ Prezentăm în continuare un program în Java care rezolvă


problema propusă:

7
   M$ 

:
  ´7$$ 
  ´´ >´7>´ $ 
  /0/0$ 
  /0/0 ::x´>´ 3x´>;´:>´3x´>´x;;$
 :  />0  $; 

"#:
 ´7$
Ú"ù #$ 
ù   "P´P#$ 
66  
 ,´, 
 <"#$ 
 <"#$ 
Ú /0/0$ 
" x$ 13x$ ,,#
"7x$713x$7,,#
/ 0/70 <"#$ 
" >$ 1$ ,,#: 
/>0/ 0$/3x0/ 0$
;
"7>$71$7,,#: 
/70/>0$/70/ 3x0$
;
ù   "P >´7>P#$ 
> <"#$7> <"#$ 
;

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

"  ´  77´<#:
  $777$<$ 
;

  "#: 
  "#P"P, ,P´P,7,P#P$ 
   "#,PP,P"P, , 
 P´P,7,P#P$
;


 %."#:66%..  
<$  ´77$ 
" .>$.1 $.,,#: 
  , />0/.0$777, /x0/.0$ 
 "/ 0/770x#$ 
 "/ 0/770# 
ù   " "##$ 
 "/ 0/770>#: 
/ 0/703x$
<Ú" ´77´ #$< %."#$ 
/ 0/70>$
;
;
;
;

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
7¦ Metoda Backtracking
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
7.8. Lucrare de verificare pentru studenţi

* - 2   { Ñ
0 {>{  {   
   {
9

" Plata sumei în monede. Se consideră  tipuri de monede¦ Pentru
fiecare tip = 1,  valoarea unei monede este {() iar numărul de
monede de acest tip este  ()¦ Dată fiind o sumă de bani , se
cer toate modalităţile în care ea poate fi achitată cu monedele
disponibile¦
c
!" Ghicirea numărului ascuns. Să ne imaginăm următorul joc: Fie 
un număr natural în tre 0 şi 1000 care este ascuns de o persoană¦
O altă persoană va trebui să ghicească numărul ascuns prin cât
mai puţine încercări, pe baza informaţiilor date de persoana care
a ascuns numărul, aceasta precizând dacă numărul ascuns este
mai mare sau mai mic decât numărul presupus¦ Realizaţi o
strategie de alegere a încercărilor astfel încât oricare ar fi numărul
ascuns să se facă cât mai puţine încercări¦ Simulaţi un astfel de
joc!c

("Problema drapelelor. Avem la dispoziţie pânză de şapte culori: alb,


galben, portocaliu, roşu, albastru, verde, negru¦ Se cere să se
precizeze (eventual să se reprezinte grafic) toate dra pelele tricolore
care se pot confecţiona, ştiind că trebuie respectate regulile:
± orice drapel are culoarea din mijloc alb, galben sau portocaliu;
± cele trei culori de pe drapel sunt distincte;
± drapelul poate fi împărţit în trei zone egale vertical sau orizontal¦

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
- însoţiţi programul de o documentaţie privind problema tratată,

7.9. Bibliografie

[1] Georgescu Horia, +     {{ , Editura Universităţii


Bucureşti, 005
[ ] Cormen T¦ H¦ et al¦    1{ , Computer Libris Agora,
000
[] Parberry Ian, Gasarch William, × 
  ô +
( nd
c Edition), 00
[] Skiena Steven, +ô  
•{ {, Springer 18

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Unitatea de învăţare Nr. 8

METODA DIVIDE ET IMPERA

Cuprins

Obiectivele unităţii de învăţare nr¦8 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 7 5


8¦1¦ Schema generală ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ 76
8¦ ¦ Căutarea binară ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 76
8¦¦ Problema turnurilor din Hanoi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 77
8¦¦ Sortare prin inte rclasare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 78
8¦5¦ Metoda Quicksort ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ 7
8¦6¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 8
8¦7¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 8
8¦8¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 8


Obiectivele Unităţii de învăţare nr. 8

După ce veţi parcurge această unitate de învăţare, veţi reuşi să:


ù stăpâniţi o metodă de programare bazată pe descompunerea
problemelor în subprobleme, urmată de asamblarea
rezultatelor;
c ù înţelegeţi caracterul recursiv al metodei şi modul de calcul al
timpului de executare;
ù cunoaşteţi două metode de sortare cu timp de executare optim¦

 c
Metoda     { ("desparte şi stăpâneşte") constă în
împărţirea repetată a unei probleme de dimensiuni mari în mai multe
subprobleme de acelaşi tip, urmată de rezolvarea acestora şi combinarea
rezultatelor obţinute pentre a determina rezultatul corespunzător problemei
iniţiale¦ Pentru fiecare subproblemă procedăm în acelaşi mod, cu excepţia
cazului în care dimensiunea ei este suficient de mică pentru a fi rezolvată
direct¦
Este evident caracterul recursiv al acestei metode¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
8.1. Schema generală

Descriem schema generală pentru cazul în care aplicăm metoda


pentru o prelucrare oarecare as upra elementelor unui vector¦ Funcţia
DivImp, care întoarce rezultatul prelucrării asupra unei subsecvenţe
 ´  , va fi apelată prin 
"x´ )¦

 
"´#   
 Q1R 
  "´# 
"´#$ 
x
"´#$ 

",x´#$ 
E% "x´# 

 $

unde:
- funcţia Interm întoarce un indice în intervalul   (de obicei
}",#6 )¦
- funcţia  este capabilă să întoarcă rezultatul subsecvenţei   ,
dacă aceasta este suficient de mică;
- funcţia E%  întoarce rezultatul asamblării rezultatelor parţiale x şi 
¦

#:
 Calculul maximului elementelor unui vector;
 Parcurgerile în preordine, inordine şi postordine ale u nui arbore binar;
 Sortarea folosind arbori de sortare¦

8.2. Căutarea binară

Se consideră vectorul "x´ ´ # ordonat crescător şi o


valoare <¦ Se cere să se determine dacă < apare printre componentele
vectorului¦

Problema enunţată constituie un exemplu pentru cazul în care


problema se reduce la o singură subproblemă¦
Ţinând cont de faptul că a este ordonat crescător, vom compara pe
< cu elementul din "mijlocul" vectorului¦ Dacă avem egalitate, algoritm ul se
încheie; în caz contrar vom căuta fie în "jumătatea" din stânga, fie în cea
din dreapta¦

Vom adăuga 
3S´,x,S ¦ Căutăm perechea "%´ # dată de:
 "´ # dacă  <;
 "´ # dacă  3x1<1 ¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Deoarece problema se reduce la o singură subproblemă, nu mai
este necesar să folosim recursivitatea¦

Algoritmul este următorul:

 EI  


$
Ú 4
 }",#6 
 5<& 3x 
 <&Ú "´ #$ 
 1<& ,x
Ú "´#
 

Algoritmul necesită o mică analiză, legată de corectitudinea sa


parţial㦠Mai precis, ne întrebăm: când se ajunge la 5?
 pentru cel puţin  elemente : nu se poate ajunge la 5;
 pentru elemente, adică pentru ,x : se alege ¦ Dacă <1 ,
atunci À 3x¦ Se observă că se iese din ciclul Ú  şi  3x1<1 ;
 pentru un element, adică : se alege  ¦ Dacă <1 atunci
À3x, iar dacă <5 atunci À,x; în ambele cazuri se părăseşte ciclul
Ú  şi tipăreşte un rezultat corect¦

8.3. Problema turnurilor din Hanoi

Se consideră  tije¦ Iniţial pe tija 1 se află n discuri cu diametrele


decrescătoare privind de la bază către vârf, iar pe tijele şi  nu se află
nici un disc¦ Se cere să se mute aceste discuri pe tija , ajutându -ne şi de
tija , respectând condiţia ca în permanenţă pe orice tijă sub orice disc să
se afle baza tijei sau un disc de diametru mai mare¦

O  {  este notată prin " ´7# şi semnifică deplasarea discului


din vârful tijei deasupra discurilor aflate pe tija 7¦ Se presupune că
mutarea este corectă (vezi condiţia de mai sus)¦

Fie X"$ ´7# şirul de mutări prin care cele  discuri din vârful tijei
sunt mutate peste cele de pe tija 7, folosind şi a treia tijă, al cărei număr
este evident 83 37¦ Problema constă în a determina X"$x´# ¦
Se observă că este satisfăcută relaţia:
X"$ ´7#X"3x$ ´7# " ´7#X"3x$ ´7# (*)
respectându-se condiţia din enunţ¦ Deci p roblema pentru  discuri a fost
redusă la două probleme pentru 3x discuri, al căror rezultat este
asamblat conform (*)¦

Corespunzător, vom executa apelul G "´x´# , unde procedura


G are forma:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

 G "´ ´7# 


 x
 Ú " ´7#
. À83 37$
G "3x´ ´.#$G "x´ ´7#$G " 3x´.´7#
 

 
 . Numărul de mutări este 3x¦


8.4. Sortare prin interclasare
Fie "x´ ´ # vectorul care trebuie ordonat crescător¦
Ideea este următoarea: împărţim vectorul în doi subvectori,
ordonăm crescător fiecare subvector şi asamblăm rezultatele prin
 {
{ ¦ Se observă că este aplicată tocmai metoda Divide et Impera¦

öncepem cu procedura de interclasare¦ Fie secvenţa de indici  


şi fie  un indice intermediar¦ Presupunând că "´ ´ # şi
",x´ ´ # sunt ordonaţi crescător, procedura  va ordona
crescător întreaga secvenţă "´ ´ #¦
Mai precis, vom folosi notaţiile:
.x = indicele curent din prima secvenţă;
. = indicele curent din a doua secvenţă;
. = poziţia pe care va fi plasat cel mai mic dintre .x şi . într-un vector
auxiliar %¦

 "´´# 
.xÀ$.À ,x$. À$
Ú .x O.
 .x1. .x À .x,x$% .À.x
 . À.,x$% .À.
.À .,x

.x5 { au fost epuizate elementelei primei subsecvenţe }
  .´
%.À $. À.,x
 { au fost epuizate elementelei primei subsecvenţe }
 .x´
%.À $. À.,x
 ´
 À% 
 
Timpul de calcul este de ordinul ("3#, adică liniar în lungimea
secvenţei analizate¦

Programul principal urmează întocmai strategia Divide et Impera,


deci se face apelul "x´# , unde procedura recursivă
 are forma:

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

 "´# 
 
 
 À}",#6 $
"´#$",x´#$ 
"´´#


Calculăm în continuare timpul de executare "#, unde "# se


poate scrie:
ù > (constant), pen tru x;
ù "6#, , pentru 5x, unde a este o constantă: problema de
dimensiune  s-a descompus în două subprobleme de dimensiune 6, iar
combinarea rezultatelor s-a făcut în timp liniar (prin interclasare)¦

Presupunem că .¦ Atunci:

"#" .# ".3x#, .


 

/" .3#, .3x0, .".3#,  .


   

/".3#, .30,  .  ".3#,  .


    

   
 ".3 #,  .  

   
.">#,.  .>,    ¦
   


Rezultă că "#>" #¦
Se observă că s-a obţinut acelaşi timp ca şi pentru sortarea cu
ansamble¦
•- ¦ Se poate demonstra că acest timp este optim¦


8.5. Metoda Quicksort
Prezentăm încă o metodă de sortare a unui vector " x´ ´ #¦
Va fi aplicată tot metoda Divide et Impera¦ Şi de această dată fiecare
problemă va fi descompusă în două subprobleme mai mici de aceeaşi
natură, dar nu va mai fi necesară combinarea (asamblarea) rezultatelor
rezolvării subproblemelor¦
Fie "´ ´ # secvenţa curentă care trebuie sortat㦠Vom
 -{ pe  în secvenţa "´ ´ #, adică printr-o permutare a
elementelor secvenţei:
 < va trece pe o poziţie .;
 toate elementele aflate la stânga poziţiei . vor fi mai mici decât <;
 toate elementele aflate la dreapta poziţiei . vor fi mai mari decât <¦
ön acest mod ap va apărea pe poziţia sa finală, rămânând apoi să
ordonăm crescător elementele aflate la stânga sa, precum şi pe cele aflate
la dreapta sa¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Fie ' funcţia cu parametrii ´ care întoarce indicele . pe care va
fi poziţionat  în cadrul secvenţei "´ ´ #¦
Atunci sortarea se realizează prin apelul - ."x´# , unde
procedura - . are forma:
 - ."´# 
 
 
. À'"´#$- ."´. 3x#$- .".,x´# 
 

Funcţia ' lucrează astfel:


 '"´# 
 À$7 À$ À>$77 À3x
Ú  17
  17
 
 17$" ´77# À"3 ´377#
 À , $7 À7,77"M# 
' 
 

Să urmărim cum decurg calculele pentru secvenţa:


"´ ´ xx#"8´´´½´9´x´@´=# 
 se compară 8 cu xx´x>´ până când găsim un element mai mic¦
Acesta este @x¦ Se interschimbă 8 cu x¦ Acum secvenţa este
"x´´´½´9´8´@´=# şi vom lucra în continuare pe subsecvenţa
"´´½´9´8# , schimbând direcţia de comparare conform (*);
 8 va fi comparat succesiv cu ´´ până când găsim un element
mai mare¦ Acesta este 99¦ Se interschimbă 8 cu 9¦

Se obţine astfel "x´´´½´8´9´@´= ), în care la stânga lui 8 apar


valori mai mici, iar la dreapta lui 8 apar valori mai mari, deci l-am poziţionat
pe 8 pe poziţia 9, valoare întoarsă de funcţia '¦

 
 .
Cazul cel mai defavorabil pentru metoda Quicksort este cel în care
vectorul este deja ordonat crescător: se compară x cu ´ ´ 
rezultând că el se află pe poziţia finală, apoi se compară  cu ´ ´ 
rezultând că el se află pe poziţia finală etc¦

Trecem la calculul timpul   de executare al algoritmului Quicksort¦


Vom număra câte comparări se efectuează (componentele vectorului nu
sunt neapărat numere, ci elemente dintr -o mulţime ordonată oarecare)¦
Timpul mediu este dat de formulele:
 x 
"#  Ž x  ó/". Ž x# " Ž .#0
O
 . x
O
"x# Ý þ
>  >
¿
deoarece:

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
 în cazul cel mai defavorabil x se compară cu celelalte n-1 elemente;
 x poate fi poziţionat pe oricare dintre poziţiile .x´´ ´ ;
considerăm aceste cazuri echiprobabile;
 ".3x# este timpul (numărul de comparări) necesar ordonării
elementelor aflate la stânga poziţiei ., iar "3.# este timpul necesar
ordonării elementelor aflate la drea pta poziţiei .¦

"#"3x#,/">#,"x#, ," 3x#0
"3x#"3x#"3x#"3#,/">#, ," 3#0
Scăzând cele două relaţii obţinem:
"#Q"3x#"3x#"3x#,"3x#, dci:
"#",x#" 3x#,"3x# ¦
ömpart cu ",x#:

"# " Ž x# " Ž x#


 
 x  "  x#
"# " Ž x#   x
   Ž ] "<# <c 

 x "#   x 
" Ž x# " Ž #   x 
   Ž ]
 " Ž x#    Ž x

"# "x#   x 
   Ž ]
     ,x
c c

Prin adunarea relaţiilor de mai sus obţinem:


"#  x x x 
     ] Žx
 x   x    x
Cum suma ultimilor doi termeni este negativă, rezultă:
À À
    À À 4",x#
À 
(am folosit o inegalitate bazată pe sumele Rieman pentru funcţia "<# 

<)¦
Deci "#>"  #¦ 

öncheiem cu menţiunea că metoda Divide et Impera are o largă


aplicativitate în calculul paralel¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Tema de autoinstruire nr. 1

Consultaţi bibliografia pentru:

c 1¦ a cunoaşte legătura între arbo ri şi metoda   {;


c ¦ a cunoaşte definiţia arborilor de decizie;
c ¦ a cunoaşte timpul optim, necesar oricărui algoritm bazat pe
c comparaii, pentru sortarea unui tablou cu n elemente ¦
c
c

Testul de autoevaluare nr. 1

1. Ce legătură presupune metoda   { între tipul


problemei şi tipul subproblemelor?

Răspunsurile 2. Daţi o descriere succintă a metodei   {, bazată pe


la test se vor arbori¦
da în spaţiul
liber din
chenar, în
continuarea
enunţurilor 3. De ce este aplicabilă metoda   { în calculul paralel
?

4. Care este facorul cu care se reduce timpul de executare a unei


probleme prin aplicarea metodei   { ?

Răspunsurile la acest test se găsesc la pagina 8 a acestei unităţi de


învăţare¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
8.6. Comentarii şi răspunsuri la testele de autoevaluare

Testul 1.

c 1¦ Metoda     { presupune că tipul unei probleme


coincide totdeauna cu tipul subproblemelor în care este
descompusă (de care depinde)¦

¦ Metoda   { constă în:


- construirea dinamică a unui arbore (prin împăr ţirea în
subprobleme);
- parcurgerea în postordine a arborelui (prin asamblarea
rezultatelor parţiale)¦

¦ Rezolvarea unei probleme poate fi făcută în modul următor:


- sunt delegate procesoare pentru rezolvarea subproblemelor;
- după ce se obţin rezultatele subp roblemelor, procesorul care se
ocupă de problemă asambelază aceste rezultate¦

¦ ön general, dacă timpul necesar executării unui algoritm este


O(nk), transformarea sa prin aplicarea metodei   {
conduce la un timp de ordinul O(n k-1 ¦ log n)¦

8.7. Lucrare de verificare pentru studenţi

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
8¦ Metoda Divide et Impera
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

* - 2   { Ñ
0 {   { 
   {
9 

"  Problema plierii ¦ Se consideră un vector de lungime ¦ Definim
plierea vectorului prin suprapunerea unei jumătăţi numită
{{  peste cealaltă jumătate numită  {  cu
precizarea că dacă numărul de elemente este impar, elementul
din mijloc este eliminat¦ ön acest mod se ajunge la un subşir ale
c cărui elemente au numerotarea corespunzătoare jumătă ţii
receptoare¦ Se cer următoarele:
- Fiind dat `{1, , ¦¦¦, } să se determine dacă elementul  poate fi
Ñ{ ca rezultat al unor plieri succesive¦
- Să se precizeze toate Ñ{ posibile¦

!" Săritura calului" Să se parcurgă o tablă de şah pornind dintr -un


colţ, cu ajutorul unui cal¦ Se va trece prin toate pătratele tablei de
şah fără a trece de două ori prin acelaşi pătrat¦

(" Placa cu găuri ¦ Se dă o placă dreptunghiulară în care sunt făcute


 găuri şi poziţiile lor sunt date prin coor donatele (, :) ale acestora¦
Ştiind că găurile sunt considerate punctiforme să se determine placa
de arie maximă care se poate decupa din placa iniţială şi care nu
conţine în interior nici o gaur㦠c

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
- însoţiţi programul de o documentaţie privind problema tratată,
modul de introducere a datelor şi aspecte deosebite folosite la
elaborarea programelor¦

8.8. Bibliografie

[1] Georgescu Horia, +     {{ , Editura Universităţii


Bucureşti, 005
[ ] Cormen T¦ H¦ et al¦    1{ , Computer Libris Agora,
000
[] Parberry Ian, Gasarch William, × 
  ô +
( nd
c Edition), 00
[] Skiena Steven, +ô  
•{ {, Springer 18

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Unitatea de învăţare Nr. 9

METODA BRANCH AND BOUND

Cuprins

Obiectivele unităţii de învăţare nr¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 8 5


¦1¦ Prezentare generală ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦ 85
¦ ¦ Algoritmul Branch & Bound pentru probleme de optim ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 8
¦¦ Comentarii şi răspunsuri la testele de autoevaluare ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 
¦¦ Lucrare de verificare pentru studenţi ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 
¦5¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 5


Obiectivele Unităţii de învăţare nr. 9

După ce veţi parcurge această unitate de învăţare, veţi reuşi să:


ù stăpâniţi o metodă complexă de programare, ce îmbină
parcurgerea în adâncime a unui arbore cu parcurgerea sa pe
lăţime;
c ù să aplicaţi metoda > { +{ >  problemelor de optim¦

9.1. Prezentare generală

Metoda > { + {  >  se aplică problemelor care care pot fi


reprezentate pe un arbore: se începe prin a lua una dintre mai multe
decizii posibile, după care suntem puşi în situaţia de a alege din nou între
mai multe decizii; vom alege una dintre ele etc¦ Vârfurile arborelui
corespund stărilor posibile în dezvoltarea soluţiei¦

Deosebim două tipuri de probleme:


1) Se caută un anumit vârf, numit 2 Ñ  {, care evident este
final (nu
are descendenţi)¦
) Există mai multe vârfuri finale, care reprezintă soluţii posibile,
dintre care căutăm de exemplu pe cel care optimizează o anumită funcţie¦

˜ c , C×


 "
Un număr de 15 plăcuţe pătrate sunt incorporate într -un cadru  ë,
o poziţie fiind liber㦠Fiecare plăcuţă este etichetată cu unul dintre
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
numerele 1, ,¦¦¦,15¦ Prin Ñ {- înţelegem o plasare oarecare a
plăcuţelor în cadru¦ Orice plăcuţă adiacentă cu locul liber poate fi mutată
pe acest loc liber¦ Dându-se o configuraţie iniţială şi una finală, s e cere o
succesiune de mutări prin care să ajungem din configuraţia iniţială în cea
final㦠Configuraţiile iniţială şi finală pot fi de exemplu:

1  c 1  c
5c 7 8c 5 6 7 8c
 6 10 11c  10 11 1 c
1 1 15 1 c 1 1 15

unde locul liber mai poate fi considerat drept conţinând plăcuţa imaginară
cu eticheta 16¦

Prezentăm întâi o condiţie de existenţă a unei succesiuni de mutări


prin care se poate trece de la configuraţia iniţială în cea finală¦
Cele 16 locaşuri sunt considerate ca fiind ordonate de la stânga la
dreapta şi de jos în sus¦ Pentru plăcuţa etichetată cu i definim valoarea
" # ca fiind numărul locaşurilor care urmează celei pe care se află
plăcuţa şi care conţin o plăcuţă a cărei etichetă este mai mică decât ¦ De
exemplu pentru configuraţia iniţială de mai sus avem:
"9#x ; "#> ; "x8#x> ; "x½#x etc¦
Fie  şi  linia şi coloana pe care apare locul liber¦ Fie <`:>´x;
definit astfel: <> dacă şi numai dacă , este par¦ Se poate demonstra
următorul rezultat:

Propoziţie. $  {/ Ñ {--{/    {{ Ñ {-{ 


Ñ{/ {

 "x#,"#, ,"x8#,< 
{ ¦
ön continuare vom presupune că putem trece de la configuraţia
iniţială la cea finală¦

Cum locul liber poate fi mutat spre N, S, E, V (fără a ieşi din cadru),
rezultă că fiecare configuraţie (stare) are cel mult  descendenţi¦ Se
observă că arborele astfel construit este infinit¦ Stările finale sunt stări
rezultat şi corespund configuraţiei finale¦

˜ c 9  +{{  
" 
Se consideră un graf orientat cu arcele etichetate cu costuri
pozitive¦ Inexistenţa unui arc între două vârfuri este identificată prin
"prezenţa" sa cu costul +¦ Presupunem că graful este dat prin matricea C
a costurilor sale¦ Se cere să se determine, dacă există, un circuit
hamiltonian de cost minim¦
Să considerăm de exemplu graful dat de matricea de costuri:

    
 ]
  ]
9 
   ]
 ]
    ]

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Arborele spaţiului de stări, în care vârfurile corespund vârfurilor din


graf, iar muchiile reprezintă arce din graf, este următorul:

´ c ´ c ´ c

  

´ c ´ c ´ c ´ c ´ c ´ c

     x

´ c ´ c ´ c ´ c ´ c ´ c

xx x x x x x

subînţelegându-se că se pleacă din vârful 1 şi că din frunze se revine la


acest vârf¦

¯{ 
 { > { +{ >  ¦
Ştim că şi metoda backtracking este aplicabilă pr oblemelor
reprezentabile pe arbori¦ Există însă multe deosebiri, dintre care
menţionăm următoarele:
- ordinea de parcurgere a arborelui;
- modul în care sunt eliminaţi subarborii care nu pot conduce la o
soluţie;
- faptul că arborele poate fi infinit (prin natur a sa sau prin faptul că mai
multe vârfuri pot corespunde la o aceeaşi stare)¦

ön general arborele de stări este construit dinamic¦


Este folosită o listă ~ de 2 Ñ  { , adică de stări care sunt
susceptibile de a fi dezvoltate pentru a ajunge la soluţ ie (soluţii)¦ Iniţial,
lista ~ conţine rădăcina arborelui, care este 2 Ñ  ¦ La fiecare pas,
din ~ alegem un vârf (care nu este neapărat un fiu al vârfului curent!), care
devine noul vârf curent¦
Când un vârf activ devine vârf curent, sunt generaţi toţi fiii săi, care
devin vârfuri active (sunt incluşi în ~)¦ Apoi din nou este selectat un vârf
curent¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Legat de modul prin care alegem un vârf activ drept vârf curent,
deci implicit legat de modul de parcurgere a arborelui, facem următoarele
remarci:
Ž parcurgerea DF nu este adecvată, deoarece pe de o parte arborele
poate fi infinit, iar pe de altă parte soluţia căutată poate fi de exemplu un
fiu al rădăcinii diferit de primul fiu şi parcurgerea în adâncime ar fi
ineficientă: se parcurg inutil stări, în lo c de a avansa direct spre soluţie;
Ž parcurgerea pe lăţime conduce totdeauna la soluţie (dacă aceasta
există), dar poate fi ineficientă dacă vârfurile au mulţi fii¦

Metoda Branch and Bound încearcă un "compromis" între cele două


parcurgeri menţionate mai su s, ataşând vârfurilor active câte un 

pozitiv, ce intenţionează să fie o măsură a gradului de "apropiere" a
vârfului de o soluţie¦ Alegerea acestui cost este decisivă pentru a obţine un
timp de executare cât mai bun şi depinde atât de problemă, dar mai ales
de abilitatea programatorului¦

 
 . Totdeauna costul unui vârf va fi mai mic decât cel al descendenţilor (fiilor)¦
De fiecare dată drept vârf curent este ales cel de cost minim (cel
considerat ca fiind cel mai "aproape" de soluţie)¦ De a ceea ~ va fi în
general un min-ansamblu: costul fiecărui vârf este mai mic decât costul
descendenţilor¦

Din analiza teoretică a problemei deducem o valoare   care este


o aproximaţie prin adaos a minimului căutat: atunci când costul unui vârf
depăşeşte  , atunci vârful curent este ignorat: nu este luat în
considerare şi deci este eliminat întregul subarbore pentru care este
rădăcin㦠Dacă nu cunoaştem o astfel de valoare  , o iniţializăm cu ,S¦

Se poate defini o Ñ  -  


  {/, pentru care "<# este dat
de:
 nivelul pe care se află vârful < dacă < este vârf rezultat;
 , dacă < este vârf final, diferit de
vârf rezultat;
 min {"ù# | ù fiu al lui < } dacă < nu este vârf final¦
Această funcţie este ideală din două puncte de vedere:
- nu poate fi calculată dacă arborele este infinit; în plus, chiar dacă
arborele este
finit, el trebuie parcurs în întregime, ceea ce este exact ce dorim să
evităm;
- dacă totuşi am cunoaşte această funcţie, soluţia poate fi determinată
imediat:
plecăm din rădăcină şi coborâm mereu spre un vârf cu acelaşi cost,
până ajungem în vârful rezultat¦

Neputând lucra cu funcţia ideală de mai sus, vom alege o


aproximaţie T a lui , care trebuie să satisfacă condiţiile:
1) în continuare, dacă ù este fiu al lui < avem T"<#1T"ù# ;

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
) T"<# să poată fi calculată doar pe baza informaţilor din drumul de la
rădăcină la < ;
) este indicat ca T4 pentru a ne asigura că dacă T"<#5  , atunci şi
"<#5  , deci < nu va mai fi dezvoltat¦

O primă modalitate de a asigura compromisul între parcurgerile în


adâncime şi pe lăţime este de a alege funcţia ĉ astfel încât, pentru o
valoare naturală ., să fie îndeplinită condiţia: pentru orice vârf < situat pe
un nivel < şi orice vârf situat pe un nivel ù <,., să avem T"<#5T"ù# ,
indiferent dacă ù este sau nu descendent al lui <¦

Condiţia de mai sus spune că niciodată nu poate deveni activ un


vârf aflat pe un nivel ù<,. dacă în ~ apare un vârf situat pe nivelul <,
adică nu putem merge "prea mult" în adâncime¦ Dacă această condiţie
este îndeplinită, este valabilă următoarea propoziţie:

Propoziţie  { /


/
 -{{Ñ{
/1 % Ñ +{  { / 
{  
Ñ" 
Putem aplica cele de mai sus pentru jocul Perspico, alegând:
T"<# = suma dintre lungimea drumului de la rădăcină la < şi numărul de
plăcuţe care nu sunt la locul lor (aici k=15)¦

9.2. Algoritmul Branch & Bound pentru probleme de optim

Să presupunem că dorim să determinăm vârful final de cost minim


şi drumul de la rădăcină la el¦ Fie   aproximarea prin adaos considerată
mai sus¦
Algoritmul este următorul (  este rădăcina arborelui, iar   este
vârful rezultat):

À $~q: ;$  À $


calculez T" #$" # À>
Ú ~ 
 q{este scos vârful cu T" # minim din min-ansamblul ~}
 toţi 7 fii ai lui 
 calculez T"7#$ calcule locale asupra lui 7$"7# À 
  7 este vârf final 
  T"7#1  
   À T"7#$  À7
elimină din ~ vârfurile . cu T".#2  
  "M#
 T"7#1  
 7 ~
 ,  Ú "K < UV K# 
 Ú " #$  À   
 Ú   >
Ú " #$  À" #

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  c
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

 
 . La (*) am ţinut cont de faptul că dacă 7 este descendent al lui ,
atunci T" #1T"7# ¦

 { { {    {



    {     +{{ 
 
, pe exemplul considerat mai sus¦
Pentru orice vârf < din arborele de stări, valoarea "<# dată de funcţia
de cost ideală este:
 lungimea circuitului corespunzător lui < dacă < este frunză
 min {"ù# | ù fiu al lui < } altfel¦

Fiecărui vârf < îi vom ataşa o {    


  F< (numai dacă nu
este frunză) şi valoarea T"<#
 
 . Dacă micşorăm toate elementele unei linii sau coloane cu ˜ҏ, orice
circuit hamiltonian va avea costul micşorat cu ˜, deoarece în orice circuit
hamiltonian din orice vârf pleacă exact un arc şi în orice vârf soseşte exact
un arc¦
Conform acestei observaţii, vom lucra cu {    
  

(în care pe orice linie sau coloană apare cel puţin un zero, exceptând
cazul când linia sau coloana conţine numai S)¦

Pentru rădăcina   1 plecăm de la matricea de costuri E¦


Matricea ataşată va fi matricea redusă obţinută din E, iar T"x# = cantitatea
cu care s-a redus E¦
ön general, pentru un vârf ù oarecare al cărui tată este < şi muchia "<´ù#
este etichetată cu " ´7#:
 dacă ù este vârf terminal, T"<# va fi chiar "ù#, adică costul real al
circuitului;
 în caz contrar, plecând de la F< şi T"<# procedăm astfel:
- elementele liniei devin , deoarece mergem sigur către vârful 7 din
graf;
- elementele coloanei 7 devin , deoarece am ajuns sigur în vârful 7
din graf;
- F<"7´x#À, pentru a nu reveni prematur în rădăcina 1;
- reducem noua matrice F< şi obţinem Fù; fie  cantitatea cu care s-a
redus F<¦ Vom lua T"ù#ÀT"<#,,F <" ´7#¦

Concret, pentru exemplul dat, calculele se desfăşoară astfel:

 Pentru rădăcină:
- reduc liniile în ordine cu , 1, , ;
- reduc prima coloană cu 1;
- în acest mod obţin T"x#@ , iar matricea M1 este:
  


 ]
 ]
   ]


 ]
 ]
 

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

 Acum  À @; ~:x;¦ Este extras vârful 1 şi sunt consideraţi fiii săi¦

 Pentru vârful :
- plec de la Fx şi pun  pe linia 1 şi coloana ;
- reduc linia  cu ;
- în acest mod obţin T"#,@,xx , iar matricea F este:


   


   ]]
     ]



  ]]
 Pentru vârful :
- plec de la Fx şi pun  pe linia 1 şi coloana ;
- reduc linia cu ;
- în acest mod obţin T"#,@,½x= , iar matricea M este:
    


   ]]
      ]



  ]]
 Pentru vârful :
- plec de la Fx şi pun  pe linia 1 şi coloana ;
- nu este necesară vreo reducere;
- în acest mod obţin T"#>,@,>@ , iar matricea M este
    


  ]]
  ]
  



   ]]
 Acum ~:´´; cu T"#x, T"#x=, T"#@¦ Devine activ vârful

 Pentru vârful :
- plec de la F şi pun  pe linia  şi coloana ;
- nu este necesară vreo reducere;
- în acest mod obţin T"@#>,@,>@ , iar matricea M este:

    


   ]]
     ]



    ]]

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
 Pentru vârful 10:
- plec de la F şi pun  pe linia  şi coloana ;
- reduc linia cu , iar linia  cu 5;
- în acest mod obţin T"x>#9,@,x , iar matricea M10 este:

    


   ]]
    ]



    ]]

 Acum ~:´´@´x>; cu T"#x , T"#x= , T"@#@ , T"x>#x ¦


Devine activ vârful ¦ Singurul său descendent este 15, care este frunză¦
T"x½#"x½#@ (costul real al circuitului)¦ Sunt eliminate din ~ vârfurile cu
costurile mai mari decât , deci ~ devine vid㦠  rămâne egal cu , va fi
produs la ieşire circuitul căutat (1,, ,,1) şi algoritmul se opreşte¦

Testul de autoevaluare nr. 1

1. Care este clasa de probleme pentru care se poate aplica


metoda > { +{ >  ?

Răspunsurile 2. Cum se alege funcţia de cost şi care rolul ei?


la test se vor
da în spaţiul
liber din
chenar, în
continuarea 3. Care este criteriul prin care din mulţimea vârfurilor active este
enunţurilor ales vârful curent ?

4. Care este relaţia între o funcţie de cost oarecare şi funcţia de


cost ideală?

Răspunsurile la acest test se găsesc la pagina  a acestei unităţi de


învăţare¦

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

9.3. Comentarii şi răspunsuri la testele de autoevaluare

Testul 1.

1¦ Metoda > { +{ >  este aplicabilă problemelor care se


c
pot reprezenta pe un arbore (finit sa infinit)¦ de cătare¦

¦ Orice funcţie de cost c trebuie să îndeplinească condiţiile:


- dacă y este fiu al lui x avem c(x)<c(y);
- c(x) să poată fi calculată doar pe baza informaţilor din drumul
de la rădăcină la x ¦
Rolul ei este de a aproxima funcţia de cost ideală¦

¦ Pentru problemele de minim, vârful curent este ales din


mulţimea vârfurilor active şi anume este ales ca fiind cel de cost
minim¦

¦ ön general, pentru problemele de minim, funcţia de cost aleasă


trebuie să aibă valori mai mici decât funcţia de cost ideală¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

9.4. Lucrare de verificare pentru studenţi



* - 2    {  Ñ
0   { > { + {  >  
   { {     {
9 

"'ocul Perspico. Enunţul este prezentat mai sus¦

!" 'ocul Quad. QUAD se joacă pe o tablă având nouă câmpuri:


patru colţuri, patru mijloace, şi un centru, fiecare câmp putând fi
alb sau negru¦ Un exemplu de configuraţie este următoarea:
c
colţ mijloc colţ
mijloc centru mijloc
colţ mijloc colţ
în care câmpurile negre apar întărite¦
Regulile de joc sunt următoarele:
± acţionarea unui câmp negru are efect nul;
± acţionarea unui colţ alb schimbă c ulorile lui, ale mijloacelor
vecine şi a centrului;
± acţionarea unui mijloc alb schimbă culorile lui şi ale colţurilor
vecine;
± acţionarea centrului alb schimbă culorile lui şi ale mijloacelor
vecine¦
Scopul jocului este de a trece dintr -o configuraţie iniţială într-o
configuraţie finală, am bele date¦

(" Problema alocării resurselor. Se consideră  resurse care


concură la realizarea a  obiective¦ Repartizarea unei resurse 
obiectivului  impune un cost ¦ Se pune problema re partizării
fiecărei resurse a câte unui obiectiv astfel încât costul total al
repartizării să fie minim¦

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor;
- însoţiţi programul de o documentaţie privind pro blema tratată,
modul de introducere a datelor şi aspecte deosebite folosite la
elaborarea programelor¦

¯ /  {  0 Ñ /- 12{   Ñ  {   {
   "

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
¦ Metoda Branch and Bound
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

9.5. Bibliografie

[1] Georgescu Horia, +     {{ , Editura Universităţii


Bucureşti, 005
[ ] Cormen T¦ H¦ et al¦    1{ , Computer Libris Agora,
000
[] Parberry Ian, Gasarch William, × 
  ô +
( nd
c Edition), 00
[] Skiena Steven, +ô  
•{ {, Springer 18

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Unitatea de învăţare Nr. 10

METODA PROGRAMĂRII DINAMICE

Cuprins

Obiectivele unităţii de învăţare nr¦ 10 ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6


10¦1¦ O problemă generală ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 6
10¦ ¦ Metoda şirului crescător de mulţim i ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 8
10¦¦ Sortarea topologică ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦ 
10¦¦ Soluţie finală ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦ 100
10¦5¦ Metoda programării dinamice¦ Exemple reprezentative ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦ 100
10¦6¦ Comentarii şi răspun suri la testele de autoevaluare c c107
10¦7¦ Lucrare de verificare pentru studenţi c  c108
10¦8¦ Bibliografie ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦ ¦10

Obiectivele Unităţii de învăţare nr. 10

După ce veţi parcurge această unitate de învăţare, veţi reuşi să


cunoaşteţi:
ù noţiunea de graf de dependenţe;
c ù metode de rezolvare precum cea a şirului crescător de mulţimi
şi cea a sortării topologice;
ù noţiunea de PD-arbore;
ù parcurgerea în postordine a unui PD -arbore ca soluţie finală
pentru metoda programării dinamice;
ù exemple reprezentative de probleme rezolvate prin metoda
programării dinamice¦

 c

Vom începe prin a enunţa o problemă generală şi a trece în revistă


mai mulţi algoritmi de rezolvare¦ Abia după aceea vom descrie metoda
programării dinamice¦

10.1. O problemă generală

Fie şi I două mulţimi oarecare¦


c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Fiecărui element <` urmează să i se asocieze o valoare
"<#`I
Iniţial v este cunoscută doar pe  ´ 
Fiecărui <` J îi asociem:
< & mulţimea elementelor din A de a căror valoare depinde
"<#$
<  : funcţie care specifică dependenţa de mai sus¦ Dacă
<:x´ ´ .;´ atunci
"<# <"
" x#´ ´
" .##
Se mai dă '`
Se cere să se calculeze, dacă este posibil, valoarea v(z)¦

˜ c :x´´ ´x;$ :x´´8´=´9´@;$


 :x´;$  :x´´;$ ½:x´;$
 x>:=´9;$  xx:9´@;$ x:x>´xx; 
Elementele din  au asociată valoarea 1¦
Fiecare funcţie < calculează
"<# ca fiind suma valorilor
elementelor din <
'½ 
Este evident că vom obţine
"x´x´´´½´x´x´x´x´x´´´# O
ordine posibilă de a considera elementele lui J astfel încât să putem
calcula valoarea asociată lor este: ´x>´xx´x´´

Lucrurile devin mai clare dacă reprezentăm problema pe un  {Ñ 


 -¦ Vârfurile corespund elementelor din , iar descendenţii unui
vârf < sunt vârfurile din <¦ Vârfurile din  apar îngroşate¦

c
c
c

c  c

c

 u
   
Problema enunţată nu are totdeauna soluţie, aşa cum se vede pe
graful de dependenţe de mai jos, în care există un circuit¦ '¦
c


c
c
 
 :
3 poate fi chiar infinită;
3 I este de obicei N, Z, R, :>´x; sau un produs cartezian;
3 < poate fi un minim, un maxim, o sumă etc¦

Pentru orice <` , spunem că < este { 


 dacă, plecând de la ,
poate fi calculată valoarea
"<# Evident, problema are soluţie dacă şi
numai dacă' este accesibil¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Pentru orice <` , notăm prin (<  -{ 2 Ñ  


 { 
x, adică mulţimea vârfurilor ù pentru care există un drum de la ù la <¦
Problema enunţată are soluţie dacă şi numai dacă:
1) (' nu are circuite;
) vârfurile din (' în care nu sosesc arce fac parte din ¦

Prezentăm în continuare mai multe metode de rezolvare a problemei


enunţate¦

10.2. Metoda şirului crescător de mulţimi


Fie o mulţime finită şi  o submulţime a sa¦ Definim următorul şir
crescător de mulţimi:

>
.,x. :<`  <.;´.5>
Evident, >x ..,x

×   Dacă .,x., atunci ., . , `S


Facem demonstraţia prin inducţie după
Pentru x rezultatul este evident¦
Presupunem ., . şi demonstrăm că ., ,x. :
., ,xcf¦ definiţiei şirului de mulţimi
.,  :<`  <., ;cf¦ ipotezei de inducţie
. :<`  <.; cf¦ definiţiei şirului de mulţimi
.,xcf¦ ipotezei de inducţie
.¦

   3 ne oprim cu construcţia şirului crescător de mulţimi la primul . cu


..,x ( este finită!);
3 dacă aplicăm cele de mai sus pentru problema generală enunţată,
aceasta are soluţie dacă şi numai dacă '`.¦

Vom lucra cu o partiţie + N, unde + este mulţimea curentă de vârfuri


a căror valoare asociată este cunoscută¦
+À $N À J

WÀN
 toţi <`N
  <+
  + À + :<;$N ÀNJ:<;
  calculează
"<# conform funcţiei <
   <' Ú 
"<#$ 
 NW{ nu s-a avansat! }
Ú "'´K % L# 

c aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Metoda şirului crescător de mulţimi este larg folosită în teoria
limbajelor formale, unde de cele mai multe ori ne interesează existenţa
unui algoritm şi nu performanţele sale¦

10.3. Sortarea topologică

Fie :x´ ´; o mulţime finit㦠Pe este dată o relaţie tranzitivă,


notată prin "<"¦ Relaţia este dată prin mulţimea perechilor " ´7# cu 17¦
Se cere să se listeze elementele x´ ´ ale mulţimii într-o ordine
ce satisface cerinţa: dacă 17, atunci apare la ieşire înaintea lui 7¦
Problema enunţată apare de exemplu la înscrierea unor termeni
într-un dicţionar astfel încât explicaţiile pentru orice termen să conţină
numai termeni ce apar anterior¦

Este evident că problema se transpune imediat la grafurile de


dependenţă: se cere o parcurgere a vârfurilor grafului astfel încât dacă
există un arc de la la 7, atunci trebuie vizitat înaintea lui 7¦

 
 :
3 problema are soluţie dacă şi numai dacă graful este aciclic;
3 dacă există soluţie, ea nu este neapărat unică¦

ön esenţă, algoritmul care urmează repetă următorii paşi:


3 determină care nu are predecesori;
3 îl scrie;
3 elimină perechile pentru care sursa este ¦

Fie F mulţimea curentă de vârfuri¦ Iniţial F ¦


Fie 9 coada elementelor din F care nu au predecesori¦

Pentru fiecare ` , considerăm:


Æ = lista succesorilor lui ;
 = numărul predecesorilor lui din mulţimea F curentă¦

Etapa de iniţializare constă în următoarele:

Æ À ´ À>´ 


9À $ À> { este numărul elementelor produse la ieşire }
.x´ {  este numărul perechilor din relaţia P1P }
 " ´7#
Æ q 7$ 7À  7,x
 x´
  >
   9

Să observăm că timpul cerut de etapa de iniţializare este de ordinul
(",# ¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa c
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Algoritmul propriu-zis, adaptat la problema generală, este următorul:
Ú 9 
 q9$Ú " #$
calculează
"<# conform funcţiei <
  '
 Ú 
" #$ 
 toţi 7`Æ 
 7À 73x
  7> 7  9
1 Ú "K # 

Fiecare executare a lui Ú  necesită un timp proporţional cu


  ¦ Dar LxL, ,L L, ceea ce face ca timpul de executare să fie de
ordinul ("#¦
Ţinând cont şi de etapa de iniţializare, rezultă că timpul total este de
ordinul (",# , deci liniar¦

10.4. Soluţie finală

Etapele sunt următoarele:


3 Identificăm H' = subgraful asociat lui (' ;
3 Aplicăm sortarea topologică¦

Fie H'"'´F'#¦ Iniţial ', F'¦


Pentru a obţine graful H' executăm apelul X"'#, unde procedura X este:

 X"<#
<'
 toţi ù` <
 ù/' "ù´<# F'$X"ù#
 $

Timpul este liniar¦


 
 . Ar fi totuşi mai bine dacă :
3 am cunoaşte de la inceput H';
3 forma grafului ar permite o parcurgere mai simplă¦

10.5. Metoda programării dinamice. Exemple reprezentative

Definim un × {    / / / ' ca fiind un graf de dependenţe î n


care:
3 <, <`(' (există drum de la < la ');
3 :< 3"<#>; ¦

˜ c Următorul graf este un PD-arbore de rădăcină '½¦

caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

c c
c
c

c c

 u  u

Un PD-arbore nu este neapărat un arbore, dar:


3 poate fi pus pe niveluri: fiecare vârf < va fi pus pe nivelul egal cu
lungimea celui mai lung drum de la < la ';
3 poate fi parcurs (cu mici modificări) în postordine;
Prin parcurgerea în postordine, vârfurile apar sortate topologic¦

Algoritmul de parcurgere în postordine foloseşte un vector 


pentru a ţine evidenţa vârfurilor vi zitate¦ Este iniţializat vectorul  şi se
începe parcurgerea prin apelul  "'# :

 toate vârfurile <


"<# À<`
 "'#

unde procedura  are forma:


  "<# 
 toţi 7` < cu "7#
 "7#
calculează
"<# conform funcţiei <$"<# À
 
Timpul de executare a algoritmului este evident liniar¦
• {   {/  {  se aplică problemelor care urmăresc
calcularea unei valori şi constă în următoarele:
1) Se asociază problemei un graf de dependenţe;
) ön graf este pus în evidenţă un PD -arbore; problema se reduce la
determinarea valorii asociate lui z (rădăcina arborelui);
) Se parcurge în postordine PD-arborele¦

Mai pe scurt, putem spune:

• {  {/  {  


/1  Ñ { {
 × %{  0{  {
{1
  ¦

ön multe probleme este util să căutam în PD-arbore regularităţi care


să evite memorarea valorilor tuturor vârfurilor¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
c
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
Vom începe cu câteva exemple foarte simple, dar care pun în
evidenţă anumite caracteristici ale metodei programării dinamice¦

˜ c P  ${ 

Ştim că acest şir este definit astfel:


X>>$X xx$
XX3x,X3´
Dorim să calculăm X pentru un  oarecare¦

Aici :>´ ´; , :>´x; , IS, iar


.:.3x´.3;´.

".#X .$."´%#,%´ .
Un prim graf de dependenţe este următorul:

Să observăm că o mai bună alegere a mulţimii B simplifică structura BD-


arborelui¦
:x´´ ´;$I ë â

".#"X .3x´X.#$ ."´%#"%´,%#

">#">´x#
c c c 3x 

şi obţinem algoritmul binecunoscut:


À>$% Àx
 ´
"´%#À "%´,%#
Ú "%#


˜ c 9{  
 x, , 

Este evident că trebuie calculate anumite sume parţiale¦


O primă posibilitate este să considerăm un graf în care fiecare vârf să
fie o submulţime : x´ ´ .; a lui :x´´ ´; , cu valoarea asociată
 x, , .¦ Această abordare este nerealizabilă: numărul de vârfuri ar fi
exponenţial¦

O a doua posibilitate este ca vârfurile corespundă mulţimilor


: ´ ,x´ ´7; cu  7 şi cu valoarea ataşată  ´7 , , 7¦ Vom nota
un astfel de vârf prin " &7# ¦ Dorim să calculăm valoarea vârfului '"x&# ¦
Putem considera mai mulţi PD-arbori:


caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
 Arborele liniar constituit din vârfurile cu x¦ Obţinem relaţiile de
recurenţă:
x´xx;
x´7x´73x,7 , 7
care corespund asociativităţii la stânga: " "" x,#,#, #¦

 Arborele liniar constituit din vârfurile cu 7¦ Acest arbore corespunde


asociativităţii la dreapta a sumei¦

˜ c
 { {
0   
/   {/" 
Se consideră vectorul " x´ ´ #¦ Se cer lungimea celui mai
lung şir crescător, precum şi toate subşirurile crescătoare de lungime
maximă¦

Introducem notaţiile:
 = lungimea maximă căutată;
" # = lungimea maximă a subşirului crescător ce începe cu  ¦
:x´´ ´; ; :;; : ,x´ ´; ,  1;
 " #
Evident, suntem în prezenţa unui PD -arbore de rădăcină 1¦

Determinarea lui  se face astfel:


Àx$"# Àx
 3x´x´3x
" # Àx,<:"7# 75 O 17;
À<:´" #;

Determinarea tuturor subşirurilor crescătoare de lungime maximă se


face printr-un backtracking recursiv optimal¦ Subşirurile se obţin în vectorul
, iar ind reprezintă ultima poziţie completată din ¦

 x´
 " #
    Àx$"x# À $ " #

unde procedura   are forma:

  " # 


   
 Ú "#
7 ,x´ 
   17O" #x,"7# 
     ,,$"  # À"7#$ "7#$  À  3x

 $

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
c
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
 
 . Dacă dorim să obţinem un singur subşir crescător de lungime , este
suficient să eliminăm instrucţiunea  À  3x¦

˜ cc   - {/{  0  {  " 


Avem de calculat produsul de matrici xë ë ë , unde dimensiunile
matricilor sunt respectiv " x´ #, " ´ #, ¦¦¦ ," ´ ,x#¦ Ştiind că
înmulţirea matricilor este asociativă, se pune problema ordinii în care
trebuie înmulţite matricile astfel încât numărul de înmulţiri elementare să
fie minim¦
Presupunem că înmulţirea a două matrici se face în modul uzual,
adică produsul matricilor "´# şi I"´# necesită ëë înmulţiri
elementare¦

Pentru a pune în evidenţă importanţa ordinii de înmulţire, să


considerăm produsul de matrici xë ë ë  unde x"x>>´x# , "x´x>># ,
"x>>´x#, "x´x>># ¦
Pentru ordinea de înmulţire " xë #ë" ë # sunt necesare 1¦0 0¦000
de înmulţiri elementare¦ ön schimb, pentru ordinea de înmulţire
" xë" ë ##ë  sunt necesare doar 10¦ 00 de înmulţiri elementare ¦

Fie " ´7# numărul minim de înmulţiri elementare pentru calculul


produsului ë ë 7¦ Punând în evidenţă ultima înmulţire de matrici,
obţinem relaţiile:
" ´ #>
" ´7# min :" ´.#,".,x´7#, ë .,xë 7,xL  .17;¦
Valoarea cerută este "x´# ¦

Vârfurile grafului de dependenţă sunt perechile " ´7# cu  .¦


" ´7# depinde de vârfurile din stânga şi de cele de deasupra¦ Se
observă uşor că suntem în prezenţa unui PD-arbore¦

7  7

x

 " ´7#
" ´ #

"7´7#

Forma particulară a PD-arborelui nu face necesară aplicarea algoritmului


general de parcurgere în postordine: este suficient să parcurgem
coloanele ,¦¦¦, , iar pe fiecare coloană să mergem de la diagonală până la
" ´7#¦


caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
7´
 73x´x´3x
" ´7# calculat ca mai sus;
fie k valoarea pentru care se realizează minimul
"7´ # À.
Ú "x´#
(se observă că am folosit partea inferior triunghiulară a matricii pentru a
memora indicii pentru care se realizează minimul)¦
Dacă dorim numai costul final, nu este nevoie să memorăm întreaga
matrice, ci este suficient să folosim un vector¦
Dacă dorim să producem şi o ordine de înmulţire optimă, avem
nevoie de întreaga matrice¦ Vom apela "x´# , unde procedura  are
forma:

 "´#
 
 Ú "#
. À"´#
Ú "K"K#$"´.#$Ú "K´K#$ 
".,x´#$Ú "K#K# 
 $

Pentru evaluarea timpului de lucru, vom calcula numărul de


comparări efectuate¦ Aceste este:
À 
ó ó  

À


è
 ó     

 À 

˜ cc  
  {    +1/ { 
Se consideră un dreptunghi cu laturile de , respectiv  unităţi (1)¦
Asupra sa se pot face tăieturi  pe orizontală sau vertical㦠Se
cere numărul minim de pătrate în care poate fi descompus dreptung hiul¦

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
c
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Testul de autoevaluare nr. 1

1. Care este definiţia unui graf de dependen ţe?

Răspunsurile 2. Care sunt limitele metodei şirului crescător de mulţimi?


la test se vor
da în spaţiul
liber din
chenar, în
continuarea
enunţurilor 3. Care sunt limitele metodei sortării topologice?

4. Care este definiţia unui PD-arbore?

5. Cum poate fi aplicată metoda programării dinamice la


descompunerea unui dreptunghi în pătrate ?

Răspunsurile la acest test se găsesc la pagina 107 a acestei unităţi de


învăţare¦


caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

Tema de autoinstruire nr. 1

Consultaţi bibliografia pentru:


c
c 1. a înţelege limitele unei încercări de a rezolva problema
programării dinamice prin metoda Divide et Impera¦

4. a vedea cum metoda programării dinamice poate fi utilă şi


pentru calculul paralel, de exemplu chiar pentru problema
c sumei a  numere¦
c
c 5. a studia aplicativitatea metodei programării dinamice în
c teoria limbajelor formale ¦

10.6. Comentarii şi răspunsuri la testele de autoevaluare

Testul 1.

¦ Metoda ’irului cresctor de mulimi are două deficienţe


c
majore:
3 la fiecare reluare se parcurg toate elementele lui N;
3 nu este precizată o ordine de considerare a elementelor¦
Aceste deficienţe fac ca această metodă să nu fie
performantă¦

¦ Sortarea topologică aplicată problemei generale , de’i


necesit un timp liniar, prezintă un dezavantaj: sunt
calculate şi valori ale unor vârfuri "neinteresante", adică
neobservabile din '¦

5¦ Fie  7 = numărul minim de pătrate în care poate fi descompus


un dreptunghi de laturi şi 7¦ Evident  77 ¦ Rezultatul căutat
este ¦ Vârfurile grafului sunt " ´7#, iar valorile asociate sunt
 7 ¦
. 73.

.


3.

7

Pentru calculul lui  7 avem de ales între a face:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
c
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
3 o tăietură pe verticală; costurile sunt:  ., ´73., .}76 ;
3 o tăietură pe orizontală; costurile sunt: .´7, 3.´7, . } 6 ¦
Rezultă că valoarea  7 a unui vârf " ´7# depinde de valorile
vârfurilor din stânga sa şi de cele aflate deasupra sa¦ Se observă
că graful de dependenţe este un PD -arbore¦
7

 " ´7#

Dependenţele pot fi exprimate astf el:

 ´x ´ x´ ´


x´77´7x´´
 x´x´ ´
 7 = min{˜´g}, unde
˜=min{ ., ´73. L.  }76 } , iar g=min{ .´7, 3.´7´L.  } 6 

Forma particulară a PD-arborelui permite o parcurgere mai


uşoară decât aplicarea algoritmului general de postordine¦ De
exemplu putem coborâ pe linii, iar pe fiecare linie mergem de la
stânga la dreapta¦
După iniţializările date de primele  dependenţe de mai sus,
efectuăm calculele:

 ´
7 ,x´
 calculul lui  7 conform celei de a patra dependenţ e de mai sus
7   7 À  7 

10.7. Lucrare de verificare pentru studenţi


caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare
10¦ Metoda programării dinamice
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c

* - 2    {  Ñ


0  {   {/  { 
     {
9 

"  Cele mai scurte drumuri într-un graf¦ Fie . = (?, .) un graf
orientat cu |?| =  vârfuri¦ Fiecărui arc (, ) i se pune în
corespondenţă o lungime (cost) ¦
Determinaţi pentru fiecare pereche ( , ) lungimea drumului minim
c de la  la ¦

!" Numele transformate ¦ Se dau două nume (şiruri de caractere) ˜


şi g formate din  respectiv  litere¦ Asupra şirului ˜ sunt
permise următoarele operaţii: * (ştergerea unui caracter); 
(inserarea unui caracter); • (modificarea unui caracter)¦
Se cere să se transforme şirul ˜ în şirul g folosind un număr
minim de operaţii admise .

(" Problema circuitului hamiltonian ¦ Se cere să se rezolve


problema circuitului hamiltonian folosind metoda programării
dinamice¦

Indicaţii de redactare:
- introduceţi în program un număr suficient de comentarii pentru buna
înţelegere a programelor¦
- însoţiţi programul de o documentaţie privind problema tratată,
modul de introducere a datelor şi aspecte deosebite folosite la
elaborarea programelor¦

¯ /  {  0 Ñ /- 12{   Ñ  {   {
   "

10.8. Bibliografie

[1] Georgescu Horia, +     {{ , Editura Universităţii


Bucureşti, 005
[ ] Cormen T¦ H¦ et al¦    1{ , Computer Libris Agora,
000
[] Parberry Ian, Gasarch William, × 
  ô +
( nd
c Edition), 00
[] Skiena Steven, +ô  
•{ {, Springer 18

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
c
Structuri de date si tehnici de programare
Bibliografie
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
c
BIBLIOGRAFIE

[1] D¦ E¦ Knuth, {{   {{ { { {{  , Vol¦ I,Editura Tehnica, Bucuresti,
17; retiparit, Editura Teora, 000¦
[ ] K¦Mehlhorn, {{*  
{ ô +
, Springer-Verlag, Berlin,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
9 ++, Mc Graw Hill,18¦
[] S¦ Sahni, {{*  
ô +
{ ô {
,{{ , Mc Graw Hill, 000¦
[5] I¦ Tomescu, {{*  
, Editura Universitatii din Bucuresti, 008¦
[6] Georgescu Horia, +    {{ , Editura Universităţii Bucureşti, 005
[7] Cormen T¦ H¦ et al¦    1{ , Computer Libris Agora, 000
[8] Parberry Ian, Gasarch William, × 
ô +
( nd Edition), 00
[] Skiena Steven, +ô  
•{ {, Springer 18


caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc
Structuri de date si tehnici de programare

Das könnte Ihnen auch gefallen