gpt4 book ai didi

algorithm - 这个三重嵌套循环的大 O 是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:41 24 4
gpt4 key购买 nike

外循环是 O(n),第二个循环是 O(n^2),第三个循环也是 O(n^2),但第三个循环是有条件的。

这是否意味着第 3 次循环只发生 1/n(每 n 次 1)次,因此总的大 O 是 O(n^4)?

   for (int i = 1; i < n; i++) {
for (int j = 1; j < (n*n); j++) {
if (j % i == 0) {
for (int k = 1; k < (n*n); k++) {
// Simple computation
}
}
}
}

最佳答案

对于 1 到 n 之间的任何给定 i 值,这部分的复杂度:

    for (int j = 1; j < (n*n); j++) {
if (j % i == 0) {
for (int k = 1; k < (n*n); k++) {
// Simple computation
}
}
}

O(n4/i),因为if-条件有 i 次为真。 (注意:如果 i 可以大于 n,那么我们需要写成 O(n4/i + n2) 以包括循环迭代的成本,其中if 条件为假;但由于已知 i 足够小 n4 /in2,我们不需要担心这个。)

因此,将所有 i 值的不同循环迭代加在一起,代码的总复杂度为 O(n4/1 + n4/ 2 + n4/3 + ⋯ + n4/n) = O(n< sup>4 · (1/1 + 1/2 + 1/3 + ⋯ + 1/n)) = O(n4 log n)

(最后一点依赖于这样一个事实,因为 ln(n) 是 1/x 的积分/sub> 从 1 到 n,并且 1/x 在该区间内递减,我们有 ln( n) < ln(n+1) < (1/1 + 1/2 + 1/3 + ⋯ + 1/n) < 1 + ln(n).)

关于algorithm - 这个三重嵌套循环的大 O 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54371920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com