Ho riscontrato questo problema "Implementare questo metodo per restituire la somma dei due numeri più grandi in un determinato array."Algoritmo complessità
ho risolto in questo modo:
public static int sumOfTwoLargestElements(int[] a) {
int firstLargest = largest(a, 0, a.length-1);
int firstLarge = a[firstLargest];
a[firstLargest] = -1;
int secondLargest = largest(a, 0, a.length-1);
return firstLarge + a[secondLargest];
}
private static int largest(int s[], int start , int end){
if (end - start == 0){
return end;
}
int a = largest(s, start, start + (end-start)/2) ;
int b = largest(s, start + (end-start)/2+1 , end);
if(s[a] > s[b]) {
return a;
}else {
return b;
}
}
Spiegazione: ho implementato un metodo 'largeset'. Questo metodo è responsabile per ottenere il numero più grande in un determinato array.
Io chiamo i tempi di rimorchio metodo nello stesso array. La prima chiamata otterrà il primo numero più grande. Lo metto da parte in variabile e lo sostituisco con il numero "-1" nell'array. Quindi, chiamo il più grande secondo tempo.
Qualcuno può dirmi qual è la complessità di questo algo? per favore
Potete trovare entrambi i numeri nel primo passaggio e risparmiare il secondo passaggio. Non cambierà la complessità ma funzionerà più velocemente. :-) – assafmo
+1 per il commento sopra. Inoltre, se si tratta solo di una lista di numeri, ci sono vari altri modi per risolvere la stessa cosa ... se si usa un meccanismo come il conteggio sort ecc con uno spazio extra trascurabile e una complessità temporale O (n) ... – dharam
La misura reale di complessità è quella dei futuri lettori di questo codice, il tempo che trascorrono a capire come funziona, quando un algoritmo molto più semplice farà il lavoro. Non c'è un chiaro vantaggio per la ricorsione, o perché sono necessari due passaggi attraverso il set.E l'algoritmo è fondamentalmente rotto (restituisce un risultato errato) quando i due più grandi numeri interi dell'array sono entrambi inferiori a -1. Accckkk! – spencer7593