算法-嵌入式入门
算法-嵌入式入门
什么是数据结构,即一种计算的方法,计算机是怎么实现计算的呢
1.处理数值 2.查找数值 3.计算数值
本文按 简单算法/进阶算法 分类,讲述了几种嵌入式常用的算法,小厂简单算法足够,大厂考察部分进阶算法
(对于嵌入式而言,不需要很复杂的算法,普遍用包调参,更需要对常用结构进行熟练使用)
算法复杂度
时间复杂度
//算法执行效率//执行次数
时间复杂度写法:只关心数量级/要化简
1.省略常数
2.只保留最高项
3.最高价项系数改为1
T(n)=O(n)//time(函数时间复杂度) Big-O标记(算法时间复杂度)
T(n)=O(1)//算法执行次数固定//for(i=0;i<10;i++)
T(n)=O(n2)//for(i=0;i<5nn+2n+3)
O(logn)//二分法->每次除二->log2(n)
O(2n)//2^n
常见时间复杂度:
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
没有化简的时间复杂度:
最好/平均/最坏时间复杂度
空间复杂度
//衡量算法占用的内存空间大小S(n)
空间复杂度写法:
S(n)=O(n)//arr[n]//space(函数空间复杂度) Big-O(算法时间复杂度)
S(n)=O(1)//arr[10]
S(n)=o(n^2)//arr[n][n-1]
排序算法
冒泡排序
//方便简单//O(n)-O(n^2)
从前往后,两两比较,按升序降序交换,进行'元素个数-1'轮次
注意:1.外套循环轮次;2.初始化-从头部开始;3.内循环元素每次减一
插入排序
//前找,放前//O(n^2)
1.有序部分+无序部分
2.依次将无序部分插入有序部分
(每次从无序取一数,插入有序合适的位置)
2.2也可以说,来了一个新的数,放入合适位置
选择排序
//后找,放前//O(n^2)
1.后找值,2.前放值
快速排列
//递归//O(nlogn)
(排序目标,左下标,右下标)
1.左i(基准值),右j(必须是最后);
2.先,j往左移动,寻找与基准值'小'的数
3.后,i往右移动,寻找与基准值'大'的数
4.if(i,j停下,没有相撞){
交换i,j;重复操作;
if(j<base){
i=j;j++
}
if(i>base){
j=i;i++
}
}//基准值不变
else(相撞,i==j)
相撞位置 与 基准值 交换;
//左边:小于基准值 基准值 右边:大于基准值
5.对左半边快排,对右半边快排
查找算法
顺序查找
//适用小数量
从头到尾遍历
二分查找(折半查找)
先<排序>,再二分找(找一半)
low high mid=(low+high)/2 or left/right
哈希查找
定义/概念:
哈希表/哈希函数(散列函数)/哈希冲突
构建哈希表->构建一个规律数组->规律:哈希函数(散列函数)
使用哈希表//余数法//余数是哈希表的下标位置
哈希函数//为了构建某种哈希表->计算后,排列到哈希表内
常见哈希函数:
取余法//对应数组放入 取余后的值 取余元素个数//表示哈希表的下标位置 if(重复->哈希冲突)
解决哈希冲突方法:
1.线性探测法:冲突数据,从冲突位置往后,寻找第一个空位置存放数据
2.拉链法(单链表即可):冲突位置,往外设置链表,存放数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!