算法分析设计--读书笔记

读书笔记


我这学期选择的算法书的名字是《学习JavaScript数据结构与算法》。可能我是班里很少见的去选择JavaScript去学习算法的同学。(自己猜的,如果很多人当我没说hhh)。
在这里插入图片描述
我觉得凡事应该先讲缘由,为什么我选择了这本书作为我这学期算法课的课外阅读。这学期有幸上web课了解到了一门叫做React的前端框架。以及了解到了其适用的状态管理工具Redux,也更深一步的接触到了JavaScript这门语言。我觉得,这门语言很神奇。不同于任何一门我之前接触过的编程语言。(虽然之前就接触过Java和c…)。深感兴趣,特别是对event loop机制和虚拟dom中的diff算法有了新的接触。
包括React个框架的深深的思想,所影响到了我。JavaScript虽然包含了Java这个词,但和Java完全不相同。这门语言最大的特点感觉就是随意,越是随意的语言我认为效率和代码的规范以及质量,就更为重要。所以我选择了这本书作为我的课外阅读的书。希望我可以熟悉js中应用一些数据结构和算法的知识。

先说下这本书中我认为给我印象最为深刻的一个知识点吧。也是我看这本书第一个看的知识点。因为像基本的栈队列这种数据结构都讲过而且感觉自我理解还算不错,就直接略过了。我看的第一个章节是这本书的倒数第二章,叫做函数式编程。感觉函数式编程在js的学习中是一个不得不跨越或者说习惯的事情。Emm不知道怎么解释但这样说应该没问题,函数式编程在js中无处不在。或者说函数式编程是绝大多数js开发者的习惯也是规范。
从js的一大特性:闭包,到其作用域链无不用到了函数式编程。以及ES6中的新特性箭头函数之类的也都是函数式编程。为什么我要在一门算法的课内提到函数式编程带给我的影响?我谈下我自己的理解与感悟。算法大部分情况都不是一蹴而就的,而是需要反复推敲反复调试,单步调试之类的一步一步的去总结而规划而来的。期间可能会需要各种各样的中间值。比如:我需要将一个字符串以某种规则分割亦或者我需要将一个数组以特定的某种规则排序,或者我需要从一大串数据中提出出来默写元素组成对象再把一些对象组成一个对象数组。举了这么多的例子,我想说的就只有一点。那就是我们绝大多数不可能直接的得到这个算法的最终结果,需要借助各种中间值。

倘若,我们把这些计算中间值的代码一股脑的全部丢到我们的核心算法代码当中,势必会造成代码的脏乱差和各种各样的难以预估的bug。但我们能够合理的通过函数式进行拆分,把一个庞大的代码块拆分为一个一个确保无误的小功能,再去组合起来,那么不论我们从调试的角度来讲还是从代码正确性来讲势必都会优化很多。
我想,这大概也是老师专门在实验报告中设计一个核心代码的板块的用心吧。

除此之外,我看的最为认真以及印象最为深刻的章节就是树。

我认认真真去看树这一章坦白来讲并不是因为兴趣使然,而是因为我认为树在js算法当中无与伦比的重要性。js就是为了浏览器而诞生的。而我们的一个个页面,本质上来讲就是一颗树。

所以我想通过我看书学到的js中一个关于树的知识谈谈对DOM树解析过程的认知。

先上一张盗来的图吧。
在这里插入图片描述
上图是一张dom树构建的过程的图。从图上可以清晰的看出大概需要下面几个步骤:

  1. 转码: 浏览器将接收到的二进制数据按照指定编码格式转化为HTML字符串

  2. 生成Tokens: 之后开始parser,浏览器会将HTML字符串解析成Tokens

  3. 构建Nodes: 对Node添加特定的属性,通过指针确定 Node 的父、子、兄弟 关系和所属 treeScope

  4. 生成DOM Tree: 通过node包含的指针确定的关系构建出DOM Tree

最后谈谈感想吧,其实我还是很感谢算法这门课,这门课让我找到一门自己感兴趣的前端框架,发现一门全新的感兴趣的语言。其实我不知道这句话对不对,是一句我自我认为比较对的话,就是,一切都是为了效率,效率至上!

可能这就是我一学期的学习下来对于web和算法以及这本书中所言所讲的理解。如果有不足之处望多多包涵。

我想结尾以这本书的作者的结束语作为结尾。

编程快乐!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值