• Non ci sono risultati.

Introduzione al complessità

N/A
N/A
Protected

Academic year: 2021

Condividi "Introduzione al complessità"

Copied!
5
0
0

Testo completo

(1)

Introduzione al complessità

Paolo Bison

Fondamenti di Informatica Ingegneria Meccanica

Università di Padova A.A. 2008/09

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.1

Complessità



analisi degli algoritmi in termini di indici di qualitá



algoritmo “migliore”



indici:



occupazione di memoria



tempo di esecuzione



f (n)

calcolo del valore dell’indice in funzione della dimensione dei dati di ingresso



distribuzione dei dati in ingresso



caso peggiore



caso migliore



caso medio

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.2

valore di un polinomio



dato polinomio

A

m

x

m

+ A

m−1

x

m−1

+ . . . + A

1

x + A

0

valutarlo in x

0



dimensione n = m-1 numero dei coefficienti A

i

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.3

valore di un polinomio



algoritmo 1

pol← A0 i← 1 while i≤m

pot← 1 k←i while k>0

pot←pot× x0 k←k - 1 pol← Ai×pot + pol i←i+1

¯¯¯|C0

|

¯¯¯|

|C1(n − 1)

|

¯¯¯|

| C2nl=1l= C2n(n−1) 2

|

¯¯¯|C3(n − 1)

|



tempo di esecuzione

f

T

(n) = C

0

+ C

1

(n − 1) + C

2

n (n − 1)

2 + C

3

(n − 1)

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.4

(2)

valore di un polinomio



algoritmo 2 regola di Horner

(. . . (A

m

x + A

m−1

)x + A

m−2

)x . . . + A

1

)x + A

0

pol← Am

i←m-1 while i≥0 do

pol←pol×x0+Ai

i←i-1

¯¯¯|D0

|

¯¯¯|

|D1(n − 1)

|



tempo di esecuzione

f

T

(n) = D

0

+ D

1

(n − 1)



algoritmo “migliore” ?



comportamento asintotico per n → ∞

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.5

notazione O



f (n) è O(g(n))

se esistono due costanti positive c e n

0

tali che 0 ≤ f (n) ≤ cg(n)

per ogni n ≥ n

0

n0

c g(n)

n f(n)



g(n) è un limite asintotico superiore per f (n)

limite superiore di f (n) a meno di un fattore costante



limite superiore alla complessità dell’algoritmo

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.6

classi di complessità k costante log n logaritmica

n

n lineare

n log n subquadratica n

2

quadratica n

3

cubica n

a

polinomiale a

n

esponenziale n! fattoriale

10 20 30 40 50 60

10 20 30 40 50 60

2 log(x) sqrt(x) x x**2 2**x



valore di un polinomio f

(n) = O(n

2

) f

= O(n)

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.7

caveat



f (n) equivalenti a meno di un fattore costante

0 500 1000 1500 2000

0 2 4 6 8 10

1000*x 10*x



valori di n sufficientemente grandi

per valori piccoli di n un algoritmo di complessità maggiore potrebbe essere più efficiente



differenti complessità nei casi migliore, peggiore e medio

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.8

(3)

Radice intera



calcolo della radice quadrata intera di un numero n > 0



la radice intera è quel numero m che soddisfa le condizioni m

2

≤ n e (m + 1)

2

> n

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.9

Radice intera - I

 program isqrt0 integer :: n,m,i

read *,n do i=1,n

if ((i*i<=n) .and. ((i+1)*(i+1)>n)) then m=i

end if end do print *,m

end program isqrt0



O(n)

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.10

Radice intera - II

 program isqrt1 integer :: n,m

read *,n m=0 do

m=m+1

if (((m*m)<=n) .and. ((m+1)*(m+1)>n)) then exit

end if end do print *,m

end program isqrt1



O(n)

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.11

Radice intera - III

 program isqrt2 integer :: n,m,min,max read *,n

min=1; max=n; m=(min+max) / 2 do

if (min==max-1 .or. min==max) then ; exit; end if if (m*m>n) then

max=m else

min=m end if

m=(min+max) / 2 end do

print *,m

end program isqrt2



O(log n)

passo 1 2 . . . k . . . log2n dim. n/2 n/4 . . . n/2k . . . 1

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.12

(4)

radice intera - prestazioni



tempi di esecuzione in sec.

n √

n I II III

500 22 5.44 0.38 0.16 5000 70 50.98 1.19 0.17 50000 223 547.77 3.79 0.21



programma III più efficiente, ma ...

I II III

√ 1000000 998215 1000 458753

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.13

Problemi P e NP



P problemi trattabili: soluzione data da un algoritmo di complessità al massimo polinomiale



NP una soluzione può essere verificata con un algoritmo a complessità polinomiale



NP-completi NP e nessun altro problema NP ha

complessità maggiore a meno di una fattore polinomiale:

- soddisfacibilità di formule logiche - commesso viaggiatore



NP-hard intrinsecamente più difficili degli NP - ottimizzazione di problemi NP-completi:

- percorso minimo in un grafo

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.14

Soluzione di problemi NP



approccio esaustivo



generazione di tutte le possibili configurazioni di uscita



ricerca in questo spazio di una soluzione o di quella migliore



commesso viaggiatore



combinazione di tutti i percorsi possibili



ricerca della combinazione che soddisfa i vincoli

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.15

Generazione delle configurazioni - I



disposizione con ripetizione di N elementi do i0=1,N

do i1=1,N ....

do iN_2=1,N do iN_1=1,N

call config(i0,i1,...,iN_2,iN_1)



O(N

N

)



numero dei cicli do dipende dalla dimensione N

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.16

(5)

Generazione delle configurazioni - II



algoritmo ricorsivo

recursive subroutine genera_disp(config_array,N, liv) integer,dimension(:),intent(inout) :: config_array integer,intent(in) :: liv,N

integer ::i do i=1,N

config_array(liv)=i if (liv==N) then

call config(config_array,N) else

call genera_disp(config_array,N,liv+1);

end if end do

end subroutine genera_disp



attivazione

call genera_disp(config_array,N,1)

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.17

Generazione delle configurazioni - III



permutazioni semplici di N elementi O(n!)

recursive subroutine genera_perm(config_array,N, sub_array,sub_N,liv) integer,dimension(:),intent(inout) :: config_array

integer,intent(in) :: liv,N,sub_N

integer,dimension(:),intent(in) :: sub_array

integer,dimension(sub_N-1) :: local_sub_array; integer ::i,k,l if (sub_N==1) then

config_array(liv)=sub_array(1) call config(config_array,N) else; do i=1,sub_N

config_array(liv)=sub_array(i) l=1; do k=1,sub_N

if (k/=i) then;local_sub_array(l)=sub_array(k);l=l+1; end if end do

call genera_perm(config_array,N,local_sub_array,sub_N-1,liv+1);

end do end if

end subroutine genera_perm

 call genera perm(config array,N,data array,N,1) Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.18

Knapsack problem



Dati N elementi, caratterizzati ciascuno da un peso ed un valore monetario, da introdurre in uno zaino con una data capacità, trovare l’insieme di elementi che massimizza il valore senza superare la capacità.



algoritmo

si analizza tutte le 2

N

− 1 possibili combinazioni degli N elementi e si sceglie quella con valore massimo che non supera la capacità dello zaino



programma knapsack.f90

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.19

Algo + efficienti



complessità dipende dalle funzionalità dell’esecutore



ordinamento



computer: quadratica



uomo: lineare

dati N elementi da ordinare:

- si taglino N bastoncini di lunghezza proporzionale al valore di ciascun elemento - tenendoli con una mano si appoggi una loro estremità su un piano



percorso minimo tra due nodi di un grafo



computer: esponenziale (NP-completo)



uomo: lineare

dati N nodi e M archi:

- si prendano N anelli

- si taglino M fili di lunghezza proporzionale agli archi - si leghino gli N anelli con gli M fili

- si prenda il nodo iniziale e quello finale e si tiri in maniera da avere una parte del grafo ben tesa tra i due anelli

Introduzione alla complessit`a, Paolo Bison, FI08, 2008-09-29 – p.20

Riferimenti

Documenti correlati

 Dati N elementi, caratterizzati ciascuno da un peso ed un valore monetario, da introdurre in uno zaino con una data capacità, trovare l’insieme di elementi che massimizza il

una data capacità, trovare l’insieme di elementi che massimizza il valore senza superare la capacità.

 Dati N elementi, caratterizzati ciascuno da un peso ed un valore monetario, da introdurre in uno zaino con una data capacità, trovare l’insieme di elementi che massimizza il

Effect-sizes are modest for common variants (mostly increases by 1.1-1.5)... Effect-sizes are modest for common variants (mostly increases

Il contenuto del messaggio può essere letto soltanto dal destinatario (proprietà banale) Il contenuto del messaggio.. può essere letto soltanto dal destinatario

Î Analisi del crittogramma di cui è nota una parte del testo. (es.

I: riempimento; il valore di ciascun elemento dello array Pi: il numero degli elementi da inserire (riempimento) non può essere maggiore della cardinalità dell’array. U:

Si consideri il problema di trovare la coppia A[i], A[j], con i 6= j, che minimizza la differenza in valore assoluto tra coppie di elementi, ovvero di trovare la coppia A[i], A[j]