主页 > SEO算法 > 常见的算法设计方法

常见的算法设计方法

admin SEO算法 2020年03月26日

  为了获得有效的算法,必须了解一些解体的基本思想和方法。对于很多问题,只要仔细分析了数据对象后,相应的处理方法就有了;对于有些问题则不然。然而,作为探寻问题求解思路的基本思想和方法,对于任何算法设计都是有用的。

  穷举法亦称作枚举法。它的基本思想是,首先根据求解问题的部分条件确定答案的大致范围,即列举出解的所有可能的情况;然后在此范围内对所有可能的情况逐一验证,若某个情况经过验证符合问题条件则为一个解,若全部情况验证后均不符合问题条件则问题无解,从而得出求解问题的完整解。

  例如,要找出200~500之间的所有素数,只要对这个范围内的每一个数逐个用素数的定义去判断就行了。

  穷举法的特点是算法简单,但是有时运算量大、效率较低。在可以确定解的取值范围,但一时又找不到更好的算法时,就可以使用穷举法求解。

  迭代法的基本思想是,由一个量的原值求出它的新值,不断地再用新值代替原值求出他的下一个新值,直到得到满意的解。新值和原值之间存在一定的关系,这种关系可以用一个公式来表示,称为迭代公式。

  迭代法主要用于那些很难用或者无法用解析法求解的一类计算问题,如高次方程和超越方程等,使得复杂问题的求解过程,转化为相对简单的迭代算式的重复执行过程,用数值方法求出问题的近似解。

  使用迭代法构造这一类问题求解算法的基本方法是,先确定一个收敛性能好(即收敛速度快)的迭代公式,选取解的一个近似值(即迭代初值)和解的精度要求(即允许的最大误差范围),然后用循环处理实现迭代过程,终止循环的条件是前后两次得到的近似值之差的绝对值小于解的精度要求,并认为最后一次得到的近似解为问题的解。这种方法称作逼近迭代,如著名的牛顿迭代法就是这种逼近迭代方法。

  此外,精度值的计算也可以使用迭代法。例如计算 s = 1 +2 +3 +…+1000,可选取迭代公式s +i -s 和 迭代初值0(即0-s),当i分别取1,2,3…1000时重复计算迭代公式,最后一次便可以求出s的精确值。

  递推法是从前面的一些量推出后面的一些量的一种方法,它从已知的初始条件出发,逐次推出所需要求解的各中间结果和最终结果。递推过程往往表现为迭代,即由一些量的原值推出他的新值,不断的用新值替代原值推出下一个新值,直到推出最终结果,新值和原值之间的关系用递推公式表示。

  如果一个过程直接或间接的调用它自身,则称该过程是递归的;直接调用自身称作直接递归,间接调用自身称作间接递归。递归是构造算法的一种基本方法,它将一个复杂问题归结为若干个较为简单的问题,然后将这些较为简单的问题进一步归结为更简单的问题,这个过程一直进行下去直到归结为最简单的问题时为止。这个最简单的问题即为递归终止条件,也称作递归出口。

  递推是从已知初始条件出发逐次推出最后所求的值;而递归则是从函数本身出发,逐次上溯调用其本身求解过程直到递归出口,然后再从里向外倒推回来得到最终的值。

  回溯法是算法设计中的一种基本策略,回溯法是一种优选搜索法,又称为试探法,按优选条件向前搜索,以达到目标,但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术称为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

  在那些涉及寻找到一组解的问题或者满足某些约束条件的最优解的问题中,许多都可以使用回溯法求解。例如,在国际象棋棋盘上的骑士周游问题和走迷宫问题,都是使用回溯法进行的。

  在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。

  若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。

  首先应明确定义问题的解空间,问题的解空间应至少包含问题的一个(最优)解。

  贪婪法又称贪心算法,它是通过一系列的选择来得到问题的一个解。贪婪法在每一步所做出的选择,都是在当前状态下看来是最好的选择即贪婪选择,并希望通过每次所作的贪婪选择导致最终结果是求解问题的一个最优解。换句话说,贪婪法并不从整体最优伤进行考虑,它做出的选择只是在某种意义上的局部最优选择,但希望算法得到的最终结果也是整体的。

  贪心算法不是对所有问题都能得到最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

  在计算机科学中,分治法是一种很重要的算法,字面上的解释是“分而治之”,就是在求解一个复杂问题时,尽可能的把这个问题分解成若干较小的子问题,在找出各个较小的问题的解之后再组合成为整个问题的解,这就是所谓的分治法。

  使用分治法时,往往要按问题的输入规模来衡量问题的大小,当要求解问题的输入贵哦相当大时,应选择适当策略将输入划分成若干子集合得到一组子问题,在求解出各子问题的解之后用适当的方法把他们合并成整个问题的解,分治法并应用成功。

  (1) step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;

  (2) step2 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题

  首先,本博客为原创作品,欢迎指导,随意转载,如果可以请转载时说明出处,附上本文链接,谢谢动态规划的重要性就不多说,直接进入正题首先,我们看一下官方定义:定义:动态规划算法是通过拆分问题,定义问题状态和...博文

  分治法概念:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。思想策略:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个...博文

  算法设计之五大常用算法设计方法总结一、【分治法】 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问...博文

  算法分析与设计的基本方法1.递推法递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。它把问题分成若干步,找出相邻几步的关系,从而达到目的,此方法称为递推法。2.递归递归指的是一个过程:函数不...博文

  主要介绍七种基本的算法基础设计1.枚举2.递推3.递归3.贪心算法5.分治算法6.哈希7.二分法1.枚举枚举算法是指从可能的解集中一一列举出各个元素,用题目给定的约束条件判断哪些是满足题目条件的,哪些...博文

  在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次...博文

  经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。一、迭代法...博文

  一、贪婪算法1、概述贪婪法又称贪心算法,是当追求的目标是一个问题的最优解时,设法把对整个问题的求解工作分成若干步骤来完成,是寻找最优解问题的常用方法。贪婪法的特点是一般可以快速得到满意的解,因为它省去...博文

  大数据分析主要依靠机器学习和大规模计算。机器学习包括监督学习、非监督学习、强化学习等,而监督学习又包括分类学习、回归学习、排序学习、匹配学习等。分类是最常见的机器学习应用问题,比如垃圾邮件过滤、人脸检...博文

  要制定一个算法,一般要经过设计、确认、分析、编码、检查、调试、计时等阶段,因此学习计算机算法必须涉及这些方面的内容。在这些内容中有许多都是现今重要而活跃的研究领域。为便于区别,把算法学习的内容分成五个...博文

  算法设计原理有如下几种:1.穷举法也称枚举法,或暴力破解法。理论上可以破解任何密码,问题是如何缩短试误时间。北魏时期,数学家张丘建在他的《算经》提出了“百鸡问题”。 世界近代三大数学难题之一的“四色猜...博文

  算法基础问题求解的关键建模: 对输入参数和解给出形式化或半形式化的描述设计算法: 采用什么算法设计技术 正确性--是否对所有的实例都得到正确的解分析算法--效率算法+数据结构=程序好...博文

  方法试用情况分治法各子问题独立动态规划各子问题重叠1.分治分治算法能解决问题的特征:–问题规模缩小到一定的程度可以容易地解决–问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质–利用该...博文

  - 算法设计与分析基础- Anany Levitin 著 (第三版)序言设计技术作为问题求解的一般性策略分析算法效率(算法经验分析、算法可视化)各种方法加习题练习目录 1. 绪论 2. 算法效率分...博文

  上海人、职业经理人、CFO背景,集齐马云三大不喜欢的张勇怎么就成了阿里接班人?作者王琳本文经授权转载自燃财经(ID:rancaijing)9月10日,张勇转正了,他由阿里巴巴董事局候任主席正式成为阿...博文

  如果说C语言,程序设计实践,数据结构我都没有取得满意成绩的话,那算法这门课我总算打了一个翻身仗。从大二开始,我对编程的那种厌恶感逐渐散去,通过OJ获得快乐成了我当时极其看重的一件事。当时也许是为了刷题...博文

  算法的定义通常,定义算法为为解决某一特定任务而规定的一个指令序列。算法的5个基本特性① 有输入。一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们...博文

  1.算法简介作用:要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。定义:简单的说,算法(Algorithm)是由有穷规则构成的为解决某一类问题的运算序...博文

  一、实验目的:理解蛮力法的思想及程序的执行过程;理解递推算法的思想;能较熟练地编写枚举、递推程序,对给定的问题能设计出相应算法予以解决。二、实验环境:Visual C++ 实验环境下实现并进行调试三、...博文

  算法设计的基本方法穷举法递推法顺推法,从已知条件出发,逐步推算出新数据,,例如,斐波那契数列,逆推,从已知条件出发,用迭代表达式逐步推算出问题开始的条件,排序交换排序,如,冒泡排序,快速排序,插入排序...博文

  分类目录:《算法设计与分析》总目录第《算法学基础(二):分析算法》中定义了算法运行时间的增长量级简单地刻画了算法效率,并且还允许我们比较可选算法的相对性能。一旦输入规模nnn变得足够大,最坏情况运行时...博文

  作为一名IT行业从业者,其实从去年已经隐隐约约感觉到数据库的有变化,只是没有想到变得这么快。今年的一些事情实实在在地给了某些数据库重击,如果以前去某数据库还是喊喊,然后该......博文

  昨天听了卜东波老师讲的算法设计与分析的课,他在课堂上,首先就给我们讲了算法设计需要注意的思路和问题,我整理了一下,算法设计过程如下:同时老师也给我们提了一个算法解题思路,那就是,做任何问题的解法,首先...博文

  算法设计基本方法有什么好处?了解常见的算法设计方法以及它们之间的区别,有利于构建算法思维的广度,有充分的理论知识。当然,如果算法思维的深度再好的话,将来你见识的算法越多,天下之间所有的算法,都会融入到...博文

  由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,...博文

  1 题目描述多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:...博文

  通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能...博文

  动态规划——Dynamic programming,可以说是本人一直没有啃下的骨头,这次我就得好好来学学Dynamic programming.OK,出发!动态规划通常是分治算法的一种特殊情况,它一般...博文

  分类目录:《算法设计与分析》总目录许多有用的算法在结构上是递归的:为了解决一个给定的问题,算法一次或多次递归地调用其自身以解决紧密相关的若干子问题。这些算法典型地遵循分治法的思想:将原问题分解为几个规...博文

  第四章 动态规划动态规划的基本思想:动态规划算法通常用于求解具有某种最优性质的问题。基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。动态规划问题的特征:1....博文

  一、随机法随机法依赖于随机数的统计特性。(快速排序)快速排序:设想要对一堆的废票排序,首先将无序的一整堆分成两个部分。其中一堆里使所有的支票号码都小于等于所设定的一个中间值,另一堆里保证所有的支票号码...博文

  176.什么是数组      数组是指把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合成为数组。C#语言数组类型都隐含继承自System.Array,C#语言对数组功能的...博文

  动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙...博文

  最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成)one 樱花树 动态生成樱花效...博文

  2.1斐波那契系列问题2.2矩阵系列问题2.3跳跃系列问题3.1 01背包3.2 完全背包3.3多重背包3.4 一些变形选讲2.1斐波那契系列问题在数学上,斐波纳契数列以如下被以递归的方法定义:F(0...博文

  关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。声明:本文不会下关于Mybatis和JPA两个持久层框架哪个...博文

  爬虫福利一:27报网MM批量下载 点击看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成!目标网站:妹子图网环境:Python3.x相关第三方模块:requ...博文小吃培训:http://www.kssyseo.cn

广告位
标签: 万能算法