Big-O 表示法和编码

Posted

技术标签:

【中文标题】Big-O 表示法和编码【英文标题】:Big-O Notation and coding 【发布时间】:2013-07-28 12:08:25 【问题描述】:

我正在努力从代码中找出大 O 符号。

我了解基本步骤,即

for (int i = 0; i < n; i++) 将是 O(n)

还有那个

for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) 

将是 O(n2)

我很难理解在哪里或如何计算对数值。

会:

for (int i = 0; i &lt; n * 2; i++)O(log n)O(n log n)O(log 2n)

谁能以代码形式演示一个例子以及符号是如何形成的。

我已经研究并不断获得涉及排序和列表被切碎等的示例,这在表单中是有意义的,但我似乎不知道如何将其应用于上述代码。

我对整个编码和大符号表示法是新手。

我熟悉对象、类、循环、函数、结构等。 我正忙于学习 c++,因为它是我课程的一部分。 我的教科书没有很好地或几乎没有解释对数 big-o 计算。

【问题讨论】:

您的问题可能会在programmers.stackexchange.com 上得到更好的答案。 这是O(n),因为你做了2n 步骤。 开始划分区间时会出现对数,例如二分法搜索;当您使用平衡的树木(修剪左或右早午餐)等时 This question 真的很有帮助。至少这是一个好的开始。 @user2485710 ctheory 适用于研究级别的问题。 cs 会更好。 【参考方案1】:

可以将代码表示为递归关系:

T(n) = T(n-1) + 2 * c, where c = the inner part of the code,

我们将这样做2 * n 次。

为我们提供解决方案,例如: T(n) = 2 c n + c_1, where c_1 a constant

由于2 * c是一个常数,而第二项,也是一个常数,我们可以这样写:

O(n)

【讨论】:

您好,请在代码中添加一些格式,以便于阅读/理解。查看here 了解更多信息。

以上是关于Big-O 表示法和编码的主要内容,如果未能解决你的问题,请参考以下文章

用于迭代列表中步骤的 Big-O 表示法-Python

数据库索引及其 Big-O 表示法

在树结构的 Big-O 表示法中:为啥有些来源引用 O(logN) 而有些引用 O(h)?

Java Collections Framework 实现的 Big-O 总结? [关闭]

带有嵌套 if 语句的 while 循环的 Big-O 运行时

仍然不了解 Big-O 与最坏情况时间复杂度