算法简介之二分法
* 什么是算法:算法就是解决问题的有效方法 不是所有的算法都很高效
* 算法应用场景:
推荐算法 像抖音推送 淘宝商品推送
成像算法 AI相关
算法几乎是覆盖了我们日常生活中的方方面面
* 二分法:是算法中最简单的算法 甚至都称不上是算法
* 二分法使用要求:待查找的数据集必须有序
* 二分法的缺陷:针对开头结尾数据 查找效率很低
* 常见算法的原理以及伪代码
二分法 冒泡 快拍 插入 桶排 数据结构(链表 约瑟夫问题 如何链表是否成环)
l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
查找列表中某个数据值
方式1:for循环 次数较多
方式2:二分法 不断的对数据集做二分切割
代码实现二分法
定义我们想要查找的数据值
target_num = 987
def get_middle(l1, target_num):
if len(l1) == 0:
print('很抱歉 没找到')
return
middle_index = len(l1) // 2
if target_num > l1[middle_index]:
right_l1 = l1[middle_index + 1:]
print(right_l1)
return get_middle(right_l1, target_num)
elif target_num < l1[middle_index]:
left_l1 = l1[:middle_index]
print(left_l1)
return get_middle(left_l1, target_num)
else:
print('恭喜你 找到了!!!')
get_middle(l1, 987)
get_middle(l1, 2000)
get_middle(l1, 12)
三元表达式
简化步骤:代码简单并且只有一行 那么可以直接在冒号后面编写
name=‘jason’
if name == 'jason':print(‘老师’)
else:print('学生')
三元表达式
res='老师'if name == ‘jason’slse‘学生’
print(res)
数据值1 if 条件 else 数据值2
条件成立则使用数据值1 条件不成立则使用数据值2
当结果是二选一的情况下 使用三元表达式较为简便
并且不推荐多个三元表达式嵌套

各种生成式
name_list = ['jason', 'kevin', 'oscar', 'tony', 'jerry']
给列表中所有人名的后面加上_NB的后缀



- 元组生成式>>>:没有元组生成式 下列的结果是生成器(后面讲)

匿名函数
没有名字的函数 需要使用关键字lambda
结构:lambda 形参:返回值
使用场景:lambda a,b:a+b
匿名函数一般不单独使用需要配合其他函数一起用
常见内置函数
映射 map()
l1 = [1, 2, 3, 4, 5]
res = map(lambda x:x+1, l1)
print(list(res)) [2, 3, 4, 5, 6]
- 查询最大值使用的是max()函数,查询最小值使用的是min()函数

* reduce 传多个值 返回一个值
reduce()函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
Python3.x reduce() 已经被移到 functools 模块里,如果我们要使用,需要引入 functools 模块来调用 reduce() 函数:
from functools import reduce
