【发布时间】:2023-12-02 02:18:01
【问题描述】:
在循环中包含 N 乘法的算法的大 O 表示法是什么。
void testing(int n) {
for(int i =0; i<n;i++) {
n=n*2;
System.out.println("hi"+n);
}
}
【问题讨论】:
-
如果
n开头为零或负数,则立即结束;那是 O(1)。如果n开始为正数,它将一直运行到n溢出,所以我猜......这是一个较慢的 O(1)。 -
这个运行无穷大,假设我们假设整数可以是任意大的,
n > 0。所以这里不存在时间复杂度的概念。 -
@WillemVanOnsem 我们是否假设整数可以任意大?它实际上会很快溢出。
-
@khelwood:显然这一切都取决于某些假设。例如,如果一个人使用
BigIntegers,那么加法/减法/乘法就不会在 O(1) 中运行。但是,如果我们认为整数具有固定大小,那么严格来说,大量程序将在 O(1) 中运行。由于例如 Java 中的数组包含一个具有长度的字段,因此它的大小受到限制,因此对数组求和最多只能求和例如 2^64 项,因此运行恒定。 -
@user2478398 这不是为了分配,只是为了我的好奇心。正如我所看到的,如果循环内部是 n=n/2,它是 o(log n),因为它每次运行时都会减少步长。那么如果每次循环运行时乘法都会增加n。
标签: java time-complexity big-o