![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
披风秃头侠
这个作者很懒,什么都没留下…
展开
-
外部排序
外部排序给你一个包含20亿个int类型整数的文件,计算机的内存只有2GB,怎么给它们排序?一个int数占4个字节,20个亿需要80亿字节,大概占用8GB的内存,而计算机只有2GB的内存,数据都装不下!可以把8GB分割成4个2GB的数据来排,然后在把他们拼凑回去。如下图:排序的时候可以选择快速排序或归并排序等算法。为了方便,我们把排序好的2G有序数据称为有序子串。接着把两个小的有序子串合并成一个大的有序子串。注意:读取的时候是每次读取一个int数...转载 2020-07-27 21:26:33 · 109 阅读 · 0 评论 -
路径规划算法D*学习总结
通过调研发现目前移动机器人动态路径规划用的比较多的路径规划算法是D*,本人写这篇博客的目的在于记录自己自己这几天的调研总结和学习体会。1.简介D*是动态A*(D-Star, Dynamic A*) 卡耐基梅隆机器人中心的Stentz在1994和1995年的两篇文章提出,主要用于机器人探路。美国火星探测器上采用的就是此寻路算法。2.主要方法1.先用Dijkstra算法从目标节点G向起始节点搜索。储存路网中目标点到各个节点的最短路和该位置到目标点的实际值h,k(k为所有变化h之中最小的值,当前为转载 2020-07-21 23:45:58 · 3097 阅读 · 0 评论 -
终身规划A*算法(LPA*):Lifelong Planning A*
终身规划A*算法(LPA*):Lifelong Planning A*1.描述2.父代节点与子代节点3.起始距离估计4.优先队列5.节点状态及扩展6.初始化运行7.最短路径搜索8.伪代码9.性质10.符号表示11.算法示例推演12.总结13.对公式的进一步理解伪代码参考资料搜索算法其他文章LPA_start或life Planning A_star是一种基于A*的增量启发式搜索算法。2001年,斯文·柯尼格(Sven Koenig)和马克西姆·利卡切夫(Maxim Likhachev)首次提出。1.描述转载 2020-07-21 23:26:57 · 788 阅读 · 0 评论 -
A*算法详解(讲的一级棒 )
概述虽然掌握了 A* 算法的人认为它容易,但是对于初学者来说, A* 算法还是很复杂的。搜索区域(The Search Area)我们假设某人要从 A 点移动到 B 点,但是这两点之间被一堵墙隔开。如图 1 ,绿色是 A ,红色是 B ,中间蓝色是墙。图 1你应该注意到了,我们把要搜寻的区域划分成了正方形的格子。这是寻路的第一步,简化搜索区域,就像我们这里做的一样。这个特殊的方法把我们的搜索区域简化为了 2 维数组。数组的每一项代表一个格子,它的状态就是可走 (walkalbe) 和不可走转载 2020-07-21 23:04:24 · 662 阅读 · 0 评论 -
路径规划算法总结
广度优先算法(Breadth-First-Search, BFS)广度优先算法实际上已经能够找到最短路径,BFS通过一种从起点开始不断扩散的方式来遍历整个图。可以证明,只要从起点开始的扩散过程能够遍历到终点,那么起点和终点之间一定是连通的,因此他们之间至少存在一条路径,而由于BFS从中心开始呈放射状扩散的特点,它所找到的这一条路径就是最短路径;启发式搜索改变广度优先算法原来队列的FIFO模式,给不同的点加入优先级,可以知道,距离终点的曼哈顿距离越小的点,该点的优先级越高存在问题 然而这导致了转载 2020-07-21 22:37:27 · 890 阅读 · 0 评论 -
十大经典排序算法(动图演示)
十大经典排序算法(动图演示) 0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a.转载 2020-07-07 22:55:17 · 135 阅读 · 0 评论 -
卡兰特数(n个元素依次进栈,能得到几种不同的出栈序列)
情况1:如果每次入栈之前只能出栈一次:核心代码:// v作为栈存放数据,res作为缓存,存放出栈的元素,打印的时候res从0到n,v从n到0void DFS(vector<char>v,vector<char>res,int circle){ if(circle==length){ printres(res); cout<<"*"; printstack(v); cout<<endl; return.转载 2020-05-20 17:24:25 · 2860 阅读 · 0 评论 -
XGBoost算法
1. 什么是XGBoost XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。 说到XGBoost,不得不提GBDT(Gradient Boosting Decision Tree)。因为XGBoost本质上还是一个GBDT,但是力争把速度和效...转载 2020-03-29 12:44:26 · 535 阅读 · 0 评论 -
机器学习算法之LightGBM
GBDT模型的另一个进化版本:LightGBM。LigthGBM是boosting集合模型中的新进成员,由微软提供,它和XGBoost一样是对GBDT的高效实现,原理上它和GBDT及XGBoost类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。LightGBM在很多方面会比XGBoost表现的更为优秀。它有以下优势:更快的训练效率 低内存使用 更高的准确率 ...转载 2020-03-28 16:06:11 · 3570 阅读 · 0 评论 -
遗传算法(Genetic Algorithm)
1.介绍遗传算法(Genetic Algorithm)遵循『适者生存』、『优胜劣汰』的原则,是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。遗传算法模拟一个人工种群的进化过程,通过选择(Selection)、交叉(Crossover)以及变异(Mutation)等机制,在每次迭代中都保留一组候选个体,重复此过程,种群经过若干代进化后,理想情况下其适应度达到***近似最优***的状态。...原创 2020-03-28 11:19:25 · 1205 阅读 · 0 评论 -
深入理解 Dijkstra 算法实现原理
大概就是这样一个有权图,Dijkstra算法可以计算任意节点到其他节点的最短路径算法思路指定一个节点,例如我们要计算 'A' 到其他节点的最短路径 引入两个集合(S、U),S集合包含已求出的最短路径的点(以及相应的最短长度),U集合包含未求出最短路径的点(以及A到该点的路径,注意 如上图所示,A->C由于没有直接相连 初始时为∞) 初始化两个集合,S集合初始时 只有当前...转载 2020-03-14 18:02:15 · 4105 阅读 · 0 评论 -
背包问题 算法与原理
0-1背包 和 部分背包关于背包问题,其实可以分为两种类型:0-1背包问题(动态规划) 和 部分背包问题(贪心算法)。0-1背包问题:每件物品或被带走,或被留下,(需要做出0-1选择)。小偷不能只带走某个物品的一部分或带走两次以上同一个物品。在选择是否要把一个物品加到背包中,必须把该物品加进去的子问题的解与不取该物品的子问题的解进行比较。这种方式形成的问题导致了许多重叠子问题,满足动态规...转载 2020-03-14 15:26:54 · 5972 阅读 · 0 评论 -
贪心算法
一、基本概念所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)所以,对所采用的贪心策略一...转载 2020-03-14 13:03:43 · 3908 阅读 · 0 评论