Lezione 3 Sottoarray di somma...

67
Rossano Venturini [email protected] Lezione 3 Sottoarray di somma massima Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start

Transcript of Lezione 3 Sottoarray di somma...

Page 1: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Rossano Venturini [email protected]

Lezione 3 Sottoarray di somma massima

Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start

Page 2: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 1

Page 3: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 1

int* FindVal(int a[], int len, int val) {

int i = 0; while (i < len) { if (a[i] == val) return &a[i]; i++; } return NULL; }

Page 4: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 2

Page 5: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 2

void reset(int array[], int len) { int i; for (i = 0; i < len; i++) { array[i] = 0; } }

void add(int array[], int len, int val) { if ( (val < 0) || (val >= len) ) return; array[val] += 1; }

Page 6: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 4

Page 7: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 4

int anagramma(unsigned char *x, unsigned char *y) { int i; int xc[256], yc[256]; for (i = 0; i < 256; i++) { xc[i] = yc[i] = 0; } int lenx = strlen(x); int leny = strlen(y); if(lenx != leny) return 0; for (i = 0; i < lenx ; i++) { xc[x[i]] += 1; yc[y[i]] += 1; }

for (i = 0; i < 256; i++) { if (xc[i] != yc[i]) return 0; } return 1; }

Page 8: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 5My strcat 1

Esercizio

Implementare la funzionechar* my strcat1(char *s1, char *s2)

che restituisce un puntatore alla nuova stringa ottenuta concatenando lestringhe puntate da s1 e s2.

Scrivere un programma che legga due stringhe da tastiera e stampi lastringa ottenuta concatenandole. Si puo assumere che le stringhe in inputcontengano non piu di 1000 caratteri.

Notare che il comportamento di my strcat1() e diverso da quello dellafunzione strcat() presente nella libreria string.

L’input e formato da due stringhe di lunghezza non maggiore di 1000 carat-teri.L’unica riga dell’output contiene la stringa ottenuta concatenando nell’or-dine le due stringhe inserite.

Esempio

Input

comesefosse

antani

Output

comesefosseantani

1

Page 9: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 5

#include <stdio.h> #include <stdlib.h> #include <string.h>

char* my_strcat(char *x, char *y) { int xlen = strlen(x); int ylen = strlen(y);

char* str = (char*) malloc(sizeof(char)*(xlen + ylen + 1)); if (str == NULL) return NULL;

int pos = 0, i= 0; for (i = 0; i < xlen; i++) { str[pos++] = x[i]; } for (i = 0; i < ylen; i++) { str[pos++] = y[i]; } str[pos] = '\0'; return str; }

Page 10: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 5

int main(void) { char *cat; char x[MAXLEN]; char y[MAXLEN]; scanf("%s", x); scanf("%s", y); cat = my_strcat(x, y); printf("%s\n",cat); return 0; }

Page 11: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 9 My strcpy

Esercizio

Scrivere una funzionechar* my strcpy(char* dest, char* src)

che copi src in dest (incluso il terminatore ’\0’) e restituisca un puntatorea dest. La funzione assume che in dest vi sia spazio su�ciente per conteneresrc (e compito del chiamante assicurarsi che cio sia vero).Si noti che il comportamento di my strcpy() e uguale a quello della funzionestrcpy() presente nella libreria string.

Scrivere poi un programma che: legga una stringa da tastiera (di lun-ghezza non maggiore di 1000 caratteri); allochi spazio su�ciente per unaseconda stringa destinata a contenere la prima; copi la prima stringa nellaseconda; stampi la seconda stringa.

L’input e formato da una sola riga contenente una stringa di lunghezza nonmaggiore di 1000 caratteri.L’unica riga dell’output contiene la stampa della seconda stringa.

Esempio

Input

brematurare

Output

brematurare

1

Page 12: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 9

#include <stdio.h> #include <stdlib.h> #include <string.h>

#define MAXLEN (1001)

char* my_strcpy(char* dest, char* src) { char *s = src, *d = dest;

while ((*d = *s) != '\0') { d++; s++; }

return dest; }

Page 13: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 9

int main(void) { char y[MAXLEN], *x; int len;

scanf("%s", y); len = strlen(y); x = (char *) malloc(sizeof(char) * (len+1)); x = my_strcpy(x, y); printf("%s\n", x);

return 0; }

Page 14: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 10 Moltiplicazione di stringhe

Esercizio

Si scriva una funzionechar* product(char *str, int k)

che data una stringa str e un intero k restituisca una stringa ottenutaconcatenando k volte la stringa str.

Si scriva un programma che legga in input:

• una stringa (assumendo che la stringa sia non piu lunga di 1000 ca-ratteri);

• un intero, che indica quante volte ripetere la stringa.

e infine stampi l’output di product().

L’input e costituito, nell’ordine, da: una stringa di lunghezza non superiorea 1000 caratteri; un intero k che indica quante volte ripetere la stringainserita.L’unica riga dell’output e formata da una stringa contenente k concatena-zioni della stringa data in input.

Esempio

Input

ciao

5

Output

ciaociaociaociaociao

1

Page 15: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 10

#include <stdio.h> #include <string.h> #include <stdlib.h>

#define MAXSIZE (1001)

char* product(char *str, int k) { int i; int len = strlen(str); int plen = len*k+1;

char *prod = malloc(plen*sizeof(char));

for(i = 0; i < plen-1; i++) { prod[i]= str[ i%len ]; } prod[plen-1] = ‘\0';

return prod; }

Page 16: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 10

int main(void) { char str[MAXSIZE], *prod; int k; scanf("%s", str); scanf("%d", &k); prod = product(str, k); printf("%s\n", prod); return 0; }

Page 17: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Sottoarray di Somma Massima

Page 18: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Sottoarray di Somma MassimaProblema: Dato un array a di n interi (positivi e negativi) individuare il sottoarray di somma massima.

Input: un array a di interi

Output: la somma del sottoarray di somma massima

Page 19: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Sottoarray di Somma MassimaProblema: Dato un array a di n interi (positivi e negativi) individuare il sottoarray di somma massima.

Input: un array a di interi

Output: la somma del sottoarray di somma massima

Esempio

Page 20: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Sottoarray di Somma MassimaProblema: Dato un array a di n interi (positivi e negativi) individuare il sottoarray di somma massima.

Input: un array a di interi

Output: la somma del sottoarray di somma massima

5-1 8 -9 4 1a

Esempio

Page 21: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Sottoarray di Somma MassimaProblema: Dato un array a di n interi (positivi e negativi) individuare il sottoarray di somma massima.

Input: un array a di interi

Output: la somma del sottoarray di somma massima

5-1 8 -9 4 1a

Esempio

Page 22: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Sottoarray di Somma MassimaProblema: Dato un array a di n interi (positivi e negativi) individuare il sottoarray di somma massima.

Input: un array a di interi

Output: la somma del sottoarray di somma massima

5-1 8 -9 4 1a

Esempio

output: 13

Page 23: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 1

max = 0;

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

{

for(j=i; j<n; j++)

{

somma=0; for(k=i; k<=j; k++)

{

somma+=a[k]; }

if(somma > max) max=somma; }

}

Page 24: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 1

max = 0;

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

