Sto cercando di trovare un modo per ottimizzare il mio algoritmo in modo tale che il tempo di esecuzione sia O (n²) (Notazione Big O).Ottimizzazione del tempo di funzionamento dell'algoritmo
L'input è una matrice con n elementi, di soli numeri interi positivi e negativi. Possiamo presumere che l'array sia già ordinato.
Devo determinare: per ogni r (elemento della matrice), se r = s + t, dove s e t sono anche elementi della matrice e possono essere uguali (s == t), o anche zero.
Ho provato a ridurre il numero di elementi che devo controllare controllando se il numero corrente è positivo o negativo, ma il tempo di esecuzione è ancora troppo lungo. Il problema è che sto usando 3 cicli while che significa già un tempo di esecuzione di O (n³) per il caso peggiore.
Ecco il mio codice:
public static void Checker(int[] array) {
List<Integer> testlist = new ArrayList<Integer>();
int i = 0;
while (i < array.length) {
int current = array[i];
if (attached(current, array)) {
testlist.add(current);
}
i++;
}
}
public static boolean attached(int current, int[] array) {
boolean result = false;
int i = 0;
while (i < array.length && !result) {
int number1 = array[i];
int j = 0;
while (j < array.length && !result) {
int number2 = array[j];
if (number1 + number2 == current) {
result = true;
}
j++;
}
i++;
}
return result;
}
questo è i compiti – Snelfie
In primo luogo, aggiungere tutti gli elementi dell'array a HashSet, quindi scorrere su s e t e verificare se s + t è presente nel set. – x1Mike7x
Si prega di non utilizzare la formattazione del codice come evidenziazione, rende le cose molto difficili da leggere. –