简述算法中的时间复杂度和空间复杂度

引入类比相关问题:

问题                                            大约花费时间

眨一下眼                                         不到一秒/瞬间

口算“123+34”                                 几秒

烧一壶水                                        几分钟

睡一觉                                            几个小时

完成一个项目                                 几天/几个星期/j几个月

飞船从地球飞出太阳系                   几年

时间复杂度基本概念:

时间复杂度是用来估计算法运行时间的一个例子(单位) 利用大O渐近法

一般来说,时间复杂度越高(越复杂),算法的效率越慢。

常见的复杂度(按照效率依次排序)

->O(1)<O(lgn)<O(n)<O(nlgn)<O(n^2)<O(n^2lgn)<O(n^3)

复杂问题的时间复杂度一般有:O(n!)、O(2^n)、O(n^n)...

O:在数学中表示一个数值的上限,我们可以理解为“大概,大约”

1、n、n^2...:表示一种单位,算法复杂程度

判断一些简单的时间复杂度:

print('Hello World')
print('Hello Python')
print('Hello Algorihm')

 时间复杂度为:O(1)    类似于这种执行打印的代码

for i in range(n):
    print('hello world')
    for j in range(n):
        print('hello world')

 时间复杂度为:O(n^2)  类似于循环嵌套n层时间复杂度就是O(n^n)

引入一个比较重要的时间复杂度(O(logn))

 代码演示:

n=int(input('请输入n的值:'))
while n>1:
    print(n)
    n=n//2

 输出结果:

 

 

 可见:每执行一次循环语句n的值折板(规模减少一半)

2^6=64  循环一共执行6次 

log2 64=6

则:时间复杂度记为O(log2n)或者O(logn)

识别技巧:当算法过程中出现循环折半时,复杂式中会出现logn

如何快速判断算法的时间复杂度:

(适用于绝大多数情况)

确定问题规模 n

循环减半过程 logn

k层循环   n^k

复杂情况:根据算法执行过程判断

引入类比相关问题:

我们都知道,我们在创建一个变量的时候,计算机会为它开辟内存空间。

所以,空间复杂度可以大致理解为,对应内存使用的一个量度。

概念:

空间复杂度:用来评估算法内存占用大小的式子

它与时间复杂度的表示方法一样 采用 大O渐进法

例如常见的判断:

算法使用了几个变量:O(1)

算法使用了长度为n的列表:O(n)

算法使用了m行n列的二维数组:O(mn)

*“空间换时间”   现在的计算机对于内存的使用已经不在关注,内存容易造。

场景:在一个软件中,为了让用户减少等待时间,这时就要考虑“空间换时间”

总结:

编程思想:

程序=算法+数据结构

算法是什么?

可以理解为解决实际问题的办法

数据结构是什么?

可以理解为解决数据存储的问题,用什么数据类型来存储 (比如Python中的列表、元组、字典、集合、数组......)

时间复杂度和空间复杂度是用来衡量算法的优良,执行的效率(与硬件设备...无关)。

一般来讲,时间复杂度占绝大比例,“空间换时间”(内存够大且容易获取)。

这两种复杂度都是一种估计,大约的感觉。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值