当前位置:首页 > 数码 > 静止布局搜查算法-从前端布局到后端轨迹生成和形态求解 (静止布局搜查什么意思)

静止布局搜查算法-从前端布局到后端轨迹生成和形态求解 (静止布局搜查什么意思)

admin7个月前 (04-30)数码15

背景:

16-18年做过一阵子无人驾驶,那时刻痴迷于移动布局;但是过后可学习的资料十分少,网上的论文也不算太多。基本就是Darpa的几十篇无人越野几次较量的文章,基本没有成系统的文章和代码解说成功。所以对移动布局的看法不算片面,这几年随着智能驾驶、无人机的钻研和运行的增多,很多的论文课程成体系的开局引见这方面的内容。关于一个理工男来说机器人并且是能智能的、智能布局的,置信没有多少理工男是可以顺从不想去做进一步了解的。所以不时在搜集资料,谋划这哪一天可以出一个这方面系列,然后在code一个名目进去在机器人上捣腾各种成功。再一次性减速自己对这一想法落实是两年前看到fast-lab高飞团队出的一系列航行走廊处置无人机门路布局的上班视频。第一次性看到视频时刻真被震惊到,移动布局原来还可以这么玩,如此柔美的数学框架。讲了这么多只是想致敬过去的教训,开启这个专题第一讲。这个系列主线就是围绕高飞教员《移动机器人灵活布局》课程讲稿,外面会补充一些算法细节和自己的思索。这个课程对移动布局体系框架构建十分棒,内容排布的也十分好,惟一缺憾就是关于灵活不确定阻碍物的布局会少一些,由于课程原本就是针对无人机设计的。

注释:

现代机器人学和智能驾驶等畛域,门路布局是一个关键的主题.它触及到在给定的环境中找到从终点到终点的最优门路.这个环节通常分为两个部分:前端门路搜查和后端轨迹布局.前端门路搜查在地图中搜查出一条避开阻碍物的轨迹,然后端轨迹布局则对搜查到的轨迹启动优化,使其合乎机器人的静止学和能源学解放.实环境中的机器人静止布局是一个比拟复杂的疑问,关于复杂的疑问人类的解法普通都是分步求解:先做个大略、然后在大略轮廓上逐渐的复杂精细。机器人静止布局的学院派解法也是如此:

1.前端:门路布局

2.后端:轨迹生成

3.不确定性形态求解:移动阻碍物、突变环境、设施建模变动

前端——搜查门路布局

在开局这部分外容引见前,须要引见几个概念。引见这几个概念的目的在于更贴近实践的去了解搜查在业务中运行。搜查门路布局中是把机器人当成一个质点来思索的,但是实践的机器人是有必定形态和占用空间的,假设把机器人当成质点来思索很或许是会搜查出一条实践上无法行的(会碰到阻碍物的)门路的。为了处置这个疑问呢,我们可以繁难的物体的形态转移到地图(让地图阻碍物区域加上物体占用空间)。在这样的地图里把机器人当成质点来搜查可行门路。

在性能空间中布局¹²³

在上班空间中

假设我们激进地将机器人建模为半径为_的球,那么可以经过在一切方向上收缩阻碍物_来结构C-space1。这是一种经常出现的机器人碰撞检测方法,经过确保球体中心在收缩地图的自在空间中来成功碰撞评价1。但是,这种激进的方法并未思索到机器人的形态和大小。

构建地图:

在门路布局中,构建搜查地图是一个关键步骤。这通常触及到将实践环境形象为一个图(Graph),其中节点(Nodes)代表或许的位置,边(Edges)代表从一个位置到另一个位置的移动。以下是一个详细的例子:假定我们有一个机器人须要在一个室内环境中导航。这个环境可以是一个房间,有一些阻碍物,比如桌子和椅子。

地图种类:

