salve a tutti, sto cercando di fare un esercizio sull'approccio divide et impera per risolvere i problemi, ma mi sono incasinato su questo:
Scrivere un algoritmo divide et impera che, dato in input un array A, sposta ogni suo elemento di una posizione a destra (l’elemento in posizione N sarà spostato in posizione 1)
Esempio:
Se A=[8, 3, 10, 7, 9, 6, 2] al termine dell’esecuzione si avrà A=[2, 8, 3, 10, 7, 9, 6]
è semplice, ma non ci arrivo
sto provando a farlo in java, anche prendendo spunto da come è fatto mergesort, ma niente... l'unica cosa che riesco ad ottenere è il ribaltamento degli elementi, ma non quello chiesto dalla consegna, avete qualche suggerimento? grazie in anticipo
Mah, dovrebbe bastarti passare ricorsivamente mezzo array + mezzo array all'algoritmo.
Cioe' insomma:
int Conta(Array A, Array B)
{
if (Lunghezza(A) > 1)
return Conta(PrimaMeta'A, PrimaMeta'B) + Conta(SecondaMeta'A, SecondaMeta'B);
if (A[0] = B[0])
return 1;
return 0;
}
Quello che non capisco e' perche in tutti questi esercizi tenti di risolvere con il divide et impera un problema che gia' di suo si risolve in O(n).
Per curiosita', il precedente come l'hai risolto ?
beh non è che sono io che tento di farlo cosi, è la consegna dell'esercizio che me lo impone
quello precedente l'ho risolto sostituendo il primo elemento della prima metà con il primo elemento della seconda metà però ho usato lo stesso schema della mergesort...ovvero una procedura che divide in 2 l'array e alla fine una procedura che prende in input l'array e i 3 indici(inizio, centro, fine) ed effettuo la sostituzione degli elementi...e funziona...
e naturalmente stavo cercando di risolvere anche il secondo cosi, ma mi incasino di brutto...però guardando il tuo algoritmo mi rendo conto che sono io che non ho capito granchè su come impostare un algoritmo divide et impera pensavo dovessero presentare tutti una struttura simile a mergesort
in teoria dividere e imperare dovrebbe semplificare la vita non complicarla. Così non è che impari molto il suo vero utilizzo XD se un algoritmo si può scrivere in 5 righe di codice perchè complicarlo suddividendolo in parti ancora più piccole ? O_O
Se è per questo, io ho dovuto usare Java Enterprise per scrivere un sistema con le "Transazioni" (Commit, Rollback)... senza poter usare i metodi già in libreria Java Enterprise!