function[result]=extract_disc_state(Prob_vector);

% Effettua l'estrazione da un vettore di probabilita discrete
num_states                  =   length(Prob_vector);
[Sorted, Index]             =   sort(Prob_vector);
Data_cumul_prob_array       =   cumsum(Sorted);

choice                      =   unifrnd(0,1);
low                         =   0;
high                        =   num_states;

while high>(low+1)
    middle                      =   ceil((high+low)/2);
    if choice > Data_cumul_prob_array(middle)
        low                         =   middle;
    else high                       =   middle;
    end
end

result                      =   Index(high); % Stato estratto