栅格地图(GridMap)则是把环境划分红一系列栅格,在数学视角下是由边结合起来的结点的汇合,一个基于图块拼接的地图可以看成是一个栅格图,每个图块(tile)是一个结点,图块之间的衔接相关如短线。概率图(CostMap)假设在栅格图的基础上,每一栅格给定一个或许值,示意该栅格被占据的概率,则该图为概率图。特色地图(FeatureMap)特色地图用无关的几何特色(如点、直线、面)示意环境。经常出现于vSLAM(视觉SLAM)技术中。它普统统过如GPS、UWB以及摄像头配合稠密模式的vSLAM算法发生,好处是相对数据存储量和运算量比拟小,多见于最早的SLAM算法中。拓扑地图(TopologicalMap)是指地图学中一种统计地图,一种坚持点与线相对位置相关正确而不必定坚持图形形态与面积、距离、方向正确的形象地图。包含有有向图和无向图(字面意思)。

栅格地图

概率图

特色地图

拓扑地图-有向图

拓扑地图-无向图

静止布局搜查算法

搜查算法引见

有了这么多种的地图,那么对应每种图可以用什么对应的算法来做门路的布局呢?上方是地图对应门路搜查算法:

1.栅格地图/概率图1.Dijkstra2.BFS(Best-First-Search)3.A*4.hybridA*5.D*6.RRT7.RRT*8.蚁群算法9.RectangularSymmetryReduction(RSR)10.BUG11.Beamsearch12.IterativeDeepeningc13.Dynamicweighting14.Bidirectionalsearch15.DynamicA*andLifelongPlanningA*16.JumpPointSearch17.Theta*2.拓扑地图1.Dijkstra2.BFS(Best-First-Search)3.A*4.CH5.HH6.CRP

图搜查算法结构

:::success

通用搜查算法结构

罕用的图搜查有3大类的搜查结构,其它算法都是在这三个大的框架之下做改良。 深度优先搜查(Depth-FirstSearch,DFS):

广度优先搜查(Breadth-FirstSearch,BFS):

贪心搜查(GreedySearch):

算法外围的三个疑问是:

深度优先算法:数据结构保养一个后进先出(LIFO)的容器(即栈),算法移除/裁减容器中最深的节点

#生成示例数据graph={}graph["A"]=["B","D","F"]graph["B"]=["C","E"]graph["D"]=["C"]graph["F"]=["G","H"]graph["C"]=[]graph["E"]=[]graph["G"]=[]graph["H"]=[]fromcollectionsimportdequesearch_queue=deque()#创立一个节点列表search_queue+=graph["A"]#示意将"A"的相邻节点都参与到节点列表中fromcollectionsimportdequedefsearch(start_node):search_queue=deque()search_queue+=graph[start_node]searched=[]#这个数组用于记载审核过的节点whilesearch_queue:#只需节点列表不为空node=search_queue.pop()#深度优先#node=search_queue.popleft()#广度优先取出节点列表中最左边的节点print(node,)#打印出以后节点ifnotnodeinsearched:#假设这个节点没审核过ifnode=='G':#审核这个节点能否为终点"G"print("nfindthedestination!")returnTrueelse:search_queue+=graph[node]#将此节点的相邻节点都参与到节点列表中searched.end(node)#将这个节点标志为审核过#假设节点列表为空仍没找到终点,则前往FalsereturnFalseprint(search("A"))

广度优先搜查算法:数据结构:保养一个先进先出(FIFO)的容器(即队列),算法操作:移除/裁减容器中最浅的节点。详细代码参考上方深度搜查算法,把node=search_queue.pop()#深度优先换成node=search_queue.popleft()#广度优先取出节点列表中最左边的节点即可。可以看出BFS和DFS差异就在于依据先入或后入的准则,从边界当选用下一个节点。

贪心搜查 (GreedySearch): 贪心算法的特点是思索了从指标节点找到恣意点的代价,而普通算法思索的是从起始节点到恣意点的代价 。即贪心算法思索的是如何极速的找到指标节点,使失掉达指标节点的期间老本最小;而普通算法思索的是指标节点抵达指标节点的破费代价是最小的,而不是极速找到指标节点。基于贪心战略试图向指标移动虽然这不是正确的门路。由于它仅仅思索抵达指标的代价,而疏忽了以后已破费的代价,于是虽然门路变得很长,它依然继续走下去。贪心算法中执行的老本可以用启示式函数h(n)来算从恣意结点n到指标结点的最小代价评价值;启示函数选择了贪心算法运算书读,所以选用一个好的启示函数很关键。

但是,这两个例子都仅仅是最繁难的状况——地图中没有阻碍物,最短门路是直线的。如今我们来思索前边形容的凹型阻碍物。Dijkstra算法运转得较慢,但确实能保障找到一条最短门路:

