您如何计算内部具有功能的功能的时间复杂度?
How do you calculate time complexity for a function that has function within?
我不确定问这样一个基本问题是否合适,但我只是想知道如何计算一个内部有另一个函数的函数。
根据我对大O表示法的理解,如果只有多个非嵌套的for循环,那么就是O(n),并且根据嵌套循环的数量,增加n的平方。
但是当函数中有辅助函数以及 while 循环和 for 循环时,像下面这样的函数怎么样。
function solution(nums) {
let container = [];
let zero = 0;
let one = 1;
let two = 2;
let answer = 0;
function isPrime(n) {
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false;
}
}
return true;
}
while (nums) {
container.push(nums[zero] + nums[one] + nums[two]);
two++;
if (two === nums.length) (one++, two = one + 1);
if (one === nums.length -1) (zero++, one = zero + 1, two = one + 1);
if (zero === nums.length-2) break;
}
for (let i = 0; i < container.length; i++) {
if (isPrime(container[i]) === true) answer++;
}
return answer;
}
我读过几篇关于它的文章,我猜上面的函数是 O(n log n)?很抱歉问这个问题。我是初学者,我没有社区或任何人可以问。我一直听说这个地方是获得编程问题答案的“地方”。
提前致谢!!
复杂度为O(n^2)
。
内部函数的 (isPrime()
) 复杂度本身是 O(i)
,其中 i
是它的输入。
由于容器中的每个值都会调用isPrime()
,而容器中包含O(n)
个元素,在上一个循环中被填满后,它要做的操作总数是: O(1 + 2 + 3 + ... + n)
.
现在,1 + 2 + .... + n
是 Sum of arithmetic progression,它本身在 O(n^2)
中,因此你的解决方案 () 是 O(n^2)
。
我不确定问这样一个基本问题是否合适,但我只是想知道如何计算一个内部有另一个函数的函数。
根据我对大O表示法的理解,如果只有多个非嵌套的for循环,那么就是O(n),并且根据嵌套循环的数量,增加n的平方。
但是当函数中有辅助函数以及 while 循环和 for 循环时,像下面这样的函数怎么样。
function solution(nums) {
let container = [];
let zero = 0;
let one = 1;
let two = 2;
let answer = 0;
function isPrime(n) {
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false;
}
}
return true;
}
while (nums) {
container.push(nums[zero] + nums[one] + nums[two]);
two++;
if (two === nums.length) (one++, two = one + 1);
if (one === nums.length -1) (zero++, one = zero + 1, two = one + 1);
if (zero === nums.length-2) break;
}
for (let i = 0; i < container.length; i++) {
if (isPrime(container[i]) === true) answer++;
}
return answer;
}
我读过几篇关于它的文章,我猜上面的函数是 O(n log n)?很抱歉问这个问题。我是初学者,我没有社区或任何人可以问。我一直听说这个地方是获得编程问题答案的“地方”。
提前致谢!!
复杂度为O(n^2)
。
内部函数的 (isPrime()
) 复杂度本身是 O(i)
,其中 i
是它的输入。
由于容器中的每个值都会调用isPrime()
,而容器中包含O(n)
个元素,在上一个循环中被填满后,它要做的操作总数是: O(1 + 2 + 3 + ... + n)
.
现在,1 + 2 + .... + n
是 Sum of arithmetic progression,它本身在 O(n^2)
中,因此你的解决方案 () 是 O(n^2)
。