Pages: [1]   Go Down
Print
Author Topic: Sistema d'esercitazione.. RICORSIONE  (Read 1795 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
fabryxio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 343

Chi l'ha duro....... l'ha duro!


WWW
« on: 12-05-2011, 14:36:03 »

BinaryChange,BinarySelect e BinarySwap.. DELUCIDAZIONI???
Ho letto i vari post precedenti ma nessuno ha portato grandi risultati.
Quanche anima PIA che mi spieghi mentalmente cosa dovrei fare..Huh? xD ci sn quasi ma ... sarò troppo stressato xD
PLS
Logged

Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #1 on: 12-05-2011, 15:00:04 »

Così è difficile, dovresti prendere i relativi codici, e postarli qui.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #2 on: 12-05-2011, 15:44:17 »

BinaryChange,BinarySelect e BinarySwap.. DELUCIDAZIONI???
Ho letto i vari post precedenti ma nessuno ha portato grandi risultati.
Quanche anima PIA che mi spieghi mentalmente cosa dovrei fare..Huh? xD ci sn quasi ma ... sarò troppo stressato xD
PLS
Devi calcolare l'output del metodo in questione calcolato sull'array A in questione
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
fabryxio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 343

Chi l'ha duro....... l'ha duro!


WWW
« Reply #3 on: 12-05-2011, 15:52:26 »

Davvero?Huh?  testate .. c'è un metodo per farlo a mente invece di scriverlo al computer?? tipo BinaryChange
Code:
BinaryChange(A, a, b)
1. if (a==b) then return;
2. c = floor ((a+b)/2);
3. scambia A[a] con A[c];
4. scambia A[c+1] con A[b];
5. BinaryChange(A, a, c);
6. BinaryChange(A, c+1, b);
Descrivere il corretto output ritornato dall'algoritmo se eseguito sui parametri (A, 1, 11), dove A corrisponde al seguente array:
[9, 5, 4, 2, 3, 3, 1, 4, 4, 3, 6]
perkè risulta:

5 - 4 - 3 - 3 - 9 -2- 4 - 4 - 6 - 1 - 3 Huh??
lo stesso per Select e gli altri!!
Ho capito che c'è un cambio di valori, ma come si arriva( dai vari passaggi ) a questo risultato finale??
Logged

Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #4 on: 12-05-2011, 16:18:05 »

  ricorsivamente
Logged

Aliens Exist
fabryxio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 343

Chi l'ha duro....... l'ha duro!


WWW
« Reply #5 on: 12-05-2011, 16:24:57 »

ricorsivamente

O MIO DIO
Logged

callo
Forumista
***
Offline Offline

Gender: Male
Posts: 564


"Quanto manca alla vetta?";"Tu sali e non pensare"


« Reply #6 on: 12-05-2011, 16:56:50 »

Aiutino.....sul quaderno quando fai l'esercizio segnati SEMPRE i valori di "a b c "......fidati che in questo modo diventano quasi immediati questi algoritmi ricorsivi!!!
Logged

"A cavallina....a cavallina.....a chi era bedda quannu  curreva" [Cit.  Dal Tenerissimo via plebiscito]
FReddy
Apprendista Forumista
**
Offline Offline

Posts: 367



« Reply #7 on: 12-05-2011, 20:39:29 »

Se alla fine ci fai caso gli algortmi sono soltanto 3 o 4, per lo più molto simili, quindi facendo un buon numero di prove ci prenderai familiarità, alla fine quello che cambia è l'input.

A mio parere il modo più pratico di svolgerli è questo:

su un foglio di carta scrivi il vettore su  cui lavorare e di volta in volta i vari valori di a, b e c (o anche s1, s2), quindi ad ogni chiamata ricorcorsiva ti costruisci di volta in volta l'albero delle chiamate e le esegui (immagino che tu sappia in che ordine eseguire le varie chiamate). Infine quando arrivi all'ultima foglia dell'albero hai finito (o nel caso di BinarySelect devi usare il valore di a per trovare l'elemento da restituire, nota inoltre che in questo caso si parla si semplice ricorsione lineare di coda, quindi non c'è nessun albero).
« Last Edit: 12-05-2011, 22:38:20 by FReddy » Logged

Il presente è ora,
Il passato era ora,
Il futuro sarà ora.
fabryxio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 343

Chi l'ha duro....... l'ha duro!


WWW
« Reply #8 on: 13-05-2011, 09:28:15 »

tyyyyyyyyyyyyyyyyy non ci avevo pensato =) scrivendosi a b c // S1 S2  è facile =)
Logged

fabryxio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 343

Chi l'ha duro....... l'ha duro!


WWW
« Reply #9 on: 23-05-2011, 15:34:30 »

ke kacca va .. le prime 8/10 simulazioni ci ho giocato .. tentando a caxxo alcune risposte..!! o aprendo la simulazione e richiudendola xD xD ahjahahahhaha e ora ke faccio sempre 30 la media fa cagare xD  [Emoticon] Rosik Asd mannaggia a me!!
Logged

