数组简单易用,在实现上使用的是连续的内存空间,可以借助 CPU 的缓存机制,预读数组中的数据,所以访问效率更高。而链表在内存中并不是连续存储,所以对 CPU 缓存不友好,没办法有效预读。
来自:06 | 链表(上):如何实现LRU缓存淘汰算法?
55 人划过
如果我们按照 j 从小到大处理的话,会出现 for 循环重复计算的问题
来自:40 | 初识动态规划:如何巧妙解决“双十一”购物时的凑单问题?
39 人划过
借助稳定排序算法,这个问题可以非常简洁地解决。解决思路是这样的:我们先按照下单时间给订单排序,注意是按照下单时间,不是金额。排序完成之后,我们用稳定排序算法,按照订单金额重新排序。两遍排序之后,我们得到的订单数据就是按照金额从小到大排序,金额相同的订单按照下单时间从早到晚排序的。为什么呢?
来自:11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?
25 人划过
你为什么要学习数据结构和算法呢?
来自:01 | 为什么要学习数据结构和算法?
21 人划过
最坏情况下,终止顶点 t 离起始顶点 s 很远,需要遍历完整个图才能找到。这个时候,每个顶点都要进出一遍队列,每个边也都会被访问一次,所以,广度优先搜索的时间复杂度是 O(V+E),其中,V 表示顶点的个数,E 表示边的个数。当然,对于一个连通图来说,也就是说一个图中的所有顶点都是连通的,E 肯定要大于等于 V-1,所以,广度优先搜索的时间复杂度也可以简写为 O(E)。
来自:31 | 深度和广度优先搜索:如何找出社交网络中的三度好友关系?
13 人划过
。分治算法要求分割成的子问题,不能有重复子问题,而动态规划正好相反,动态规划之所以高效,就是因为回溯算法实现中存在大量的重复子问题。
来自:41 | 动态规划理论:一篇文章带你彻底搞懂最优子结构、无后效性和重复子问题
13 人划过
我们画出一个二维的状态表,按行依次来填充状态表中的每个值
来自:42 | 动态规划实战:如何实现搜索引擎中的拼写纠错功能?
8 人划过
压缩列表这种存储结构,一方面比较节省内存,另一方面可以支持不同类型数据的存储。而且,因为数据存储在一片连续的内存空间,通过键来获取值为列表类型的数据,读取的效率也非常高。
来自:52 | 算法实战(一):剖析Redis常用数据类型对应的数据结构
6 人划过
循环结束的条件也不一样。Dijkstra 算法是在终点出队列的时候才结束,A* 算法是一旦遍历到终点就结束。
来自:49 | 搜索:如何用A*搜索算法实现游戏中的寻路功能?
5 人划过
我们可以针对数据,构建一个布隆过滤器,并且存储在内存中。当要查询数据的时候,我们可以先通过布隆过滤器,判定是否存在。如果通过布隆过滤器判定数据不存在,那我们就没有必要读取磁盘中的索引了。对于数据不存在的情况,数据查询就更加快速了
来自:50 | 索引:如何在海量数据中快速查找某个数据?
4 人划过
*精彩内容为该课程各文章中划线次数最多的内容
编辑推荐
讲师的其他课程
包含这门课的学习路径
计算机基础知识
12门课程 96.5w人学习
看过的人还看了