时间复杂度

时间复杂度

  • 时间空间复杂度分析 --> 不使用具体测试数据,粗略估计算法执行效率。不依赖测试环境、效率高、易操作、指导性强。

大O时间复杂度

  1. 表示代码执行时间随数据增长的变化趋势 --> 时间复杂度。

  2. 计算时忽略低阶、常量、系数,只考虑最高阶量级。

  3. 一个算法的时间复杂度,是其量级最高的代码段的复杂度。

  4. 嵌套代码的时间复杂度是其内外代码时间复杂度的乘积。

O(1) :代码中不存在循环、递归等语句

O(logn) O(nlogn):

	> i = 1;
	>
	> while (i<=n){ 
	> ​		i *= 2;
	> ​	}
  • 变量取值为等比数列,最终i为n,2的指数为log2n,时间复杂度o(log2n)。
  • 对数可以相互转换,所有对数阶时间复杂度均为O(logn)。
  • O(logn)的代码循环了n次,时间复杂度便是O(nlogn)。例如:快速排序。

O(m+n),O(m*n):

  • m,n表示两个数据规模,无法比较谁更大时,采用m+n或者m*n。

  • 前者为两个循环分开,后者为两个循环嵌套。

    还有O(n),O(n2),O(n3),O(n!)等等,后边的非多项式阶在数据规模增加时,时间和空间占用骤增,性能极差:阶乘阶、指数阶等。

ps:xbyz:最简单的时间复杂度分析/计算方法是凭感觉。小菜:???

空间复杂度:分析类似时间复杂度,找最大的空间占用代码段。

最好、最坏、均摊、平均时间复杂度

  • 最好:最理想情况下的代码时间复杂度。
  • 最坏:最糟糕情况下的代码时间复杂度。
  • 平均:最理想和最糟糕的情况发生概率不高,在平均情况下就有了它,计算各种情况下的加权平均值。
  • 均摊:真正的“平均”时间复杂度!(特殊的平均时间复杂度and摊还分析)
  • emm:以上四个时间复杂度中前三个不需要区分,后两个都有其特殊的使用场景、情况。
posted @ 2019-10-27 16:46  jimmy-cat  阅读(327)  评论(0编辑  收藏  举报