被算法入门拦住的那些年--时间复杂度

小明之前一直没有系统学习算法,只是把函数和包拿来调用做数分,主要还是对于统计概念的一些学习,至于代码一向是需要什么包直接现场百度就好了,但最近发现我的公司的数分只是没有技术含量的工具人、只是做些相关验证或者数据趋势分析是很容易被取代的,垃圾老板还每天pua搞得小明有点抑郁,因为经常窝里横的冲亲人发火; 小明深刻反思自己,决定提高自己的知识储备(也可能只是一时兴起,学了两天觉得很累就放弃了,因为这件事情多次发生在小明身上,例如之前的减肥、健身、养生、学摄影等等,但是总之此刻痛下决心),也许从数分看看能不能转为大数据,为跳槽or装逼做准备,因此决定刷刷算法题,结果发现题目中有些名词是根本不知道,我哭死,于是这个合集出现了

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

这听起来有点绕,所以我们在例子中理解

例如

class Num:

    def aaa(i):

       i=1

       if i<=10:

          i+=1

       else:

          break

i从1增加到n之后程序停止,在这个题目里我们需要计算10-1次,那么最多计算t=9,我们就可以理解为时间负责度是O(9),常数在时间复杂度的计算中是被约掉的,因此我们记该程序段时间复杂度为O(1),也可被称为具有常数时间

class Num:

    def aaa(i, n: int):

         i=1

        if i<=2n:

          i+=1

        else:

          break

在这个题目里我们最多需要计算n-1次,那么t=n-1,我们就可以理解为时间负责度是O(2n-1),常数和频度在时间复杂度的计算中是被约掉的,因此我们记该程序段时间复杂度为O(n)

class Num:

    def aaa(i, n: int):

i=1

if i<=n:

          i=i^2

else:

          break

第一次计算时 t=1  i=1 i<n, i=1*2

第二次计算时 t=2  i=2 i<n, i=1*2*2

第t次计算时 t=t  i=1*2^t, i>n,运算停止,那么2^t>n, t>log_2(n);

i从1增加到log_2(n)之后程序停止,在这个题目里我们最多需要计算log_2(n)次,那么t=log_2(n)-1,我们就可以理解为时间负责度是O(log_2(n)),常数和常数因子在时间复杂度的计算中是被约掉的,因此我们记该程序段时间复杂度为O(log n)

class Num:

    def factorial_def(n:int):

        if  n>1:

            return n*Num.factorial_def(n-1)

        elif n==1:

            return 1

计算时从n乘到1之后程序停止,在这个题目里我们最多需要乘n次,那么t=n, 我们就可以理解为时间负责度是O(n)

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值