另一方面,BFS运转得较快,但是它找到的门路显著不是一条好的门路:

由于BFS是基于贪心战略的,它试图向指标移动虽然这不是正确的门路。由于它仅仅思索抵达指标的代价,而疏忽了以后已破费的代价,于是虽然门路变得很长,它依然继续走下去。结合两者的好处不是更好吗?1968年发明的A算法就是把启示式方法(heuristicapproaches)如BFS,和惯例方法如Dijsktra算法结合在一同的算法。有点不同的是,相似BFS的启示式方法经常给出一个近似解而不是保障最佳解。但是,虽然A基于无法保障最佳解的启示式方法,A却能保障找到一条最短门路。A:带有启示式函数的Dijkstra算法*把Dijkstra算法(接近初始点的结点)和BFS算法(接近指标点的结点)的信息块结合起来。在A的规范术语中,g(n)示意从初始结点到恣意结点n的代价,h(n)示意从结点n到指标点的启示式评价代价(heuristicestimatedcost)。当从初始点向指标点移动时,A*权衡这两者。每次启动主循环时,它审核f(n)最小的结点n,其中f(n)=g(n)+h(n)。

假设alpha是0,则改良后的代价函数的值总是1。这种状况下,地形代价被齐全疏忽,A上班变成繁难地判别一个网格可否经过。假设alpha是1,则最后的代价函数将起作用,然后你失掉了A的一切好处。你可以设置alpha的值为0到1的恣意值。可以思索对启示式函数的前往值做选用:相对最小代价或许希冀最小代价。例如,假设你的地图大部分地形代价为2,其它一些中央是代价为1的路途,那么你可以思索让启示式函数不思索路途,而只前往2距离。速度和准确度之间的选用并不是全局固定对。在地图上的某些区域,准确度是关键的,你可以基于此进执行态选用。例如,假定我们或许在某点中止从新计算门路或许扭转方向,则在接近以后位置的中央,选用一条好的门路则是更关键的,关于在地图上的一个安保区域,最短门路兴许并不十分关键,但是当从一个风险区域脱离对时刻,轨迹的精度是最关键的。雷同经过对g(n)或许f(n)的调理,也可以达成A详细举措的管理

1.【降采样地图-估量算】在密集栅格图的基础上参与一个分辨率更大的稠密栅格图。估量算稠密图中恣意两个栅格的最短门路。2.【waypoings-估量算】在密集栅格图上,估量算恣意两个waypoints的的最短门路。

经过以上方法,参与一个启示函数h’用于评价从恣意位置抵达临近导航点/中继点(waypoints)的代价。最终的启示式函数可以是:h(n)=h'(n,w1)+distance(w1,w2),h'(w2,goal) 网格地图中的启示式算法 在网格地图中,有一些妇孺皆知的启示式函数计算方法:

1.曼哈顿距离2.对角线距离3.欧几里得距离4.欧几里德距离平方

曼哈顿距离规范的启示式函数是曼哈顿距离(Manhattandistance)。思索代价函数并找到从一个位置移动到临近位置的最小代价D。因此,h是曼哈顿距离的D倍:

```H(n)=D*(abs(n.x–goal.x)+abs(n.y–goal.y))```

对角线距离

假设在地图中准许对角静止那么须要思索对角线距离。(4east,4north)的曼哈顿距离将变成8D。但是,可以繁难地移动(4northeast)替代,所以启示函数应该是4D。这个函数经常使用对角线,假定直线和对角线的代价都是D:

H(n)=D*max(abs(n.x-goal.x),abs(n.y-goal.y))

假设对角线静止的代价不是D,但相似于D2=sqrt(2)*D,则准确的计算方法如下:

h_diagonal(n)=min(abs(n.x-goal.x),abs(n.y-goal.y))h_straight(n)=(abs(n.x-goal.x)+abs(n.y-goal.y))H(n)=D2*h_diagonal(n)+D*(h_straight(n)-2*h_diagonal(n)))

计算h_diagonal(n):沿着斜线可以移动的步数;h_straight(n):曼哈顿距离;然后兼并这两项,让一切的斜线步都乘以D2,剩下的一切直线步(留意这里是曼哈顿距离的步数减去2倍的斜线步数)都乘以D。欧几里德距离假设单位可以沿着恣意角度移动(而不是网格方向),那么应该经常使用直线距离:

