Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Complessità Computazionale: Misurazione Tempo Esecuzione Algoritmi, Appunti di Informatica

Una introduzione alla complessità computazionale, una misura del tempo di esecuzione di un algoritmo in funzione della dimensione del problema. Il testo include esempi di calcolo della complessità di alcuni algoritmi e la distinzione tra istruzioni a costo unitario e complessità asintotica. Il documento conclude con una lista di classi di complessità degli algoritmi.

Tipologia: Appunti

2020/2021

Caricato il 14/06/2021

rita-miritello-1
rita-miritello-1 🇮🇹

3

(4)

30 documenti

1 / 32

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
COMPLESSITA
COMPUTAZIONALE
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20

Anteprima parziale del testo

Scarica Complessità Computazionale: Misurazione Tempo Esecuzione Algoritmi e più Appunti in PDF di Informatica solo su Docsity!

COMPLESSITA’

COMPUTAZIONALE

cronometrare i tempi di alcune istanze

 - COMPUTER1 COMPUTER 
  • Dim input A 1 A 2 A 1 A
  • 50 0,005 0,07 0,05 0,
  • 100 0,003 0,13 0,18 0,
  • 200 0,13 0,27 0,73 1,
  • 300 0,32 0,42 1,65 1,
  • 400 0,55 0,57 2,93 2,
  • 06/14/2021 RITA MIRITELLO

calcolo della complessità in funzione del

passo base

è necessario esprimere il tempo di calcolo di un algoritmo A mediante una funzione T(n) Dove n è la dimensione del problema FUNZIONE T(n) Esprime il tempo necessario affinchè un algoritmo A possa produrre la soluzione di un’istanza di dimensione n 06/14/2021 RITA MIRITELLO 4

Istruzione a costo unitario

Si definisce istruzione a costo unitario un’operazione la cui esecuzione non dipende né dal valore né dal tipo delle variabili, e prende il nome di passo base

  • (^) assegnamento
  • (^) operazioni I/O (da tastiera non da file)
  • (^) operazioni aritmetiche elementari
  • (^) valutazioni di espressioni booleane
  • (^) accesso a elementi di un array 06/14/2021 RITA MIRITELLO 5

Esempio 2

06/14/2021 RITA MIRITELLO 7 K=0; for (j=1;j<=n;j++) {k=k+1; cout<<k+234; } 1 Passo base 1 pb inizializzazione n+1 pb test n pb incremento 1n passo base 1n passo base Totale= 1+1+n+1+n+n+n = 3+4*n

  • (^) Si passa quindi dal numero di passo base alla complessità asintotica
  • (^) individuando il termine di complessità maggiore , cioè il blocco del programma che è maggiormente responsabile del tempo di elaborazione

int minimo (vettore vet) { int i, min; for (min = vet[0], i = 1; i < N; i ++) if (vet[i]<min) / istr. dominante / min = vet[i]; return min; } N-1 volte istruzione dominante

freopen(‘’input.txt’’,’’r’’,stdin)

  • (^) Il nome del file che contiene il programma deve essere esattamente il nome breve riportato nel testo del problema.
  • (^) Il programma consegnato non deve interagire in alcun modo con l’utente, né stampare dati non richiesti , anche se nello sviluppo del programma è possibile utilizzare l’input/output da tastiera/video per eseguire debugging e testing.
  • (^) Ne deriva che tutte le stampe a video e tutte le letture da tastiera devono essere assenti nella versione finale , pena la non valutazione del programma.
  • (^) I file di input e di output devono risiedere nella stessa directory in cui risiede il programma sviluppato dal partecipante. Quindi essi devono essere indicati, nel codice sorgente, senza alcun pathname (nome di percorso).

MACCHINA VIRTUALE

https://forum.cms.di.unipi.it/t/come-importare- la-macchina-virtuale-per-la-gara-di- allenamento-pre-oii/

#include #include #include #include using namespace std; int main() { vector V; int temp, somma=0; for (int i=0; i<10; i++) {cout<<"introduci "<<i<<"elemento "<<"\n"; cin>>temp; V.push_back(temp); } for (int i=0; i<10; i++) {somma = somma + V.at(i); } cout<<"la somma vale "<<somma; return 0;

#include #include #include <stdlib.h> #include<time.h> #include <math.h> #include #include using namespace std; int main() { vector V; for (int i=0; i<10; i++) { V. push_back (rand()%100); } sort (V.begin(), V.end()); for (int i=0; i<10; i++) {cout<< V.at(i);} cin>>n: int t= binary_searh (V.begin(), V.end(),n); return 0; }

#include #include #include #include vector v; list l; stack pila; que coda;

TECNICHE DI PROGRAMMAZIONE

  • (^) DIVIDE ET IMPERA Un problema viene suddiviso in sottoproblemi indipendenti, che vengono risolti ricorsivamente
  • (^) PROGRAMMAZIONE DINAMICA La soluzione viene costruita a partire da un insieme di sottoproblemi potenzialmente ripetuti
  • (^) GREEDY Ad ogni passo si sceglie la soluzione che è localmente ottima