Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni8 pagine

Vector

Il documento tratta dei vettori in informatica, definendoli come strutture dati omogenee e sequenziali con accesso diretto. Vengono esplorati vari algoritmi fondamentali per la manipolazione dei vettori, inclusi caricamento, stampa, ricerca e ordinamento, insieme a una tabella riassuntiva della complessità computazionale. Inoltre, il documento fornisce esempi di codice in C++ per illustrare le operazioni sui vettori.

Caricato da

Angela celentano
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni8 pagine

Vector

Il documento tratta dei vettori in informatica, definendoli come strutture dati omogenee e sequenziali con accesso diretto. Vengono esplorati vari algoritmi fondamentali per la manipolazione dei vettori, inclusi caricamento, stampa, ricerca e ordinamento, insieme a una tabella riassuntiva della complessità computazionale. Inoltre, il documento fornisce esempi di codice in C++ per illustrare le operazioni sui vettori.

Caricato da

Angela celentano
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

utfcode

[Link] 3.10 UTF-8 input encoding 13.06.2000


scanner for code UTF-8 installed.

1
I Vettori in Informatica
Concetti, Algoritmi Fondamentali e Analisi di Complessità

Appunti di Informatica
21 luglio 2026

Indice
1 Concetto e Definizione di Vettore 3

2 Vettore di N Elementi e Controllo sulla Dimensione 3

3 Caricamento e Stampa 3

4 Algoritmi Fondamentali 4
4.1 Estrazione di elementi in base a condizioni . . . . . . . . . . . . . . . . . . 4
4.2 Calcolo di Minimo, Massimo e Media . . . . . . . . . . . . . . . . . . . . . 4
4.3 Modifica degli elementi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.4 Cancellazione ed Inserimento . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.4.1 Cancellazione in posizione pos (Shift a sinistra) . . . . . . . . . . . 5
4.4.2 Inserimento in posizione pos (Shift a destra) . . . . . . . . . . . . . 5
4.5 Gestione di Vettori Paralleli . . . . . . . . . . . . . . . . . . . . . . . . . . 6

5 Algoritmi di Ricerca 6
5.1 Ricerca Sequenziale (o Lineare) . . . . . . . . . . . . . . . . . . . . . . . . 6
5.2 Ricerca Binaria (o Dicotomica) . . . . . . . . . . . . . . . . . . . . . . . . 6

6 Ordinamento: Bubble Sort 7


6.1 Regola di Scambio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6.2 Codice C++ Ottimizzato . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

7 Tabella Riassuntiva della Complessità Computazionale 8

2
1 Concetto e Definizione di Vettore
Un vettore (o array monodimensionale) è una struttura dati omogenea, sequenziale e ad
accesso diretto.

• Omogenea: Tutti gli elementi contenuti sono del medesimo tipo di dato.

• Sequenziale: Gli elementi sono memorizzati in posizioni di memoria contigue.

• Accesso diretto: È possibile accedere a un qualunque elemento indicando il suo


indice, con un costo temporale costante O(1).

Formale matematicamente, un vettore V di dimensione N si definisce come un’ap-


plicazione da un insieme finito di indici verso l’insieme dei valori ammissibili dal tipo di
dato:
V : {0, 1, 2, . . . , N − 1} → TipoDati
L’accesso all’elemento i-esimo avviente tramite la notazione V [i], con vincolo:

0≤i<N

2 Vettore di N Elementi e Controllo sulla Dimensio-


ne
In molti linguaggi a tipizzazione statica, la dimensione massima fisica del vettore (M AX)
deve essere allocata a tempo di compilazione. L’utente, tuttavia, lavora spesso con una
dimensione logica N ≤ M AX.
Per prevenire errori di Buffer Overflow e accessi a memoria non autorizzata, la dimen-
sione N deve essere convalidata con un ciclo di controllo:
1 const int MAX = 100;
2 int V [ MAX ];
3 int N ;
4

5 // Input controllato per la dimensione N


6 do {
7 cout << " Inserisci la dimensione N (1 - " << MAX << " ) : " ;
8 cin >> N ;
9 } while ( N < 1 || N > MAX ) ;
Listing 1: Controllo sulla dimensione dell’array

3 Caricamento e Stampa
Le operazioni di caricamento (popolamento) e stampa richiedono la scansione sequenziale
di tutti gli N elementi. La loro complessità temporale è lineare: O(N ).

3
1 // Algoritmo di Caricamento
2 for ( int i = 0; i < N ; i ++) {
3 cout << " V [ " << i << " ] = " ;
4 cin >> V [ i ];
5 }
6

7 // Algoritmo di Stampa
8 for ( int i = 0; i < N ; i ++) {
9 cout << " V [ " << i << " ] = " << V [ i ] << endl ;
10 }
Listing 2: Caricamento e Stampa di un vettore

4 Algoritmi Fondamentali
4.1 Estrazione di elementi in base a condizioni
Data una proprietà P (x), si filtrano gli elementi di V copiandoli in un secondo vettore
W:
W = {V [i] | 0 ≤ i < N ∧ P (V [i]) = true}

1 int W [ MAX ];
2 int k = 0; // Dimensione del vettore W
3

4 for ( int i = 0; i < N ; i ++) {


5 if ( V [ i ] % 2 == 0) { // Condizione P ( x ) : elemento pari
6 W [ k ] = V [ i ];
7 k ++;
8 }
9 }
Listing 3: Estrazione elementi pari

4.2 Calcolo di Minimo, Massimo e Media


Sia V un vettore non vuoto di N elementi:

• Massimo: M = max0≤i<N V [i]

• Minimo: m = min0≤i<N V [i]


P −1
• Media aritmetica: µ = N1 N i=0 V [i]

1 int maxVal = V [0];


2 int minVal = V [0];
3 double somma = 0;
4

5 for ( int i = 0; i < N ; i ++) {


6 if ( V [ i ] > maxVal ) maxVal = V [ i ];
7 if ( V [ i ] < minVal ) minVal = V [ i ];

4
8 somma += V [ i ];
9 }
10 double media = somma / N ;
Listing 4: Minimo, Massimo e Media

4.3 Modifica degli elementi


Consiste nell’applicare una funzione f (x) a ciascun elemento del vettore:

V [i] ← f (V [i]), ∀i ∈ {0, . . . , N − 1}

1 for ( int i = 0; i < N ; i ++) {


2 V [ i ] = V [ i ] * 2; // Raddoppia il valore di ogni elemento
3 }
Listing 5: Modifica degli elementi

4.4 Cancellazione ed Inserimento


4.4.1 Cancellazione in posizione pos (Shift a sinistra)
V [i] ← V [i + 1], ∀i ∈ {pos, . . . , N − 2}

1 int pos = 2; // Indice da eliminare


2 for ( int i = pos ; i < N - 1; i ++) {
3 V [ i ] = V [ i + 1];
4 }
5 N - -; // Riduzione della dimensione logica
Listing 6: Cancellazione elemento

4.4.2 Inserimento in posizione pos (Shift a destra)


V [i + 1] ← V [i], ∀i ∈ {N − 1, . . . , pos}

1 int pos = 2;
2 int val = 99;
3 for ( int i = N - 1; i >= pos ; i - -) {
4 V [ i + 1] = V [ i ];
5 }
6 V [ pos ] = val ;
7 N ++; // Incremento della dimensione logica
Listing 7: Inserimento elemento

5
4.5 Gestione di Vettori Paralleli
Due o più vettori sono detti paralleli quando gli elementi collocati nello stesso indice i
si riferiscono alle diverse proprietà della medesima entità.
1 string nomi [ MAX ] = { " Anna " , " Luca " , " Marco " };
2 int voti [ MAX ] = {28 , 24 , 30};
3

4 for ( int i = 0; i < N ; i ++) {


5 cout << nomi [ i ] << " ha ottenuto il voto : " << voti [ i ] <<
endl ;
6 }
Listing 8: Esempio vettori paralleli

5 Algoritmi di Ricerca
5.1 Ricerca Sequenziale (o Lineare)
Scorrendo il vettore elemento per elemento, confronta il valore cercato target.

• Caso Migliore: O(1)

• Caso Peggiore/Medio: O(N )

1 int target = 15;


2 int pos = -1;
3 for ( int i = 0; i < N ; i ++) {
4 if ( V [ i ] == target ) {
5 pos = i ;
6 break ; // Interrompe appena trovato
7 }
8 }
Listing 9: Ricerca Sequenziale

5.2 Ricerca Binaria (o Dicotomica)


Applicabile **solo se il vettore è già ordinato**. Sfrutta il paradigma Divide et Impera.
Siano low e high gli estremi dell’intervallo di ricerca:
 
low + high
mid =
2

• Se V [mid] = target, elemento trovato.

• Se V [mid] < target, aggiorna low ← mid + 1.

• Se V [mid] > target, aggiorna high ← mid − 1.

Complessità Temporale: O(log2 N ) nel caso peggiore.

6
1 int target = 15;
2 int low = 0 , high = N - 1;
3 int pos = -1;
4

5 while ( low <= high ) {


6 int mid = low + ( high - low ) / 2;
7 if ( V [ mid ] == target ) {
8 pos = mid ;
9 break ;
10 }
11 if ( V [ mid ] < target ) low = mid + 1;
12 else high = mid - 1;
13 }
Listing 10: Ricerca Binaria

6 Ordinamento: Bubble Sort


Il **Bubble Sort** è un algoritmo basato sullo scambio continuo di elementi adiacenti
non ordinati.

6.1 Regola di Scambio


Per ogni i ∈ {0, . . . , N − 2}:

se V [i] > V [i + 1] =⇒ swap(V [i], V [i + 1])

6.2 Codice C++ Ottimizzato


1 bool scambiato ;
2 for ( int i = 0; i < N - 1; i ++) {
3 scambiato = false ;
4 for ( int j = 0; j < N - 1 - i ; j ++) {
5 if ( V [ j ] > V [ j + 1]) {
6 int temp = V [ j ];
7 V [ j ] = V [ j + 1];
8 V [ j + 1] = temp ;
9 scambiato = true ;
10 }
11 }
12 // Se non ci sono stati scambi , il vettore e gia ordinato
13 if (! scambiato ) break ;
14 }
Listing 11: Bubble Sort Ottimizzato

7
7 Tabella Riassuntiva della Complessità Computa-
zionale

Operazione / Algoritmo Caso Migliore Caso Medio Caso Peggiore


Accesso diretto O(1) O(1) O(1)
Inserimento / Cancellazione O(1) O(N ) O(N )
Ricerca Sequenziale O(1) O(N ) O(N )
Ricerca Binaria O(1) O(log N ) O(log N )
Bubble Sort O(N ) O(N 2 ) O(N 2 )

Tabella 1: Confronto delle prestazioni temporali.

Potrebbero piacerti anche