• 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!
3
0
0

Testo completo

(1)

ALGORITMI E STRUTTURE DATI – SCIENZE DI INTERNET

13 Gennaio 2004

Esercizio 1

T(n) =

{

c1n2

n <= 33

T(n/2)+c2n2 n> 33 c1, c2 costanti

Per il teorema delle ricorrenze lineari con partizione bilanciata:

a=1 b= 2 = (log a)/(log b) = 0  =2



> quindi T(n) è O(n ) = O(n2)

Esercizio 2

Function TROVADOPPIO(primo, ultimo: integer; var V:vettore) : integer;

var medio : integer;

begin

if (primo < ultimo) then begin

medio := (primo + ultimo) div 2;

if medio > V[medio] then

TROVADOPPIO := TROVADOPPIO(primo, medio-1,V);

else TROVADOPPIO := TROVADOPPIO(medio+1, ultimo, V) end

else TROVADOPPIO := V[primo]

end;

Funzione basata sulla ricerca binaria, complessità: O(logn)

Esercizio 3

Utilizzare gli operatori per le liste visti a lezione!

Procedure CANCELLAEDUPLICA(var L:lista);

var p : posizione;

temp : integer;

begin

p := PRIMOLISTA(L);

while not FINELISTA(p, L) do begin temp := LEGGILISTA(p, L);

(2)

if (temp mod 2 = 1) then begin p := SUCCLISTA(p, L);

INSLISTA(temp, p, L);

p := SUCCLISTA(p, L) end else

CANCLISTA(p, L) end

end;

Complessità ottima: 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) 1 (1,2) 2 (1,3) 3 (3,4)(3,5) 5 (5,2) (1,5) (4,2)

Esercizio 5

Procedure CANCELLANODI(u:nodo; Var T:binalbero);

begin

if (u^.sinistro = NIL) and (u^.destro = NIL) then begin if (u^.genitore <> NIL) then begin

if (u^.genitore^.valore = u^.valore) then begin if (u^.genitore^.sinistro = u) then

u^.genitore^.sinistro := NIL else

u^.genitore^.destro := NIL;

dispose(u) end

end end else begin

if (u^.sinistro <> NIL) then CANCELLANODI(u^.sinistro, T);

if (u^.destro <> NIL) then CANCELLANODI(u^.destro, T) end

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)

end;

Complessità: O(n)

Esercizio 6

Procedure partizione(var A: vettore);

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

i, sommaB, prodC : integer;

begin

for i:=1 to n do B[i] := choice {true, false};

sommaB:= 0;

prodC := 1;

for i:=1 to n do

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

else prodC := prodC * A[i];

if (sommaB = prodC) then success

else failure

end

Riferimenti

Documenti correlati

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

Si progettino un algoritmo euristico di tipo greedy ed uno di ricerca locale per risolvere il problema della BISEZIONE in forma di ottimizzazione: “Dato un grafo non orientato G =

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]

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