首页 > 编程语言 >五大常用算法总结

五大常用算法总结

时间:2024-05-14 16:58:27浏览次数:19  
标签:总结 blog changyuanchn 算法 csdn article 五大 net

原文链接:https://blog.csdn.net/changyuanchn/article/details/51476281

引言
据说有人归纳了计算机的五大常用算法,它们是贪婪算法,动态规划算法,分治算法,回溯算法以及分支限界算法。虽然不知道为何要将这五个算法归为最常用的算法,但是毫无疑问,这五个算法是有很多应用场景的,最优化问题大多可以利用这些算法解决。算法的本质就是解决问题。当数据量比较小时,其实根本就不需要什么算法,写一些for循环完全就可以很快速的搞定了,但是当数据量比较大,场景比较复杂的时候,编写for循环就是一个很不明智的方式了。一是耗时,二是写出的代码绝对是天书。当然还有第三点,这点也是最重要的,写代码是一种艺术,而不是搬砖。前面的文章里对这五种算法都已经做了详细的讲解和归纳,本文主要是一个总结,将这五种算法整理到一起来对比,分析一下。

0) 穷举法
穷举法简单粗暴,没有什么问题是搞不定的,只要你肯花时间。同时对于小数据量,穷举法就是最优秀的算法。就像太祖长拳,简单,人人都能会,能解决问题,但是与真正的高手过招,就颓了。

1) 贪婪算法
贪婪算法可以获取到问题的局部最优解,不一定能获取到全局最优解,同时获取最优解的好坏要看贪婪策略的选择。特点就是简单,能获取到局部最优解。就像打狗棍法,同一套棍法,洪七公和鲁有脚的水平就差太多了,因此同样是贪婪算法,不同的贪婪策略会导致得到差异非常大的结果。
具体的详细解析请参见下面的文章:
http://blog.csdn.net/changyuanchn/article/details/51417211

2) 动态规划算法
当最优化问题具有重复子问题和最优子结构的时候,就是动态规划出场的时候了。动态规划算法的核心就是提供了一个memory来缓存重复子问题的结果,避免了递归的过程中的大量的重复计算。动态规划算法的难点在于怎么将问题转化为能够利用动态规划算法来解决。当重复子问题的数目比较小时,动态规划的效果也会很差。如果问题存在大量的重复子问题的话,那么动态规划对于效率的提高是非常恐怖的。就像斗转星移武功,对手强它也会比较强,对手若,他也会比较弱。
具体的详细解析请参见下面的文章:
http://blog.csdn.net/changyuanchn/article/details/51420028
http://blog.csdn.net/changyuanchn/article/details/51429979

3)分治算法
分治算法的逻辑更简单了,就是一个词,分而治之。分治算法就是把一个大的问题分为若干个子问题,然后在子问题继续向下分,一直到base cases,通过base cases的解决,一步步向上,最终解决最初的大问题。常见的利用分治算法思想的有快速排序以及合并排序等等。分治算法是递归的典型应用。
具体的详细解析请参见下面的文章:
http://blog.csdn.net/changyuanchn/article/details/17150109
http://blog.csdn.net/changyuanchn/article/details/51465175

4) 回溯算法
回溯算法是深度优先策略的典型应用,回溯算法就是沿着一条路向下走,如果此路不同了,则回溯到上一个
分岔路,在选一条路走,一直这样递归下去,直到遍历万所有的路径。八皇后问题是回溯算法的一个经典问题,还有一个经典的应用场景就是迷宫问题。
具体的详细解析请参见下面的文章:
http://blog.csdn.net/changyuanchn/article/details/17354461

5) 分支限界算法
回溯算法是深度优先,那么分支限界法就是广度优先的一个经典的例子。回溯法一般来说是遍历整个解空间,获取问题的所有解,而分支限界法则是获取一个解(一般来说要获取最优解)。
具体的详细解析请参见下面的文章:
http://blog.csdn.net/changyuanchn/article/details/17102037

标签:总结,blog,changyuanchn,算法,csdn,article,五大,net
From: https://www.cnblogs.com/Dongmy/p/18191698

相关文章

  • 【区块链】区块链技术学习总结
     一、区块链技术简介1.1区块链概念区块链是一种按时间顺序将数据区块以顺序相连的方式组合而成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。简而言之,区块链是一条链,链上链接了许多个不能修改的数据块。1.2区块链应用1.2.1区块链1.0技术:比......
  • 【强化学习】A grid world 值迭代算法 (value iterator algorithm)
    强化学习——值迭代算法代码是在jupyternotebook环境下编写只需要numpy和matplotlib包。此代码为学习赵世钰老师强化学习课程之后,按照公式写出来的代码,对应第四章第一节valueiteratoralgorithm可以做的实验:调整gama值观察策略的变化调整惩罚值(fa)的大小观察......
  • 单源最短路算法
    Dijkstra算法原理首先将所有点分为两类,确定和没确定最短路的点。首先我们可以知道,起点只能通过已经确定最短路的点去到其他点,所以我们可以不断的确定距离起点最近的点的路径长度,再用这个确定的点更新其他点到起点的最短路距离。此时找最近点为\(O(n)\),更新邻接点为\(O(m)\),......
  • 算法-动态规划
    原文链接:https://blog.csdn.net/u013309870/article/details/75193592        http://t.csdnimg.cn/GgRFt动态规划算法的核心理解一个算法就要理解一个算法的核心,动态规划算法的核心是下面的一个小故事。A*"1+1+1+1+1+1+1+1=?"*A:"上面等式的值是多少"......
  • 金融市场中的人工智能-新算法和解决方案-全-
    金融市场中的人工智能:新算法和解决方案(全)原文:zh.annas-archive.org/md5/98949b54b6218a075bcbfbd4379f7727译者:飞龙协议:CCBY-NC-SA4.0前言金融市场可能是少数真正可以被描述为复杂系统的人类成就之一。复杂系统是物理学中的结构,它们:(a)从组件之间的相互作用中获得其动态......
  • 计算机网络常见面试题总结(上)
    计算机网络常见面试题总结(上)OSI七层模型应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。每一层都为上一层提供服务TCP/IP四层模型应用层,传输层,网络层,网络接口层,各层相互独立,为上层提供服务常见的网络协议应用层:HTTP,超文本传输协议,浏览器网页使用的就是HTTP请求加载的。SM......
  • 42天【代码随想录算法训练营34期】第九章 动态规划part04(● 01背包问题,你该了解这些!
    **416.分割等和子集**classSolution:defcanPartition(self,nums:List[int])->bool:_sum=0dp=[0]*10001fornuminnums:_sum+=numif_sum%2==1:returnfalsetarget=......
  • 程序员的AI编程小助手,CodeGeeX在vscode,vs2022,IDEA2023使用体验总结
    程序员的AI编程小助手,CodeGeeX使用体验总结一、1.CodeGeeX是什么?能做什么?CodeGeeX是一个智能编程软件工具,目前CodeGeeX支持多种主流IDE,如VSCode、visualstudio2022,IntelliJIDEA、PyCharm、Vim等,同时,支持Python、Java、C++/C、JavaScript、Go等多种语言。CodeGeeX如何......
  • 代码随想录算法训练营第六天 | 242.有效的字母异位词 、349. 两个数组的交集、 202.
    哈希表理论基础建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set和map。什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。这句话很重要,大家在做哈希表题目都要思考这句话。文章讲解:https://program......
  • 通信算法02
    分集方式1:分集是在多条路径上传输相同的数据,接收端通过分集合并技术,抵抗信道衰落,提高传输可靠性,降低误码率。是指传输多个信号副本来提高接收信号正确判决率的方法。分散传输,集中接收。同一信号,不同通道。常用的分集技术主要有:宏分集和微分集宏分集:多基站分集,用于蜂窝系统的分......