{

for(j=i; j<n; j++)

{

somma=0; for(k=i; k<=j; k++)

{

somma+=a[k]; }

if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

Page 25: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 1

max = 0;

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

{

for(j=i; j<n; j++)

{

somma=0; for(k=i; k<=j; k++)

{

somma+=a[k]; }

if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)

Page 26: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 1

max = 0;

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

{

for(j=i; j<n; j++)

{

somma=0; for(k=i; k<=j; k++)

{

somma+=a[k]; }

if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)O(n)

Page 27: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 1

max = 0;

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

{

for(j=i; j<n; j++)

{

somma=0; for(k=i; k<=j; k++)

{

somma+=a[k]; }

if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)O(n)

O(n2)

Page 28: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 1

max = 0;

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

{

for(j=i; j<n; j++)

{

somma=0; for(k=i; k<=j; k++)

{

somma+=a[k]; }

if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)O(n)

O(n2)O(n3)

Page 29: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 1

max = 0;

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

{

for(j=i; j<n; j++)

{

somma=0; for(k=i; k<=j; k++)

{

somma+=a[k]; }

if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)O(n)

O(n2)O(n3)

Tempo: O(n3) :-(

Page 30: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 2

max = 0;

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

{ somma=0; for(j=i; j<n; j++)

{

somma+=a[j]; if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

Page 31: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 2

max = 0;

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

{ somma=0; for(j=i; j<n; j++)

{

somma+=a[j]; if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)

Page 32: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 2

max = 0;

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

{ somma=0; for(j=i; j<n; j++)

{

somma+=a[j]; if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)O(n)

Page 33: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 2

max = 0;

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

{ somma=0; for(j=i; j<n; j++)

{

somma+=a[j]; if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)O(n)

O(n2)

Page 34: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 2

max = 0;

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

{ somma=0; for(j=i; j<n; j++)

{

somma+=a[j]; if(somma > max) max=somma; }

}

5-1 8 -9 4 1a

i j

O(1)O(n)

O(n2)

Tempo: O(n2) :-|

Page 35: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Come fare meglio?

Possiamo sfruttare due proprietà del sottoarray di somma massima

Page 36: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Come fare meglio?

Possiamo sfruttare due proprietà del sottoarray di somma massima

1) La somma dei valori in ogni prefisso del sottoarray ottimo è positiva, se così non fosse potremmo eliminare tale prefisso ottenendo un sottoarray di somma maggiore (assurdo).

Page 37: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Come fare meglio?

Possiamo sfruttare due proprietà del sottoarray di somma massima

1) La somma dei valori in ogni prefisso del sottoarray ottimo è positiva, se così non fosse potremmo eliminare tale prefisso ottenendo un sottoarray di somma maggiore (assurdo).

5-1 8 -9 4 1a

Page 38: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Come fare meglio?

Possiamo sfruttare due proprietà del sottoarray di somma massima

1) La somma dei valori in ogni prefisso del sottoarray ottimo è positiva, se così non fosse potremmo eliminare tale prefisso ottenendo un sottoarray di somma maggiore (assurdo).

5-1 8 -9 4 1a

Page 39: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Come fare meglio?

Possiamo sfruttare due proprietà del sottoarray di somma massima

1) La somma dei valori in ogni prefisso del sottoarray ottimo è positiva, se così non fosse potremmo eliminare tale prefisso ottenendo un sottoarray di somma maggiore (assurdo).

5-1 8 -9 4 1a

Page 40: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Come fare meglio?

Possiamo sfruttare due proprietà del sottoarray di somma massima

1) La somma dei valori in ogni prefisso del sottoarray ottimo è positiva, se così non fosse potremmo eliminare tale prefisso ottenendo un sottoarray di somma maggiore (assurdo).

2) Il valore immediatamente precedente al primo valore del sottoarray ottimo è negativo, se così non fosse potremmo aggiungere tale valore ottenendo un sottoarray di somma maggiore (assurdo)

3)3)

5-1 8 -9 4 1a

Page 41: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Come fare meglio?

Possiamo sfruttare due proprietà del sottoarray di somma massima

1) La somma dei valori in ogni prefisso del sottoarray ottimo è positiva, se così non fosse potremmo eliminare tale prefisso ottenendo un sottoarray di somma maggiore (assurdo).

2) Il valore immediatamente precedente al primo valore del sottoarray ottimo è negativo, se così non fosse potremmo aggiungere tale valore ottenendo un sottoarray di somma maggiore (assurdo)

3)3)

5-1 8 -9 4 1a

5-1 8 -9 4 1a

Page 42: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Come fare meglio?

Possiamo sfruttare due proprietà del sottoarray di somma massima

1) La somma dei valori in ogni prefisso del sottoarray ottimo è positiva, se così non fosse potremmo eliminare tale prefisso ottenendo un sottoarray di somma maggiore (assurdo).

2) Il valore immediatamente precedente al primo valore del sottoarray ottimo è negativo, se così non fosse potremmo aggiungere tale valore ottenendo un sottoarray di somma maggiore (assurdo)

3)3)

5-1 8 -9 4 1a

5-1 8 -9 4 1a

Page 43: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

Page 44: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)

Page 45: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)O(n)

Page 46: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)O(n)

Tempo: O(n) :-)

Page 47: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)O(n)

Tempo: O(n) :-)

somma5-1 8 -9 4 1-1

Page 48: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)O(n)

Tempo: O(n) :-)

somma5-1 8 -9 4 1-1

5-1 8 -9 4 15

Page 49: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)O(n)

Tempo: O(n) :-)

somma5-1 8 -9 4 1-1

5-1 8 -9 4 15

5-1 8 -9 4 113

Page 50: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)O(n)

Tempo: O(n) :-)

somma5-1 8 -9 4 1-1

5-1 8 -9 4 15

5-1 8 -9 4 113

5-1 8 -9 4 14

Page 51: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)O(n)

Tempo: O(n) :-)

somma5-1 8 -9 4 1-1

5-1 8 -9 4 15

5-1 8 -9 4 113

5-1 8 -9 4 14

5-1 8 -9 4 18

Page 52: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Soluzione 3

max = 0; somma = 0;

for(i=0; i<n; i++) { if(somma > 0) somma+=a[i]; else somma=a[i];

if(somma > max) max=somma; }

O(1)O(n)

Tempo: O(n) :-)

somma5-1 8 -9 4 1-1

5-1 8 -9 4 15

5-1 8 -9 4 113

5-1 8 -9 4 14

5-1 8 -9 4 18

5-1 8 -9 4 19

Page 53: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 1 Intersezione tra array

Intersezione tra array

Esercizio

Scrivere un programma che accetti in input due array di interi distinti e re-stituisca in output il numero di elementi che occorrono in entrambi gli array.Si assuma che la lunghezza di ogni array sia fornita prima dell’immissionedegli elementi.

Una volta scritto il codice e superata la verifica sul sito, scaricare e de-comprimere il file a questo indirizzo:http://didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-b/test set.zip

La directory contiene input diversi (file .in) insieme agli output attesi(file .out). Ad esempio: 100.in contiene 2 array di lunghezza cento, ed epossibile usarlo come input al programma utilizzando la redirezione dell’in-put vista a lezione:

./esercizio.o < 100.in

Si provi a lanciare il programma su input diversi e per ogni input sicontrolli che l’output sia giusto confrontandolo col valore nel rispettivo file.out, che e possibile stampare sul terminale col comando cat, ad esempio:

cat 100.out

45

Infine, si provi a misurare quanto tempo impiega il programma su inputdiversi utilizzando il comando time, che restituisce in output il tempo im-piegato dal programma, ad esempio:

time ./esercizio.o < 100.in

45

real 0.066 user 0.005 sys 0.003 pcpu 11.07

Come varia il tempo impiegato a seconda della dimensione dell’array?

L’input e formato da:

• dimensione del primo array;

• lista dei valori (distinti) del primo array;

• dimensione del secondo array;

• lista dei valori (distinti) del secondo array.

L’unica riga dell’output contiene il numero di elementi in comune tra il primoe il secondo array.

1

Page 54: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 2 Intersezione tra array ordinati

Intersezione tra array ordinati

Esercizio

Scrivere un programma che accetti in input due array di interi distinti e re-stituisca in output il numero di elementi che occorrono in entrambi gli array.Si assuma che la lunghezza di ogni array sia fornita prima dell’immissionedegli elementi.

Si assuma che questa volta gli array vengano inseriti ordinati in ma-niera strettamente crescente. Si puo calcolare l’intersezione in maniera piue�ciente?

Dopo aver superato i test sul sito, si ripetano gli esperimenti sul datasetutilizzato nel precedente esercizio (gli array vengono forniti in ordine cre-scente) e si confrontino i risultati ottenuti.http://didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-b/test set.zip

L’input e formato da:

• dimensione del primo array;

• lista dei valori (distinti) del primo array;

• dimensione del secondo array;

• lista dei valori (distinti) del secondo array.

L’unica riga dell’output contiene il numero di elementi in comune tra il primoe il secondo array.

1

Page 55: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 3 Sottoarray di somma massima

Sottoarray di somma massima

Esercizio

Dato un array A di n interi (positivi e negativi), scrivere un programma cheidentifichi il sottoarray di A i cui elementi hanno somma massima tra tuttigli altri sottoarray di A e ne stampi la somma.

Una volta scritto il codice e superata la verifica sul sito, scaricare i filesdi test diponibili all’indirizzo

http://didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-b/test maxsum.zip

e valutare l’e�cienza della propria soluzione.La soluzione implementata dovrebbe avere complessita lineare, in base

all’algoritmo visto a lezione. Come utile esercizio facoltativo, implementareuna soluzione di complessita non ottimale (ad esempio quadratica), misurareil tempo impiegato e notare la di↵erenza tra le diverse soluzioni.

