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


Informatica superiore - Complessità Computazionale, Appunti di Informatica

Appunti digitali riguardanti la complessità computazionale, indirizzati in particolare a chi frequenta il quinto anno di scuola superiore. Presi durante l'anno scolastico 2024-2025 presso il liceo scientifico Piero Gobetti di Torino. Il documento contiene appunti su: •Algoritmi, •Costo dell'algoritmo, •Costo singole istruzioni, •Analisi del caso ottimo, pessimo e medio, •Complessità asintotica, •Classi di complessità, •Problemi P ed NP, •Problemi NP hard, completi, EXP, •Karp riducibilità, •Problemi decidibili, •Problemi indecidibili, •Problemi trattabili e non trattabili, •Problema della Fermata

Tipologia: Appunti

2024/2025

In vendita dal 22/08/2025

alessandro-mangiardi
alessandro-mangiardi 🇮🇹

3 documenti

1 / 14

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Complessità computazionale
Algoritmo efficiente -> permette di risparmiare risorse computazionali, tempo e denaro.
Di ogni algoritmo bisogna considerare due aspetti:
Organizzazione interna (struttura data alle istruzioni e strutture dati utilizzate)
Risorse necessarie per eseguirlo (memoria e processore)
Ogni algoritmo può essere tradotto in diversi programmi, scritti in diversi linguaggi di
programmazione
La bontà di un algoritmo dipende dalle risorse che utilizza e dal tempo di esecuzione.
L’obiettivo è quello di dare ai nostri algoritmi un’organizzazione interna tale che il
processo corrispondente impieghi il minor numero di risorse durante la sua
esecuzione.
Tra le risorse, importanti sono:
Spazio di esecuzione (risorsa spazio), l’area di memoria occupata durante
l’esecuzione
Tempo di esecuzione (risorsa tempo), tempo in cui il processo è eseguito
Con i moderni calcolatori, la risorsa spazio è diventata meno importante.
Algoritmi buoni:
Semplici, efficaci e generali
Facilmente modificabili
Indipendenti dal linguaggio di programmazione che si vuole utilizzare
Costo dell’algoritmo -> numero di operazioni che l’algoritmo deve compiere per
fornire i risultati -> misura del tempo di esecuzione
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Anteprima parziale del testo

Scarica Informatica superiore - Complessità Computazionale e più Appunti in PDF di Informatica solo su Docsity!

Complessità computazionale

Algoritmo efficiente - > permette di risparmiare risorse computazionali, tempo e denaro. Di ogni algoritmo bisogna considerare due aspetti:

  • Organizzazione interna (struttura data alle istruzioni e strutture dati utilizzate)
  • Risorse necessarie per eseguirlo (memoria e processore) Ogni algoritmo può essere tradotto in diversi programmi, scritti in diversi linguaggi di programmazione La bontà di un algoritmo dipende dalle risorse che utilizza e dal tempo di esecuzione. L’obiettivo è quello di dare ai nostri algoritmi un’organizzazione interna tale che il processo corrispondente impieghi il minor numero di risorse durante la sua esecuzione. Tra le risorse, importanti sono:
  • Spazio di esecuzione (risorsa spazio), l’area di memoria occupata durante l’esecuzione
  • Tempo di esecuzione (risorsa tempo), tempo in cui il processo è eseguito Con i moderni calcolatori, la risorsa spazio è diventata meno importante. Algoritmi buoni:
  • Semplici, efficaci e generali
  • Facilmente modificabili
  • Indipendenti dal linguaggio di programmazione che si vuole utilizzare Costo dell’algoritmo - > numero di operazioni che l’algoritmo deve compiere per fornire i risultati - > misura del tempo di esecuzione

