加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

措施员经典口试题,计划按时使命调治器,用什么算法与数据布局

发布时间:2019-10-12 12:30:25 所属栏目:移动互联 来源:沙茶敏碎碎念
导读:昔时我照旧个门生的时辰,有一次去介入欢聚期间的一个口试,有一道口试题影象尤新,让你来实现一个按时使命,你会怎么做?为了简化题目,我们只用思量内存方案,不消思量数据耐久化。 数组法 最简朴的,我们可以把全部的使命存放在一个数组内里,然后,每隔

昔时我照旧个门生的时辰,有一次去介入欢聚期间的一个口试,有一道口试题影象尤新,让你来实现一个按时使命,你会怎么做?为了简化题目,我们只用思量内存方案,不消思量数据耐久化。

数组法

最简朴的,我们可以把全部的使命存放在一个数组内里,然后,每隔单元时刻遍历整个数组,找到是否有使命满意当前时刻,假若有,那么从数组中取出,然后执行。每隔单元时刻查询算法伟大度为O(N)。

那么,新增一个使命怎么操纵呢?我们只要简朴地往数组中追加一个元素即可,算法时刻伟大度为O(1)

措施员经典口试题,计划按时使命调治器,用什么算法与数据布局

优先行列法

评估一个算法,我们既要思量它的查询算法伟大度,也要思量他的插入算法伟大度。在按时使命场景中,很显然,查询场景长短常多的。险些我们每个单元时刻都要轮询一遍,那么我们有没有优化算法的也许呢?

我们每次查询,都只要查询时刻最靠近当前时刻的,时刻比当前时刻更早的,必定被我们扬弃了。以是这个标题,等价于我们查询行列内里时刻最小的。我们不禁想到一个认识的数据布局,优先行列!在世我们可以行使一个小根堆举办实现。

每次我们插入一个新的按时使命,我们将一个使命插入优先行列,每次插入的时辰,行列内部必要举办调解,算法时刻伟大度为O(logN)。值得留意的是,在接头算法时刻伟大度的时辰,logN是Base2的,也就是说,假如N便是8的时辰,logN就是3。

同理,固然我们可以在O(1)的时刻内里找到时刻最小的使命,可是假如我们取出这个元素,优先行列必要做内部的调解,这个算法时刻伟大度也是O(logN)的。

时刻轮法

上述优先行列的算法,综合算法时刻伟大度是O(logN)的,已经很高效了,可是在我们大并发的漫衍式体系下,这个速率,照旧太慢了。我们有没有更高效的算法呢?

那即是时刻轮算法,时刻轮是一个环形行列,凭证时刻的单元区分,我们假设1秒,每个单元内里,是一个链表,用来存储按时使命。

措施员经典口试题,计划按时使命调治器,用什么算法与数据布局

也许你会问,一个环形行列内里的元素,事实是优先的,假如高出了长度,我们该怎么办呢?我们可以遐想到我们家里的水表,是不是也有许多个轮子,每一个轮子的单元纷歧样!

同样,时刻轮也是云云,我们可以用多级时刻轮举办优化,就跟我们的时钟可能水表一样,这一层的走了一圈,下一层的才走了一格。

措施员经典口试题,计划按时使命调治器,用什么算法与数据布局

那么,这个算法的 时刻伟大度怎么计较呢?插入的时辰,我们从低层开始查找,找到在哪一层,然后直接插入对应的刻度。若是我们的时刻轮有5层,那么我们最多查找5次。

查询的时辰,我们每一秒都是敦促时刻轮的转动,每次都是直接取队首的元素,相等于算法时刻伟大度为O(1)。当转了一圈的时辰,把下一层的下一格再推下来。这样子,我们一个元素,最多会从第5层,逐渐插到第1层,综合下来一个元素最多会被插入5次,在算法时刻伟大度评估的时辰,我们凡是会忽略常数,最终算法时刻伟大度为O(1)。

总结

一个很是简朴的口试题,竟然有好几种差异的解法。这才是算法与数据布局的魅力,接待各人存眷我,配合进修,配合前进。各人的支持是我继承唠嗑的动力。

【编辑保举】

  1. 荟萃三大类无模子强化进修算法,BAIR开源RL代码库rlpyt
  2. 措施员年薪40万被国企同窗怒怼:没啥孝顺,凭什么人为这么高!
  3. 要求果真华人措施员自杀实情,清华学霸被Facebook解雇了
  4. 从清淡到大牛措施员,不能错过9月的这十篇热点文章!
  5. 怒了,Facebook强行辞退要求发布跳楼实情的措施员!
【责任编辑:华轩 TEL:(010)68476606】
点赞 0

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读