我正在研究算法,我遇到了一个问题,我无法解决。
for(int i = 0; i < n; i++)
for( int j = 0; j < i; j++)
sum++;
因此,此代码的时间复杂度为n ^ 2。但。第一个循环迭代n次,我明白了。但第二个是迭代n(n + 1)/ 2。所以..它变成n *(n(n + 1))/ 2。哪里出错了?
答案 0 :(得分:3)
首先你需要了解Big-O表示法。它会抛出所有低阶项,并且仅保留最高N
。
您的外循环运行N
次,因此最高项为n
,内循环的最高value
是多少?它是(n-1)
。
因此对于外部循环的Nth
迭代,你得到n-1
内循环的N(N-1) = (N^2 - N)
迭代,O(N^2)
和big-O const db = require('../lib/DB').default;