小编Rab*_*OTM的帖子

将算法从 O(2N) 优化到 O(N) 是否会使速度提高两倍?

在 Big-O 表示法中,O(N) 和 O(2N) 描述了相同的复杂度。也就是说,O(2N)的算法时间或空间复杂度的增长率本质上等于O(N)。尤其是与复杂度为 O(N^2) 的算法(给定极大的 N 值)相比,这一点尤其明显。O(N) 呈线性增加,而 O(N^2) 呈二次方增加。

所以我理解为什么 O(N) 和 O(2N) 被认为是相等的,但我仍然不确定是否将这两者视为完全相等。在输入数量 N 为 100 万或更多的程序中,在我看来,将时间复杂度减半实际上会节省大量时间,因为程序可能会少执行数百万个操作。

我正在考虑一个包含两个 for 循环的程序。每个 for 循环都会迭代一个非常大的 N 个元素数组的整个长度。该程序的复杂度为 O(2N)。O(2N) 减少到 O(N),但我觉得只需要一个 for 循环而不是两个的实现会使其成为更快的程序(即使单个 for 循环实现为了速度而牺牲了一些功能) , 例如)。

我的问题:

如果您有一个时间复杂度为 O(2N) 的算法,将其优化为 O(N) 时间复杂度是否会使其速度提高两倍?

换句话说,将 O(2N) 算法优化到 O(N) 是否会带来显着的好处?我想程序的速度会有所增加,或者增加的幅度是否微不足道,以至于不值得付出努力,因为 O(2N) == O(N) ?

optimization big-o time-complexity micro-optimization space-complexity

2
推荐指数
1
解决办法
730
查看次数