La prima riga dell’input contiene la dimensione n dell’array. Le righe suc-cessive contengono gli elementi dell’array, uno per riga.L’unica riga dell’output contiene il valore della somma del sottoarray disomma massima.

Esempio

Input

5 (numero di elementi)

1

-5

2

-1

4

Output

5

1

Page 56: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Esercizio 4 Fusione di array ordinati

Fusione di array ordinati

Esercizio

Scrivere un programma che accetti in input due array ordinati di interie restituisca in output l’unione ordinata dei due array. Si assuma che lalunghezza di ogni array sia fornita prima dell’immissione degli elementi.

Per semplicita si assuma che l’intersezione tra i due array sia vuota.

L’input e formato da:

• dimensione del primo array;

• lista dei valori in ordine crescente del primo array;

• dimensione del secondo array;

• lista dei valori in ordine crescente del secondo array.

L’output contiene l’unione ordinata dei due array, un elemento per riga.

Esempio

Input

5 (numero di elementi)

1

3

5

10

20

3 (numero di elementi)

2

4

21

Output

1

2

3

4

5

10

20

21

1

Page 57: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray
Page 58: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray
Page 59: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray
Page 60: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray
Page 61: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray
Page 62: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray
Page 63: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray
Page 64: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Æ�ÆwjÙÆÈ�§¿Æw�¼ÆAÆ¿ÑXXj¿¿wÑ�Æ���~�jÆ��Èj¼Ø�jÙ^Æ1�jÆ��Èj¼Ø�jÙÆÙ���Æ��X�ÑbjÆÈ�§�X¿Æ¿ÑX�ÆA¿ÆX�b��~_ÆbAÈAƿȼÑXÈѼj¿_ÆA�~�¼�È��¿_ÆX��§ÑÈj¼Æ¿X�j�XjÆÈ�j�¼Û_ÆA�bÆ¿Û¿Èj�¿Æbj¿�~�¬ÆÆ9jƼjX���j�bÆÛ�ÑÆ¿§j�bÆ¿��jÆÈ��jÆjÚ§��¼��~Æ�ѼÆÙjO¿�ÈjÆÈ�Æ~jÈÆ��È�ÆÈ�jƼ�~�ÈÆ���bÆw¼A�j¬ÆÆ���~�jÆ+ÑO��XAÈ���¿ÆA�bÆ�AO¿Æ�¿ÆAÆ~��bÆ¿ÈA¼È��~Ƨ���ȬÆÆ���~�jÆ�AO¿Æ����¿^�Èȧ^ÅÅ�AO¿¬~��~�j¬X��ŧA§j¼¿¬�È��Æ/Û¿Èj�Æ�j¿�~�Æ+ÑO��XAÈ���¿^���~�jÆ���jÆ/Û¿Èj�Æ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅ~w¿¬�È��ª���~�jÆ�~ÈAO�jÆ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅO�~ÈAO�j¬�È��ª���~�jÆ�A§.jbÑXjÆ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅ�A§¼jbÑXj¬�È��ªÆ���¿ÆÈ�ÆA¿¿�¿ÈÆÛ�ÑÆ��Ƨ¼j§A¼��~Æw�¼ÆÛ�ѼÆ��Èj¼Ø�jÙ^¶+¼�~¼A����~Æ��Èj¼Ø�jÙ¿Æ Ú§�¿jb^Æ/jX¼jÈ¿ÆÈ�Æ�A�b��~Æ<�ѼÆ!jÚÈÆ��O´Æ�ÑÈ��¼¿^Æ����Æ���~A�_Æ!�A�Æ/Ñ��A�j�_ÆA�bÆ ¼�XÆ��~Ñn¼jÆ©9��jÛÆ��§ÑÈj¼Æ+ÑO��¿���~ªÆ´+¼�~¼A����~Æ+jA¼�¿´Æ�ÑÈ��¼^Æ���Æj�È�jÛÆ´��ȼ�bÑXÈ���ÆÈ�Æ��~�¼�È��¿´Æ�ÑÈ��¼¿^Æ�¼�j�_Æ�j�¿j¼¿��_Æ.�Øj¿ÈÆHÆ/Èj��Æ+�jA¿jƼjØ�jÙÆÈ�jÆw����Ù��~ÆÈ�§�X¿^�~�#Æ��ÈAÈ���¿ÆA�¿�Æ���Ù�ÆA¿Æ´È�jƼÑ�ÆÈ��jÆX�A¼AXÈj¼�¿È�XÆ�wÆA�ÆA�~�¼�È��´¬ÆÆ<�ÑÆ�AÛÆÙA�ÈÆÈ�Ƽjw¼j¿�Æ�A¿�ÆÈAO�j¿_Æ�jA§¿_ÆO��A¼ÛÆȼjj¿_Æ����jbÆ��¿È¿_Æbj§È��w�¼¿ÈÆ¿jA¼X�_ƼjXѼ¿���¬Æ��¼Æ��¼jÆ��w�¼�AÈ���Æ��Æ��~�¼�È��¿ÆÛ�ÑÆXA�ÆØ�¿�È^�Èȧ^ÅÅÙÙÙ¬È�§X�bj¼¬X��ÅÈX²��bÑ�js/ÈAÈ�XHb�sÈÑÈ�¼�A�¿HbÏsA�~Ö��bjÚÆ�f:ZcP6Æ<�ÑÆ¿��Ñ�bÆ���ÙÆAÈÆ�jA¿ÈÆ��jƧ¼�~¼A����~Æ�A�~ÑA~jƼjA��ÛÆÙj��_ÆA�bÆ�ÈÆ¿��Ñ�bƧ¼jwj¼AO�ÛÆOjƯ¯Æ�¼Æ�AØA¬Æ�Æ�¿Æ#�ÆÈ��_Æ¿��XjÆ�È»¿Æ§¼jÈÈÛÆ¿����A¼ÆÈ�Æ�AØA¬Æ<�ÑÆÙ���ÆOjÆjÚ§jXÈjbÆÈ�ÆÙ¼�ÈjÆ¿��jÆX�bjÆ��ÆAÈÆ�jA¿ÈÆ¿��jÆ�wÆÛ�ѼÆ��Èj¼Ø�jÙ¿¬Æ<�ÑÆÙ���ÆOjÆjÚ§jXÈjbÆÈ�Æ���ÙÆAÆwA�¼ÆA��Ñ�ÈÆ�wÆbjÈA��ÆAO�ÑÈÆÛ�ѼÆwAØ�¼�ÈjƧ¼�~¼A����~Æ�A�~ÑA~j¬ÆÆ�f|�ZcP6Æ���ÙÆ��ÙÆÈ�Æ¿�¼È¬Æ���»ÈÆb�ÆOÑOO�j�¿�¼È¬Æ<�ÑÆ¿��Ñ�bÆ���ÙÆÈ�jÆbjÈA��¿Æ�wÆAÈÆ�jA¿ÈÆ��jÆ�L��~©�ªÆ¿�¼È��~ÆA�~�¼�È��_Ƨ¼jwj¼AO�ÛÆÈÙ�Æ©¿AÛ_ƱÑ�X�Æ¿�¼ÈÆA�bÆ�j¼~jÆ¿�¼Èª¬Æ�j¼~jÆ¿�¼ÈÆXA�ÆOjÆ��~��ÛÆÑ¿jwÑ�Æ��Æ¿�ÈÑAÈ���¿ÆÙ�j¼jƱÑ�X�Æ¿�¼ÈÆ�¿Æ��§¼AXÈ�XA�_Æ¿�ÆÈA�jÆAÆ����ÆAÈÆ�Ȭ

