Вы можете фактически посчитать, сколько раз внутренний цикл выполняется в простом случае, подобном этому.Это даст хорошее представление об асимптотическом поведении при изменении n
.Вот быстрый пример JavaScript:
function count(n) {
let count=0;
for(i=1; i<n; i=i*2)
{
for(j=0;j<n;j++)
{
count++
}
}
return count
}
let n = 1024
console.log("n:", n, "iterations:", count(n),"nlog(n):", Math.log2(n) * n)
n = 32768
console.log("n:", n, "iterations:", count(n),"nlog(n):", Math.log2(n) * n)
n = 1048576
console.log("n:", n, "iterations:", count(n),"nlog(n):", Math.log2(n) * n)
Поведение выглядит как O (nlog (n)) для меня.Кроме того, очевидно, что выполнение log(n)
циклов, каждое из которых выполняет n
итераций, будет O(nlog(n))
, поскольку n * log(n) === log(n) * n