```H(n)=D*sqrt((n.x-goal.x)^2+(n.y-goal.y)^2)```

但是,假设是这样的话,间接经常使用A时将会遇到费事,由于代价函数g不婚配启示函数h。由于欧几里得距离比曼哈顿距离和对角线距离都短,你仍可以失掉最短门路,不过A将运转得更久一些:

欧几里德距离平方

还有一个方法是,经常使用距离的平方替代距离,防止启动平方根开方运算,从而缩小计算消耗:

```H(n)=D*((n.x-goal.x)^2+(n.y-goal.y)^2)```

不过这样做会显著地造成权衡单位的疑问。当A计算f(n)=g(n)+h(n),距离的平方将比g的代价大很多,并且会由于启示式函数评价值过高而中止。关于更长的距离,这样做会接近g(n)的极其状况而不再计算任何物品,A退步成BFS:

启示函数的启示因子

造成A搜查低性能的另外一个要素是启示函数的启示因子。当某些门路具备相反的f值的时刻,它们都会被探求,比拟函数无法打破比拟平衡点,虽然我们这时刻只须要搜查其中的一条,下图为没有参与启示因子的成果:

为了处置这个疑问,我们可以为启示函数参与一个较小的启示因子。启示因子关于每个结点必定是确定的惟一的,而且它必定让f值表现区别。由于A将会对f值启动堆排序,让f值不同,象征着只要一个f值会被检测。

一种参与启示因子的模式是稍微扭转h的权衡单位。假设我们缩小权衡单位,那么当我们朝着指标移动的时刻f将逐渐参与。很可怜,这象征着A偏差于裁减到接近初始点的结点,而不是接近指标的结点。我们可以稍微的微调h的权衡单位(甚至是0.1%),A就会偏差于裁减到接近指标的结点。

```heuristic*=(1.0+p)```

其中这里的启示因子须要满足

p<移动一步的最小代价/希冀的最长门路长度。

假定你不宿愿你的门路超越1000步(step),你可以使p=1/1000。参与这个附加值的结果是,A比以前搜查的结点更少了。如下图所示。

当存在阻碍物时,当然仍要在它们周围寻觅门路,但要看法到,当绕过阻碍物以后,A搜查的区域十分少:

dx1=current.x-goal.xdy1=current.y-goal.ydx2=start.x-goal.xdy2=start.y-goal.ycross=abs(dx1*dy2-dx2*dy1)heuristic+=cross*0.001

其目的是:计算初始->指标向量和以后->指标向量的向量叉乘(cross-product)。当向量偏离方向后,其叉乘将会提供一个较大的启示因子。结果是,这段代码选用的门路稍微偏差于从初始点到指标点的直线。当没有阻碍物时,A不只搜查很少的区域,而且它找到的门路看起来十分棒:

跳点搜查

JumpPointSearch(JPS)是一种改良的A_算法,它保管了A_算法的主体框架,但在寻觅后继节点的操作上启动了优化。在A算法中,会将以后节点的一切未访问街坊节点参与openlist。而JPS则经常使用一些方法将有价值的节点参与openlist。JPS的外围就是寻觅跳点(JumpPoint),在JPS中,就是将跳点参与openlist。跳点就是门路的转机点。

JPS理智地启动探求,由于它总是依据规定向前看。强调了其在搜查环节中的智能性和前瞻性。JPS算法的基本流程与A分歧,代价函数f(n)依然示意如下:f(n)=g(n)+h(n)。JPS算法的好处在于,由于它只裁减跳点,跳点间的栅格被跳过,不参与OpenList,因此,它的搜查效率比A算法提高了一个等级。在成功JPS前先了解它的规定

例子:

更详细跳点搜查可以参考上方文章:

小结:

本文引见了motionplan学院派的框架:

并且详细引见了前端门路布局罕用的搜查布局,引见了搜查布局的一些前置常识:

详细引见了了几种贪心搜查算法原理和成功思绪:

并且引见了:累计老本,启示函数,以及这两个函数的物理意义;如何调控两个参数来成功计算速度和最优门路的平衡。


