Это для метода find (...)
Вы знаете, лучший и худший случай довольно легко:
Лучший случай, когда элемент, который выищем это первый элемент в массиве.В этом случае требуется всего 1 итерация, чтобы найти ваш элемент, O(1)
постоянное время.
Аналогичным образом, наихудший случай - это когда искомого элемента не существует в массиве, поэтому вы выполняете итерациювесь массив просто ничего не найти.В этом случае требуется n итераций (где n - размер массива), O(n)
линейное время.
Наихудший случай определяется довольно легко в большинстве случаев.Вы можете просто посмотреть на вложенные циклы.Если у вас есть x
количество вложенных циклов, где все циклы итерируют по массиву за линейное время, тогда ваша временная сложность равна O (n ^ x).Таким образом, в replaceAll (...) у вас есть 2 вложенных цикла (while
и for
из вашего find(...)
метода), что означает сложность O(n^2)
наихудший случай для replaceAll(...)
Длясредний регистр:
Я написал тест для вашей find(...)
функции:
public static void main(String[] args) {
int iterationsTotal = 0;
int timesTested = 100000;
//Test 1000 times
for(int i = 0; i < timesTested; i++) {
int n = 100; //Array size to test
int[] array = new int[n];
//Populate the array
int j = 0;
for(j = 0; j < array.length; j++) {
array[j] = (int)(Math.random() * 100);
}
//You can search for any number, even 99. It will always result in 25 average.
iterationsTotal += find(array, 5);
}
System.out.println(iterationsTotal / timesTested);
}
Приведенный выше код проверяет вашу функцию поиска 100 000 раз.Он вычисляет среднее количество итераций, которое он принял, и обычно составляет ~ 25 каждый раз, когда я его запускаю.Используя массив размером 100, в среднем 25 итераций, чтобы найти элемент, который вы ищете.Это приходит к O(n/4)
, где n = размер массива, в данном случае 100. Это так же хорошо, как O (n) ( Зачем игнорировать константы при вычислении сложности времени выполнения алгоритма ).Таким образом, средний случай будет O (n) для вашего find(...)
алгоритма.Вы можете сделать то же самое для replaceAll(...)