• 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

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]

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