Dubbio merge array
Il mio libro mi dà questo pseudocodice per l'unione di due sottosequenze ordinate di un array, indicando con A l'array e con A[x;y] una sottosequenza A[x], . . . , A[y] dell'array. Supponiamo di avere due sottosequenze A[i_1, f_1] A[f_1 + 1; f_2] ordinate e vogliamo unire le due sequenze ordinandole:
Il mio dubbio è nell'if nella penultima riga, non ci dovrebbe essere un minore o uguale? Infatti se considero l'array A=[ 7 15 10 11 ] allora ottengo, con i_1 = 1, f_1 = 2 e f_2 = 4:
PASSO 1: X = [ 7 ] i_1 = 2 i_2 = 3
PASSO 2: X = [ 7 10 ] i_1 = 2 i_2 = 4
PASSO 3: X = [ 7 10 11 ] i_1 = 2 i_2 = 5
Esce dal ciclo, e per l'if finale dovrebbe copiare A[ 5, 4 ] alla fine di X, che è assurdo, invece va bene se c'è un minore o uguale...
algoritmo merge( array A, interi i_1, f_1 e f_2 ) sia X un array di lunghezza f_2 - i_1 + 1 i <- 1 i_2 <- f_1 + 1 while( i_1 <= f_1 and i_2 <= f_2 ) do if( A[ i_1 ] <= A[ i_2 ] ) then X[ i ] = A[ i_1 ] incrementa i ed i_1 else X[ i ] = A[ i_2 ] incrementa i ed i_2 if( i_1 < f_1 ) then copia A[ i_1; f_1] alla fine di X else copia A[ i_2; f_2 ] alla fine di X
Il mio dubbio è nell'if nella penultima riga, non ci dovrebbe essere un minore o uguale? Infatti se considero l'array A=[ 7 15 10 11 ] allora ottengo, con i_1 = 1, f_1 = 2 e f_2 = 4:
PASSO 1: X = [ 7 ] i_1 = 2 i_2 = 3
PASSO 2: X = [ 7 10 ] i_1 = 2 i_2 = 4
PASSO 3: X = [ 7 10 11 ] i_1 = 2 i_2 = 5
Esce dal ciclo, e per l'if finale dovrebbe copiare A[ 5, 4 ] alla fine di X, che è assurdo, invece va bene se c'è un minore o uguale...
Risposte
Scusami: sapresti dirmi più precisamente cos'è X? E' un vettore di supporto o è definito?
Ausiliario
Per l'algoritmo che hai scritto si: così non funziona! Se ci metti il minore o uguale dovrebbe andare