我更喜欢尽可能少的正式定义和简单的数学。
当前回答
什么是“大O”笔记的明确英语解释?
在“大O”中,意思是“命令”(或准确地说“命令”),所以你可以从字面上得到它的想法,它是用来命令一些东西来比较它们。
“大O”做两件事:估计你的计算机适用于完成一个任务的方法的步骤多少。 方便这个过程与其他人进行比较,以确定它是否好? “大O”通过标准化评分实现上述两件事。 有七个最常用的评分O(1),这意味着你的计算机得到一个任务完成1步,这是很好的, 订单 No.1 O(logN), 平均值
此分類上一篇
请注意订单在线结束,只是为了更好地理解。有超过7个评分,如果所有可能性考虑。
概述“大O”描述算法的性能,并评估它;或者正式处理它,“大O”分类算法并标准化比较过程。
其他回答
大 O 评分最常被编程者用作计算(算法)将需要多长时间完成的约定测量,表达为输入组的尺寸的函数。
在许多情况下,一个算法的“O”将落入下列情况之一:
O(1) - 完成时间是相同的,无论输入组的尺寸. 一个例子是通过指数访问一个序列元素. O(Log N) - 完成时间增加大约与 log2(n)相匹配。 例如, 1024 个元素需要大约两倍的长度为 32 个元素,因为 Log2(1024) = 10 和 Log2(32) = 5. 一个例子是找到一个元素在二进制搜索树(BST)。
大 O 忽略了没有有意义的因素,因为输入尺寸向无限增加,而函数的增长曲线,这意味着由函数添加或加倍的恒数只是被忽略。
仅仅是以快速而简单的方式表达一个算法的复杂性。 大 O 评分存在,以解释任何算法的最佳、最糟糕和平均案例时间复杂性。
否则,与这些功能工作是非常困难的,因为它们倾向于:
有太多的泡沫 - 像二进制搜索这样的算法通常运行得更快,因为序列分区工作得很好,因为 n = 2k − 1 的尺寸,因为序列分区工作得更快。 这个细节并不特别重要,但它警告我们,任何算法的准确时间复杂性功能可能非常复杂,如图2.2 所示,有很少的上下泡沫。
https://mimoza.marmara.edu.tr/~msakalli/cse706_12/SkienaTheAlgorithmDesignMan ual.pdf
statement;
是持久的. 声明的运行时间不会与 N 相比变化
for ( i = 0; i < N; i++ )
statement;
for ( i = 0; i < N; i++ )
{
for ( j = 0; j < N; j++ )
statement;
}
是四角形的,两条路的运行时间相当于N的平面,当N翻倍时,运行时间增加为N * N。
while ( low <= high )
{
mid = ( low + high ) / 2;
if ( target < list[mid] )
high = mid - 1;
else if ( target > list[mid] )
low = mid + 1;
else break;
}
算法的运行时间是相当于 N 可以分为 2 次的次数。
void quicksort ( int list[], int left, int right )
{
int pivot = partition ( list, left, right );
quicksort ( list, left, pivot - 1 );
quicksort ( list, pivot + 1, right );
}
是 N * log ( N ). 运行时间由 N 轮子(以色列或重复)组成,它们是 logarithmic,因此算法是线性和 logarithmic 的组合。
一般来说,做某些东西与每个项目在一个维度是线性的,做某些东西与每个项目在两个维度是四方的,并将工作区域分成一半是逻辑的。 还有其他大 O 测量,如圆形,曝光,和平方根,但它们不被报告为常见。 大 O 评分被描述为 O( )在哪里是测量。
查看更多: 这里
大O只是一种方式来“表达”自己,以一种常见的方式,“运行我的代码需要多少时间/空间?”
因此,你可能明白“n2”是什么意思,但要更具体,玩你的想法,你有一个简单的,最简单的分类算法;泡沫分类。
我的名单
比较 1 和 6 是最大的? Ok 6 是正确的位置,前进! 比较 6 和 3, oh, 3 是更少的! 让我们移动, Ok 列表改变了,我们需要从现在开始!
為每個項目,你再看所有項目一次,為比較,這也是“n”,所以為每個項目,你看“n”時刻意味著n*n = n2
我希望这就像你想要的那样简单。
预告片
算法:解决问题的程序/公式
如何分析算法,如何比较算法?
例如:你和一个朋友被要求创建一个函数,将数字从 0 到 N. 你与 f(x) 和你的朋友与 g(x) 相同的结果,但两个函数有不同的算法。
Big-O 评分:描述运行时间将与输入相对增长的速度,因为输入随意大。
三个关键点:
比较运行时间的增长速度 不要比较准确的运行时间(取决于硬件) 只关心运行时间的增长与输入(n) 因为n 随意大,专注于将增长最快的术语,因为n 得到大(想想无限) AKA 无形分析
空间复杂性:除了时间复杂性之外,我们也关心空间复杂性(一个算法使用的内存/空间多少)。