1.算法的学习技巧
- 从简单算法开始刷题练习
- 多画图,理解过程之后,在开始用代码
2.算法简介
2.1 顺序查找简介
- 顺序查找,是一种简单直观的搜索算法
- 按照顺序逐个比较列表或数组中的元素,直到找到目标元素或者搜索完整个列表
2.1.1 应用场景
2.1.2 代码实现
def sequence_search(origin_list,target):
"""
:param origin_list:被查找的数组或者列表
:param target: 目标元素
:return: 目标元素的索引
"""
for index in range(len(origin_list)):
if origin_list[index] == target:
return index
continue
return -1
2.2 二分查找
2.2.1 二分查找简介
- 二分查找是一种有序数组中查找元素的算法
- 它将数组分成两部分,判断目标元素可能在哪一部分
- 直到找到目标元素或者确定目标元素不存在于数组中
2.2.2 应用场景
2.2.3 二分查找思路
- 确定搜索区间的左右边界,然后计算中间元素的下标。
- 判断目标元素是否等于中间元素,如果相等则返回下标。
- 如果不相等,则判断目标元素在左半边还是右半边,继续在该区间中查找。
- 重复此过程直到找到目标元素或确定目标元素不存在于数组中。
2.2.4 代码实现
3.时间复杂度
- 常量级:循环有限个次数,比如循环100次,这个的时间复杂度也是O(1)
- 单个循环,不知道循环的次数,时间 复杂度就是:O(n),线性增长
- 嵌套循环,时间复杂度就是:O(n平方)或者O(n*m)
总复杂度等于量级最大的那段代码的复杂度
多个规模求加法
- 代码的复杂度由两个数据的规模决定的
- m和n是表示两个数据规模,无法事先评估m和n谁的量级大,所以取加法
嵌套代码求乘积
- 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积