Какова временная сложность секунды для l oop в следующем вложенном l oop? - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь проанализировать время выполнения (Big-Oh) некоторых фрагментов кода и следующий, с которым у меня возникают проблемы:

for(i=0; i<n; i++){
    for(j=0; j<i*i; ++j) { 
         //random stuff here costs O(1)
    }
}

Первый l oop - это O (n ) но во втором l oop, я * я сбрасываю меня. Какова временная сложность для второго l oop? Пожалуйста, не указывайте общую сложность времени, так как это могло бы дать ответ целиком. Только советы, советы или ресурсы будут полезны! Спасибо!

1 Ответ

0 голосов
/ 11 января 2020

Давайте проанализируем, что i*i на каждом шаге. Сначала его 0, затем 1, затем 4, затем 9 ...

Итак, в общем мы смотрим на

enter image description here

Это Это хорошая новость, есть закрытый от этого суммирования, вы можете доказать правильность путем индукции в качестве упражнения. Здесь я считаю само собой разумеющимся, что

k=1∑n​kk=1∑n​k2k=1∑n​k3​=2n(n+1)​=6n(n+1)(2n+1)​=4n2(n+1)2​.​

И если вы знакомы с big-O, легко увидеть, как мы пришли к выводу, что O является O ( п ^ 3). Вот еще чтение некоторых общих сумм, которые часто встречаются в CS, я рекомендую взглянуть https://brilliant.org/wiki/sum-of-n-n2-or-n3/

...