Próbuję znaleźć sposób na zoptymalizowanie mojego algorytmu tak, aby czas działania był równy O (n²) (Big O Notation).Optymalizacja czasu pracy algorytmu
Dane wejściowe to tablica zawierająca n elementów, tylko dodatnich i ujemnych liczb całkowitych. Możemy założyć, że tablica jest już posortowana.
Muszę określić: dla każdego r (elementu tablicy), czy r = s + t, gdzie s i t są również elementami tablicy i mogą być takie same (s == t), lub także zero.
Próbowałem zmniejszyć liczbę elementów, które muszę sprawdzić, sprawdzając, czy aktualny numer jest dodatni czy ujemny, ale czas działania jest nadal zbyt długi. Problem polega na tym, że używam 3 pętli, co oznacza już czas działania O (n³) w najgorszym przypadku.
Tutaj jest kod:
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;
}
to jest praca domowa – Snelfie
Najpierw dodaj wszystkie elementy z tablicy do HashSet, następnie wykonaj iterację przez s i t i sprawdź, czy s + t jest prezentowany w Twoim zestawie. – x1Mike7x
Nie należy używać formatowania kodu jako podświetlania, co utrudnia czytanie. –