个人算法笔记:
STL:标准模板库 Standard Template Library STL概述: 序列式容器:数据无序 vector数组 list双向链表 deque双向动态队列 关系式容器:数据有序 map set multimap multiset 容器都有的功能:增删改查 容器都有的函数: 构造、析构、插入、删除 查找、拷贝构造、元素个数...... 迭代器:返回地址 迭代器:用来定位容器中某个元素 数组:下标 链表:next指针 容器:智能指针 迭代器返回值:是容器中元素的地址 因此每次使用最好初始化begin() 迭代器.begin():指向第一个元素的地址 迭代器.end():指向最后一个元素的后面 容器.insert(迭代器, 数据):插入 如果容器发生改变,迭代器会失效 List:双向动态链表 数组&&链表:数组查找高效 链表插入删除高效 数组连续,链表不连续 deque:双向动态队列 介于数组和链表之间 排序算法:shell排序/基数排序/桶排序 shell排序: 1.优化后的插入排序 2.按步长step分组:步长一开始设置为元素个数/2 3.组内插入排序 4.步长=步长/2 基数排序: 1.创建临时数组 2.初始化临时数组 3.临时数组排序 4.将临时数组值赋值回原数组 5.delete临时数组 限制:1.不能有重复运算 2.空间浪费大 优点:不需要经过比较 桶排序:基数排序的升级 1.根据数据范围获取排序次数 2.制作桶并且初始化 3.遍历a数组并且按照排序依据将a数组元素存到桶里 4.放回原来数组里 总结:希尔排序速度快,不稳定 桶排序速度快,稳定,但是空间复杂度高 分治:分而治之 二分查找:折半查找 归并排序:两个有序数组合并为一个有序数组 归并排序: 递归的拆分+合并 合并: 1.准备临时数组 2.将数据元素依序放到临时数组中 3.将数据元素从临时数组拷贝回到原数组中,释放临时数组 二分查找:有序数组按照二分方式来查找数据 递归方法:int mid = l + (r-l)/2;//中间 if(l==r) return -1;//没有找到的情况,此时l==r if(finddata==a[mid]) return mid; if(finddata>a[mid]) half_find(a, mid+1, r, finddata); if(finddata<a[mid]) half_find(a, l, mid, finddata); 非递归方法:int mid; int left = l; int right = r; while(left < right){ mid = left + (right-left)/2; if(finddata == a[mid]) return mid; if(finddata > a[mid]){ left = mid+1; }else{ right = mid; } } return -1;//没有找到的情况,此时left==right 递归练习之汉诺塔问题: if(num<1) return;//num不符合实际的情况 han_nuo(num-1, A, C, B); printf("%c-->%c \n", A, C); han_nuo(num-1, B, A, C); 二分查找与归并排序总结: 都是分治思想 二分:每次排除一半 归并:拆分成为2个,递归的进行拆分直到都成为有序数组 然后合并有序数组————>排序成功 N叉树: 一棵树有多个分叉 森林:多棵树 节点:树中的元素,子树 枝干,叶子节点,路径长度 层:根节点到某些结点的路径长度相同,同一层 N叉树的增删改查 有序二叉树: 二叉树:每个节点有且只有2个孩子 有序二叉树:左孩子<根<右孩子 叶子节点:没有孩子的节点 寻路算法: 1.深度寻路算法: 二维地图:二维数组 二维数组上标识特定数值作为地图上对象 应用于RGB游戏中比较广泛 缺点:1.二维地图,只可以走直线 2.不一定能找到最佳路径 2.广度寻路算法: 遍历整个地图中所有可以走的点 并且将其存入到一颗四叉树里 之后从起点开始搜索这棵树查找终点即可 小总结: 深度寻路: 有回退 循环少 适用于宽阔大地图 不一定能找到最短路径 广度寻路: 没有回退 循环多 适用与小地图 一定能找到最短路径 但是都只能走直线 3.A星寻路: 结构:N叉树 直线代价斜线代价:符合勾股定理 代价:每走一步,距离终点所付出的 f = g + h + w; f : 当前点到终点的代价 g : 起点到当前点的代价 h : 当前点到终点的预估代价(只计算直线距离,并忽略障碍) w : 权重 路: 平地 上坡路 丘陵 沼泽 坑 动态规划: 使用动态规划:重叠子问题 最优值,最佳解 斐波那契数列问题 背包问题: 当背包重量==0:什么也不能偷 B(i, j):i代表还有几件商品可以偷 j代表还剩下的背包空间是多少
原文:https://www.cnblogs.com/Whgy/p/12301431.html