数据结构与算法之美

说明

  1. 业务开发工程师,你真的愿意做一辈子 CRUD Boy吗?
  2. 基础架构研发工程师,写出达到开源水平的框架才是你的目标!
  3. 对编程还有追求?不想被行业淘汰?那就不要只会写凑合能用的代码!

之前花了1年时间学完《算法导论》,实际上里面有很多数学公式,微积分,概率,矩阵,和归纳法,学起来确实投入很多时间。知名论坛一亩三分地,推荐《Cracking the Coding Interview》,国外很火. LeetCode算法题做了Facebook的算法,java实现下载swift实现下载

知名算法

1.如何从无序超大的集合里,比如100亿个数字,获取最大的前100个。

此类问题可以总结为利用堆求 Top K,都可以用堆来解决。
看到此类题目第一印象是用排序处理,快速排序,时间复杂度为O(n*logn).
有没有更好的办法? 这就是用小顶堆排序,先维护一个大小为K的小顶堆,排序,接着逐个从超大数据集中取出单个数据,跟小顶堆的最顶数据比较,如果大于最顶的数据,则替换掉对顶的数字,重新排序小顶堆,如果小于则直接跳过。也就是如果最大的数字都在最前面,只要遍历n个数字,复杂度就是O(n). 一次堆化操作需要O(logK), 平均复杂度为O(nlogK)。

2.Least Recently Used(LRU)缓存淘汰算法

最近最少使用缓存淘汰算法:实现一个有限缓存功能,当缓存达到阈值的时候,删掉最不常用的空间,保存新的缓存。
解决方案:维护一个有序单链表,越靠近链表尾部的结点是越早之前访问的。当有一个新的数据被访问时,从链表投开始顺序遍历链表。

  1. 如果此数据之前已经被缓存在链表中了,遍历得到这个数据对应的结点,并将其从原来的位置删除,然后再插入到链表的头部。
  2. 如果此数据没有在缓存链表中,又可以分为两种情况:
  • 如果此时缓存未满,则将此结点直接插入到链表的头部;
  • 如果此时缓存已满,则链表尾部结点删除,将新的数据结点插入到链表的头部。

稀缺课程优惠

吾生有涯,而知无涯。时间是最稀缺的商品,看到《数据结构与算法之美》的专栏还是忍不住学完了,
说实话讲得物超所值,把《算法导论》里的算法都涵盖了,并超越了,比如跳表快速查询;比如搜索引擎怎么爬虫,怎么建立索引,怎么查询。讲得语言通俗易懂,做好心理准备有些课程还是有难度。前Google工程师王争作品,墙裂推荐。

通过下面的二维码,新用户有30大洋的优惠券,老用户购买成功直接返现金。
在这里插入图片描述

课程目录
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zgpeace/article/details/87775097