Page 65: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Æ�ÆwjÙÆÈ�§¿Æw�¼ÆAÆ¿ÑXXj¿¿wÑ�Æ���~�jÆ��Èj¼Ø�jÙ^Æ1�jÆ��Èj¼Ø�jÙÆÙ���Æ��X�ÑbjÆÈ�§�X¿Æ¿ÑX�ÆA¿ÆX�b��~_ÆbAÈAƿȼÑXÈѼj¿_ÆA�~�¼�È��¿_ÆX��§ÑÈj¼Æ¿X�j�XjÆÈ�j�¼Û_ÆA�bÆ¿Û¿Èj�¿Æbj¿�~�¬ÆÆ9jƼjX���j�bÆÛ�ÑÆ¿§j�bÆ¿��jÆÈ��jÆjÚ§��¼��~Æ�ѼÆÙjO¿�ÈjÆÈ�Æ~jÈÆ��È�ÆÈ�jƼ�~�ÈÆ���bÆw¼A�j¬ÆÆ���~�jÆ+ÑO��XAÈ���¿ÆA�bÆ�AO¿Æ�¿ÆAÆ~��bÆ¿ÈA¼È��~Ƨ���ȬÆÆ���~�jÆ�AO¿Æ����¿^�Èȧ^ÅÅ�AO¿¬~��~�j¬X��ŧA§j¼¿¬�È��Æ/Û¿Èj�Æ�j¿�~�Æ+ÑO��XAÈ���¿^���~�jÆ���jÆ/Û¿Èj�Æ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅ~w¿¬�È��ª���~�jÆ�~ÈAO�jÆ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅO�~ÈAO�j¬�È��ª���~�jÆ�A§.jbÑXjÆ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅ�A§¼jbÑXj¬�È��ªÆ���¿ÆÈ�ÆA¿¿�¿ÈÆÛ�ÑÆ��Ƨ¼j§A¼��~Æw�¼ÆÛ�ѼÆ��Èj¼Ø�jÙ^¶+¼�~¼A����~Æ��Èj¼Ø�jÙ¿Æ Ú§�¿jb^Æ/jX¼jÈ¿ÆÈ�Æ�A�b��~Æ<�ѼÆ!jÚÈÆ��O´Æ�ÑÈ��¼¿^Æ����Æ���~A�_Æ!�A�Æ/Ñ��A�j�_ÆA�bÆ ¼�XÆ��~Ñn¼jÆ©9��jÛÆ��§ÑÈj¼Æ+ÑO��¿���~ªÆ´+¼�~¼A����~Æ+jA¼�¿´Æ�ÑÈ��¼^Æ���Æj�È�jÛÆ´��ȼ�bÑXÈ���ÆÈ�Æ��~�¼�È��¿´Æ�ÑÈ��¼¿^Æ�¼�j�_Æ�j�¿j¼¿��_Æ.�Øj¿ÈÆHÆ/Èj��Æ+�jA¿jƼjØ�jÙÆÈ�jÆw����Ù��~ÆÈ�§�X¿^�~�#Æ��ÈAÈ���¿ÆA�¿�Æ���Ù�ÆA¿Æ´È�jƼÑ�ÆÈ��jÆX�A¼AXÈj¼�¿È�XÆ�wÆA�ÆA�~�¼�È��´¬ÆÆ<�ÑÆ�AÛÆÙA�ÈÆÈ�Ƽjw¼j¿�Æ�A¿�ÆÈAO�j¿_Æ�jA§¿_ÆO��A¼ÛÆȼjj¿_Æ����jbÆ��¿È¿_Æbj§È��w�¼¿ÈÆ¿jA¼X�_ƼjXѼ¿���¬Æ��¼Æ��¼jÆ��w�¼�AÈ���Æ��Æ��~�¼�È��¿ÆÛ�ÑÆXA�ÆØ�¿�È^�Èȧ^ÅÅÙÙÙ¬È�§X�bj¼¬X��ÅÈX²��bÑ�js/ÈAÈ�XHb�sÈÑÈ�¼�A�¿HbÏsA�~Ö��bjÚÆ�f:ZcP6Æ<�ÑÆ¿��Ñ�bÆ���ÙÆAÈÆ�jA¿ÈÆ��jƧ¼�~¼A����~Æ�A�~ÑA~jƼjA��ÛÆÙj��_ÆA�bÆ�ÈÆ¿��Ñ�bƧ¼jwj¼AO�ÛÆOjƯ¯Æ�¼Æ�AØA¬Æ�Æ�¿Æ#�ÆÈ��_Æ¿��XjÆ�È»¿Æ§¼jÈÈÛÆ¿����A¼ÆÈ�Æ�AØA¬Æ<�ÑÆÙ���ÆOjÆjÚ§jXÈjbÆÈ�ÆÙ¼�ÈjÆ¿��jÆX�bjÆ��ÆAÈÆ�jA¿ÈÆ¿��jÆ�wÆÛ�ѼÆ��Èj¼Ø�jÙ¿¬Æ<�ÑÆÙ���ÆOjÆjÚ§jXÈjbÆÈ�Æ���ÙÆAÆwA�¼ÆA��Ñ�ÈÆ�wÆbjÈA��ÆAO�ÑÈÆÛ�ѼÆwAØ�¼�ÈjƧ¼�~¼A����~Æ�A�~ÑA~j¬ÆÆ�f|�ZcP6Æ���ÙÆ��ÙÆÈ�Æ¿�¼È¬Æ���»ÈÆb�ÆOÑOO�j�¿�¼È¬Æ<�ÑÆ¿��Ñ�bÆ���ÙÆÈ�jÆbjÈA��¿Æ�wÆAÈÆ�jA¿ÈÆ��jÆ�L��~©�ªÆ¿�¼È��~ÆA�~�¼�È��_Ƨ¼jwj¼AO�ÛÆÈÙ�Æ©¿AÛ_ƱÑ�X�Æ¿�¼ÈÆA�bÆ�j¼~jÆ¿�¼Èª¬Æ�j¼~jÆ¿�¼ÈÆXA�ÆOjÆ��~��ÛÆÑ¿jwÑ�Æ��Æ¿�ÈÑAÈ���¿ÆÙ�j¼jƱÑ�X�Æ¿�¼ÈÆ�¿Æ��§¼AXÈ�XA�_Æ¿�ÆÈA�jÆAÆ����ÆAÈÆ�Ȭ

