Sto lavorando per l'analisi della classe degli algoritmi per la prima volta e mi chiedevo se qualcuno potesse fornire assistenza nell'esempio seguente. Credo di averlo risolto per una complessità O (n), ma mi chiedevo se c'è una versione migliore che non sto pensando a O (logn)?Analisi degli algoritmi - Trova numero intero mancante nella matrice ordinata meglio di O (n)
Siano A = A [1] = < ... < = A [n + 1] tramite un array ordinato di interi n distinte, in cui ogni intero è nell'intervallo [1 ... n + 1]. Cioè, manca esattamente un numero intero di {1, ..., n + 1} da A. Descrivi un algoritmo di efficeint per trovare il numero intero mancante. Analizza la complessità del caso peggiore (numero di accessi all'array A) del tuo algoritmo.
La soluzione che ho è relativamente semplice, e credo che nel peggiore dei casi sia N la complessità. Forse sto pensando troppo all'esempio, ma c'è una soluzione migliore?
mia soluzione
for(i = 1; i < n +1; i++) :
if(A[i-1] > i) :
return i
La logica dietro questa è quanto è ordinato, il primo elemento deve essere 1, il secondo deve essere 2, e così via e così via, finché l'elemento nella matrice è più grande dell'elemento che si suppone essere, indicando che un elemento è stato perso, restituisce l'elemento che dovrebbe essere e ne abbiamo uno mancante.
Questa logica è corretta? C'è un modo migliore per farlo?
Grazie per la lettura e grazie in anticipo per l'assistenza.
Sì. C'è una soluzione migliore. Suggerimento: devi VERAMENTE dover guardare ogni elemento dell'array? – aquinas
Per favore, ripulisci la tua affermazione del problema? (1) Se le A sono distinte, ciò significa che non sono uguali; quindi perché non dire semplicemente "A [1] Scott