前言
最近开始学习算法知识,仅记录自己对算法学习感悟,同时也是方便自己以后复习
1.为什么我们需要了解数量级
我们需要去精确描述一组数据的时候,我们通常使用具体的数据记录,但是我们去理解一组数据的时候,我们往往需要使用模糊的描述,模糊数量的理解,数量级
2.数量级
数量级是指数量的尺度或大小的级别,每个级别之间通常有固定的比例,如10,2,1000,1024,e(欧拉数),大约等于 2.71828182846 的超越数,即自然对数的底)。
在现实生活中,用的较多的是10,但是在算法世界,我们可能更多以2,1024为比例
需要特别注意的是:数量级应用范围必须是正数或自然数!尽管负数也可以计算数量级,没有实际的意义。比如:-10和-1000这两个数从纯数学角度说相差100倍,不过不能说这两个数相差2个数量级。
3.举例
- 比如说,1.5 * 10^3 = 1500 我们称它数量级为3
- 淘宝双11去年的订单量是8.7亿,那么我们说它的订单量是亿级的
- 阿里的市值是4700亿 百度的市值是700多亿, 那么我们会说,阿里的市值比百度搞了一个数量级
- 苹果的市值最近超了万亿了,那么,我们会说苹果的数量级是万亿了
- 显示器的刷新频率是60hz,那么相当于16.66ms刷新一次,那么我们前端在js计算时,算法执行速度尽量要在毫秒级完成,这样绘制网页的时候才不会出现卡顿.那么设计前端框架的时候,使用的渲染算法,就可以有一个量级的规划了
3.算法就是输入到输出的映射
以累加为例 function sum(arr){ return arr.reduce((a,b)=>a+b,0) } let sumNum = sum([1,2,3]); 这里的arr就是输入 sumNum就是输出 在这里,输入是数组,输出是数字
那么在这个例子中 输入规模是arr.length 随着输入的arr.length越大,那么sum(arr)执行的时间将会越长.
4.算法设计的客观角度
还是上面的例子,淘宝天猫双十一的订单数是8.7亿,由于显示屏的大屏幕刷新时间的限制,这个数量级的数据需要在毫秒级的时间内完成 那么,我们设计淘宝天猫双十一数据订单处理的算法,就需要将十亿输入规模的数据在毫秒级的时间内计算出来
知乎的用户,目前官方公布的数据是1.8亿(客户增长速度是个缓慢的过程,对应的算法,生命周期会比较长),他们内部的用户肖像绘制要求是每小时一次,那么他们设计用户肖像算法的时候, 就需要满足10亿级输入规模(一般来说,算法输入规模的数量级比预估需要处理的数量级大一个数量级基本能够满足需求)在小时级内完成(当然实际的算法不会是这样,如果程序执行时间是这 么慢的话,那么cpu就不用干别的了们一直在处理这一个数据计算))
前端设计框架的时候,一个复杂页面通常只有几百个dom节点,多也一般不会超过一万个数据节点, react的dom-diff算法就必须满足10万级的dom节点对比,在ms级的时间内完成,这样,在页面重绘的时候 网页不会产生卡顿
小节
- 了解数量级的概念,可以有利于我们对程序设计有一个更好的把控
- 知识有限,也只是根据最近在学的东西的部分总结,哪里有不正确的地方欢迎指出.
题外话
作为一个程序员,可能很多时候,有些算法知识在工作中可能一辈子都用不到,但这不是我们不去学他的理由,算法和数据结构都是半衰期很长的技术,学习他,会让你在编程的道路上走的更远.
特别是非计算机专业科班出身的同学,了解一些计算机基础知识,可以让我们的变成之路走的更远.
如果本篇文章能够给您带来些许帮助,请点个赞支持下.谢谢