SlideShare una empresa de Scribd logo
1 de 81
Descargar para leer sin conexión
Algoritmi e Strutture Dati
Introduzione




  Prof. Pier Luca Lanzi
Riferimenti                                      2



 Questo materiale è tratto dalle trasparenze
  del corso Introduction to Algorithms
  (2005-fall-6046) tenuto dal Prof. Leiserson
  all’MIT (http://people.csail.mit.edu/cel/)

 T.H. Cormen, C.E. Leiserson, R.L. Rivest,
  C. Stein Introduction to Algorithms,
  Second Edition, The MIT Press, Cambridge,
  Massachusetts London, England
  McGraw-Hill Book Company

 Queste trasparenze sono disponibili sui siti
  http://webspace.elet.polimi.it/lanzi
  http://www.slideshare.net/pierluca.lanzi



                   Prof. Pier Luca Lanzi
Algoritmi & strutture dati
Cos’è un algoritmo?                              4



 “Sequenza di passi, definiti con precisione, che portano alla
  realizzazione di un compito”

 La sequenza di passi deve essere finita
  e deve portare ad un risultato

 Le istruzioni devono essere eseguibili
  materialmente e devono essere
  espresse in modo non ambiguo

 Un algoritmo deve essere comprensibile
  al suo esecutore, corretto, ed efficiente

 Forniscono descrizione astratta di un metodo (procedimento)
  per giungere alla soluzione di un dato problema

                   Prof. Pier Luca Lanzi
Un po’ di storia                                                           5



 Al-Khwārizmī, astronomo e matematico
  Persiano, nell’825 scrive il trattato
  “On Calculation with Hindu Numerals”

 Tradotto in latino nel XII secolo, come
  “Algoritmi de numero Indorum”

 “Algoritmi” era la traduzione del nome
  dell’autore (Al-Khwārizmī) ma il termine
  è stato frainteso come il plurare Latino
  algorismus

 Nel 1240, il termine è usato in nel manuale “Carmen de
  Algorismo” di Alexandre de Villedieu.



  Francobollo emesso il 6 Settembre 1983 dall’Unione Sovietica per commemorare il “compleanno di
  Al-Khwārizmī's (780-850)

                            Prof. Pier Luca Lanzi
Quali sono gli obiettivi del corso?                 6




             Analisi e design di algoritmi

 Analisi degli algoritmi noti per il design di algoritmi nuovi

 Analisi degli algoritmi
    Performance (velocità)
    Utilizzo delle risorse (memoria e comunicazione)

 Ci sono molti altri aspetti (non trattati qui):
     Correttezza, robustezza, mantenibilità
     Modularità, sicurezza, facilità d’uso


                    Prof. Pier Luca Lanzi
7




  Perchè algoritmi e performance?

  La performance spesso determina
il confine tra quello che è possibile e
    quello che non è possibile fare

   L’analisi degli algoritmi ci aiuta
  a capire il concetto di scalabilità



          Prof. Pier Luca Lanzi
8
Scalabilità?




Prof. Lanzi corre i 100m in 12s             In quanto corre la maratona?




                    Prof. Pier Luca Lanzi
Esempio: Ricerca di un elemento                  9



 Dato un elenco contenente n oggetti, cercare
  se un oggetto x è presente

 L’elenco non è ordinato


 x?    x?     x?    x?          x?         x!



 Caso migliore? Quello che cerco è il primo

 Caso peggiore? Ho n elementi e quello che cerco è l’ultimo

 Caso medio? Circa n/2

                   Prof. Pier Luca Lanzi
Codifica in C++                           10



bool linear_find(int v[], int n, int x)
{
  int i;

    for (i=0; i<n && v[i]!=x; i++);

    if (i==n)
       return false;
    else return true;
}




                  Prof. Pier Luca Lanzi
Esempio: Ricerca di un elemento                          11



 Supponiamo ora che l’elenco sia ordinato
  alfabeticamente

 Esempio: l’elenco del telefono o un dizionario

   Rossi?

     A      B    C         ...         N     ...   ...   ...   Z

 Caso migliore? Quello che cerco è il primo

 Caso peggiore?

 Caso medio?

                     Prof. Pier Luca Lanzi
Codifica in C++                           12



bool binary_find(int v[], int n, int x)
{
  int l = -1;
  int r = n; // l, r are beyond array bounds
  while (l+1 != r) { // Stop when l, r meet
    int i = (l+r)/2;                // Check middle
    if (x < array[i]) r = i;        // Left half
    if (x == array[i]) return true; // Found it
    if (x > array[i]) l = i;        // Right half
  }
  return false; // Search value not in array
}




                  Prof. Pier Luca Lanzi
13




           E le strutture dati?

Gli algoritmi lavorano su dati che vengono
 organizzati secondo una certa struttura

        Se la struttura è efficiente
  allora gli algoritmi sono più efficienti



            Prof. Pier Luca Lanzi
14




La ricerca binaria è sempre più efficiente?




             Prof. Pier Luca Lanzi
Struttura Dati?


 Organizzazione o collezione di elementi (o record) su cui sia
  possibile processare le informazioni, effettuare una ricerca,
  ecc.

 La scelta della struttura dati e dell’algoritmo adeguati può
  ridurre i tempi di esecuzione da giorni a pochi secondi. Lo
  stesso vale per altre risorse.

 Efficienza: una soluzione è efficiente se risolve un problema
  dato entro i vincoli di memoria e tempo di esecuzione
  richiesti.




                    Prof. Pier Luca Lanzi
Quale Struttura Dati?


 Tre semplici passi

 Analizzare il problema per determinare i vincoli sulle risorse
  che è necessario soddisfare (Memoria? Velocità? Entrambi?)

 Determinare quali sono le operazioni che devono essere
  supportate quantificando le risorse per ogni operazione

 Selezionare la struttura dati che meglio soddisfa i requisiti

 Alcune domande,
     I dati sono inseriti tutti all’inizio o mano a mano?
     È possibile cancellare degli elementi?
     I dati sono processati sequenzialmente o in ordine
     qualunque?
                    Prof. Pier Luca Lanzi
17




     Ogni struttura dati ha costi/benefici

        Raramente c’è una soluzione
      che va bene in tutte le situazioni

    Costo per memorizzare un elemento,
tempo di esecuzione per le operazioni di base,
        effort per l’implementazione




             Prof. Pier Luca Lanzi
Ordinamento


 Input: sequenza a1, a2, …, an di numeri.

 Output: permutazione a'1, a'2, …, a'n che soddisfi
 la relazione a'1     a'2      … a'
                                   n


 Esempio:
      Input: 8 2 4 9 3 6
      Output: 2 3 4 6 8 9




                    Prof. Pier Luca Lanzi
                                              L1.18
Insertion Sort



                     INSERTION-SORT (A, n) ⊳ A[1 . . n]
                       for j ← 2 to n
                            do key ← A[ j]
                               i←j–1
“pseudo codice”                while i > 0 and A[i] > key
                                   do A[i+1] ← A[i]
                                       i←i–1
                               A[i+1] = key

             1        i                       j     n
        A:
                                        key
                   sorted
                      Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6




                 Prof. Pier Luca Lanzi
                                                     L1.21
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6

           2     4           8           9   3   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6

           2     4           8           9   3   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6

           2     4           8           9   3   6

           2     4           8           9   3   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6

           2     4           8           9   3   6

           2     4           8           9   3   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6

           2     4           8           9   3   6

           2     4           8           9   3   6

           2     3           4           8   9   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6

           2     4           8           9   3   6

           2     4           8           9   3   6

           2     3           4           8   9   6




                 Prof. Pier Luca Lanzi
Esempio di Insertion Sort




           8     2           4           9   3   6

           2     8           4           9   3   6

           2     4           8           9   3   6

           2     4           8           9   3   6

           2     3           4           8   9   6

           2     3           4           6   8   9   Fatto!


                 Prof. Pier Luca Lanzi
Tempo di Esecuzione


 Dipende dall’input
     Dal numero di elementi
     Dallo stato del vettore, una sequenza già ordinata
     richiede meno tempo

 Calcolare il tempo di esecuzione parametrizzandolo rispetto
  al numero di elementi di input (vettori più piccoli richiedono
  meno tempo)

 Cerchiamo limiti superiori al tempo di esecuzione dato che
  danno una garanzia sul tempo massimo richiesto




                    Prof. Pier Luca Lanzi
Quale Tipo di Analisi?                        L1.32



 Caso Pessimo (worst-case): (tipico)
     T(n) tempo massimo per un input di n elementi

 Caso Medio (average-case): (raramente disponibile)
     T(n) tempo medio per un input di n elementi
     Problema: Qual è la distribuzione degli input?

 Caso Migliore (best-case): (non informativo)
     Algoritmi lenti possono essere molto veloci in casi
     particolarmente favorevoli




                   Prof. Pier Luca Lanzi
Quale Tempo di Esecuzione?                   L1.33



 Qual è T(n) nel caso pessimo per l’insertion sort?

 Dipende dalla velocità della macchina su cui viene eseguito
     Velocità relativa (diversi algoritmi, stessa macchina)
     Velocità assoluta (su macchine differenti)



 Non considerare una particolare macchina

              Studiare T(n) per n → ∞

                   Analisi Asintotica

                   Prof. Pier Luca Lanzi
Analisi asintotica
Andamento Asintotico per T(n)           35




                Prof. Pier Luca Lanzi
Computer più veloci o
algoritmi più veloci?


        Quanto guadagno se compero
      un calcolatore 10 volte più veloce?

    T(n)    n     n’         Change      n’/n
  10n     1,000 10,000 n’ = 10n            10
  20n       500 5,000 n’ = 10n             10
  5n log n 250 1,842 10 n < n’ < 10n     7.37
  2n2        70    223 n’ = 10n          3.16
  2n         13      16 n’ = n + 3       -----

                 Prof. Pier Luca Lanzi
37




              Per a, b > 1 qualsiasi

       na cresce più velocemente di logb n
      (meglio logaritmico che polinomiale)

       na cresce più velocemente di log nb
(meglio potenza di un logaritmo che un polinomio)

          an cresce più velocemente nb
      (meglio polinomiale che esponenziale)


              Prof. Pier Luca Lanzi
Analisi Asintotica: Notazione O-grande


 Definizione: sia T(n) una funzione non-negativa,
  T(n) è O(f(n)) se esistono due costanti positive c ed n0 tali
  che T(n) <= cf(n) per ogni n> n0

 Per tutti i gli insiemi di dati di input grandi a sufficienza,
  (n>n0), l’algoritmo termina la sua esecuzione in meno di
  cf(n) passi (nel caso migliore, medio, o peggiore).

 La notazione O-grande indica un limite superiore a T(n)

 Esempio: se T(n) = 3n2 allora T(n) è in O(n2)

 Ovviamente siamo interessati al minimo limite superiore,
  se T(n) = 3n2 è O(n3), ma preferiamo O(n2)


                     Prof. Pier Luca Lanzi
Analisi Asintotica: Notazione Ω-grande


 Definizione: sia T(n) una funzione non-negativa,
  T(n) è Ω(g(n)) se esistono due costanti positive c ed n0 tali
  che T(n) >= cg(n) per ogni n> n0

 Per tutti i gli insiemi di dati di input grandi a sufficienza,
  (n>n0), l’algoritmo ha bisogno almeno di cg(n) passi (nel
  caso migliore, medio, o peggiore).

 La notazione Ω-grande indica un limite inferiore a T(n)

 Esempio: se T(n) = 2n2+n allora T(n) è in Ω(n2)

 Ovviamente siamo interessati al massimo limite inferiore,
  T(n) = 2n2+n è Ω(n), ma preferiamo Ω(n2)


                     Prof. Pier Luca Lanzi
Analisi Asintotica: Notazione Θ-grande


 Definizione: se T(n) è Ω(h(n)) e anche O(h(n)) allora
  T(n) è Θ(h(n))

 Ovvero, se esistono due costanti c1 e c2, ed n0 tali che
  c1g(n) ≤ f(n) ≤ c2g(n) per ogni n>n0




                    Prof. Pier Luca Lanzi
Analisi Asintotica




        Per n grande, un algoritmo (n2) è sempre
             più veloce di un algoritmo (n3)

                                                 Vero asintoticamente!
                                                 Non dovremmo ignorare gli
                                                  algoritmi che sono
                                                  asintoticamente lenti
                                                 Nelle situazioni reali bisogna
T(n)                                              spesso bilanciare obiettivi
                                                  contrapposti
                                                 Tipico esempio, performance
                                                  vs. complessità

                  n         n0
                        Prof. Pier Luca Lanzi
Andamento Asintotico per T(n)           42




                Prof. Pier Luca Lanzi
Regole di Semplificazione


 Se f(n) è O(g(n)) e g(n) è O(h(n)), allora f(n) è O(h(n))

 Se f(n) è O(kg(n)) per ogni k>0, allora f(n) è O(g(n))

 Se f1(n) è O(g1(n)) ed f2(n) è O(g2(n)),
  allora (f1 + f2)(n) è O(max(g1(n), g2(n)))

 Se f1(n) è O(g1(n)) ed f2(n) è O(g2(n)),
  allora f1(n)f2(n) è O(g1(n)g2(n))

 In breve, eliminare i termini di ordine inferiore,
  ignorare le costanti.




                    Prof. Pier Luca Lanzi
Esempi di Analisi Asintotica


 Esempio 1:

          a = b;

 Esempio 2:

      sum = 0;
      for (i=1; i<=n; i++)
        sum += n;




                   Prof. Pier Luca Lanzi
Esempi di Analisi Asintotica


 Esempio 3:

          sum = 0;
          for (i=1; i<=n; j++)
            for (j=1; j<=i; i++)
              sum++;
          for (k=0; k<n; k++)
            A[k] = k;




                  Prof. Pier Luca Lanzi
Esempi di Analisi Asintotica


 Esempio 4:

          sum1 = 0;
          for (i=1; i<=n; i++)
            for (j=1; j<=n; j++)
              sum1++;

          sum2 = 0;
          for (i=1; i<=n; i++)
            for (j=1; j<=i; j++)
              sum2++;




                  Prof. Pier Luca Lanzi
Esempi di Analisi Asintotica


 Esempio 5:

      sum1 = 0;
      for (k=1; k<=n; k*=2)
        for (j=1; j<=n; j++)
          sum1++;

      sum2 = 0;
      for (k=1; k<=n; k*=2)
        for (j=1; j<=k; j++)
          sum2++;




                  Prof. Pier Luca Lanzi
Strutture di Controllo


 Istruzione while: viene analizzato come il ciclo for

 Istruzione if: complessità del blocco più costoso

 Istruzione switch: complessità del caso più costoso

 Chiamata a subroutine: complessità della subroutine




                    Prof. Pier Luca Lanzi
Qual è la Complessità Insertion Sort



INSERTION-SORT (A, n) ⊳ A[1 . . n]
  for j ← 2 to n
       do key ← A[ j]
          i←j–1
          while i > 0 and A[i] > key
              do A[i+1] ← A[i]
                  i←i–1
          A[i+1] = key




                 Prof. Pier Luca Lanzi
Analisi Asintotica dell’Insertion Sort           50



 Caso Peggiore:
            n
   T(n)           ( j)           n2
            j 2

 Caso Medio:
  (tutte le possibili permutazioni siano equiprobabili)
             n
    T(n)          ( j / 2)               n2
            j 2


 È un algoritmo veloce?
     Si, per n piccoli
     No, per n grandi



                         Prof. Pier Luca Lanzi
Cosa Succede Se Abbiamo Più Parametri?


 Calcoliamo la frequenza di tutti i C colori in
  un’immagine di P pixel

for (i=0; i<C; i++)                   // Initialize count
  count[i] = 0;
for (i=0; i<P; i++)                   // Look at all pixels
  count[value(i)]++;                  // Increment count
sort(count);                          // Sort pixel counts

 Se usiamo P come parametri, allora T(n) =        (P log P).

 È più accurato T(n) =        (P + C log C).



                    Prof. Pier Luca Lanzi
Merge Sort



 MERGE-SORT A[1 . . n]
  1.   If n = 1, done.
  2.   MERGE-SORT A[ 1 . . n/2 ]
  3.   MERGE-SORT A[ n/2 +1 . . n ]
  4.   merge the two sorted arrays
        A[ 1 . . n/2 ] and A[ n/2 +1 . . n ]



       Punto chiave: il merge dei due vettori



                    Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12

13 11

7   9

2   1




                 Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12

13 11

7       9

2       1

    1




                 Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12

13 11       13 11

7       9   7   9

2       1   2

    1




                    Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12

13 11       13 11

7       9   7       9

2       1   2

    1           2




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12           20 12

13 11       13 11           13 11

7       9   7       9       7       9

2       1   2

    1           2




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12           20 12

13 11       13 11           13 11

7       9   7       9       7       9

2       1   2

    1           2               7




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12           20 12               20 12

13 11       13 11           13 11               13 11

7       9   7       9       7       9              9

2       1   2

    1           2               7




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12           20 12               20 12

13 11       13 11           13 11               13 11

7       9   7       9       7       9                9

2       1   2

    1           2               7                9




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12            20 12              20 12    20 12

13 11       13 11            13 11              13 11    13 11

7       9   7       9        7       9               9

2       1   2

    1           2                7               9




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12           20 12               20 12    20 12

13 11       13 11           13 11               13 11    13 11

7       9   7       9       7       9                9

2       1   2

    1           2               7                9        11




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12           20 12               20 12    20 12   20 12

13 11       13 11           13 11               13 11    13 11   13

7       9   7       9       7       9                9

2       1   2

    1           2               7                9        11




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12           20 12               20 12    20 12   20 12

13 11       13 11           13 11               13 11    13 11   13

7       9   7       9       7       9                9

2       1   2

    1           2               7                9        11      12




                        Prof. Pier Luca Lanzi
Merge di Due Vettori Ordinati




20 12       20 12           20 12               20 12    20 12   20 12

13 11       13 11           13 11               13 11    13 11   13

7       9   7       9       7       9                9

2       1   2

    1           2               7                9        11      12


                        Il merge è Θ(n)


                        Prof. Pier Luca Lanzi
Insertion Sort vs Merge Sort                     67



 InsertionSort
     Ha un approccio incrementale
     A[1..j-1] ordinato, aggiungi A[j]

 MergeSort
    Ha un approccio divide-et-impera

 Divide: Divide il vettore di n elementi in due array
  di n/2 elementi

 Impera: Chiama il MergeSort ricorsivamente su i due array

 Combina: Fa il merge delle due sequenze ordinate



                    Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una constante




                   Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una constante

                                  T(n)




                   Prof. Pier Luca Lanzi
                                                L1.69
Analisi Asintotica del Merge Sort




Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una constante
                                    cn

              T(n/2)                       T(n/2)




                   Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una constante
                                     cn

                 cn/2                                cn/2

        T(n/4)          T(n/4)              T(n/4)          T(n/4)




                    Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante
                                    cn

                cn/2                              cn/2

         cn/4          cn/4                cn/4          cn/4



        (1)



                   Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




  Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante
                                        cn

                    cn/2                              cn/2

h = log n    cn/4          cn/4                cn/4          cn/4



            (1)



                       Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




  Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante
                                        cn                          cn

                    cn/2                              cn/2

h = log n    cn/4          cn/4                cn/4          cn/4



            (1)



                       Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




  Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante
                                        cn                          cn

                    cn/2                              cn/2          cn

h = log n    cn/4          cn/4                cn/4          cn/4



            (1)



                       Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




  Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante
                                        cn                          cn

                    cn/2                              cn/2          cn

h = log n    cn/4          cn/4                cn/4          cn/4   cn




                                                                    …
            (1)



                       Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




  Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante
                                        cn                          cn

                    cn/2                              cn/2          cn

h = log n    cn/4          cn/4                cn/4          cn/4   cn




                                                                    …
            (1)                  n elementi                         (n)



                       Prof. Pier Luca Lanzi
Analisi Asintotica del Merge Sort




  Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante
                                        cn                             cn

                    cn/2                              cn/2             cn

h = log n    cn/4          cn/4                cn/4          cn/4      cn




                                                                      …
            (1)                  n elementi                            (n)

                                                             Total   (n log n)
                       Prof. Pier Luca Lanzi
79




Θ(nlogn) cresce più lentamente di Θ(n2)

    Asintoticamente il merge sort è
       meglio dell’insertion sort

       In pratica il merge sort
       è conveniente per n>30



           Prof. Pier Luca Lanzi
Notazioni o & ω                               80



 La notazione O-grande e Ω-grande sono basate sulle
  disuguaglianze ≤ e ≥

 La notazione o-piccolo e ω sono basate su disuguaglianze
  strette < e >




                  Prof. Pier Luca Lanzi
Sommario
Sommario


 Algoritmo: “Sequenza di passi, definiti con precisione, che
  portano alla realizzazione di un compito”

 Struttura Dati: Organizzazione o collezione di elementi (o
  record) su cui sia possibile processare le informazioni,
  effettuare una ricerca, ecc.

 La scelta della struttura dati e dell’algoritmo adeguati può
  ridurre i tempi di esecuzione da giorni a pochi secondi.

 Analisi asintotica su performance (tempo di esecuzione T(n))
  notazione O, Ω, e Θ

 Esempi di Insertion Sort and Merge Sort


                    Prof. Pier Luca Lanzi

Más contenido relacionado

Destacado

15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: AlgoritmiMajong DevJfu
 
Contenuti e Contenitori Web per le Tue Idee
Contenuti e Contenitori Web per le Tue IdeeContenuti e Contenitori Web per le Tue Idee
Contenuti e Contenitori Web per le Tue IdeeClaudio Papitto
 
Coding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecodingCoding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecodingAlessandro Bogliolo
 
Lezione 1: Dalle reti sociali alle reti complesse
Lezione 1: Dalle reti sociali alle reti complesseLezione 1: Dalle reti sociali alle reti complesse
Lezione 1: Dalle reti sociali alle reti complesseAndrea Capocci
 
Storia algoritmi Google (2003-2014)
Storia algoritmi Google (2003-2014)Storia algoritmi Google (2003-2014)
Storia algoritmi Google (2003-2014)Giusi Castagnetta
 
Lezione3: Reti sociali, Algoritmi spettrali e SNAP
Lezione3: Reti sociali, Algoritmi spettrali e SNAPLezione3: Reti sociali, Algoritmi spettrali e SNAP
Lezione3: Reti sociali, Algoritmi spettrali e SNAPAndrea Capocci
 
Algoritmi e Calcolo Parallelo 2012/2013 - Analisi degli Algoritmi
Algoritmi e Calcolo Parallelo 2012/2013 - Analisi degli AlgoritmiAlgoritmi e Calcolo Parallelo 2012/2013 - Analisi degli Algoritmi
Algoritmi e Calcolo Parallelo 2012/2013 - Analisi degli AlgoritmiPier Luca Lanzi
 
Corso di S.E.O. trucchi e segreti per essere in prima pagina su Google
Corso di S.E.O. trucchi e segreti per essere in prima pagina su GoogleCorso di S.E.O. trucchi e segreti per essere in prima pagina su Google
Corso di S.E.O. trucchi e segreti per essere in prima pagina su GoogleAssociazione iFormazione
 
Algoritmi, aggregatori, analytics: spunti e appunti da #ONA14
Algoritmi, aggregatori, analytics: spunti e appunti da #ONA14Algoritmi, aggregatori, analytics: spunti e appunti da #ONA14
Algoritmi, aggregatori, analytics: spunti e appunti da #ONA14Andrea Iannuzzi
 
Realtà aumentata markerless basata su algoritmi di Image Recognition e SLAM
Realtà aumentata markerless basata su  algoritmi di Image Recognition e SLAMRealtà aumentata markerless basata su  algoritmi di Image Recognition e SLAM
Realtà aumentata markerless basata su algoritmi di Image Recognition e SLAMSimone Sabbatini
 
Come partecipare a Code Week - Guida per insegnanti
Come partecipare a Code Week - Guida per insegnantiCome partecipare a Code Week - Guida per insegnanti
Come partecipare a Code Week - Guida per insegnantiAlessandro Bogliolo
 

Destacado (20)

Algoritmi
Algoritmi Algoritmi
Algoritmi
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
 
Esercizio Sugli Algoritmi
Esercizio Sugli AlgoritmiEsercizio Sugli Algoritmi
Esercizio Sugli Algoritmi
 
come costruire un algoritmo
come costruire un algoritmocome costruire un algoritmo
come costruire un algoritmo
 
Contenuti e Contenitori Web per le Tue Idee
Contenuti e Contenitori Web per le Tue IdeeContenuti e Contenitori Web per le Tue Idee
Contenuti e Contenitori Web per le Tue Idee
 
Coding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecodingCoding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecoding
 
Pixel art
Pixel artPixel art
Pixel art
 
Un algoritmo è per sempre
Un algoritmo è per sempreUn algoritmo è per sempre
Un algoritmo è per sempre
 
1.01 Algoritmi
1.01 Algoritmi1.01 Algoritmi
1.01 Algoritmi
 
Lezione 1: Dalle reti sociali alle reti complesse
Lezione 1: Dalle reti sociali alle reti complesseLezione 1: Dalle reti sociali alle reti complesse
Lezione 1: Dalle reti sociali alle reti complesse
 
Storia algoritmi Google (2003-2014)
Storia algoritmi Google (2003-2014)Storia algoritmi Google (2003-2014)
Storia algoritmi Google (2003-2014)
 
Lezione3: Reti sociali, Algoritmi spettrali e SNAP
Lezione3: Reti sociali, Algoritmi spettrali e SNAPLezione3: Reti sociali, Algoritmi spettrali e SNAP
Lezione3: Reti sociali, Algoritmi spettrali e SNAP
 
Algoritmi e Calcolo Parallelo 2012/2013 - Analisi degli Algoritmi
Algoritmi e Calcolo Parallelo 2012/2013 - Analisi degli AlgoritmiAlgoritmi e Calcolo Parallelo 2012/2013 - Analisi degli Algoritmi
Algoritmi e Calcolo Parallelo 2012/2013 - Analisi degli Algoritmi
 
Corso di S.E.O. trucchi e segreti per essere in prima pagina su Google
Corso di S.E.O. trucchi e segreti per essere in prima pagina su GoogleCorso di S.E.O. trucchi e segreti per essere in prima pagina su Google
Corso di S.E.O. trucchi e segreti per essere in prima pagina su Google
 
Algoritmi, aggregatori, analytics: spunti e appunti da #ONA14
Algoritmi, aggregatori, analytics: spunti e appunti da #ONA14Algoritmi, aggregatori, analytics: spunti e appunti da #ONA14
Algoritmi, aggregatori, analytics: spunti e appunti da #ONA14
 
Realtà aumentata markerless basata su algoritmi di Image Recognition e SLAM
Realtà aumentata markerless basata su  algoritmi di Image Recognition e SLAMRealtà aumentata markerless basata su  algoritmi di Image Recognition e SLAM
Realtà aumentata markerless basata su algoritmi di Image Recognition e SLAM
 
Code.org recap
Code.org recapCode.org recap
Code.org recap
 
Flow chart
Flow chartFlow chart
Flow chart
 
Didattica e innovazione
Didattica e innovazioneDidattica e innovazione
Didattica e innovazione
 
Come partecipare a Code Week - Guida per insegnanti
Come partecipare a Code Week - Guida per insegnantiCome partecipare a Code Week - Guida per insegnanti
Come partecipare a Code Week - Guida per insegnanti
 

Más de Pier Luca Lanzi

11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i VideogiochiPier Luca Lanzi
 
Breve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiBreve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiPier Luca Lanzi
 
Global Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomeGlobal Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomePier Luca Lanzi
 
Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Pier Luca Lanzi
 
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...Pier Luca Lanzi
 
GGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaGGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaPier Luca Lanzi
 
Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Pier Luca Lanzi
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationPier Luca Lanzi
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationPier Luca Lanzi
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningPier Luca Lanzi
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningPier Luca Lanzi
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesPier Luca Lanzi
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationPier Luca Lanzi
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringPier Luca Lanzi
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringPier Luca Lanzi
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringPier Luca Lanzi
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringPier Luca Lanzi
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesPier Luca Lanzi
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsPier Luca Lanzi
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesPier Luca Lanzi
 

Más de Pier Luca Lanzi (20)

11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi11 Settembre 2021 - Giocare con i Videogiochi
11 Settembre 2021 - Giocare con i Videogiochi
 
Breve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei VideogiochiBreve Viaggio al Centro dei Videogiochi
Breve Viaggio al Centro dei Videogiochi
 
Global Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning WelcomeGlobal Game Jam 19 @ POLIMI - Morning Welcome
Global Game Jam 19 @ POLIMI - Morning Welcome
 
Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018Data Driven Game Design @ Campus Party 2018
Data Driven Game Design @ Campus Party 2018
 
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
GGJ18 al Politecnico di Milano - Presentazione che precede la presentazione d...
 
GGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di aperturaGGJ18 al Politecnico di Milano - Presentazione di apertura
GGJ18 al Politecnico di Milano - Presentazione di apertura
 
Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018Presentation for UNITECH event - January 8, 2018
Presentation for UNITECH event - January 8, 2018
 
DMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparationDMTM Lecture 20 Data preparation
DMTM Lecture 20 Data preparation
 
DMTM Lecture 19 Data exploration
DMTM Lecture 19 Data explorationDMTM Lecture 19 Data exploration
DMTM Lecture 19 Data exploration
 
DMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph miningDMTM Lecture 18 Graph mining
DMTM Lecture 18 Graph mining
 
DMTM Lecture 17 Text mining
DMTM Lecture 17 Text miningDMTM Lecture 17 Text mining
DMTM Lecture 17 Text mining
 
DMTM Lecture 16 Association rules
DMTM Lecture 16 Association rulesDMTM Lecture 16 Association rules
DMTM Lecture 16 Association rules
 
DMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluationDMTM Lecture 15 Clustering evaluation
DMTM Lecture 15 Clustering evaluation
 
DMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clusteringDMTM Lecture 14 Density based clustering
DMTM Lecture 14 Density based clustering
 
DMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clusteringDMTM Lecture 13 Representative based clustering
DMTM Lecture 13 Representative based clustering
 
DMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clusteringDMTM Lecture 12 Hierarchical clustering
DMTM Lecture 12 Hierarchical clustering
 
DMTM Lecture 11 Clustering
DMTM Lecture 11 ClusteringDMTM Lecture 11 Clustering
DMTM Lecture 11 Clustering
 
DMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensemblesDMTM Lecture 10 Classification ensembles
DMTM Lecture 10 Classification ensembles
 
DMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethodsDMTM Lecture 09 Other classificationmethods
DMTM Lecture 09 Other classificationmethods
 
DMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rulesDMTM Lecture 08 Classification rules
DMTM Lecture 08 Classification rules
 

Último

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 

Último (9)

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 

Asd 01 Algoritmi E Strutture Dati

  • 1. Algoritmi e Strutture Dati Introduzione Prof. Pier Luca Lanzi
  • 2. Riferimenti 2  Questo materiale è tratto dalle trasparenze del corso Introduction to Algorithms (2005-fall-6046) tenuto dal Prof. Leiserson all’MIT (http://people.csail.mit.edu/cel/)  T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduction to Algorithms, Second Edition, The MIT Press, Cambridge, Massachusetts London, England McGraw-Hill Book Company  Queste trasparenze sono disponibili sui siti http://webspace.elet.polimi.it/lanzi http://www.slideshare.net/pierluca.lanzi Prof. Pier Luca Lanzi
  • 4. Cos’è un algoritmo? 4  “Sequenza di passi, definiti con precisione, che portano alla realizzazione di un compito”  La sequenza di passi deve essere finita e deve portare ad un risultato  Le istruzioni devono essere eseguibili materialmente e devono essere espresse in modo non ambiguo  Un algoritmo deve essere comprensibile al suo esecutore, corretto, ed efficiente  Forniscono descrizione astratta di un metodo (procedimento) per giungere alla soluzione di un dato problema Prof. Pier Luca Lanzi
  • 5. Un po’ di storia 5  Al-Khwārizmī, astronomo e matematico Persiano, nell’825 scrive il trattato “On Calculation with Hindu Numerals”  Tradotto in latino nel XII secolo, come “Algoritmi de numero Indorum”  “Algoritmi” era la traduzione del nome dell’autore (Al-Khwārizmī) ma il termine è stato frainteso come il plurare Latino algorismus  Nel 1240, il termine è usato in nel manuale “Carmen de Algorismo” di Alexandre de Villedieu. Francobollo emesso il 6 Settembre 1983 dall’Unione Sovietica per commemorare il “compleanno di Al-Khwārizmī's (780-850) Prof. Pier Luca Lanzi
  • 6. Quali sono gli obiettivi del corso? 6 Analisi e design di algoritmi  Analisi degli algoritmi noti per il design di algoritmi nuovi  Analisi degli algoritmi Performance (velocità) Utilizzo delle risorse (memoria e comunicazione)  Ci sono molti altri aspetti (non trattati qui): Correttezza, robustezza, mantenibilità Modularità, sicurezza, facilità d’uso Prof. Pier Luca Lanzi
  • 7. 7 Perchè algoritmi e performance? La performance spesso determina il confine tra quello che è possibile e quello che non è possibile fare L’analisi degli algoritmi ci aiuta a capire il concetto di scalabilità Prof. Pier Luca Lanzi
  • 8. 8 Scalabilità? Prof. Lanzi corre i 100m in 12s In quanto corre la maratona? Prof. Pier Luca Lanzi
  • 9. Esempio: Ricerca di un elemento 9  Dato un elenco contenente n oggetti, cercare se un oggetto x è presente  L’elenco non è ordinato x? x? x? x? x? x!  Caso migliore? Quello che cerco è il primo  Caso peggiore? Ho n elementi e quello che cerco è l’ultimo  Caso medio? Circa n/2 Prof. Pier Luca Lanzi
  • 10. Codifica in C++ 10 bool linear_find(int v[], int n, int x) { int i; for (i=0; i<n && v[i]!=x; i++); if (i==n) return false; else return true; } Prof. Pier Luca Lanzi
  • 11. Esempio: Ricerca di un elemento 11  Supponiamo ora che l’elenco sia ordinato alfabeticamente  Esempio: l’elenco del telefono o un dizionario Rossi? A B C ... N ... ... ... Z  Caso migliore? Quello che cerco è il primo  Caso peggiore?  Caso medio? Prof. Pier Luca Lanzi
  • 12. Codifica in C++ 12 bool binary_find(int v[], int n, int x) { int l = -1; int r = n; // l, r are beyond array bounds while (l+1 != r) { // Stop when l, r meet int i = (l+r)/2; // Check middle if (x < array[i]) r = i; // Left half if (x == array[i]) return true; // Found it if (x > array[i]) l = i; // Right half } return false; // Search value not in array } Prof. Pier Luca Lanzi
  • 13. 13 E le strutture dati? Gli algoritmi lavorano su dati che vengono organizzati secondo una certa struttura Se la struttura è efficiente allora gli algoritmi sono più efficienti Prof. Pier Luca Lanzi
  • 14. 14 La ricerca binaria è sempre più efficiente? Prof. Pier Luca Lanzi
  • 15. Struttura Dati?  Organizzazione o collezione di elementi (o record) su cui sia possibile processare le informazioni, effettuare una ricerca, ecc.  La scelta della struttura dati e dell’algoritmo adeguati può ridurre i tempi di esecuzione da giorni a pochi secondi. Lo stesso vale per altre risorse.  Efficienza: una soluzione è efficiente se risolve un problema dato entro i vincoli di memoria e tempo di esecuzione richiesti. Prof. Pier Luca Lanzi
  • 16. Quale Struttura Dati?  Tre semplici passi  Analizzare il problema per determinare i vincoli sulle risorse che è necessario soddisfare (Memoria? Velocità? Entrambi?)  Determinare quali sono le operazioni che devono essere supportate quantificando le risorse per ogni operazione  Selezionare la struttura dati che meglio soddisfa i requisiti  Alcune domande, I dati sono inseriti tutti all’inizio o mano a mano? È possibile cancellare degli elementi? I dati sono processati sequenzialmente o in ordine qualunque? Prof. Pier Luca Lanzi
  • 17. 17 Ogni struttura dati ha costi/benefici Raramente c’è una soluzione che va bene in tutte le situazioni Costo per memorizzare un elemento, tempo di esecuzione per le operazioni di base, effort per l’implementazione Prof. Pier Luca Lanzi
  • 18. Ordinamento Input: sequenza a1, a2, …, an di numeri. Output: permutazione a'1, a'2, …, a'n che soddisfi la relazione a'1 a'2 … a' n Esempio: Input: 8 2 4 9 3 6 Output: 2 3 4 6 8 9 Prof. Pier Luca Lanzi L1.18
  • 19. Insertion Sort INSERTION-SORT (A, n) ⊳ A[1 . . n] for j ← 2 to n do key ← A[ j] i←j–1 “pseudo codice” while i > 0 and A[i] > key do A[i+1] ← A[i] i←i–1 A[i+1] = key 1 i j n A: key sorted Prof. Pier Luca Lanzi
  • 20. Esempio di Insertion Sort 8 2 4 9 3 6 Prof. Pier Luca Lanzi
  • 21. Esempio di Insertion Sort 8 2 4 9 3 6 Prof. Pier Luca Lanzi L1.21
  • 22. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 Prof. Pier Luca Lanzi
  • 23. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 Prof. Pier Luca Lanzi
  • 24. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 Prof. Pier Luca Lanzi
  • 25. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 Prof. Pier Luca Lanzi
  • 26. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 Prof. Pier Luca Lanzi
  • 27. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 Prof. Pier Luca Lanzi
  • 28. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 2 3 4 8 9 6 Prof. Pier Luca Lanzi
  • 29. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 2 3 4 8 9 6 Prof. Pier Luca Lanzi
  • 30. Esempio di Insertion Sort 8 2 4 9 3 6 2 8 4 9 3 6 2 4 8 9 3 6 2 4 8 9 3 6 2 3 4 8 9 6 2 3 4 6 8 9 Fatto! Prof. Pier Luca Lanzi
  • 31. Tempo di Esecuzione  Dipende dall’input Dal numero di elementi Dallo stato del vettore, una sequenza già ordinata richiede meno tempo  Calcolare il tempo di esecuzione parametrizzandolo rispetto al numero di elementi di input (vettori più piccoli richiedono meno tempo)  Cerchiamo limiti superiori al tempo di esecuzione dato che danno una garanzia sul tempo massimo richiesto Prof. Pier Luca Lanzi
  • 32. Quale Tipo di Analisi? L1.32  Caso Pessimo (worst-case): (tipico) T(n) tempo massimo per un input di n elementi  Caso Medio (average-case): (raramente disponibile) T(n) tempo medio per un input di n elementi Problema: Qual è la distribuzione degli input?  Caso Migliore (best-case): (non informativo) Algoritmi lenti possono essere molto veloci in casi particolarmente favorevoli Prof. Pier Luca Lanzi
  • 33. Quale Tempo di Esecuzione? L1.33  Qual è T(n) nel caso pessimo per l’insertion sort?  Dipende dalla velocità della macchina su cui viene eseguito Velocità relativa (diversi algoritmi, stessa macchina) Velocità assoluta (su macchine differenti) Non considerare una particolare macchina Studiare T(n) per n → ∞ Analisi Asintotica Prof. Pier Luca Lanzi
  • 35. Andamento Asintotico per T(n) 35 Prof. Pier Luca Lanzi
  • 36. Computer più veloci o algoritmi più veloci? Quanto guadagno se compero un calcolatore 10 volte più veloce? T(n) n n’ Change n’/n 10n 1,000 10,000 n’ = 10n 10 20n 500 5,000 n’ = 10n 10 5n log n 250 1,842 10 n < n’ < 10n 7.37 2n2 70 223 n’ = 10n 3.16 2n 13 16 n’ = n + 3 ----- Prof. Pier Luca Lanzi
  • 37. 37 Per a, b > 1 qualsiasi na cresce più velocemente di logb n (meglio logaritmico che polinomiale) na cresce più velocemente di log nb (meglio potenza di un logaritmo che un polinomio) an cresce più velocemente nb (meglio polinomiale che esponenziale) Prof. Pier Luca Lanzi
  • 38. Analisi Asintotica: Notazione O-grande  Definizione: sia T(n) una funzione non-negativa, T(n) è O(f(n)) se esistono due costanti positive c ed n0 tali che T(n) <= cf(n) per ogni n> n0  Per tutti i gli insiemi di dati di input grandi a sufficienza, (n>n0), l’algoritmo termina la sua esecuzione in meno di cf(n) passi (nel caso migliore, medio, o peggiore).  La notazione O-grande indica un limite superiore a T(n)  Esempio: se T(n) = 3n2 allora T(n) è in O(n2)  Ovviamente siamo interessati al minimo limite superiore, se T(n) = 3n2 è O(n3), ma preferiamo O(n2) Prof. Pier Luca Lanzi
  • 39. Analisi Asintotica: Notazione Ω-grande  Definizione: sia T(n) una funzione non-negativa, T(n) è Ω(g(n)) se esistono due costanti positive c ed n0 tali che T(n) >= cg(n) per ogni n> n0  Per tutti i gli insiemi di dati di input grandi a sufficienza, (n>n0), l’algoritmo ha bisogno almeno di cg(n) passi (nel caso migliore, medio, o peggiore).  La notazione Ω-grande indica un limite inferiore a T(n)  Esempio: se T(n) = 2n2+n allora T(n) è in Ω(n2)  Ovviamente siamo interessati al massimo limite inferiore, T(n) = 2n2+n è Ω(n), ma preferiamo Ω(n2) Prof. Pier Luca Lanzi
  • 40. Analisi Asintotica: Notazione Θ-grande  Definizione: se T(n) è Ω(h(n)) e anche O(h(n)) allora T(n) è Θ(h(n))  Ovvero, se esistono due costanti c1 e c2, ed n0 tali che c1g(n) ≤ f(n) ≤ c2g(n) per ogni n>n0 Prof. Pier Luca Lanzi
  • 41. Analisi Asintotica Per n grande, un algoritmo (n2) è sempre più veloce di un algoritmo (n3)  Vero asintoticamente!  Non dovremmo ignorare gli algoritmi che sono asintoticamente lenti  Nelle situazioni reali bisogna T(n) spesso bilanciare obiettivi contrapposti  Tipico esempio, performance vs. complessità n n0 Prof. Pier Luca Lanzi
  • 42. Andamento Asintotico per T(n) 42 Prof. Pier Luca Lanzi
  • 43. Regole di Semplificazione  Se f(n) è O(g(n)) e g(n) è O(h(n)), allora f(n) è O(h(n))  Se f(n) è O(kg(n)) per ogni k>0, allora f(n) è O(g(n))  Se f1(n) è O(g1(n)) ed f2(n) è O(g2(n)), allora (f1 + f2)(n) è O(max(g1(n), g2(n)))  Se f1(n) è O(g1(n)) ed f2(n) è O(g2(n)), allora f1(n)f2(n) è O(g1(n)g2(n))  In breve, eliminare i termini di ordine inferiore, ignorare le costanti. Prof. Pier Luca Lanzi
  • 44. Esempi di Analisi Asintotica  Esempio 1: a = b;  Esempio 2: sum = 0; for (i=1; i<=n; i++) sum += n; Prof. Pier Luca Lanzi
  • 45. Esempi di Analisi Asintotica  Esempio 3: sum = 0; for (i=1; i<=n; j++) for (j=1; j<=i; i++) sum++; for (k=0; k<n; k++) A[k] = k; Prof. Pier Luca Lanzi
  • 46. Esempi di Analisi Asintotica  Esempio 4: sum1 = 0; for (i=1; i<=n; i++) for (j=1; j<=n; j++) sum1++; sum2 = 0; for (i=1; i<=n; i++) for (j=1; j<=i; j++) sum2++; Prof. Pier Luca Lanzi
  • 47. Esempi di Analisi Asintotica  Esempio 5: sum1 = 0; for (k=1; k<=n; k*=2) for (j=1; j<=n; j++) sum1++; sum2 = 0; for (k=1; k<=n; k*=2) for (j=1; j<=k; j++) sum2++; Prof. Pier Luca Lanzi
  • 48. Strutture di Controllo  Istruzione while: viene analizzato come il ciclo for  Istruzione if: complessità del blocco più costoso  Istruzione switch: complessità del caso più costoso  Chiamata a subroutine: complessità della subroutine Prof. Pier Luca Lanzi
  • 49. Qual è la Complessità Insertion Sort INSERTION-SORT (A, n) ⊳ A[1 . . n] for j ← 2 to n do key ← A[ j] i←j–1 while i > 0 and A[i] > key do A[i+1] ← A[i] i←i–1 A[i+1] = key Prof. Pier Luca Lanzi
  • 50. Analisi Asintotica dell’Insertion Sort 50  Caso Peggiore: n T(n) ( j) n2 j 2  Caso Medio: (tutte le possibili permutazioni siano equiprobabili) n T(n) ( j / 2) n2 j 2  È un algoritmo veloce? Si, per n piccoli No, per n grandi Prof. Pier Luca Lanzi
  • 51. Cosa Succede Se Abbiamo Più Parametri?  Calcoliamo la frequenza di tutti i C colori in un’immagine di P pixel for (i=0; i<C; i++) // Initialize count count[i] = 0; for (i=0; i<P; i++) // Look at all pixels count[value(i)]++; // Increment count sort(count); // Sort pixel counts  Se usiamo P come parametri, allora T(n) = (P log P).  È più accurato T(n) = (P + C log C). Prof. Pier Luca Lanzi
  • 52. Merge Sort MERGE-SORT A[1 . . n] 1. If n = 1, done. 2. MERGE-SORT A[ 1 . . n/2 ] 3. MERGE-SORT A[ n/2 +1 . . n ] 4. merge the two sorted arrays A[ 1 . . n/2 ] and A[ n/2 +1 . . n ] Punto chiave: il merge dei due vettori Prof. Pier Luca Lanzi
  • 53. Merge di Due Vettori Ordinati 20 12 13 11 7 9 2 1 Prof. Pier Luca Lanzi
  • 54. Merge di Due Vettori Ordinati 20 12 13 11 7 9 2 1 1 Prof. Pier Luca Lanzi
  • 55. Merge di Due Vettori Ordinati 20 12 20 12 13 11 13 11 7 9 7 9 2 1 2 1 Prof. Pier Luca Lanzi
  • 56. Merge di Due Vettori Ordinati 20 12 20 12 13 11 13 11 7 9 7 9 2 1 2 1 2 Prof. Pier Luca Lanzi
  • 57. Merge di Due Vettori Ordinati 20 12 20 12 20 12 13 11 13 11 13 11 7 9 7 9 7 9 2 1 2 1 2 Prof. Pier Luca Lanzi
  • 58. Merge di Due Vettori Ordinati 20 12 20 12 20 12 13 11 13 11 13 11 7 9 7 9 7 9 2 1 2 1 2 7 Prof. Pier Luca Lanzi
  • 59. Merge di Due Vettori Ordinati 20 12 20 12 20 12 20 12 13 11 13 11 13 11 13 11 7 9 7 9 7 9 9 2 1 2 1 2 7 Prof. Pier Luca Lanzi
  • 60. Merge di Due Vettori Ordinati 20 12 20 12 20 12 20 12 13 11 13 11 13 11 13 11 7 9 7 9 7 9 9 2 1 2 1 2 7 9 Prof. Pier Luca Lanzi
  • 61. Merge di Due Vettori Ordinati 20 12 20 12 20 12 20 12 20 12 13 11 13 11 13 11 13 11 13 11 7 9 7 9 7 9 9 2 1 2 1 2 7 9 Prof. Pier Luca Lanzi
  • 62. Merge di Due Vettori Ordinati 20 12 20 12 20 12 20 12 20 12 13 11 13 11 13 11 13 11 13 11 7 9 7 9 7 9 9 2 1 2 1 2 7 9 11 Prof. Pier Luca Lanzi
  • 63. Merge di Due Vettori Ordinati 20 12 20 12 20 12 20 12 20 12 20 12 13 11 13 11 13 11 13 11 13 11 13 7 9 7 9 7 9 9 2 1 2 1 2 7 9 11 Prof. Pier Luca Lanzi
  • 64. Merge di Due Vettori Ordinati 20 12 20 12 20 12 20 12 20 12 20 12 13 11 13 11 13 11 13 11 13 11 13 7 9 7 9 7 9 9 2 1 2 1 2 7 9 11 12 Prof. Pier Luca Lanzi
  • 65. Merge di Due Vettori Ordinati 20 12 20 12 20 12 20 12 20 12 20 12 13 11 13 11 13 11 13 11 13 11 13 7 9 7 9 7 9 9 2 1 2 1 2 7 9 11 12 Il merge è Θ(n) Prof. Pier Luca Lanzi
  • 66. Insertion Sort vs Merge Sort 67  InsertionSort Ha un approccio incrementale A[1..j-1] ordinato, aggiungi A[j]  MergeSort Ha un approccio divide-et-impera  Divide: Divide il vettore di n elementi in due array di n/2 elementi  Impera: Chiama il MergeSort ricorsivamente su i due array  Combina: Fa il merge delle due sequenze ordinate Prof. Pier Luca Lanzi
  • 67. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una constante Prof. Pier Luca Lanzi
  • 68. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una constante T(n) Prof. Pier Luca Lanzi L1.69
  • 69. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una constante cn T(n/2) T(n/2) Prof. Pier Luca Lanzi
  • 70. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una constante cn cn/2 cn/2 T(n/4) T(n/4) T(n/4) T(n/4) Prof. Pier Luca Lanzi
  • 71. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante cn cn/2 cn/2 cn/4 cn/4 cn/4 cn/4 (1) Prof. Pier Luca Lanzi
  • 72. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante cn cn/2 cn/2 h = log n cn/4 cn/4 cn/4 cn/4 (1) Prof. Pier Luca Lanzi
  • 73. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante cn cn cn/2 cn/2 h = log n cn/4 cn/4 cn/4 cn/4 (1) Prof. Pier Luca Lanzi
  • 74. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante cn cn cn/2 cn/2 cn h = log n cn/4 cn/4 cn/4 cn/4 (1) Prof. Pier Luca Lanzi
  • 75. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante cn cn cn/2 cn/2 cn h = log n cn/4 cn/4 cn/4 cn/4 cn … (1) Prof. Pier Luca Lanzi
  • 76. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante cn cn cn/2 cn/2 cn h = log n cn/4 cn/4 cn/4 cn/4 cn … (1) n elementi (n) Prof. Pier Luca Lanzi
  • 77. Analisi Asintotica del Merge Sort Calcolare T(n) = 2T(n/2) + cn, dove c > 0 è una costante cn cn cn/2 cn/2 cn h = log n cn/4 cn/4 cn/4 cn/4 cn … (1) n elementi (n) Total (n log n) Prof. Pier Luca Lanzi
  • 78. 79 Θ(nlogn) cresce più lentamente di Θ(n2) Asintoticamente il merge sort è meglio dell’insertion sort In pratica il merge sort è conveniente per n>30 Prof. Pier Luca Lanzi
  • 79. Notazioni o & ω 80  La notazione O-grande e Ω-grande sono basate sulle disuguaglianze ≤ e ≥  La notazione o-piccolo e ω sono basate su disuguaglianze strette < e > Prof. Pier Luca Lanzi
  • 81. Sommario  Algoritmo: “Sequenza di passi, definiti con precisione, che portano alla realizzazione di un compito”  Struttura Dati: Organizzazione o collezione di elementi (o record) su cui sia possibile processare le informazioni, effettuare una ricerca, ecc.  La scelta della struttura dati e dell’algoritmo adeguati può ridurre i tempi di esecuzione da giorni a pochi secondi.  Analisi asintotica su performance (tempo di esecuzione T(n)) notazione O, Ω, e Θ  Esempi di Insertion Sort and Merge Sort Prof. Pier Luca Lanzi