#web前端开发#前端只擅长页面布局和动效,不会数据交互是不是找不到工作了?

应该比较难找,现在的前端要会的技术都比较多,数据交互是很重要的,没有数据交互的不管你动效做得再多再好,也只是一个静态页面,可以学习一下ajax,其实也不难,找点视频教程跟着写,再思考为什么是这样写的

前端面试时被问到前端布局,这个怎么回答

前端面试时被问到前端布局,这个怎么回答

你可以说,你对DIV+CSS布局的了解,不懂你先网络吧,我不可能一一说明的。然后说,盒子模型的了解,还是那句,不懂你网络吧。然后说,清除浮动的了解,还是那句,不懂你网络。然后说,内联、内联块和内联元素的了解。还有一些加分的,例如overflow的深入理解。overflow,如果理解得深入,对布局有一定的影响。差不多就这样了,面试官也许问得更细,我就不清楚了。

前端面试,被问到vue的元件是怎么写,我怎么回答

vue框架中状态管理。在引入store,注入。新建了一个目录store,….. export 。场景有:单页应用中,元件之间的状态。音乐播放、登入状态、加入购物车

web前端面试被问到为什么离职

实话实说,但是注意言辞,回答过程中千万不要抱怨、或是“吐槽”前东家的种种不好,请客观地叙述与自己现在状态有哪些不相契合的点。参考:原东家的发展空间达不到我的期望,我想要寻找新的机会挑战自己,同时创造更大的价值。注意:避免假大空的官话,会让人觉得不真诚,另外,点到为止,无需细谈。

前端面试时问到:怎么解决浏览器相容性?该怎么回答比较好?

IE6/IE7对FE当然很不友好,但专业的FE决不应该因为这两个浏览器难处理就不处理了。假如使用者需要,我的目标是在力所能及的情况下为使用者提供最好的前端展现。相容性的问题从来都不只是IE6/7的问题,各个手机、浏览器、版本的相容性同样有各种各样的问题,比IE奇葩多了。我的经验是,每遇到一个坑爹问题,做这么几件事:确认触发场景,什么浏览器、版本、什么情况下会出现这个问题,做到稳定复现;找到问题原因,为什么会出现这样的问题(网上搜、自己琢磨甚至邮件问相应公司开发者等等都是可行的);确定解决法,有没有什么框架级的解决法,总之是定规范,避免类似问题;比如不使用某些属性;用某种布局方法规避一些问题等等;有没有什么临时的法可以快速绕过去?不是每次都有时间搞框架级的法来着。怎么hack过去把这些都积累起来,就会有用处。不要想着IE6、7没了就不用考虑浏览器相容性问题,chrome/firefox、webkit的各种版本,手机的各种浏览器、各种终端都要处理浏览器相容性问题,恩,对,偶尔还有flash来着。相容各种终端、相容各种解析度、相容浏览器都是相容性问题,这是FE的命,得认。抱着让使用者有最好体验的想法去做,收获更大。

前端面试被问到,vue实现资料双向系结,原理是啥

其原理大致是这样:在资料渲染时使用prop渲染资料将prop系结到子元件自身的资料上,修改资料时修改自身资料来替代propwatch子元件自身资料的改变,触发事件通知父元件更改系结到prop的资料这样做的好处是:父元件资料改变时,不会修改储存prop的子元件资料,只是以子元件资料为媒介,完成对prop的双向修改。

web前端面试怎么说

面试方法

页面前端面试经常问到的问题

其实,不管是什么样的面试形,问的问题都差不多,万变不离其宗,都有规律可寻。其实对所有的面试官而言,只有一个目的:在最短的时间里了解到你最多的资讯。想高效率的准备面试,先从这七个大方面着手吧!一、基本情况1、请用最简洁的语言描述您从前的工作经历和工作成果。二、专业背景您认为此工作岗位应当具备哪些素质?三、工作模式您平时习惯于单独工作还是团队工作?四、价值取向您对原来的单位和上司的看法如何?五、资质特性您如何描述自己的个性?六、薪资待遇是否方便告诉我您目前的待遇是多少?七、背景调查您是否介意我们通过您原来的单位迚行一些调查?95%的面试基本上都离不开这些问题,当然还有可能问一些专业问题,我想如果你做过的话应该都不是什么难事,一般面试官都不会过多的问专业方面的问题的。以上资讯直接参考楚湘人才网面试宝典篇之化繁为简,把HR的上百道问题汇总成七大类和面试常问经典问题。更多更全面的面试资讯 面试技巧 面试问题请登陆楚湘人才网或关注微信公众平台:楚湘人才网

