Я изучаю, как делать временную сложность в школе, и профессор загрузил несколько примеров. Для первого примера ниже ответ должен быть O (n^3), но я не понимаю, как это сделать.Big O - Не понимаете сложность времени для этих алгоритмов?
public static int fragment1 (int n)
{
int sum = 0;
for (int i = 1; i <= n*n; i++)
for (int j = 0; j*j < i; j++) sum++;
return sum;
} // end fragment1
Когда я пытаю проблему, я смотрю на первый цикл и увидеть, что он работает п^2 раза, то внутренний цикл также п^2. При добавлении я получаю O (n^4).
public static int fragment5 (int n)
{
int sum = 0;
for(int i=0; i < n*n*n; i++)
{
if(i%(n*n) == 0) {
for(int j=i*i; j > 0; j--)
sum++;
} // if
else
{
for(int k=0; k < i: k++)
sum++;
} // else
} // outer loop
}
Для решения проблемы выше должен быть O (n^7). Когда я попытался, я получил: сначала для циклов пробегает n^3 раза, внутренний для цикла n^3 * n^3 = n^6, а цикл for внутри оператора else я получаю n, а мой окончательный ответ - O (n^10). Может ли кто-нибудь дать мне советы по вышеуказанной проблеме? Я чувствую себя невежественным, когда дело доходит до этого, и до сих пор я получал другие проблемы.
Для первого примера, являются п и J-то связаны? Есть ли дополнительная информация к проблеме? Внешний цикл работает n^2 раза, но внутренний цикл работает j^2 раза. Если n == j, вы не можете сказать, что они объединяются с n^4. – Ali
Это не серьезные алгоритмы - это всего лишь трюки, чтобы научить вас сложности, которые вам нужно будет узнать для себя. Я уверен, что есть помощник преподавателя, который может вам помочь. Подсказка, например, 1, вы говорите «тогда внутренний цикл for также n^2» - неправильно. Посмотрите, что на самом деле говорит цикл. Он не говорит 'j
Большие подсказки для Q1: Попробуйте интегрировать x^(1/2) от x = 1 до n^2 Для Q2: Худший случай находится в блоке 'if', и попытайтесь выяснить, сколько раз будет Цикл 'j' происходит, если подумать, сколько раз условие' if' будет истинным. – shole