PDA

View Full Version : [JAVA] Ricorsione


Savio3000+
20-07-2004, 10:09
Stavo pensando a:
public void compatta() {
int []v=new int[this.size()];
corr=testa;
prec=null;
for (int i=0;i<size();i++) {
v[i]=corr.info;
prec=corr;
corr=corr.next;
}
corr=testa;
prec=null;
int j=0;
int k=0;
int contatore=0;
while (corr!=null) {

for (int u=0;u<size();u++)
{
if (k!=u && v[u]==corr.info) //k contatore degli elementi della lista

{
j++;
System.out.println(j);
contatore=0;
Nodo corr2=testa;
Nodo prec2=null;
Nodo vs=corr2;
Nodo c=prec2;
while (contatore<=u)
{


if (contatore==u) {
if (prec2 == null)
testa = testa.next;
else
prec2.next = corr2.next;

}
contatore++;

prec2=corr2;
corr2=corr2.next;
}
} //fine if


}//fine for
k++;
prec=corr;
corr=corr.next;
}

}

}

come realizzare, un metodo ricorsivo per fare la stessa cosa... suggerimenti? :rolleyes:

misterx
20-07-2004, 10:29
almeno scrivi cosa fa quel codice ;)

Savio3000+
20-07-2004, 10:31
chi conosce java, lo sa', chi non lo conosce non puo' darmi consigli sulla ricorsione o backtracking ;)

cn73
20-07-2004, 10:38
Bah...non è che bisogna conoscere Java per trasformare un algoritmo iterativo in ricorsivo...cmq usa il tag
code, senza indentazione non si capisce niente...

misterx
20-07-2004, 10:44
Originariamente inviato da Savio3000+
chi conosce java, lo sa', chi non lo conosce non puo' darmi consigli sulla ricorsione o backtracking ;)


io l'esame l'ho già dato ;)

Savio3000+
20-07-2004, 10:54
Originariamente inviato da misterx
io l'esame l'ho già dato ;)
bè anche io, infatti è un aiuto a livello semantico...;)

/\/\@®¢Ø
20-07-2004, 11:39
Originariamente inviato da Savio3000+
chi conosce java, lo sa', chi non lo conosce non puo' darmi consigli sulla ricorsione o backtracking ;)
Si', ma eviti comunque di perdere qualche minuto per interpretare il codice :P, la pigrizia e' la caratteristica prima del programmatore :D

Savio3000+
20-07-2004, 11:41
Originariamente inviato da /\/\@®¢Ø
Si', ma eviti comunque di perdere qualche minuto per interpretare il codice :P, la pigrizia e' la caratteristica prima del programmatore :D
:D

misterx
20-07-2004, 12:15
public void compatta() {
int []v=new int[this.size()];
corr=testa;
prec=null;
for (int i=0;i<size();i++) {
v[i]=corr.info;
prec=corr;
corr=corr.next;
}
corr=testa;
prec=null;
int j=0;
int k=0;
int contatore=0;
while (corr!=null) {

for (int u=0;u<size();u++) {
if (k!=u && v[u]==corr.info) //k contatore degli elementi della lista

{
j++;
System.out.println(j);
contatore=0;
Nodo corr2=testa;
Nodo prec2=null;
Nodo vs=corr2;
Nodo c=prec2;
while (contatore<=u) {


if (contatore==u) {
if (prec2 == null)
testa = testa.next;
else
prec2.next = corr2.next;

}
contatore++;

prec2=corr2;
corr2=corr2.next;
}
} //fine if


}//fine for
k++;
prec=corr;
corr=corr.next;
}

}

}

Savio3000+
20-07-2004, 12:33
Originariamente inviato da misterx

public void compatta() {
int []v=new int[this.size()];
corr=testa;
prec=null;
for (int i=0;i<size();i++) {
v[i]=corr.info;
prec=corr;
corr=corr.next;
}
corr=testa;
prec=null;
int j=0;
int k=0;
int contatore=0;
while (corr!=null) {

for (int u=0;u<size();u++) {
if (k!=u && v[u]==corr.info) //k contatore degli elementi della lista

{
j++;
System.out.println(j);
contatore=0;
Nodo corr2=testa;
Nodo prec2=null;
Nodo vs=corr2;
Nodo c=prec2;
while (contatore<=u) {


if (contatore==u) {
if (prec2 == null)
testa = testa.next;
else
prec2.next = corr2.next;

}
contatore++;

prec2=corr2;
corr2=corr2.next;
}
} //fine if


}//fine for
k++;
prec=corr;
corr=corr.next;
}

}

}



grazie per il format ;)

PGI
20-07-2004, 13:25
E' veramente indecifrabile. Ti prego dimmi a cosa serva.

Savio3000+
20-07-2004, 13:31
è una lista concatenata (struttura dati);)
forza con il prossimo :cool:

/\/\@®¢Ø
20-07-2004, 13:31
Originariamente inviato da Savio3000+
bè anche io, infatti è un aiuto a livello semantico...;)
Francamente e' difficile capire bene cosa faccia, visto che manca il contesto ( 'testa' da dove arriva ? e' una variabile di classe? A che valore e' inizializzato quando viene chiamata la funzione ?).
Se ci dici cosa fa (o dovrebbe fare :D) forse fai prima ;)

cn73
20-07-2004, 13:32
Originariamente inviato da PGI
E' veramente indecifrabile. Ti prego dimmi a cosa serva.
:D