如何用ecshop修改页面前端布局

网站是在伺服器上的庆,你朋友给你FTP或伺服器的帐号密码没。如果没有的话要下,是在网站的档案目录里

web前端面试怎么介绍

网页前端布局都用什么工具

一般应该都是用ps或者类似的作图软体先把图画出来,然后再手写程式码。用ps等做出软体是方便作图后修改,因为不管是内部用还是给客户总是要多修改的

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 算法

“静止布局搜查算法-从前端布局到后端轨迹生成和形态求解 (静止布局搜查什么意思)” 的相关文章

从非负数据中揭示隐藏主题和特征-非负矩阵分解算法 (非负数值类型什么意思)

从非负数据中揭示隐藏主题和特征-非负矩阵分解算法 (非负数值类型什么意思)

原理 非负矩阵分解算法(NMF)是一种用于分析非负数据的算法。它将一个非负输入矩阵分解为两个非负矩阵的乘积。 应用场景 文本挖掘 图像处理 社交网络...

优化仿射变换模块算法以优化图像处置成果 (仿射变换模型)

优化仿射变换模块算法以优化图像处置成果 (仿射变换模型)

在计算机视觉畛域,图像处置是至关关键的一局部。但是,处置图像的环节中往往会遇到一些疑问,如图像变形、失真等。这些疑问关键是因为仿射变换模块的算法不够优化所造成的。那么,如何优化仿射变换模块的算法以...

编程利器-面试法宝-刷题360-悟透算法真理 (面条式编程)

编程利器-面试法宝-刷题360-悟透算法真理 (面条式编程)

最近不时在刷算法题,刷华为OD算法题,有诸多好处: 宿愿用我自己疯狂刷题的劲头,感化大家,让大家爱上刷题,顺利经过华为OD机试,把握更多低劣的算法。 上方这道题,是很经典的深度优先搜查...

Dijkstra算法的深入探索-把握效率与最优性 (dijkstra 怎么读)

Dijkstra算法的深入探索-把握效率与最优性 (dijkstra 怎么读)

引言 在计算机科学和图论中,算法在有效解决复杂问题方面起着至关重要的作用。其中一个突出的算法是Dijkstra算法,它由荷兰计算机科学家Edsger W. Dijkstra于1956年开发。...

面向跨领域数据的迁移学习算法与模型研究 (什么是跨领域)

面向跨领域数据的迁移学习算法与模型研究 (什么是跨领域)

引言 随着数据的快速增长和跨领域应用的需求,如何利用已有的知识和数据来解决新领域的问题成为了一个重要的研究方向。迁移学习作为一种有效的机器学习方法,可以通过利用源领域的知识和数据来改善目标领...

如何选择和使用-业务模型与算法模型 (如何选择和使用注意事项)

如何选择和使用-业务模型与算法模型 (如何选择和使用注意事项)

数据模型:业务模型与算法模型的全面解析 导言 数据的世界离不开模型,但"模型"一词的使用往往令人困惑。从营销中的 4P 模型到机器学习中的 K-means 聚类,它们都被称为模型。那么,这些模型...

使用生成对抗网络实现图像风格转换的突破性新算法 (使用生成对抗性网络的舞蹈动作生成)

使用生成对抗网络实现图像风格转换的突破性新算法 (使用生成对抗性网络的舞蹈动作生成)

一、图像风格转换简介 图像风格转换是指将一张图像的风格转换为另一张图像的风格,而保持图像内容不变。传统的图像风格转换方法通常基于图像的像素级别操作,如调整亮度、对比度和色彩等。这些方法往往无...

程序开发中罕用的十种算法-你用过几种 (程序开发中罕见的语言)

程序开发中罕用的十种算法-你用过几种 (程序开发中罕见的语言)

当编写程序时,了解和经常使用不同的算法对处置疑问至关关键。以下是C#中罕用的10种算法,每个算法都随同着示例代码和详细说明。 1.冒泡排序(BubbleSort): 冒泡排序...