算法简介及二分法
1. 什么是算法
算法就是解决问题的有效方法 不是所有的算法都很高效 也有不合格的算法
2. 算法应用场景
推荐算法(抖音视频推送 淘宝商品推送)
成像算法(AI相关)...
几乎涵盖了我们日常生活中的方方面面
3. 算法工程师
待遇非常好 但是要求也非常高
4. 算法部门
不是所有的互联网公司都养得起算法部门 只有大型互联网公司才有
5. 二分法
是算法中最简单的算法 甚至都称不上是算法
"""
二分法使用要求
待查找的数据集必须有序
二分法的缺陷
针对开头结尾的数据 查找效率很低
常见算法的原理以及伪代码
二分法、冒泡、快拍、插入、堆排、桶排、数据结构(链表 约瑟夫问题 如何链表是否成环)
"""
l1 = [12 , 21 , 32 , 43 , 56 , 76 , 78 , 87 , 98 , 103 , 149 , 259 , 289 , 358 , 598 , 754 ,901 ,2312 ]
'''代码实现二分法'''
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, 908 )
三元表达式
name = 'jason'
res = '老师' if name == 'jason' else '学生'
print (res)
"""
数据值1 if 条件 else 数据值2
条件成立使用数据值1 条件不成立则使用数据值2
当结果是二选一的情况下 使用三元表达式较为简便
并且不推荐多个三元表达式嵌套
"""
各种生成式/表达式/推导式
name_list = ['jason' , 'kevin' , 'oscar' , 'tony' , 'jerry' ]
# 给列表中所有人名的后面加上_NB的后缀
# for 循环
new_list = []
for name in name_list:
data = f'{name}_NB'
new_list.append(data)
print(new_list) # ['jason_NB' , 'kevin_NB' , 'oscar_NB' , 'tony_NB' , 'jerry_NB' ]
# 列表生成式
# 先看for 循环 每次for 循环之后再看for 关键字前面的操作
new_list = [name +'_NB' for name in name_list]
print(new_list) # ['jason_NB' , 'kevin_NB' , 'oscar_NB' , 'tony_NB' , 'jerry_NB' ]
# 复杂情况
new_list = [name + '_NB' for name in name_list if name =='jason' ]
print(new_list) # ['jason_NB' ]
new_list = ['大佬' if name == 'jason' else '小赤佬' for name in name_list if name != 'jack' ]
print(new_list) # ['大佬' , '小赤佬' , '小赤佬' , '小赤佬' , '小赤佬' ]
# 字典生成式
s1 = 'hello world'
for i,j in enumerate (s1,start=100 ):
print (i, j )
d1 = {i:j for i,j in enumerate ('hello' )}
print (d1 ) # {0 : 'h' , 1 : 'e' , 2 : 'l' , 3 : 'l' , 4 : 'o' }
# 集合生成式
res = {i for i in 'hello' }
print (res) # {'o' , 'l' , 'h' , 'e' }
# 元组生成式>>>:没有元组生成式 下列的结果是生成器(后面讲)
res = (i+'SB' for i in 'hello' )
print (res)
for i in res:
print (i)
匿名函数
没有名字的函数 需要使用关键字lambda
语法结构
lambda 形参:返回值
使用场景
lambda a ,b :a +b
匿名函数一般不单独使用 需要配合其它函数一起用
常见内置函数
1. map ()映射
l1 = [1 , 2 , 3 , 4 , 5 ]
res = map (lambda x:x+1 , l1)
print (list (res))
2. max ()/min ()
l1 = [11 , 22 , 33 , 44 ]
res = max (l1)
print (res)
d1 = {
'zj' : 100 ,
'jason' : 8888 ,
'berk' : 9999999 ,
'oscar' : 1
}
def func (a ):
return d1.get(a)
res = max (d1, key=func)
print (res)
3. reduce
from functools import reduce
l1 = [11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 ]
res = reduce(lambda a,b:a+ b ,l1)
print (res)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