[Java] tecnica backtracking
Salve ! non ho capito l'ultimo punto di questo procedimento del backtracking :
Si ha un certo problema da risolvere, dove un certo numero di variabili (o celle di un array) devono assumere determinati valori compatibili tra loro.
-Si imposta un caso base all'interno di un metodo, in modo da far sì che quando le mie variabili hanno assunto tutte una determinati valori compatibili tra loro, io esco dal mio metodo.
-Si fa assumere alla prima delle mie variabili (o celle) il prossimo valore possibile, partendo dal primo.
-Si prova ad estendere il problema alla prossima variabile effettuando una o più chiamate ricorsive del metodo.
-Se raggiungo un vicolo cieco scarto il valore dell'ultima variabile, torno indietro di un passo e provo a far assumere alla variabile precedente il prossimo valore . cosa che a me personalmente risulta difficile da implementare in java....cioe' per tornare indietro il segnale puo' essere un valore boolean? se e' false allora torno indietro ? se è true vado avanti? si fa sempre cosi?
Si ha un certo problema da risolvere, dove un certo numero di variabili (o celle di un array) devono assumere determinati valori compatibili tra loro.
-Si imposta un caso base all'interno di un metodo, in modo da far sì che quando le mie variabili hanno assunto tutte una determinati valori compatibili tra loro, io esco dal mio metodo.
-Si fa assumere alla prima delle mie variabili (o celle) il prossimo valore possibile, partendo dal primo.
-Si prova ad estendere il problema alla prossima variabile effettuando una o più chiamate ricorsive del metodo.
-Se raggiungo un vicolo cieco scarto il valore dell'ultima variabile, torno indietro di un passo e provo a far assumere alla variabile precedente il prossimo valore . cosa che a me personalmente risulta difficile da implementare in java....cioe' per tornare indietro il segnale puo' essere un valore boolean? se e' false allora torno indietro ? se è true vado avanti? si fa sempre cosi?
Risposte
Dovrai scrivere qualcosa come:
Ma non c'è un solo modo di implementare qualcosa del genere. A volte si vogliono trovare tutte le possibili soluzioni e si considerano tutti i valori possibili.
for (/* possibili valori.. */) { if (chiamataRicorsiva(..)) { return true; // il valore andava bene per cui ho trovato una soluzione.. } }
Ma non c'è un solo modo di implementare qualcosa del genere. A volte si vogliono trovare tutte le possibili soluzioni e si considerano tutti i valori possibili.
grazie ! Cioè cosa intendi con trovare tutte le possibili soluzioni ?Come implemento un metodo in questo modo? Perdon, Sono in difficolta' con questo argomento! Vorrei capire bene questo argomento molto importante!
A volte si desidera ottenere non una, ma tutte le configurazioni che soddisfano la condizione richiesta. Supponi per esempio di avere delle tessere e volerle posizionare in un rettangolo in modo che lo ricoprano totalmente. Il backtracking potrebbe essere usato per ottenere tutte le configurazioni possibili.
ah grazie !!
e rispetto al codice che mi hai scritto sopra? Come si potrebbe scrivere?
