Per identificare gli elementi distinti all'interno di un vettore e per calcolarne il numero, si possono utilizzare due funzioni di MatLab:
[*] unique: restituisce un vettore (o una matrice, a seconda dell'input) contenente i valori "unici" presenti all'interno del vettore
[*] length: restituisce la lunghezza di un vettore (o la massima tra le varie dimensioni nel caso di una matrice)
per tanto l'istruzione:
length(unique(v))
restituisce il numero di elementi unici all'interno del vettore "v"
Nel caso non si volessero utilizzare le funzioni built-in di MatLab, si può risolvere il problema con una serie di cicli for come nello script che segue.
Nello script, un loop esterno cicla sugli elementi del vettore e, tramite un ciclo interno li confronta con gli altri alla ricerca di eventuali "duplicati"
%
% Definzione del vettore
%
v = [4; 7; 8; 3; 1; 3; 5; 9; 9; 5];
%
% Calcolo del numero degli elementi del vettore
%
n_elem=length(v);
%
% Creazione di una copia del vettore di input
%
v_tmp=v;
%
% Loops per la scansione del vettore di input e ricerca dei duplicati
%
for i=1:n_elem-1
for j=i+1:n_elem
%
% Se viene trovato un duplicato, il suo valore viene nel vettore
% "copia" cambiato in NaN
%
if(v(i) == v(j))
v_tmp(j)=NaN;
end
end
end
%
% Inizializzazione contatore, conteggio dei valori distinti e loro
% assegnazione ad un vettore "output"
%
num_elem_dist=0;
for i=1:n_elem
if(~isnan(v_tmp(i)))
num_elem_dist=num_elem_dist+1;
v_dist(num_elem_dist)=v_tmp(i);
end
end
%
% Visualizzazione risultati
%
disp(['Numero elementi distinti= ' num2str(num_elem_dist)])
disp('Elementi distinti nel vettore in input:')
v_dist
Per quanto riguarda la seconda parte della domanda (determinazione della complessità asintotica) purtroppo non sono in grado di dare una risposta concreta.
Quello che si può valutare è il numero di iterazioni necessarie: queste sono
n_iter=n*(n-1)/2
dove "
n" è la lunghezza del vettore di input meno 1.
Nel corso delle iterazioni, infatti, ogni elemento del vettore viene confrontato solo con quelli successivi (rispetto alla sua posizione), così che, dato un vettore di 10 elementi:
[*] il primo viene confrontato con 9 elementi
[*] il secondo con 8 elementi
[*] ...
[*] il penultimo con 1 solo elemento (l'ultimo) - l'ultimo elemento non deve essere confrontato
La somma delle iterazioni è dunque: 9 + 8 + 7 + 6 ... +1 che è calcolabile con la formula fdi Gauss sopra riportata.
In Internet è comunque disponibile una grande quantità di documentazione sulla "Complessità Asintotica".
Hope this helps.