数据结构与算法(一)时间复杂度与空间复杂度

大家好 来自小985的一枚小菜鸡 在这里记录自己学习数据结构与算法的全过程

认识时间复杂度

排序 从0-n-1下标找到一个最小值然后做位置交换 n*C (C为每次遍历一个数的代价)
从1-n-1下标再找到一个最小值再次做位置交换 (n-1)C…1C
所以到排序完成付出的总代价为以上的累加 N(N+1)*C/2=(aN^2+bN+c)*C 其中a、b、c为常数
时间复杂度 不要低阶项 只要高阶项 并且忽略高阶项的系数
所以时间复杂度为O(n^2) 当作一种评价标准
举一个例子 在一个数组中我们设定一个目标值 0 1 2 3 4 4 5 7 9 其中一个目标值为9
我们可以依次把整个数组遍历一遍 时间复杂度为O(n)
我们可以二分查找 每一次我们都可以排除一半 从另外一半中查找 时间复杂度为O(logn)

现由数组A 长度为n 现有数组B长度为m 求数组A和B的公共部分
1.如果每个数组A每个元素都去数组B中遍历一遍 时间复杂度为O(n*m)
2.如果每个数组A每个元素都去数组B中二分遍历一遍 时间复杂度为O(nlogm)
3.可以在A、B中各设置一个指针 哪个小那个往后移动过 如果两个相同则同时向后移动 时间复杂度 则指针最多向后移动n+m次 所以时间复杂度为O(n+m)

认识空间复杂度

传给你一个数组 不算额外空间 预期要拿到的东西 也不算额外空间
为了支持我的流程 我创造了多少辅助空间去得到 我想要拿到的东西
现有一个数组1 2 3 4 5 6 7 给定size长度为L 比如说L长度为5
则原来的顺序为1 2 3 4 5 6 7 目标得到的是6 7 1 2 3 4 5
1.先将前面五个数进行逆序1 2 3 4 5 变成5 4 3 2 1
再将最后两个数 6 7 交换得到7 6 则整个序列为 5 4 3 2 1 7 6
再将整个数据进行逆序 得到6 7 1 2 3 4 5为目标序列
通过逆序这种方式 我们不需要额外空间
2.我们创造一个7个位置的空间 先将后面两个数字写进去 再将前面五个数字写进去 那么我们所创造的额外空间为O(N)

最优解就是在时间复杂度最优的情况下 空间复杂度最低 得到的解是最优解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值