Æ!�X�!)]A�6ç�¼~ÑAO�ÛÆÈ�jÆ¿��~�jÆ��¿ÈÆ��§�¼ÈA�ÈÆbAÈAƿȼÑXÈѼjÆ���Ù�ÆÈ�Æ�A����b¬Æ<�ÑÆAO¿��ÑÈj�ÛÆ¿��Ñ�bÆ���ÙÆ��ÙÆÈ�jÛÆÙ�¼�¬ÆjÆAO�jÆÈ�Æ��§�j�j�ÈÆ��jÆÑ¿��~Æ���ÛÆA¼¼AÛ¿Æ��ÆÛ�ѼÆwAØ�¼�ÈjÆ�A�~ÑA~j_Æ��ÆAO�ÑÈÆÈ�jÆ¿§AXjÆ�wÆ��jÆ��Èj¼Ø�jÙ¬Æ�|AA�6Æ���ÙÆAO�ÑÈÆȼjj¿ÂÆOA¿�XÆȼjjÆX��¿È¼ÑXÈ���_ÆȼAØj¼¿A�ÆA�bÆ�A��§Ñ�AÈ���ÆA�~�¼�È��¿¬Æ�A����A¼�ßjÆÛ�Ѽ¿j�wÆÙ�È�ÆO��A¼ÛÆȼjj¿_Æ��A¼ÛÆȼjj¿_ÆA�bÆȼ�j�ȼjj¿¬ÆjÆwA����A¼ÆÙ�È�ÆAÈÆ�jA¿ÈÆ��jÆÈÛ§jÆ�wÆOA�A�XjbÆO��A¼ÛÆȼjj_ÆÙ�jÈ�j¼Æ�È»¿ÆAƼjbÅO�AX�Æȼjj_ÆAÆ¿§�AÛÆȼjjÆ�¼ÆA�Æ�8�Æȼjj_ÆA�bÆ���ÙÆ��ÙÆ�È»¿Æ��§�j�j�Èjb¬Æ3�bj¼¿ÈA�bÆȼjjÆȼAØj¼¿A�Æ�]Pf|Z�X`�6Æ�/ÆA�bÆ��/_ÆA�bÆ���ÙÆÈ�jÆb�wwj¼j�XjÆOjÈÙjj�Æ���¼bj¼_Ƨ�¿È�¼bj¼ÆA�bƧ¼j�¼bj¼¬Æ�|!lX�6Æ�¼A§�¿ÆA¼jƼjA��ÛÆ��§�¼ÈA�ÈÆAÈÆ���~�j¬Æ1�j¼jÆA¼jÆÊÆOA¿�XÆÙAÛ¿ÆÈ�Ƽj§¼j¿j�ÈÆAÆ~¼A§�Æ��Æ�j��¼ÛÆ©�O�jXÈ¿ÆA�bƧ���Èj¼¿_Æ�Aȼ�Ú_ÆA�bÆAb�AXj�XÛÆ��¿ÈªÂÆwA����A¼�ßjÆÛ�Ѽ¿j�wÆÙ�È�ÆjAX�Ƽj§¼j¿j�ÈAÈ���ÆA�bÆ�ȿƧ¼�¿ÆHÆX��¿¬Æ<�ÑÆ¿��Ñ�bÆ���ÙÆÈ�jÆOA¿�XÆ~¼A§�ÆȼAØj¼¿A�ÆA�~�¼�È��¿^ÆO¼jAbÈ��w�¼¿ÈÆ¿jA¼X�ÆA�bÆbj§È��w�¼¿ÈÆ¿jA¼X�¬Æ���ÙÆÈ�j�¼ÆX��§ÑÈAÈ���A�ÆX��§�jÚ�ÈÛ_ÆÈ�j�¼ÆȼAbj�ww¿_ÆA�bÆ��ÙÆÈ�Æ��§�j�j�ÈÆÈ�j�Æ��ƼjA�ÆX�bj¬Æ�wÆÛ�ÑÆ~jÈÆAÆX�A�Xj_ÆȼÛÆÈ�Æ¿ÈÑbÛÆѧÆ��ÆwA�X�j¼ÆA�~�¼�È��¿_Æ¿ÑX�ÆA¿Æ����¿È¼AÆA�bÆ�L¬Æ��XA|ç�!�!ç��|�2��|A�6ç<�ÑÆ¿��Ñ�bÆ¿ÈÑbÛÆѧÆ��ÆA¿Æ�A�ÛÆ�È�j¼ÆbAÈAƿȼÑXÈѼj¿ÆA�bÆA�~�¼�È��¿ÆA¿Æ§�¿¿�O�j¬Æ<�ÑÆ¿��Ñ�bÆj¿§jX�A��ÛÆ���ÙÆAO�ÑÈÆÈ�jÆ��¿ÈÆwA��Ñ¿ÆX�A¿¿j¿Æ�wÆ!+�X��§�jÈjƧ¼�O�j�¿_Æ¿ÑX�ÆA¿ÆȼAØj���~Æ¿A�j¿�A�ÆA�bÆÈ�jÆ��A§¿AX�Ƨ¼�O�j�_ÆA�bÆOjÆAO�jÆÈ�ƼjX�~��ßjÆÈ�j�ÆÙ�j�ÆA�Æ��Èj¼Ø�jÙj¼ÆA¿�¿ÆÛ�ÑÆÈ�j�Æ��Æb�¿~Ñ�¿j¬Æ���bÆ�ÑÈÆÙ�AÈ!+�X��§�jÈjÆ�jA�¿¬Æ�!�XA`!�Z2�6ç/��jÆ��Èj¼Ø�jÙj¼¿ÆA¿�ÆOA¿�XÆb�¿X¼jÈjÆ�AÈ�ƱÑj¿È���¿¬Æ1��¿Æ�¿Æ��¼jƧ¼jØA�j�ÈÆAÈÆ���~�jÆÈ�A�ÆAÈÆ�È�j¼ÆX��§A��j¿ÆOjXAÑ¿jÆX�Ñ�È��~Ƨ¼�O�j�¿_Ƨ¼�OAO���ÈÛƧ¼�O�j�¿_ÆA�bÆ�È�j¼Æ��¿X¼jÈjÆ�AÈ�Æ�á�Æ¿�ÈÑAÈ���¿Æ¿Ñ¼¼�Ñ�b¿ÆÑ¿¬Æ/§j�bÆ¿��jÆÈ��jÆOjw�¼jÆÈ�jÆ��Èj¼Ø�jÙƼjw¼j¿���~ÆÛ�ѼÆ�j��¼ÛÆ��Æ©�¼ÆÈjAX���~ÆÛ�Ѽ¿j�wªÆÈ�jÆj¿¿j�È�A�¿Æ�wÆX��O��AÈ�¼�X¿ÆA�bƧ¼�OAO���ÈÛ¬Æ<�ÑÆ¿��Ñ�bÆOjÆwA����A¼ÆÙ�È�Æ��X���¿j��Ƨ¼�O�j�¿ÆA�bÆÈ�j�¼Æ���ÆrÆÈ�jÆ��¼jÆÈ�jÆOjÈÈj¼¬Æ�lA|!�ZcPç����A`�6Æ���ÙÆAO�ÑÈƧ¼�Xj¿¿j¿_ÆÈ�¼jAb¿ÆA�bÆX��XѼ¼j�XÛÆ�¿¿Ñj¿¬Æ���ÙÆAO�ÑÈÆ��X�¿ÆA�bÆ�ÑÈjÚj¿ÆA�bÆ¿j�A§��¼j¿ÆA�bÆ����È�¼¿ÆA�bÆ��ÙÆÈ�jÛÆÙ�¼�¬Æ���ÙAO�ÑÈÆbjAb��X�ÆA�bÆ��Øj��X�ÆA�bÆ��ÙÆÈ�ÆAØ��bÆÈ�j�¬Æ���ÙÆÙ�AÈƼj¿�ѼXj¿ÆAƧ¼�Xj¿¿j¿Æ�jjb¿_ÆA�bÆAÆÈ�¼jAbÆ�jjb¿_ÆA�bÆ��ÙÆX��ÈjÚÈÆ¿Ù�ÈX���~ÆÙ�¼�¿_ÆA�bÆ��ÙÆ�È»¿Æ���È�AÈjbÆOÛÆÈ�jÆ�§j¼AÈ��~Æ¿Û¿Èj�ÆA�bÆÑ�bj¼�Û��~Æ�A¼bÙA¼j¬Æ���ÙÆAÆ��ÈÈ�jÆAO�ÑÈÆ¿X�jbÑ���~¬Æ1�jÆÙ�¼�bÆ�¿Æ¼A§�b�ÛÆ��Ø��~ÆÈ�ÙA¼b¿Æ�Ñ�È��X�¼j_Æ¿�Æ���ÙÆÈ�jÆwÑ�bA�j�ÈA�¿Æ�wÆ´��bj¼�´ÆX��XѼ¼j�XÛÆX��¿È¼ÑXÈ¿¬Æ��¼Æ��w�¼�AÈ���Æ��Æ/Û¿Èj�ÆÆ�A�ZPc6�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ŧÑO¿Å��¿È¼�OÑÈjb/Û¿Èj�¿A�b+A¼A��j���§ÑÈ��~¬�È��ÆA]lI�]ç]Zc\�6�Æ�Èȧ^ÅÅÙÙÙ¬Û�ÑÈÑOj¬X��ÅÙAÈX�²ØsÙooÃ!�AÖ8�ÙÆ�Æ�Èȧ^ÅÅÙÙÙ¬Û�ÑÈÑOj¬X��Å��wjAÈ~��~�j�Æ�Èȧ^ÅÅ¿ÈjØj�Ûj~~j¬O��~¿§�ȬX��ÅÏááoÅáÊÅ~jÈ�È�AÈ���O�AÈ�~��~�j¬�È��Æ

Page 66: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

Æ�ÆwjÙÆÈ�§¿Æw�¼ÆAÆ¿ÑXXj¿¿wÑ�Æ���~�jÆ��Èj¼Ø�jÙ^Æ1�jÆ��Èj¼Ø�jÙÆÙ���Æ��X�ÑbjÆÈ�§�X¿Æ¿ÑX�ÆA¿ÆX�b��~_ÆbAÈAƿȼÑXÈѼj¿_ÆA�~�¼�È��¿_ÆX��§ÑÈj¼Æ¿X�j�XjÆÈ�j�¼Û_ÆA�bÆ¿Û¿Èj�¿Æbj¿�~�¬ÆÆ9jƼjX���j�bÆÛ�ÑÆ¿§j�bÆ¿��jÆÈ��jÆjÚ§��¼��~Æ�ѼÆÙjO¿�ÈjÆÈ�Æ~jÈÆ��È�ÆÈ�jƼ�~�ÈÆ���bÆw¼A�j¬ÆÆ���~�jÆ+ÑO��XAÈ���¿ÆA�bÆ�AO¿Æ�¿ÆAÆ~��bÆ¿ÈA¼È��~Ƨ���ȬÆÆ���~�jÆ�AO¿Æ����¿^�Èȧ^ÅÅ�AO¿¬~��~�j¬X��ŧA§j¼¿¬�È��Æ/Û¿Èj�Æ�j¿�~�Æ+ÑO��XAÈ���¿^���~�jÆ���jÆ/Û¿Èj�Æ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅ~w¿¬�È��ª���~�jÆ�~ÈAO�jÆ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅO�~ÈAO�j¬�È��ª���~�jÆ�A§.jbÑXjÆ©�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ÅA¼X��ØjÅ�A§¼jbÑXj¬�È��ªÆ���¿ÆÈ�ÆA¿¿�¿ÈÆÛ�ÑÆ��Ƨ¼j§A¼��~Æw�¼ÆÛ�ѼÆ��Èj¼Ø�jÙ^¶+¼�~¼A����~Æ��Èj¼Ø�jÙ¿Æ Ú§�¿jb^Æ/jX¼jÈ¿ÆÈ�Æ�A�b��~Æ<�ѼÆ!jÚÈÆ��O´Æ�ÑÈ��¼¿^Æ����Æ���~A�_Æ!�A�Æ/Ñ��A�j�_ÆA�bÆ ¼�XÆ��~Ñn¼jÆ©9��jÛÆ��§ÑÈj¼Æ+ÑO��¿���~ªÆ´+¼�~¼A����~Æ+jA¼�¿´Æ�ÑÈ��¼^Æ���Æj�È�jÛÆ´��ȼ�bÑXÈ���ÆÈ�Æ��~�¼�È��¿´Æ�ÑÈ��¼¿^Æ�¼�j�_Æ�j�¿j¼¿��_Æ.�Øj¿ÈÆHÆ/Èj��Æ+�jA¿jƼjØ�jÙÆÈ�jÆw����Ù��~ÆÈ�§�X¿^�~�#Æ��ÈAÈ���¿ÆA�¿�Æ���Ù�ÆA¿Æ´È�jƼÑ�ÆÈ��jÆX�A¼AXÈj¼�¿È�XÆ�wÆA�ÆA�~�¼�È��´¬ÆÆ<�ÑÆ�AÛÆÙA�ÈÆÈ�Ƽjw¼j¿�Æ�A¿�ÆÈAO�j¿_Æ�jA§¿_ÆO��A¼ÛÆȼjj¿_Æ����jbÆ��¿È¿_Æbj§È��w�¼¿ÈÆ¿jA¼X�_ƼjXѼ¿���¬Æ��¼Æ��¼jÆ��w�¼�AÈ���Æ��Æ��~�¼�È��¿ÆÛ�ÑÆXA�ÆØ�¿�È^�Èȧ^ÅÅÙÙÙ¬È�§X�bj¼¬X��ÅÈX²��bÑ�js/ÈAÈ�XHb�sÈÑÈ�¼�A�¿HbÏsA�~Ö��bjÚÆ�f:ZcP6Æ<�ÑÆ¿��Ñ�bÆ���ÙÆAÈÆ�jA¿ÈÆ��jƧ¼�~¼A����~Æ�A�~ÑA~jƼjA��ÛÆÙj��_ÆA�bÆ�ÈÆ¿��Ñ�bƧ¼jwj¼AO�ÛÆOjƯ¯Æ�¼Æ�AØA¬Æ�Æ�¿Æ#�ÆÈ��_Æ¿��XjÆ�È»¿Æ§¼jÈÈÛÆ¿����A¼ÆÈ�Æ�AØA¬Æ<�ÑÆÙ���ÆOjÆjÚ§jXÈjbÆÈ�ÆÙ¼�ÈjÆ¿��jÆX�bjÆ��ÆAÈÆ�jA¿ÈÆ¿��jÆ�wÆÛ�ѼÆ��Èj¼Ø�jÙ¿¬Æ<�ÑÆÙ���ÆOjÆjÚ§jXÈjbÆÈ�Æ���ÙÆAÆwA�¼ÆA��Ñ�ÈÆ�wÆbjÈA��ÆAO�ÑÈÆÛ�ѼÆwAØ�¼�ÈjƧ¼�~¼A����~Æ�A�~ÑA~j¬ÆÆ�f|�ZcP6Æ���ÙÆ��ÙÆÈ�Æ¿�¼È¬Æ���»ÈÆb�ÆOÑOO�j�¿�¼È¬Æ<�ÑÆ¿��Ñ�bÆ���ÙÆÈ�jÆbjÈA��¿Æ�wÆAÈÆ�jA¿ÈÆ��jÆ�L��~©�ªÆ¿�¼È��~ÆA�~�¼�È��_Ƨ¼jwj¼AO�ÛÆÈÙ�Æ©¿AÛ_ƱÑ�X�Æ¿�¼ÈÆA�bÆ�j¼~jÆ¿�¼Èª¬Æ�j¼~jÆ¿�¼ÈÆXA�ÆOjÆ��~��ÛÆÑ¿jwÑ�Æ��Æ¿�ÈÑAÈ���¿ÆÙ�j¼jƱÑ�X�Æ¿�¼ÈÆ�¿Æ��§¼AXÈ�XA�_Æ¿�ÆÈA�jÆAÆ����ÆAÈÆ�Ȭ

Æ!�X�!)]A�6ç�¼~ÑAO�ÛÆÈ�jÆ¿��~�jÆ��¿ÈÆ��§�¼ÈA�ÈÆbAÈAƿȼÑXÈѼjÆ���Ù�ÆÈ�Æ�A����b¬Æ<�ÑÆAO¿��ÑÈj�ÛÆ¿��Ñ�bÆ���ÙÆ��ÙÆÈ�jÛÆÙ�¼�¬ÆjÆAO�jÆÈ�Æ��§�j�j�ÈÆ��jÆÑ¿��~Æ���ÛÆA¼¼AÛ¿Æ��ÆÛ�ѼÆwAØ�¼�ÈjÆ�A�~ÑA~j_Æ��ÆAO�ÑÈÆÈ�jÆ¿§AXjÆ�wÆ��jÆ��Èj¼Ø�jÙ¬Æ�|AA�6Æ���ÙÆAO�ÑÈÆȼjj¿ÂÆOA¿�XÆȼjjÆX��¿È¼ÑXÈ���_ÆȼAØj¼¿A�ÆA�bÆ�A��§Ñ�AÈ���ÆA�~�¼�È��¿¬Æ�A����A¼�ßjÆÛ�Ѽ¿j�wÆÙ�È�ÆO��A¼ÛÆȼjj¿_Æ��A¼ÛÆȼjj¿_ÆA�bÆȼ�j�ȼjj¿¬ÆjÆwA����A¼ÆÙ�È�ÆAÈÆ�jA¿ÈÆ��jÆÈÛ§jÆ�wÆOA�A�XjbÆO��A¼ÛÆȼjj_ÆÙ�jÈ�j¼Æ�È»¿ÆAƼjbÅO�AX�Æȼjj_ÆAÆ¿§�AÛÆȼjjÆ�¼ÆA�Æ�8�Æȼjj_ÆA�bÆ���ÙÆ��ÙÆ�È»¿Æ��§�j�j�Èjb¬Æ3�bj¼¿ÈA�bÆȼjjÆȼAØj¼¿A�Æ�]Pf|Z�X`�6Æ�/ÆA�bÆ��/_ÆA�bÆ���ÙÆÈ�jÆb�wwj¼j�XjÆOjÈÙjj�Æ���¼bj¼_Ƨ�¿È�¼bj¼ÆA�bƧ¼j�¼bj¼¬Æ�|!lX�6Æ�¼A§�¿ÆA¼jƼjA��ÛÆ��§�¼ÈA�ÈÆAÈÆ���~�j¬Æ1�j¼jÆA¼jÆÊÆOA¿�XÆÙAÛ¿ÆÈ�Ƽj§¼j¿j�ÈÆAÆ~¼A§�Æ��Æ�j��¼ÛÆ©�O�jXÈ¿ÆA�bƧ���Èj¼¿_Æ�Aȼ�Ú_ÆA�bÆAb�AXj�XÛÆ��¿ÈªÂÆwA����A¼�ßjÆÛ�Ѽ¿j�wÆÙ�È�ÆjAX�Ƽj§¼j¿j�ÈAÈ���ÆA�bÆ�ȿƧ¼�¿ÆHÆX��¿¬Æ<�ÑÆ¿��Ñ�bÆ���ÙÆÈ�jÆOA¿�XÆ~¼A§�ÆȼAØj¼¿A�ÆA�~�¼�È��¿^ÆO¼jAbÈ��w�¼¿ÈÆ¿jA¼X�ÆA�bÆbj§È��w�¼¿ÈÆ¿jA¼X�¬Æ���ÙÆÈ�j�¼ÆX��§ÑÈAÈ���A�ÆX��§�jÚ�ÈÛ_ÆÈ�j�¼ÆȼAbj�ww¿_ÆA�bÆ��ÙÆÈ�Æ��§�j�j�ÈÆÈ�j�Æ��ƼjA�ÆX�bj¬Æ�wÆÛ�ÑÆ~jÈÆAÆX�A�Xj_ÆȼÛÆÈ�Æ¿ÈÑbÛÆѧÆ��ÆwA�X�j¼ÆA�~�¼�È��¿_Æ¿ÑX�ÆA¿Æ����¿È¼AÆA�bÆ�L¬Æ��XA|ç�!�!ç��|�2��|A�6ç<�ÑÆ¿��Ñ�bÆ¿ÈÑbÛÆѧÆ��ÆA¿Æ�A�ÛÆ�È�j¼ÆbAÈAƿȼÑXÈѼj¿ÆA�bÆA�~�¼�È��¿ÆA¿Æ§�¿¿�O�j¬Æ<�ÑÆ¿��Ñ�bÆj¿§jX�A��ÛÆ���ÙÆAO�ÑÈÆÈ�jÆ��¿ÈÆwA��Ñ¿ÆX�A¿¿j¿Æ�wÆ!+�X��§�jÈjƧ¼�O�j�¿_Æ¿ÑX�ÆA¿ÆȼAØj���~Æ¿A�j¿�A�ÆA�bÆÈ�jÆ��A§¿AX�Ƨ¼�O�j�_ÆA�bÆOjÆAO�jÆÈ�ƼjX�~��ßjÆÈ�j�ÆÙ�j�ÆA�Æ��Èj¼Ø�jÙj¼ÆA¿�¿ÆÛ�ÑÆÈ�j�Æ��Æb�¿~Ñ�¿j¬Æ���bÆ�ÑÈÆÙ�AÈ!+�X��§�jÈjÆ�jA�¿¬Æ�!�XA`!�Z2�6ç/��jÆ��Èj¼Ø�jÙj¼¿ÆA¿�ÆOA¿�XÆb�¿X¼jÈjÆ�AÈ�ƱÑj¿È���¿¬Æ1��¿Æ�¿Æ��¼jƧ¼jØA�j�ÈÆAÈÆ���~�jÆÈ�A�ÆAÈÆ�È�j¼ÆX��§A��j¿ÆOjXAÑ¿jÆX�Ñ�È��~Ƨ¼�O�j�¿_Ƨ¼�OAO���ÈÛƧ¼�O�j�¿_ÆA�bÆ�È�j¼Æ��¿X¼jÈjÆ�AÈ�Æ�á�Æ¿�ÈÑAÈ���¿Æ¿Ñ¼¼�Ñ�b¿ÆÑ¿¬Æ/§j�bÆ¿��jÆÈ��jÆOjw�¼jÆÈ�jÆ��Èj¼Ø�jÙƼjw¼j¿���~ÆÛ�ѼÆ�j��¼ÛÆ��Æ©�¼ÆÈjAX���~ÆÛ�Ѽ¿j�wªÆÈ�jÆj¿¿j�È�A�¿Æ�wÆX��O��AÈ�¼�X¿ÆA�bƧ¼�OAO���ÈÛ¬Æ<�ÑÆ¿��Ñ�bÆOjÆwA����A¼ÆÙ�È�Æ��X���¿j��Ƨ¼�O�j�¿ÆA�bÆÈ�j�¼Æ���ÆrÆÈ�jÆ��¼jÆÈ�jÆOjÈÈj¼¬Æ�lA|!�ZcPç����A`�6Æ���ÙÆAO�ÑÈƧ¼�Xj¿¿j¿_ÆÈ�¼jAb¿ÆA�bÆX��XѼ¼j�XÛÆ�¿¿Ñj¿¬Æ���ÙÆAO�ÑÈÆ��X�¿ÆA�bÆ�ÑÈjÚj¿ÆA�bÆ¿j�A§��¼j¿ÆA�bÆ����È�¼¿ÆA�bÆ��ÙÆÈ�jÛÆÙ�¼�¬Æ���ÙAO�ÑÈÆbjAb��X�ÆA�bÆ��Øj��X�ÆA�bÆ��ÙÆÈ�ÆAØ��bÆÈ�j�¬Æ���ÙÆÙ�AÈƼj¿�ѼXj¿ÆAƧ¼�Xj¿¿j¿Æ�jjb¿_ÆA�bÆAÆÈ�¼jAbÆ�jjb¿_ÆA�bÆ��ÙÆX��ÈjÚÈÆ¿Ù�ÈX���~ÆÙ�¼�¿_ÆA�bÆ��ÙÆ�È»¿Æ���È�AÈjbÆOÛÆÈ�jÆ�§j¼AÈ��~Æ¿Û¿Èj�ÆA�bÆÑ�bj¼�Û��~Æ�A¼bÙA¼j¬Æ���ÙÆAÆ��ÈÈ�jÆAO�ÑÈÆ¿X�jbÑ���~¬Æ1�jÆÙ�¼�bÆ�¿Æ¼A§�b�ÛÆ��Ø��~ÆÈ�ÙA¼b¿Æ�Ñ�È��X�¼j_Æ¿�Æ���ÙÆÈ�jÆwÑ�bA�j�ÈA�¿Æ�wÆ´��bj¼�´ÆX��XѼ¼j�XÛÆX��¿È¼ÑXÈ¿¬Æ��¼Æ��w�¼�AÈ���Æ��Æ/Û¿Èj�ÆÆ�A�ZPc6�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ŧÑO¿Å��¿È¼�OÑÈjb/Û¿Èj�¿A�b+A¼A��j���§ÑÈ��~¬�È��ÆA]lI�]ç]Zc\�6�Æ�Èȧ^ÅÅÙÙÙ¬Û�ÑÈÑOj¬X��ÅÙAÈX�²ØsÙooÃ!�AÖ8�ÙÆ�Æ�Èȧ^ÅÅÙÙÙ¬Û�ÑÈÑOj¬X��Å��wjAÈ~��~�j�Æ�Èȧ^ÅÅ¿ÈjØj�Ûj~~j¬O��~¿§�ȬX��ÅÏááoÅáÊÅ~jÈ�È�AÈ���O�AÈ�~��~�j¬�È��Æ

