算法时间复杂度_算法第一步之时间复杂度

56834c1fff3932e522a7c93d860772a5.png

前言

算法的效率主要取决于时间复杂度和空间复杂度,我们一步一步来搞懂算法时间复杂度。

定义

在计算机科学中,算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。——维基百科

有点没搞懂?我们来用C++简单举例来说明。

实例

include<iostream>
using namespace std;
int main()
{
  int n = 10;
  for (int k = 0; k < n; k++) {
    cout<<"Hello World"<<endl;
  }
  return 0;
}

单位运行时间

为了计算时间复杂度,我们通常会估计算法的操作单元数量,每个单元运行的时间都是相同的。——维基百科

这段代码包括了5条语句,分别是int n = 10int k = 0k < nk++cout<<"Hello World"

前面已经讲了,时间复杂度是描述程序运行时间的,那我们就约定赋值语句int n = 10每执行一次消耗的时间为1个单位时间。由于判断语句n < k总共要进行n+1次,所以消耗时间为n+1。同理可以得出:

c6be5588ca887708573f4c7d088cea61.png

在程序运行完后,总时间 T = 3*n+3

时间复杂度是一个函数

算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。——维基百科

由于 T = 3*n+3 ,所以T(n)可以看作是关于 n 的一个函数。n 可以认为是输入的字符数量,即自变量。

时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。——维基百科

但大多数程序的算法可没有那么简单,所以就要对函数进行简化。,这里涉及到一点极限思想。当输入值(可认为是输入的字符数量)是无穷的时候,我们 只需要定性的描述,不考虑函数的较低阶项和最高项系数 ,所以函数就变为 T(n)=n。我们用大 O 来表示这种关系,即 O(n)

常见时间复杂度

时间复杂度可以用函数 T(n) 的自然特性加以分类,比如有着 T(n) = O(n) 的算法被称作“线性时间算法”

474095a5468b37fb28c98b36130b0d4d.png

复杂度比较: O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!)

时间复杂度的计算

暂未更新...

声明

文章首发于 算法(1)之时间复杂度

本文参考了 维基百科-时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值