Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Facultatea de Inginerie
Departamentul de Automatică, Energie şi Mediu
PROIECTAREA
ALGORITMILOR
Curs 12
Metoda
Divide et Impera
Conţinutul cursului
procedure DIVIDE_IMPERA(p, q, a)
begin
if q-p then
SOL(p, q, a)
else
begin
DIVIDE(p, q, m)
DIVIDE_IMPERA(p, m, b)
DIVIDE_IMPERA(m+1, q, c)
COMB(b, c, a)
end
end
Conţinutul cursului
procedure DIVIDE_IMPERA(p, q, A)
begin
if q – p 2 then SORT(p, q, A)
else
begin
m=[( p + q ) / 2]
DIVIDE_IMPERA(p, m, A)
DIVIDE_IMPERA(m+1, q, A)
INTERCLASARE(p, q, m, A)
end
end
Programul principal:
begin
for i=1 to n do read(Ai)
DIVIDE_IMPERA(1, n, A)
for i=1 to n do write(Ai)
end.
CAUTAREA BINARĂ
Fie un vector v cu n elemente ordonate
crescător şi un număr nr.
Să se caute acest număr în vector şi în
caz că este găsit să se afiseze indicele pe
care se găseşte.
Paşi:
n
• verificam dacă x = 2 ,
adică dacă este egal cu
v
dacă nu
n
n v0, v 1
• dacă x < 2 cautam în jumătatea
v
2
• dacă x > v n2 cautam în jumătatea v n2 1, vn 1
• căutarea în unul dintre cele două intervale se face în
mod similar: comparam cu jumătatea intervalului.
• Dacă elementul este egal cu x, ne oprim, dacă nu
verificam în care parte se poate afla x.
int n,i,nr,v[100];
Notam:
H(n,A,B,C) = sirul mutarilor a n discuri de pe A pe B,
folosind C.
PENTRU
n=1 AB
n>1 H(n,A,B,C) = H(n-1,A,C,B), AB, H(n-1,C,B,A)
Conţinutul cursului
Întrebări?