刷Leetcode数据结构&算法-DW组队学习(1)

数据结构

逻辑结构 集合结构 数据元素同属于一个集合 线性结构 数据元素间一对一关系 树形结构 数据元素间一对多关系 图形结构 数据元素间多对多关系 物理结构 顺序存储结构 数据元素存放在地址连续的存储单元里 链式存储结构 数据元素之间的逻辑关系通过指针间接反映

对好的算法的评判标准:所需运行时间更少(时间复杂度更低)

                                        占用内存空间更小(空间复杂度更低)


时间复杂度 T(n)=O(n)

O(1)<O(\log_{2}n)<O(n)<O(n\log_{2}n)<O({\color{Orchid} n^{2}})<O({\color{Purple} {\color{Orchid} n^{3}}})<O({\color{Orchid} {2}^{n}})<O(n!)<O({\color{Orchid} n^{n}})

O(n!) 

阶乘时间复杂度一般出现在与「全排列」相关的算法中。这类算法随着问题规模 n 的增大,对应计算次数呈阶乘关系增长。如:递归

O(\log_{2}n)

对数时间复杂度一般出现在「二分查找」、「分治」这种一分为二的算法中。这类算法随着问题规模 n 的增大,对应的计算次数呈对数关系增长。

def algorithm(n):
	cnt = 1
	while cnt < n:
		cnt *= 2
	return cnt

while 循环体中 cnt 从 1 开始,每循环一次都乘以 2。当大于 n 时循环结束。变量 cnt 的取值是一个等比数列:2^0,2^1,2^2...2^x,根据 2^x=n,可以得出这段循环体的执行次数x=\log_{2}n

O(n\log_{2}n)

线性对数一般出现在排序算法中,例如「快速排序」、「归并排序」、「堆排序」等。这类算法随着问题规模 n 的增大,对应的计算次数呈线性对数关系增长。

def algorithm(n):
	cnt = 1
	res = 0
	while cnt < n:
		cnt *= 2
		for i in range(n):
			res += 1
	return res

上述代码中外层循环的时间复杂度为 O(\log_{2}n),内层循环的时间复杂度为 O(n),且两层循环相互独立,则总体时间复杂度为 O(n\log_{2}n)。


 空间复杂度S(n)=O(n)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值