Æ!�X�!)]A�6ç�¼~ÑAO�ÛÆÈ�jÆ¿��~�jÆ��¿ÈÆ��§�¼ÈA�ÈÆbAÈAƿȼÑXÈѼjÆ���Ù�ÆÈ�Æ�A����b¬Æ<�ÑÆAO¿��ÑÈj�ÛÆ¿��Ñ�bÆ���ÙÆ��ÙÆÈ�jÛÆÙ�¼�¬ÆjÆAO�jÆÈ�Æ��§�j�j�ÈÆ��jÆÑ¿��~Æ���ÛÆA¼¼AÛ¿Æ��ÆÛ�ѼÆwAØ�¼�ÈjÆ�A�~ÑA~j_Æ��ÆAO�ÑÈÆÈ�jÆ¿§AXjÆ�wÆ��jÆ��Èj¼Ø�jÙ¬Æ�|AA�6Æ���ÙÆAO�ÑÈÆȼjj¿ÂÆOA¿�XÆȼjjÆX��¿È¼ÑXÈ���_ÆȼAØj¼¿A�ÆA�bÆ�A��§Ñ�AÈ���ÆA�~�¼�È��¿¬Æ�A����A¼�ßjÆÛ�Ѽ¿j�wÆÙ�È�ÆO��A¼ÛÆȼjj¿_Æ��A¼ÛÆȼjj¿_ÆA�bÆȼ�j�ȼjj¿¬ÆjÆwA����A¼ÆÙ�È�ÆAÈÆ�jA¿ÈÆ��jÆÈÛ§jÆ�wÆOA�A�XjbÆO��A¼ÛÆȼjj_ÆÙ�jÈ�j¼Æ�È»¿ÆAƼjbÅO�AX�Æȼjj_ÆAÆ¿§�AÛÆȼjjÆ�¼ÆA�Æ�8�Æȼjj_ÆA�bÆ���ÙÆ��ÙÆ�È»¿Æ��§�j�j�Èjb¬Æ3�bj¼¿ÈA�bÆȼjjÆȼAØj¼¿A�Æ�]Pf|Z�X`�6Æ�/ÆA�bÆ��/_ÆA�bÆ���ÙÆÈ�jÆb�wwj¼j�XjÆOjÈÙjj�Æ���¼bj¼_Ƨ�¿È�¼bj¼ÆA�bƧ¼j�¼bj¼¬Æ�|!lX�6Æ�¼A§�¿ÆA¼jƼjA��ÛÆ��§�¼ÈA�ÈÆAÈÆ���~�j¬Æ1�j¼jÆA¼jÆÊÆOA¿�XÆÙAÛ¿ÆÈ�Ƽj§¼j¿j�ÈÆAÆ~¼A§�Æ��Æ�j��¼ÛÆ©�O�jXÈ¿ÆA�bƧ���Èj¼¿_Æ�Aȼ�Ú_ÆA�bÆAb�AXj�XÛÆ��¿ÈªÂÆwA����A¼�ßjÆÛ�Ѽ¿j�wÆÙ�È�ÆjAX�Ƽj§¼j¿j�ÈAÈ���ÆA�bÆ�ȿƧ¼�¿ÆHÆX��¿¬Æ<�ÑÆ¿��Ñ�bÆ���ÙÆÈ�jÆOA¿�XÆ~¼A§�ÆȼAØj¼¿A�ÆA�~�¼�È��¿^ÆO¼jAbÈ��w�¼¿ÈÆ¿jA¼X�ÆA�bÆbj§È��w�¼¿ÈÆ¿jA¼X�¬Æ���ÙÆÈ�j�¼ÆX��§ÑÈAÈ���A�ÆX��§�jÚ�ÈÛ_ÆÈ�j�¼ÆȼAbj�ww¿_ÆA�bÆ��ÙÆÈ�Æ��§�j�j�ÈÆÈ�j�Æ��ƼjA�ÆX�bj¬Æ�wÆÛ�ÑÆ~jÈÆAÆX�A�Xj_ÆȼÛÆÈ�Æ¿ÈÑbÛÆѧÆ��ÆwA�X�j¼ÆA�~�¼�È��¿_Æ¿ÑX�ÆA¿Æ����¿È¼AÆA�bÆ�L¬Æ��XA|ç�!�!ç��|�2��|A�6ç<�ÑÆ¿��Ñ�bÆ¿ÈÑbÛÆѧÆ��ÆA¿Æ�A�ÛÆ�È�j¼ÆbAÈAƿȼÑXÈѼj¿ÆA�bÆA�~�¼�È��¿ÆA¿Æ§�¿¿�O�j¬Æ<�ÑÆ¿��Ñ�bÆj¿§jX�A��ÛÆ���ÙÆAO�ÑÈÆÈ�jÆ��¿ÈÆwA��Ñ¿ÆX�A¿¿j¿Æ�wÆ!+�X��§�jÈjƧ¼�O�j�¿_Æ¿ÑX�ÆA¿ÆȼAØj���~Æ¿A�j¿�A�ÆA�bÆÈ�jÆ��A§¿AX�Ƨ¼�O�j�_ÆA�bÆOjÆAO�jÆÈ�ƼjX�~��ßjÆÈ�j�ÆÙ�j�ÆA�Æ��Èj¼Ø�jÙj¼ÆA¿�¿ÆÛ�ÑÆÈ�j�Æ��Æb�¿~Ñ�¿j¬Æ���bÆ�ÑÈÆÙ�AÈ!+�X��§�jÈjÆ�jA�¿¬Æ�!�XA`!�Z2�6ç/��jÆ��Èj¼Ø�jÙj¼¿ÆA¿�ÆOA¿�XÆb�¿X¼jÈjÆ�AÈ�ƱÑj¿È���¿¬Æ1��¿Æ�¿Æ��¼jƧ¼jØA�j�ÈÆAÈÆ���~�jÆÈ�A�ÆAÈÆ�È�j¼ÆX��§A��j¿ÆOjXAÑ¿jÆX�Ñ�È��~Ƨ¼�O�j�¿_Ƨ¼�OAO���ÈÛƧ¼�O�j�¿_ÆA�bÆ�È�j¼Æ��¿X¼jÈjÆ�AÈ�Æ�á�Æ¿�ÈÑAÈ���¿Æ¿Ñ¼¼�Ñ�b¿ÆÑ¿¬Æ/§j�bÆ¿��jÆÈ��jÆOjw�¼jÆÈ�jÆ��Èj¼Ø�jÙƼjw¼j¿���~ÆÛ�ѼÆ�j��¼ÛÆ��Æ©�¼ÆÈjAX���~ÆÛ�Ѽ¿j�wªÆÈ�jÆj¿¿j�È�A�¿Æ�wÆX��O��AÈ�¼�X¿ÆA�bƧ¼�OAO���ÈÛ¬Æ<�ÑÆ¿��Ñ�bÆOjÆwA����A¼ÆÙ�È�Æ��X���¿j��Ƨ¼�O�j�¿ÆA�bÆÈ�j�¼Æ���ÆrÆÈ�jÆ��¼jÆÈ�jÆOjÈÈj¼¬Æ�lA|!�ZcPç����A`�6Æ���ÙÆAO�ÑÈƧ¼�Xj¿¿j¿_ÆÈ�¼jAb¿ÆA�bÆX��XѼ¼j�XÛÆ�¿¿Ñj¿¬Æ���ÙÆAO�ÑÈÆ��X�¿ÆA�bÆ�ÑÈjÚj¿ÆA�bÆ¿j�A§��¼j¿ÆA�bÆ����È�¼¿ÆA�bÆ��ÙÆÈ�jÛÆÙ�¼�¬Æ���ÙAO�ÑÈÆbjAb��X�ÆA�bÆ��Øj��X�ÆA�bÆ��ÙÆÈ�ÆAØ��bÆÈ�j�¬Æ���ÙÆÙ�AÈƼj¿�ѼXj¿ÆAƧ¼�Xj¿¿j¿Æ�jjb¿_ÆA�bÆAÆÈ�¼jAbÆ�jjb¿_ÆA�bÆ��ÙÆX��ÈjÚÈÆ¿Ù�ÈX���~ÆÙ�¼�¿_ÆA�bÆ��ÙÆ�È»¿Æ���È�AÈjbÆOÛÆÈ�jÆ�§j¼AÈ��~Æ¿Û¿Èj�ÆA�bÆÑ�bj¼�Û��~Æ�A¼bÙA¼j¬Æ���ÙÆAÆ��ÈÈ�jÆAO�ÑÈÆ¿X�jbÑ���~¬Æ1�jÆÙ�¼�bÆ�¿Æ¼A§�b�ÛÆ��Ø��~ÆÈ�ÙA¼b¿Æ�Ñ�È��X�¼j_Æ¿�Æ���ÙÆÈ�jÆwÑ�bA�j�ÈA�¿Æ�wÆ´��bj¼�´ÆX��XѼ¼j�XÛÆX��¿È¼ÑXÈ¿¬Æ��¼Æ��w�¼�AÈ���Æ��Æ/Û¿Èj�ÆÆ�A�ZPc6�Èȧ^Åżj¿jA¼X�¬~��~�j¬X��ŧÑO¿Å��¿È¼�OÑÈjb/Û¿Èj�¿A�b+A¼A��j���§ÑÈ��~¬�È��ÆA]lI�]ç]Zc\�6�Æ�Èȧ^ÅÅÙÙÙ¬Û�ÑÈÑOj¬X��ÅÙAÈX�²ØsÙooÃ!�AÖ8�ÙÆ�Æ�Èȧ^ÅÅÙÙÙ¬Û�ÑÈÑOj¬X��Å��wjAÈ~��~�j�Æ�Èȧ^ÅÅ¿ÈjØj�Ûj~~j¬O��~¿§�ȬX��ÅÏááoÅáÊÅ~jÈ�È�AÈ���O�AÈ�~��~�j¬�È��Æ

Page 67: Lezione 3 Sottoarray di somma massimadidawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/all-a/lezione3.pdf · Rossano Venturini rossano.venturini@unipi.it Lezione 3 Sottoarray

PuzzlePuzzledL’intero mancante

Viene dato un array di dimensione N contenente (non ordinati) tutti gliinteri compresi tra 1 e N + 1 ad eccezione di uno di essi e si vuole stabilirel’elemento mancante.

Sono possibili almeno 4 soluzioni aventi le seguenti complessita:

Tempo Spazio aggiuntivo

O(n2) O(1) :-((

O(n log n) O(n) :-(

O(n) O(n) :-)

O(n) O(1) :-D

Input

8

3

4

9

2

7

1

8

6

Output

5

4