nessuno88
Matricola
*
Offline Offline

Posts: 69


« Reply #10 on: 23-05-2011, 17:09:19 »

Ciao ragazzi sarò stanco o il cervello mi ossigena davvero poco a causa della sinusite  cry ma non riesco davvero a capire questo esercizio, vi prego me lo spiegate passo passo? Ho provato a buttare 2 righe di codice al volo ma niente... vi posto l'esercizio ed il codice, potreste anche correggere quest'ultimo? grazie

Si consideri il seguente algoritmo ricorsivo BinaryChange:
BinaryChange(A, a, b)
1. if (a==b) then return;
2. c = floor ((a+b)/2);
3. scambia A[a] con A[c];
4. scambia A[c+1] con A;
5. BinaryChange(A, a, c);
6. BinaryChange(A, c+1, b);

Descrivere il corretto output ritornato dall'algoritmo se eseguito sui parametri (A, 1, Cool, dove A corrisponde al seguente array:
[4, 4, 3, 2, 5, 9, 6, 6]

L'output dovrebbe essere :  4 2 4 3 9 6 5 6

Questo è il codice che ho provato a scrivere.(sbagliato ovviamente)

import static java.lang.Math.*;
public class prova{
public static void main (String[] args){
   
   int[] A={4, 4, 3, 2, 5, 9, 6, 6};
   stampa(A);
   change(A,1,7);
   System.out.println(" ");
   stampa(A);
   }
   
   public static void stampa(int[] A){
      
   for(int i=0; i < A.length; i++)
   System.out.print(A);
   }
   
   public static void change(int[] A, int a, int b){
      if (a==b) return;
      int c=(int)floor((a+b)/2);
      int tmp=A[a];
      A[a]=A[c];
      A[c]=tmp;
      int tmp2=A[c+1];
      A[c+1]=A;
      A=tmp2;
      change(A,a,c);
      change(A,c+1,b);
      
      }


   
}
Logged
nessuno88
Matricola
*
Offline Offline

Posts: 69


« Reply #11 on: 23-05-2011, 17:10:45 »

L'esercizio da come input   A, 1, 8 non so perche non sia venuto scritto...
Logged
nessuno88
Matricola
*
Offline Offline

Posts: 69


« Reply #12 on: 23-05-2011, 17:29:06 »

Non vorrei che l'array vada prima diviso a metà? Se si perchè?
Logged
mozart
Matricola
*
Offline Offline

Posts: 9


« Reply #13 on: 23-05-2011, 19:36:22 »

Il prof. indica con l'indice 1 il primo elemento dell'array, prova a mettere un elemento qualsiasi all'inizio e vedi se funziona.
es.

[4, 4, 3, 2, 5, 9, 6, 6]

diventa:

[0, 4, 4, 3, 2, 5, 9, 6, 6]
Logged
fabryxio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 343

Chi l'ha duro....... l'ha duro!


WWW
« Reply #14 on: 23-05-2011, 19:59:57 »

Ciao ragazzi sarò stanco o il cervello mi ossigena davvero poco a causa della sinusite  cry ma non riesco davvero a capire questo esercizio, vi prego me lo spiegate passo passo? Ho provato a buttare 2 righe di codice al volo ma niente... vi posto l'esercizio ed il codice, potreste anche correggere quest'ultimo? grazie

Si consideri il seguente algoritmo ricorsivo BinaryChange:
BinaryChange(A, a, b)
1. if (a==b) then return;
2. c = floor ((a+b)/2);
3. scambia A[a] con A[c];
4. scambia A[c+1] con A;
5. BinaryChange(A, a, c);
6. BinaryChange(A, c+1, b);

Descrivere il corretto output ritornato dall'algoritmo se eseguito sui parametri (A, 1, Cool, dove A corrisponde al seguente array:
[4, 4, 3, 2, 5, 9, 6, 6]

L'output dovrebbe essere :  4 2 4 3 9 6 5 6

Questo è il codice che ho provato a scrivere.(sbagliato ovviamente)

import static java.lang.Math.*;
public class prova{
public static void main (String[] args){
   
   int[] A={4, 4, 3, 2, 5, 9, 6, 6};
   stampa(A);
   change(A,1,7);
   System.out.println(" ");
   stampa(A);
   }
   
   public static void stampa(int[] A){
      
   for(int i=0; i < A.length; i++)
   System.out.print(A);
   }
   
   public static void change(int[] A, int a, int b){
      if (a==b) return;
      int c=(int)floor((a+b)/2);
      int tmp=A[a];
      A[a]=A[c];
      A[c]=tmp;
      int tmp2=A[c+1];
      A[c+1]=A;
      A=tmp2;
      change(A,a,c);
      change(A,c+1,b);
      
      }


   
}
Se ti fai i passaggi su un foglio di carta fai prima!!
Logged

Pages: [1]   Go Up
Print
Jump to: