跳到内容
相关文章

相关文章

算法分析|设置4(循环分析)
  • 难度级别 :容易
  • 最近更新时间 :2019年5月,08年

我们已经讨论了渐近分析,最坏,平均和最好的情况渐近符号在以前的职位。在这篇文章中,用简单的例子讨论迭代程序的分析。

1) O (1):如果一个函数(或一组语句)不包含循环、递归和调用任何其他非常数时间函数,则将其时间复杂度视为O(1)。

//一组非递归和非循环语句

例如Swap()函数时间复杂度为O(1)。
运行常量次数的循环或递归也被认为是O(1)。例如,下面的循环是O(1)。

//这里c是一个常量for (int i = 1;我< = c;i++){//一些O(1)表达式}

2)O(n):如果循环变量增加/减少一个常量,那么循环的时间复杂度被认为是O(n)。例如,以下函数的时间复杂度为O(n)。

//这里c是一个正整数常量(int i = 1;我< = n;i += c){//一些O(1)表达式}for (int i = n;我> 0;i -= c){//一些O(1)表达式}

3) O (nc):嵌套循环的时间复杂性等于执行内部语句的次数。例如,以下样本循环有O(n2)时间复杂性



For (int I = 1;我< = n;I += c) {for (int j = 1;j < = n;j += c){//一些O(1)表达式}}for (int i = n;我> 0;I -= c) {for (int j = I +1;j < = n;j += c){//一些O(1)表达式}

例如选择排序插入排序有O (n2)时间复杂性。
4)O(LOGN)如果循环变量除以/乘以一个常量,则认为一个循环的时间复杂度为O(Logn)。

For (int I = 1;我< = n;i *= c){//一些O(1)表达式}for (int i = n;我> 0;i /= c){//一些O(1)表达式}

例如二叉搜索(参考迭代实现)时间复杂度为O(Logn)。我们从数学上看,它是O(Log n)我们在第一个循环中得到的级数是(1,c, c2, C3.c,……k。如果让k等于LogcN,得到c日志cn这是n。
5)o(loglogn)如果循环变量以常量数量递减/增加/增加,则循环的时间复杂性被视为O(loglogn)。

//这里c是一个大于1的常数(int i = 2; i <= n; i = pow(i,c)){//某些o(1)表达式} //这里有趣是sqrt或cuberoot或任何其他常量root for(int i = n; i> 1; i = fun(i)){//一些O(1)表达式}

看到用于数学细节。
如何组合连续循环的时间复杂度?
当存在连续循环时,我们将单个循环的时间复杂度计算为时间复杂度之和。

For (int I = 1;我< = m;i += c){//一些O(1)表达式}for (int i = 1;我< = n;i += c){//某些O(1)表达式}上述代码的时间复杂度为O(m) + O(n),即O(m+n)如果m == n,则时间复杂度为O(2n),即O(n)。

如何计算时间复杂度时,有许多if, else语句循环?
正如所讨论的那样这里,最糟糕的时间复杂性是最有用的,平均和最差。因此,我们需要考虑最坏的情况。我们评估当IF的值(ISE)条件中的值导致最大数量的语句。
例如,考虑线性搜索功能我们考虑在结束时或根本不存在的元素存在时考虑这种情况。
当代码太复杂时要考虑所有IF - 其他情况,我们可以通过忽略IF和其他复杂的控制语句来获得上限。
如何计算递归函数的时间复杂度?
递归函数的时间复杂性可以写成数学复发关系。要计算时间复杂性,我们必须知道如何解决复发。我们很快将讨论重复解决技术作为单独的帖子。

算法测验算法分析

下一个,算法分析|设置4(解决复发)

如果您发现任何不正确的任何内容,请写出评论,或者您想要共享有关上面讨论主题的更多信息。

关注读者!现在不要停止学习。掌握所有重要的DSA概念DSA自我节奏课程以学生友好188bet2021欧洲杯的价格,成为工业准备。

我个人的笔记 arrow_drop_up
推荐的文章
页面: