95% 的算法都是基于这 6 种算法思想!!!

算法思想是解决问题的核心,万丈高楼起于平地,在算法中也是如此,95% 的算法都是基于这 6 种算法思想,接下了介绍一下这 6 种算法思想,帮助你理解及解决各种算法问题。

1 递归算法

1.1 算法策略

递归算法是一种直接或者间接调用自身函数或者方法的算法。

递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。

优缺点:

  • 优点:实现简单易上手
  • 缺点:递归算法对常用的算法如普通循环等,运行效率较低;并且在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,递归太深,容易发生栈溢出

1.2 适用场景

递归算法一般用于解决三类问题:

  • 数据的定义是按递归定义的。(斐波那契数列)
  • 问题解法按递归算法实现。(回溯)
  • 数据的结构形式是按递归定义的。(树的遍历,图的搜索)

递归的解题策略:

  • 第一步:明确你这个函数的输入输出,先不管函数里面的代码什么,而是要先明白,你这个函数的输入是什么,输出为何什么,功能是什么,要完成什么样的一件事。
  • 第二步:寻找递归结束条件,我们需要找出什么时候递归结束,之后直接把结果返回
  • 第三步:明确递归关系式,怎么通过各种递归调用来组合解决当前问题

1.3 使用递归算法求解的一些经典问题

  • 斐波那契数列
  • 汉诺塔问题
  • 树的遍历及相关操作

DOM树为例

下面以以 DOM 为例,实现一个 document.getElementById 功能

由于DOM是一棵树,而树的定义本身就是用的递归定义,所以用递归的方法处理树,会非常地简单自然。

第一步:明确你这个函数的输入输出

从 DOM 根节点一层层往下递归,判断当前节点的 id 是否是我们要寻找的 id='d-cal'

输入:DOM 根节点 document ,我们要寻找的 id='d-cal'

输出:返回满足 id='sisteran' 的子结点

function getElementById(node, id){}

<< · Back Index ·>>

发表回复

相关推荐

對拷線的缺點

單位有臺內網電腦,個人有臺筆記本,內網電腦一般用於單位MSN與走流程,工作一般用個人電腦,單位辦工作本就不是很大,而且...

· 9秒前

10分钟教你如何看懂GIA证书

GIA证书是1931年Robert M.Shipley先生创立GIA美国宝石学院(Gemological Institute of America),提供专业的研究、销售、鉴定 ...

· 19秒前

【電源選購】金河田(Golden field)的電源怎麼樣?——電源選購及推薦

金河田是國內老牌的電源的廠商之一,在很多年前剛興起DIY個人電腦的時候金河田的電源是很多用戶裝機的首選,隨著後來越來越多...

· 28秒前

钱满素|美国底层为何不去推翻资本主义制度

经典问答一:美国底层为何不去推翻资本主义制度

· 38秒前

打麻将幽默语录经典语录

系统整理起来。我花了很多时间精力去做这件事:开了一个微信公众号,计划更新1000个口才情商技巧,非常值得反复阅读,现在已 ...

· 48秒前