Savio3000+
20-07-2004, 13:35
Originariamente inviato da /\/\@®¢Ø
Francamente e' difficile capire bene cosa faccia, visto che manca il contesto ( 'testa' da dove arriva ? e' una variabile di classe? A che valore e' inizializzato quando viene chiamata la funzione ?).
Se ci dici cosa fa (o dovrebbe fare :D) forse fai prima ;)
è un metodo di una classe, non ce' bisogno di altro per scoprire cosa fa.. (ora lo chiamo MISTERO) :D :D

misterx
20-07-2004, 13:39
Originariamente inviato da /\/\@®¢Ø
Francamente e' difficile capire bene cosa faccia, visto che manca il contesto ( 'testa' da dove arriva ? e' una variabile di classe? A che valore e' inizializzato quando viene chiamata la funzione ?).
Se ci dici cosa fa (o dovrebbe fare :D) forse fai prima ;)



serve a rompere le balle a noi :D:D:D

Savio3000+
20-07-2004, 13:39
Originariamente inviato da misterx
serve a rompere le balle a noi :D:D:D
la curiosita' è sintomo di intelligenza attiva... ;)

Angus
20-07-2004, 14:03
Originariamente inviato da Savio3000+
è un metodo di una classe, non ce' bisogno di altro per scoprire cosa fa.. (ora lo chiamo MISTERO) :D :D

e se ti dicessi che quel codice, per quello che dovrebbe fare, non è corretto?

PGI
20-07-2004, 14:19
Originariamente inviato da Savio3000+
è una lista concatenata (struttura dati);)
forza con il prossimo :cool:

Grazie per avermi detto che l'acqua è liquida (si dice anche che bagni, ma aspetto conferme).

Io chiedevo lo scopo del metodo. Giuro che non riesco a capire quale sia.

O Angus, tu che forse hai visto un algoritmo simile da qualche parte, svelaci l'arcano.

Angus
20-07-2004, 14:40
Originariamente inviato da PGI

O Angus, tu che forse hai visto un algoritmo simile da qualche parte, svelaci l'arcano.



Il nome del metodo è chiaro... ed io la butto lì: il programmatore tenta di compattare una lista eliminandone gli elementi ridondanti. Per ridondanti intendo tutti gli elementi che abbiano un .info già presente nella lista... Ammetto che non sono sceso nel dettaglio, ma affermo con tutto me stesso che il codice non è corretto: così almeno *qualcuno* esce fuori dal sacco e ci svela il suo *mistero*...



:muro:

PGI
20-07-2004, 15:22
Alla rimozione dei duplicati proprio non avevo pensato., credevo che compattare avesse un altro significato (compressione di una struttura tramite rimozione dei nodi genericamente non validi, chiaramente non applicabile alla lista supposta da quel metodo).

Ogni giorno se ne impara una diversa :D.

Savio3000+
20-07-2004, 16:05
Emm... Hai azzeccato in pieno... elimina i duplicati da una lista concatenata.
Il problema che l' algoritmo è giustissimo caro mio, non posso mostrarti il seguito che fa' parte di un progetto che sto portando avanti, ma ti assicuro che funziona a gonfie vele... ;)

Cmq sei stato l' unico a capire cosa faceva quel codice, complimenti veramente. ;)

cn73
20-07-2004, 16:14
[sboron mode on]
Ma va là dai...capire cosa fanno una ventina di righe di codice! :p
[sboron mode off]

Angus
20-07-2004, 16:26
Originariamente inviato da Savio3000+
Emm... Hai azzeccato in pieno... elimina i duplicati da una lista concatenata.
Il problema che l' algoritmo è giustissimo caro mio, non posso mostrarti il seguito che fa' parte di un progetto che sto portando avanti, ma ti assicuro che funziona a gonfie vele... ;)

Cmq sei stato l' unico a capire cosa faceva quel codice, complimenti veramente. ;)

Evvivaaa!!! Ho vintoooo!!! Hovvintoquaccheccosa?!?
:D :sofico: :yeah: :winner:

A parte gli scherzi, la mia affermazione sulla correttezza del codice era l'amo per farti abboccare e sputare il rospo ;)

Hai comunque pensato che quello che fai è esattamente il comportamento standard dell' interfaccia java.util.Set?

Estratto dalla doc:


public interface Set
extends Collection

A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction.

Savio3000+
20-07-2004, 16:44
Originariamente inviato da Angus
Evvivaaa!!! Ho vintoooo!!! Hovvintoquaccheccosa?!?
:D :sofico: :yeah: :winner:

A parte gli scherzi, la mia affermazione sulla correttezza del codice era l'amo per farti abboccare e sputare il rospo ;)

Hai comunque pensato che quello che fai è esattamente il comportamento standard dell' interfaccia java.util.Set?

Estratto dalla doc:


public interface Set
extends Collection

A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction.


si ma cerco di "simulare" il piu' possibile i puntatori ...

Angus
20-07-2004, 16:56
Originariamente inviato da Savio3000+
si ma cerco di "simulare" il piu' possibile i puntatori ...

non ti seguo... intendi i puntatori del C? Se sì:


WHY?!?:eek:

Savio3000+
20-07-2004, 17:32
Originariamente inviato da Angus
non ti seguo... intendi i puntatori del C? Se sì:


WHY?!?:eek:
xe' non mi piacciono le classi preconfezionate... ;)

Angus
20-07-2004, 17:37
Originariamente inviato da Savio3000+
xe' non mi piacciono le classi preconfezionate... ;)


:eek: