• Non ci sono risultati.

{ ALGORITMI E STRUTTURE DATI – SCIENZE DI INTERNET

N/A
N/A
Protected

Academic year: 2021

Condividi "{ ALGORITMI E STRUTTURE DATI – SCIENZE DI INTERNET"

Copied!
4
0
0

Testo completo

(1)

ALGORITMI E STRUTTURE DATI – SCIENZE DI INTERNET

14 Gennaio 2003

Esercizio 1

T(n) =

{

c1 n <= 44

T(n-2)+nc2 n> 44 c1, c2 costanti

a=1 =1 T(n) è O(n +1 )=O(n2) Esercizio 2

Usare gli operatori visti a lezione!

Procedure paridispari(var L, M:liste);

var p, q:posizione;

begin

p:=primolista(L);

crealista(M);

q:=primolista(M);

while not finelista(p,L) do

if (leggilista(p,L) mod 2 = 0) then canclista(p,L);

else begin

inslista(leggilista(p,L),q,M);

p:=succlista(p,L);

q:=succlista(q,M) end

end

Complessità: O(n)

(2)

Esercizio 3

Usare i puntatori!

Procedure cancellafoglie(var T:albero, n:nodo);

begin

if (u^.destro = nil) and (u^.sinistro = nil) and (u^.valore mod 2 = 0) then begin if u^.genitore = nil then T:=nil

else if u^.genitore^.sinistro = u then u^.genitore^.sinistro := nil else u^.genitore^.destro := nil;

dispose(u) end

else begin

if u^.sinistro <> nil then cancellafoglie(T, u^.sinistro);

if u^.destro <> nil then cancellafoglie(T, u^.destro) end

end

Complessità: O(n)

Esercizio 4

vettori di adiacenza (in grigio) NODI

1 2 3 4 5 6

1 4 4 6 8 9

Ordine visita: 4 (4,1)(4,2) 1 (1,2)(1,3)(1,5) 2 3 (3,4)(3,5) 5 (5,2) ARCHI

2 3 5

A(1)

4

5 A(3)

1

2 A(4)

1 2 3 4 5 6 7

8 2 A(5)

(3)

Esercizio 5

Procedure sommeprefisse(var A,B: vettore; i,j : integer);

var m, k: interger;

begin

if i=j then B[i] := A[i];

else begin

m := (i+j) div 2;

sommeprefisse(A, i, m);

sommeprefisse(A, m+1, j);

for k:=m+1 to j do

B[k] := B[k] + B[m]

end end

Complessità:

T(n) =

{

c2T(n/2)+nc1 2 n> 1 n = 1 c1, c2 costanti Ipotesi n=2h

= (log a)/(log b) = (log 2)/(log 2) = 1 = T(n) è O(n log n) NOTA: non era richiesta complessità ottima

(4)

Esercizio 6

Procedure partizione(var A: vettore; k : integer);

var B, C : packet array [1..n] of boolean;

i, sommaB, sommaC, prodD : integer;

begin

for i:=1 to n do begin

B[i] := choice {true, false};

if not B[i] then C[i] := choice{true, false}

end;

sommaB:= 0;

sommaC:= 0;

prodD := 1;

for i:=1 to n do

if B[i] then sommaB := sommaB + A[i];

else if C[i] then

sommaC := sommaC + A[i]

else

prodD := prodD * A[i];

if (sommaB = k) and (sommaC = prodD) then success else failure

end

Complessità: O(n)

Riferimenti

Documenti correlati

Si scriva una procedura Pascal, basata sulla ricerca binaria, per individuare in tempo O(log n) l’unico intero dell’intervallo 1..n+1 che non compare in V.... Si scriva

[r]

[r]

il ciclo precedente deve continuare fino a quando non sia stata scorsa tutta la lista, così da preservare l’ordinamento interno delle sequenze pari e dispari Come preannunciato il

Esistono due classi di memoria: automatica e statica La classe di memoria automatica è relativa a quegli oggetti locali ad un blocco (funzione o programma) che viene liberata

E responsabilità del programmatore controllare che il numero ed il tipo degli argomenti passati ad una funzione corrisponda con quanto specificato nella dichiarazione della

L Insertion Sort è uno algoritmo di ordinamento molto efficiente per ordinare un piccolo numero di elementi. L idea di ordinamento è quella che potrebbe usare un persona

L’array A[p…r] viene “suddiviso” in due sotto- array “non vuoti” A[p… q] e A[q+1…r] in cui ogni elemento di A[p…q] è minore o uguale ad ogni elemento