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 < 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 表示法中:为啥有些来源引用 O(logN) 而有些引用 O(h)?
Java Collections Framework 实现的 Big-O 总结? [关闭]