Pagina 1 di 1

ing.informatici a me... ricerca dicotomica ricorsiva

MessaggioInviato: lun mar 16, 2009 11:17 am
da Shanik
stavo implementando questo algoritmo, do una spulciata a wikipedia, ma secondo me c'è un errore.. riporto il codice di wikipedia

/* Funzione per Ricerca Binaria con ricorsione */
int BinSe_ri(int[] arr, int n, int start, int end)
{
if (start > end) return -1;
int middle = (start + end) / 2;

if (n <arr> arr[middle])
return BinSe_ri(arr, n, middle + 1, end);

else return middle;
}

l'errore secondo me è quello selezionato, vi spiego perchè... visto che in C se facciamo una divisione intera, viene presa appunto solo la parte intera del numero (es. 9:2=4,5 quindi 4) non capisco perchè li fa +1..

in un array l'indice parte da 0, non da 1... quindi il numero medio dovrebbe essere appunto il numero della variabile middle..

quando nel sottoprogramma c'è -1 sono d'accordo, ma non mi trovo con quel +1.. io avrei lasciato solo middle..

sbalgio?

se non sbaglio vado a correggere wikipedia :D

MessaggioInviato: lun mar 16, 2009 12:18 pm
da duca_conte * banned *
se me lo chiedevi un du anni fa potevo aiutarti!dho...ora cerco in giro cmq :tru

MessaggioInviato: lun mar 16, 2009 1:18 pm
da Shanik
risolto... aveva ragione wikipedia.. :D

MessaggioInviato: lun mar 16, 2009 1:21 pm
da duca_conte * banned *
mejo dai!!!mi evitavi figure da cioccolataio...hehe :tru

MessaggioInviato: lun mar 16, 2009 7:38 pm
da Barattolo
piu' che altro non capisco cosa sia quel "<arr>", penso ci sia un errore, penso li' ci vada un ">" e manchi invece la parte relativa a "<", no?
In questa ipotesi (ovvero che sia sbagliato) e' corretto perche' se "n" e' maggiore di arr[middle] la ricerca prosegue da arr[middle+1] in poi

MessaggioInviato: lun mar 16, 2009 7:53 pm
da Shanik
penso significhi minore di, maggiore di..

MessaggioInviato: lun mar 16, 2009 11:09 pm
da Barattolo
e' il forum che sminchia le parentesi angolari... quello su wikipedia e' diverso, e' cosi'
/* Funzione per Ricerca Binaria con ricorsione */
int BinSe_ri(int[] arr, int n, int start, int end)
{
if (start > end) return -1;
int middle = (start + end) / 2;

if (n "minore di" arr[middle])
return BinSe_ri(arr, n, start, middle - 1);

if (n "maggiore di" arr[middle])
return BinSe_ri(arr, n, middle + 1, end);

else return middle;
}


MessaggioInviato: lun mar 16, 2009 11:28 pm
da Shanik
ah giusto...

MessaggioInviato: mar mar 17, 2009 3:48 pm
da sl0wg33k * BANNED *
ma non c'è una cosa tipo The Matrix che uno s'infila una cannocchia nel capoccione per 10 secondi trema un pò e quando si sveglia è un dio della programmazione? 8)

Hello World! :lol: