Concetti Chiave

  • La complessità misura le risorse necessarie per risolvere un problema, senza considerare valori assoluti legati a specifiche macchine o dati.
  • La dimensione dei dati influisce sul consumo di risorse, mentre i casi limite analizzano i consumi migliori e peggiori di un algoritmo.
  • Esistono due forme di complessità: upper bound, che analizza le risorse usate da un algoritmo, e lower bound, che determina le risorse minime necessarie per un problema.
  • La notazione o-grande permette di esprimere la complessità asintotica, evidenziando come una funzione è limitata superiormente da un'altra.
  • Il tempo di calcolo può variare da costante a esponenziale, con diverse strategie di ordinamento come naive e in place per gestire i dati.

Complessità = risorse necessarie a risolvere un problema (tempo di calcolo, spazio ausiliario), non interessano valori assoluti che dipendono da una specifica macchina fisica e da specifici dati

Dimensione e casi limite

Dimensione: caratteristiche dei dati dai quali dipende il consumo di risorse

Caso peggiore/migliore: configurazione che genera il peggiore/migliore consumo di risorse
Complessità in tempo/spazio: una stima della forma asintotica di come il tempo/spazio di calcolo variano in funzione della dimensione dei dati

Due forme di complessità:

- upper bound, limitazioni superiori: risorse usate da uno specifico algoritmo/programma: analisi di algoritmi/complessità concreta.

- lower bound, limitazioni inferiori: risorse necessarie per la soluzione di un problema: teoria della complessità.

- se le due analisi coincidono: un problema è classificato

Notazione o-grande

Notazione o-grande

Usata per la notazione asintotica

Notazione o-grande: date due funzioni f e g (sotto ipotesi ragionevoli su f e g) dalla dimensione dei dati in n: f è o(g) sse esistono costanti c e b e un valore della dimensione n_0 tale che per ogni n>n_0 t.c. f(n)≤c*g(n)+b

Cioè f è definitivamente maggiorata da g a meno di costanti moltiplicative e additive

Tipi di tempo di calcolo

Tempo costante

Tempo logaritmico

Tempo lineare

Tempo log-lineare

Tempo polinomiale

Tempo esponenziale
Ordinamento (sorting)

Due possibilità diverse:

- creare una copia

- ordinare in place

Algoritmi naive:

- selection sort

- insertion sort

- bubble sort

- shell sort


Domande da interrogazione

  1. Qual è la definizione di complessità in relazione alla risoluzione di un problema?
  2. La complessità è definita come le risorse necessarie per risolvere un problema, che includono il tempo di calcolo e lo spazio ausiliario, senza considerare i valori assoluti legati a specifiche macchine fisiche e dati.

  3. Cosa si intende per caso peggiore e caso migliore nella complessità?
  4. Il caso peggiore e il caso migliore si riferiscono alle configurazioni che generano rispettivamente il massimo e il minimo consumo di risorse durante l'esecuzione di un algoritmo, influenzando così la complessità in tempo e spazio.

  5. Qual è la funzione della notazione o-grande nella teoria della complessità?
  6. La notazione o-grande è utilizzata per descrivere la notazione asintotica, indicando che una funzione f è limitata superiormente da un'altra funzione g, a meno di costanti moltiplicative e additive, per valori sufficientemente grandi della dimensione dei dati.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community