Per calcolare il costo dell’algoritmo ci si concentra sull’algoritmo in sé, tralasciando la sua implementazione, in quanto:

  • L’algoritmo è la descrizione generale dell’intero processo di calcolo
  • L’algoritmo ignora tutti i dettagli implementativi legati al linguaggio
  • Il tempo necessario per l’esecuzione dell’algoritmo è indicativo del tempo di esecuzione del processo corrispondente Costo istruzioni semplici (lettura, scrittura, assegnamento) = 1 Costo costrutti iterativi (1) (ripeti...finché, mentre...finementre) = somma costi del test e del corpo del ciclo - > Il test del ciclo ha complessità pari a 1, il corpo del ciclo ha complessità pari alla somma dei costi delle singole istruzioni. Tutto questo moltiplicato per la reiterazione del ciclo. Costo costrutti iterativi (2) (per...esegui) = somma costi dell’inizializzazione della variabile del ciclo (1), della condizione di fine ciclo (K+1), del corpo del ciclo (K) e del costo di incremento della variabile (K). Costo costrutto di selezione (se...allora) = somma costi del test (1) e delle singole istruzioni contenute all’interno di allora. Costo costrutto di selezione binaria (se...allora...altrimenti) = somma costi del test (1) e del massimo tra i due rami. Costo chiamata sottoprogramma = somma costi dell’istruzione di chiamata (1) e dell’intero sottoprogramma.

del problema. Gli ordini di grandezza individuano le classi di complessità. Si parla di complessità asintotica. Date due funzioni T(N) e g(N), si dice che T(N) è O(g(N)) [T(N) è di ordine di grandezza g(N), si legge “T di N è un O grande di g di N”], se esiste una costante C>0 tale che, per tutti i valori nel dominio di N maggiori di un certo N 0 , T(N) < C*g(N). Pertanto, dire che T(N) è O(g(N)), significa che g(N) è un limite superiore alla legge di crescita di T(N), cioè T(N) non cresce + di g(N). T(N) è proporzionale a g(N) se T(N) è O(g(N)) e g(N) è O(T(N)) - > T(N) e g(N) sono dello stesso ordine. T(N) è proporzionale a N^2 (ovvero è O(N^2 )) se è del tipo AN^2 +BN+K Classi di complessità:

  • Complessità costante O(1) o O(C)

Algoritmi che eseguono lo stesso numero di operazioni indipendentemente dalla dimensione dei dati in input Es: scambio di valore tra 2 variabili

  • Complessità logaritmica O(logN) Algoritmi che eseguono un numero di operazioni proporzionale a log N Es: ricerca dicotomica di un elemento su un vettore ordinato.
  • Complessità lineare O(N) Algoritmi che eseguono un numero di operazioni proporzionale a N Es: Ricerca sequenziale di un elemento su un vettore non ordinato, Stampa e Carica vettore
  • Complessità NlogN O(NlogN) Molti algoritmi di ordinamento (Merge Sort, Quick Sort)
  • Complessità polinomiale O(Nk) Algoritmi con complessità di dimensione del problema come base da elevare a un esponente K. Es: ricerca numeri primi Se K=2 - > complessità quadratica Es: Caricamento o stampa matrice Se K=3 - > complessità cubica Es: prodotto matriciale
  • Complessità esponenziale O(KN) Algoritmi con le dimensioni del problema all’esponente Es: Torre di Hanoi, Scacchi Due algoritmi con la stessa classe di complessità si possono confrontare relativamente al tempo di esecuzione. Gli algoritmi A1 e A2 appartengono alla stessa classe di complessità se: dove f 1 (N) e f 2 (N) sono due funzioni con la stessa classe di complessità relative agli algoritmi A1 e A2 che risolvono lo stesso problema. A1 è più efficiente di A2 se:

Nel 2002 si è trovato una soluzione in tempo polinomiale per la ricerca dei numeri primi. La questione è talmente cruciale che è stati inclusa nei 7 problemi del Millennio, formulati dall’istituto matematico Clay e premiati con un milione di dollari. Conseguenze dell’uguaglianza P e NP:

  • Risolvendo in tempo polinomiale la fattorizzazione in fattori primi decadrebbe la sicurezza del metodo di crittografia RSA e con esso la segretezza di miliardi di informazioni criptate.
  • Le previsioni di mercato diventerebbero precise e affidabili, con la conseguente fine della Borsa
  • Sarebbe possibile il calcolo della struttura delle proteine in tempi rapidi, velocizzando la ricerca su patologie attualmente incurabili Un problema è detto NP-hard se è difficile almeno quanto il problema NP più difficile. Es: problema del commesso viaggiatore (TPS, Travelling Salesman Problem), un caso specifico del più ampio problema della ricerca di un percorso minimo (consegna di pacchetti dati via internet, uso del navigatore satellitare...) - > si giunge alla soluzione attraverso un’ euristica , ovvero un algoritmo non ottimale che trova soluzioni approssimate con un buon margine d’errore.

I problemi NP-hard che sono anche NP sono detti NP-completi Es: molti giochi, come battaglia navale, Tetris, Minecraft, Campo minato e problemi combinatori come la creazione dell’orario scolastico o la disposizione degli invitati a un matrimonio nei vari tavoli. Dimostrare che un problema è NP-hard significa dimostrare che una soluzione algoritmica richiede talmente tante risorse, che il problema diventa praticamente intrattabile. Problema trattabile - > Problema con complessità polinomiale nel caso pessimo Problema intrattabile - > problema risolvibile, ma con un algoritmo di complessità maggiore di quelli polinomiali - > non risolvibile nell’atto pratico - > complessità almeno esponenziale nel caso pessimo Problema EXP - > Problema intrattabile, risolvibile in tempo esponenziale. Es: Scacchi - > determinare quale giocatore abbia una strategia vincente. Torre di Hanoi Karp-riducibilità - > tecnica che mette in relazione tra loro i problemi NP. Considerando due problemi di decisione (output o Sì o NO) A e B, diciamo che A è Karp- riducibile a B se esiste un algoritmo polinomiale che trasforma un’istanza del problema A in un’istanza del problema B.

Problema indecidibile - > Problema per cui non è possibile verificare se una soluzione proposta sia corretta oppure no mediante un algoritmo (Problema la cui soluzione non può essere decisa mediante degli algoritmi) - > non dipende dalle nostre conoscenze o tecnologie - > nessun problema indecidibile potrà essere risolto Alcuni problemi NP-hard sono decidibili altri indecidibili, come L’halting problem o problema della fermata: Dato in input un algoritmo A e un suo input B, il problema della fermata consiste nel determinare se A termina su B oppure no, cioè se dà una soluzione o meno - > non è possibile creare un algoritmo che risponda a questa domanda, lo ha dimostrato Alan Turing nel 1936 È possibile dimostrare che la macchina H non può esistere, indipendentemente dai limiti concreti dei computer e dei linguaggi.

Dimostrazione per assurdo, con altre 2 macchine Concateniamo le 3 macchine Diamo in input a X X

Esempi

  • Complessità costante O(1) o O(C) Scambio di valore tra 2 variabili
  • Complessità logaritmica O(logN) Ricerca dicotomica di un elemento su un vettore ordinato.
  • Complessità lineare O(N) Ricerca sequenziale di un elemento su un vettore non ordinato, Stampa e Carica vettore
  • Complessità NlogN O(NlogN) Merge Sort, Quick Sort
  • Complessità polinomiale O(Nk) Ricerca numeri primi Se K= Caricamento o stampa matrice Se K= Prodotto matriciale
  • Complessità esponenziale O(KN) Torre di Hanoi, Scacchi
  • Problema P

Ordinamento di un vettore, moltiplicazione, caricamento di una matrice, ricerca numeri primi

  • Problema NP Problema del Sudoku, Problema del folding delle proteine, Scomposizione in fattori primi, Job scheduling, Problema della crittografia RSA
  • Problema NP-hard Problema del commesso viaggiatore (TPS, Travelling Salesman Problem), Tris, Number Scrabble
  • Problema NP-completo Battaglia navale, Tetris, Minecraft, Campo minato e problemi combinatori come la creazione dell’orario scolastico o la disposizione degli invitati a un matrimonio nei vari tavoli.
  • Problema EXP Scacchi
  • Problema indecidibile Halting Problem