Problema algoritmi semplici

di il
5 risposte

Problema algoritmi semplici

Salve ragazzi, studio ingegneria informatica e delle telecomunicazioni e sto seguendo il corso di algoritmi e strutture dati.
Stavo studiando gli algoritmi di ordinamento e ho provato a riscrivere quelli che ho trovato nel mio libro su matlab.
L'algoritmi è corretto e stabile ma eseguendo il codice in matlab certi vettori me li ordina e certi vettori no.
Lo so che in internet esistono tante implementazioni diverse di questo algoritmo ma a me non interessa tanto per ora imparare l'algoritmo ma capire perche quello che ho scritto ordina solo 3/10 casi...
Grazie in anticipo per l'aiuto ^_^
Il primo algoritmo e il selection sort :
%% Qui si vuole creare una versione per matlab del selectioSort
%% Il selectionSort è un algoritmo che richiede in ingresso un array e la sua dimensione e lo ordina
%% restituendolo ordinato
%% Algoritmo selectionSort(array A, int n) -> array

function y = selectionSort(array,n)

%% Effettuo un ciclo di tutto il vettore
%% for k = 0 to n-2 do
for k=0:n-2 %% k rappresenta l'elemento gia ordinato
%% m <- k+1
m = k+1
% Ordino i restanti k-1 elementi da k+1 a n
% for j = k+2 to n do
for j = k+2:n
% Se l'elemento al posto j è minore di quello al posto m
% assegno a m il valore di j
% if(A[j]<A[m]) then m<-j
if array(j) < array(m)
m = j
end
% scambia A[m] con A[k+1]
tmp = array(m);
array(m) = array(k+1);
array(k+1) = tmp;
% plotto il nuovo grafico
bar(array);
pause(1/10);
end
end
bar(array);
y = array;

Il secondo è l'insertion sort

function y = insertionSort(r)

%% Provero a generare un vettore ordinato in un tempo
%% O(n^2) utilizzando un algoritmo insertion sort
%% Ordino il primo elemento
for i = 2:5
if r(1)>r(i)
tmp = r(i);
r(i) = r(1);
r(1) = tmp;
bar(r);
pause(1);
end
end
%% Scorro il vettore tramite l'indice k
for k = 2:4
%% memorizzo il valore in k+1 per il confronto
value = r(k+1);
for j = 0:k
%% Se non è finito il vettore e il valore e minore di value
if (k-j)>0||r(k-j)<=value
break
end
end
if j<k
for t = k:j+1
r(t+1) = r(t)
bar(r);
pause(1/10);
end
r(j+1) = value;
bar(r);
pause(1/10);
end
end
%% In uscita avremo il vettore ordinato
y = r;

5 Risposte

  • Re: Problema algoritmi semplici

    Cosa vuol dire
    ... certi vettori me li ordina e certi vettori no
    Ricevi qualche messaggio di errore?

    Hai provato usare il debug?

    Dopo aver provato a "deguggare" il tuo codice, se il problema persiste, dovresti almeno fornire un esempio di dati contenuti nel vettore.
  • Re: Problema algoritmi semplici

    Scusate per il ritardo della risposta ma a casa non ho internet ^_^
    Nessun errore semplicemente io gli do come parametro un vettore casuale generato con uno script in matlab e in in alcuni casi mi restituisce un vettore ordinato, in altri casi invece mi restituisce un vettore dove c'è sempre uno e due numeri che non inserisce nella posizione giusta ovvero non scambia e questo lo fa sia per il selection sort, sia per l'insertion sort che per il bubble sort che non ho postato.

    Non ho aggiunto prima che invece uno script di una specie bubble sort creato da me precedentemente di mia iniziativa invece mi restituisce il vettore ordinato tutte le volte.
    Per questo motivo non risco a capire quale sia il problema e penso che il problema sia qualche meccanismo di matlab che non conosco , non so a questo punto... :-S
    Posto qualche esempio utilizzando il selection sort ^_^
    1) Esperimento 1
    ingresso [3 7 7 1 1 5 10 3 6 2] uscita [1 2 1 3 3 6 5 7 7 10]
    2) Esperimento 2
    ingresso [9 2 8 2 10 3 2 2 6 5 ] uscita [2 2 2 2 3 5 6 8 9 10]
    3) Esperimento 3
    ingresso [3 9 6 6 10 3 8 8 4 6] uscita [3 3 6 6 4 9 9 0 10]
    4) Esperimento 4
    ingresso [0 0 5 8 10 1 6 5 0 3 ] uscita [0 0 1 3 0 5 5 6 8 10]
    5) espetimento 5
    ingresso [1 8 3 5 1 6 2 7 7 8] uscita [ 1 5 3 5 1 7 2 8 7 8 ]

    e cosi via... non riesco a trovare neanche una serie di vettori con caratterstiche comuni che mi permettano di capire quali sono i casi in cui sbaglia

    Grazie in anticipo per il tempo ^_^

    Un ultima cosa che non avevo detto... Nel codice originale ho aggiunto un ciclo per ordinare il primo elemento che altrimenti non ordina perche il codice parte dal concetto induttivo che n-k elementi sono ordinati e devo ordinare gli altri k e io ho considerato k = n-1
  • Re: Problema algoritmi semplici

    Ragazzi lo sapete che vi dico... ho riprodotto lo stesso algoritmo in C e non funziona lo stesso... sto iniziando a dubitare che il problema sia il libro...
  • Re: Problema algoritmi semplici

    In questi casi, la prima cosa da fare è "debuggare" il codice; ti rinnovo la domanda, hai provato a "debuggare" il codice nel caso del vettore che non viene ordinato correttamente?

    Ricorda, il debugger è il tuo migliore amico.
  • Re: Problema algoritmi semplici

    Grz della risposta ^_^ ho fatto il debug al selection sort e mi sono accorto che faceva troppi scambi ed era perché il for doveva chiudersi prima e lo scambio essere effettuato fuori l insertion invece è scritto sbagliato lo correggerlo grz in ogni caso per il suggerimento ^_^
Devi accedere o registrarti per scrivere nel forum
5 risposte